@Override public QueryRunner<Result<SearchResultValue>> createRunner(Segment adapter) { if (!(adapter instanceof ReferenceCountingSegment)) { throw new IAE("Expected instance of ReferenceCountingSegment, got %s", adapter.getClass()); } final ReferenceCountingSegment segment = (ReferenceCountingSegment) adapter; Assert.assertTrue(segment.getNumReferences() > 0); segmentReferences.add(segment); adapters.add((SegmentForTesting) segment.getBaseSegment()); return new BlockingQueryRunner<>(new NoopQueryRunner<>(), waitLatch, waitYieldLatch, notifyLatch); }
Assert.assertEquals(1, segment.getNumReferences()); Assert.assertEquals(0, segment.getNumReferences()); Assert.assertFalse(segment.isClosed()); Assert.assertEquals(0, segment.getNumReferences()); Assert.assertTrue(segment.isClosed()); segment.increment(); segment.increment(); Assert.assertEquals(0, segment.getNumReferences()); Assert.assertEquals(0, segment.getNumReferences());
@Test public void testReferenceCounting() throws Exception { loadQueryable("test", "3", Intervals.of("2011-04-04/2011-04-05")); Future future = assertQueryable( Granularities.DAY, "test", Intervals.of("2011-04-04/2011-04-06"), ImmutableList.of( new Pair<String, Interval>("3", Intervals.of("2011-04-04/2011-04-05")) ) ); queryNotifyLatch.await(1000, TimeUnit.MILLISECONDS); Assert.assertEquals(1, factory.getSegmentReferences().size()); for (ReferenceCountingSegment referenceCountingSegment : factory.getSegmentReferences()) { Assert.assertEquals(1, referenceCountingSegment.getNumReferences()); } queryWaitYieldLatch.countDown(); Assert.assertTrue(factory.getAdapters().size() == 1); for (SegmentForTesting segmentForTesting : factory.getAdapters()) { Assert.assertFalse(segmentForTesting.isClosed()); } queryWaitLatch.countDown(); future.get(); dropQueryable("test", "3", Intervals.of("2011-04-04/2011-04-05")); for (SegmentForTesting segmentForTesting : factory.getAdapters()) { Assert.assertTrue(segmentForTesting.isClosed()); } }
Assert.assertEquals(1, referenceCountingSegment.getNumReferences());
Assert.assertEquals(1, referenceCountingSegment.getNumReferences());