@Override public Iterator<Entry> createIterator(final Split split) { InputSplit s = (InputSplit) split; return read(s.key, s.startTime, s.endTime, s.tags); }
public final Iterator<Entry> read(byte[] key, long startTime, long endTime, int offset, final int limit, byte[]... tags) { final Iterator<Entry> iterator = read(key, startTime, endTime, tags); int advance = offset; while (advance > 0 && iterator.hasNext()) {
@Override public void apply() throws Exception { long ts = System.currentTimeMillis(); table.read(Bytes.toBytes("any"), ts, ts - 100); } });
/** * Tests no entry returned in the time interval. */ private void testNoRow(long now) { long endTs = now + TimeUnit.MINUTES.toMillis(20); long startTs = now + TimeUnit.MINUTES.toMillis(10); Iterator<TimeseriesTable.Entry> entryIterator = table.read(ALL_KEY, startTs, endTs); Assert.assertFalse("No entry returned in the time interval", entryIterator.hasNext()); }
/** * Tests reading entries without tag. */ private void testReadEntryWithoutTag(long now) { long endTs = now; long startTs = now - TimeUnit.SECONDS.toMillis(30); List<TimeseriesTable.Entry> result = Lists.newArrayList(); // f6 and f7 are read back, since they are written to the table without tag. Iterator<TimeseriesTable.Entry> entryIterator = table.read(ALL_KEY, startTs, endTs); while (entryIterator.hasNext()) { result.add(entryIterator.next()); } Assert.assertEquals(2, result.size()); }
/** * Tests iterator filter. queryTags will be sorted inside EntryScanner. */ private void testFilter(long now) { long endTs = now; long startTs = now - TimeUnit.MINUTES.toMicros(37); String[] queryTags = {"device2", "device1"}; Iterator<TimeseriesTable.Entry> entryIterator = table.read(ALL_KEY, startTs, endTs, Bytes.toByteArrays(queryTags)); List<TimeseriesTable.Entry> result = Lists.newArrayList(); while (entryIterator.hasNext()) { TimeseriesTable.Entry entry = entryIterator.next(); result.add(entry); } Assert.assertEquals(2, result.size()); }
/** * Tests queryTags are not matched. */ private void testNoTagMatch(long now) { long endTs = now; long startTs = now - TimeUnit.MINUTES.toMicros(37); String[] queryTags = {"device5", "device2"}; Iterator<TimeseriesTable.Entry> entryIterator = table.read(ALL_KEY, startTs, endTs, Bytes.toByteArrays(queryTags)); Assert.assertFalse(entryIterator.hasNext()); }
@Override public void apply() throws Exception { long ts = System.currentTimeMillis(); Iterator<TimeseriesTable.Entry> temp = table.read(Bytes.toBytes("any"), ts, ts); Assert.assertFalse(temp.hasNext()); temp = table.read(Bytes.toBytes("any"), ts, ts + 100); Assert.assertFalse(temp.hasNext()); } });
private long getCounts(String word, TimeseriesTable tsTable) { long result = 0; Iterator<TimeseriesTable.Entry> itor = tsTable.read(Bytes.toBytes(word), 0, Long.MAX_VALUE); while (itor.hasNext()) { result += Bytes.toLong(itor.next().getValue()); } return result; } }
/** * Tests the correctness of facts fetched by EntryScanner. */ private void testScan(long now) { long endTs = now; long startTs = now - TimeUnit.MINUTES.toMillis(18) + 1; // read facts in time window (now - 18mins, now) Iterator<TimeseriesTable.Entry> entryIterator = table.read(ALL_KEY, startTs, endTs); // dsts of the facts sent from the earliest ts to now ImmutableSet<String> expectedDsts = ImmutableSet.of("20.123.8.60", "20.123.8.50", "10.123.8.40", "10.123.8.30", "10.123.8.20"); Set<String> actualDsts = Sets.newHashSet(); while (entryIterator.hasNext()) { TimeseriesTable.Entry entry = entryIterator.next(); actualDsts.add(Bytes.toString(entry.getValue())); } Assert.assertEquals(5, expectedDsts.size()); Assert.assertEquals("dst is not correct", expectedDsts, actualDsts); }
assertReadResult(table.read(metric1, ts, ts + 5 * hour), m1e1, m1e2, m1e3, m1e4, m1e5); assertReadResult(table.read(metric1, ts, ts + 5 * hour, tag2), m1e1, m1e4); assertReadResult(table.read(metric1, ts, ts + 5 * hour, tag4)); assertReadResult(table.read(metric1, ts, ts + 5 * hour, tag2, tag4)); assertReadResult(table.read(metric1, 0, Long.MAX_VALUE)); assertReadResult(table.read(metric1, ts, ts + 5 * hour, 1, 2), m1e2, m1e3); assertReadResult(table.read(metric1, ts + second, ts + 2 * second), m1e2); assertReadResult(table.read(metric1, ts + hour, ts + 3 * hour), m1e3, m1e4); assertReadResult(table.read(metric1, ts + second, ts + 3 * hour), m1e2, m1e3, m1e4); assertReadResult(table.read(metric1, ts + second, ts + 3 * hour, tag3), m1e2, m1e4); assertReadResult(table.read(metric1, ts + second, ts + 3 * hour, tag3, tag2), m1e4); assertReadResult(table.read(metric2, ts + hour, ts + 3 * hour, tag2), m2e3);
@Override public void apply() { Map<String, Long> expected = Maps.newHashMap(); // note: not all records add to the sum since filter by tag="tag1" and ts={1..3} is used expected.put("tag1", 18L); expected.put("tag2", 3L); expected.put("tag3", 18L); Iterator<TimeseriesTable.Entry> agg = table.read(AggregateMetricsByTag.BY_TAGS, start, stop); int count = 0; while (agg.hasNext()) { TimeseriesTable.Entry entry = agg.next(); String tag = Bytes.toString(entry.getTags()[0]); Assert.assertEquals((long) expected.get(tag), Bytes.toLong(entry.getValue())); count++; } Assert.assertEquals(expected.size(), count); Assert.assertArrayEquals(Bytes.toBytes("beforeSubmit:done"), beforeSubmitTable.read(Bytes.toBytes("beforeSubmit"))); Assert.assertArrayEquals(Bytes.toBytes("onFinish:done"), onFinishTable.read(Bytes.toBytes("onFinish"))); Assert.assertTrue(counters.get(new Get("mapper")).getLong("records", 0) > 0); Assert.assertTrue(counters.get(new Get("reducer")).getLong("records", 0) > 0); Assert.assertTrue(countersFromContext.get(new Get("mapper")).getLong("records", 0) > 0); Assert.assertTrue(countersFromContext.get(new Get("reducer")).getLong("records", 0) > 0); } });
@Override public void apply() { // data should be rolled back todo: test that partially written is rolled back too Assert.assertFalse(table.read(AggregateMetricsByTag.BY_TAGS, start, stop).hasNext()); // but written beforeSubmit and onFinish is available to others Assert.assertArrayEquals(Bytes.toBytes("beforeSubmit:done"), beforeSubmitTable.read(Bytes.toBytes("beforeSubmit"))); Assert.assertArrayEquals(Bytes.toBytes("onFinish:done"), onFinishTable.read(Bytes.toBytes("onFinish"))); Assert.assertEquals(0, counters.get(new Get("mapper")).getLong("records", 0)); Assert.assertEquals(0, counters.get(new Get("reducer")).getLong("records", 0)); Assert.assertEquals(0, countersFromContext.get(new Get("mapper")).getLong("records", 0)); Assert.assertEquals(0, countersFromContext.get(new Get("reducer")).getLong("records", 0)); } });