public static Function<String, Interval> makeIntervalExtractor(final String dataSource) { return identifier -> { SegmentId segmentIdentifierParts = tryParse(dataSource, identifier); if (segmentIdentifierParts == null) { throw new IAE("Invalid identifier [%s]", identifier); } return segmentIdentifierParts.getInterval(); }; }
/** * The interval start is later than the end */ @Test public void testInvalidFormat0() { Assert.assertNull( SegmentId.tryParse("datasource", "datasource_2015-01-02T00:00:00.000Z_2014-10-20T00:00:00.000Z_version") ); }
/** * Not enough interval dates */ @Test public void testInvalidFormat2() { Assert.assertNull(SegmentId.tryParse("datasource", "datasource_2015-01-02T00:00:00.000Z_version")); }
/** * No interval dates */ @Test public void testInvalidFormat1() { Assert.assertNull(SegmentId.tryParse("datasource", "datasource_invalid_interval_version")); }
.keySet() .stream() .filter(identifier -> SegmentId.tryParse(dataSource, identifier) != null) .map(SegmentId.makeIntervalExtractor(dataSource)) .sorted(query.isDescending() ? Comparators.intervalsByEndThenStart()
@Test public void testTryParseVersionAmbiguity() { SegmentId segmentId = SegmentId.tryParse("datasource", "datasource_2015-01-02T00:00:00.000Z_2015-01-03T00:00:00.000Z_ver_0"); Assert.assertNotNull(segmentId); Assert.assertEquals("ver_0", segmentId.getVersion()); Assert.assertEquals(0, segmentId.getPartitionNum()); }
@Test public void testBasic() { String datasource = "datasource"; SegmentId desc = SegmentId.of(datasource, Intervals.of("2015-01-02/2015-01-03"), "ver_0", 1); Assert.assertEquals("datasource_2015-01-02T00:00:00.000Z_2015-01-03T00:00:00.000Z_ver_0_1", desc.toString()); Assert.assertEquals(desc, SegmentId.tryParse(datasource, desc.toString())); desc = desc.withInterval(Intervals.of("2014-10-20T00:00:00Z/P1D")); Assert.assertEquals("datasource_2014-10-20T00:00:00.000Z_2014-10-21T00:00:00.000Z_ver_0_1", desc.toString()); Assert.assertEquals(desc, SegmentId.tryParse(datasource, desc.toString())); desc = SegmentId.of(datasource, Intervals.of("2015-01-02/2015-01-03"), "ver", 0); Assert.assertEquals("datasource_2015-01-02T00:00:00.000Z_2015-01-03T00:00:00.000Z_ver", desc.toString()); Assert.assertEquals(desc, SegmentId.tryParse(datasource, desc.toString())); desc = desc.withInterval(Intervals.of("2014-10-20T00:00:00Z/P1D")); Assert.assertEquals("datasource_2014-10-20T00:00:00.000Z_2014-10-21T00:00:00.000Z_ver", desc.toString()); Assert.assertEquals(desc, SegmentId.tryParse(datasource, desc.toString())); }
@Test public void testDataSourceWithUnderscore() { String datasource = "datasource_1"; SegmentId desc = SegmentId.of(datasource, Intervals.of("2015-01-02/2015-01-03"), "ver_0", 1); Assert.assertEquals("datasource_1_2015-01-02T00:00:00.000Z_2015-01-03T00:00:00.000Z_ver_0_1", desc.toString()); Assert.assertEquals(desc, SegmentId.tryParse(datasource, desc.toString())); desc = desc.withInterval(Intervals.of("2014-10-20T00:00:00Z/P1D")); Assert.assertEquals("datasource_1_2014-10-20T00:00:00.000Z_2014-10-21T00:00:00.000Z_ver_0_1", desc.toString()); Assert.assertEquals(desc, SegmentId.tryParse(datasource, desc.toString())); desc = SegmentId.of(datasource, Intervals.of("2015-01-02/2015-01-03"), "ver", 0); Assert.assertEquals("datasource_1_2015-01-02T00:00:00.000Z_2015-01-03T00:00:00.000Z_ver", desc.toString()); Assert.assertEquals(desc, SegmentId.tryParse(datasource, desc.toString())); desc = desc.withInterval(Intervals.of("2014-10-20T00:00:00Z/P1D")); Assert.assertEquals("datasource_1_2014-10-20T00:00:00.000Z_2014-10-21T00:00:00.000Z_ver", desc.toString()); Assert.assertEquals(desc, SegmentId.tryParse(datasource, desc.toString())); }
desc.toString() ); Assert.assertEquals(desc, SegmentId.tryParse(dataSource, desc.toString())); desc.toString() ); Assert.assertEquals(desc, SegmentId.tryParse(dataSource, desc.toString())); desc.toString() ); Assert.assertEquals(desc, SegmentId.tryParse(dataSource, desc.toString())); desc.toString() ); Assert.assertEquals(desc, SegmentId.tryParse(dataSource, desc.toString()));