/** * Returns Future that lists the segment load/drop requests since given counter. */ public ListenableFuture<ChangeRequestsSnapshot<DataSegmentChangeRequest>> getSegmentChangesSince(ChangeRequestHistory.Counter counter) { if (counter.getCounter() < 0) { synchronized (lock) { Iterable<DataSegmentChangeRequest> segments = Iterables.transform( segmentLookup.keySet(), new Function<DataSegment, DataSegmentChangeRequest>() { @Nullable @Override public SegmentChangeRequestLoad apply(DataSegment input) { return new SegmentChangeRequestLoad(input); } } ); SettableFuture<ChangeRequestsSnapshot<DataSegmentChangeRequest>> future = SettableFuture.create(); future.set(ChangeRequestsSnapshot.success(changes.getLastCounter(), Lists.newArrayList(segments))); return future; } } else { return changes.getRequestsSince(counter); } }
if (counter.getCounter() < 0) { synchronized (lock) {
).get(); Assert.assertEquals(testSegments.size(), snapshot.getRequests().size()); Assert.assertEquals(testSegments.size(), snapshot.getCounter().getCounter()); ).get(); Assert.assertEquals(testSegments.size(), snapshot.getRequests().size()); Assert.assertEquals(2 * testSegments.size(), snapshot.getCounter().getCounter()); ).get(); Assert.assertEquals(0, snapshot.getRequests().size()); Assert.assertEquals(2 * testSegments.size(), snapshot.getCounter().getCounter());
"%s?counter=%s&hash=%s&timeout=%s", baseRequestPath, counter.getCounter(), counter.getHash(), serverTimeoutMS
if (counter.getCounter() < 0) { synchronized (lock) {
/** * Returns Future that lists the segment load/drop requests since given counter. */ public ListenableFuture<ChangeRequestsSnapshot<DataSegmentChangeRequest>> getSegmentChangesSince(ChangeRequestHistory.Counter counter) { if (counter.getCounter() < 0) { synchronized (lock) { Iterable<DataSegmentChangeRequest> segments = Iterables.transform( segmentLookup.keySet(), new Function<DataSegment, DataSegmentChangeRequest>() { @Nullable @Override public SegmentChangeRequestLoad apply(DataSegment input) { return new SegmentChangeRequestLoad(input); } } ); SettableFuture<ChangeRequestsSnapshot<DataSegmentChangeRequest>> future = SettableFuture.create(); future.set(ChangeRequestsSnapshot.success(changes.getLastCounter(), Lists.newArrayList(segments))); return future; } } else { return changes.getRequestsSince(counter); } }
).get(); Assert.assertEquals(2, snapshot.getRequests().size()); Assert.assertEquals(2, snapshot.getCounter().getCounter()); ).get(); Assert.assertEquals(2, snapshot.getRequests().size()); Assert.assertEquals(4, snapshot.getCounter().getCounter()); ).get(); Assert.assertEquals(0, snapshot.getRequests().size()); Assert.assertEquals(4, snapshot.getCounter().getCounter());
@Test public void testCounterHashMismatch() throws Exception { ChangeRequestHistory<DataSegmentChangeRequest> history = new ChangeRequestHistory(3); Assert.assertTrue(history.getRequestsSince(new ChangeRequestHistory.Counter(0, 1234)).get().isResetCounter()); history.addChangeRequest(new SegmentChangeRequestNoop()); ChangeRequestHistory.Counter one = history.getLastCounter(); history.addChangeRequest(new SegmentChangeRequestNoop()); ChangeRequestHistory.Counter two = history.getLastCounter(); Assert.assertTrue(history.getRequestsSince(new ChangeRequestHistory.Counter(0, 1234)).get().isResetCounter()); ChangeRequestsSnapshot<DataSegmentChangeRequest> snapshot = history.getRequestsSince(one).get(); Assert.assertEquals(1, snapshot.getRequests().size()); Assert.assertEquals(2, snapshot.getCounter().getCounter()); Assert.assertTrue(history.getRequestsSince(new ChangeRequestHistory.Counter(1, 1234)).get().isResetCounter()); history.addChangeRequest(new SegmentChangeRequestNoop()); ChangeRequestHistory.Counter three = history.getLastCounter(); history.addChangeRequest(new SegmentChangeRequestNoop()); ChangeRequestHistory.Counter four = history.getLastCounter(); snapshot = history.getRequestsSince(two).get(); Assert.assertEquals(2, snapshot.getRequests().size()); Assert.assertEquals(4, snapshot.getCounter().getCounter()); Assert.assertTrue(history.getRequestsSince(new ChangeRequestHistory.Counter(2, 1234)).get().isResetCounter()); }
@Test public void testSimple() throws Exception { ChangeRequestHistory<DataSegmentChangeRequest> history = new ChangeRequestHistory(); Assert.assertEquals(0, history.getLastCounter().getCounter()); history.addChangeRequest(new SegmentChangeRequestNoop()); Assert.assertEquals(1, history.getLastCounter().getCounter()); ChangeRequestsSnapshot<DataSegmentChangeRequest> snapshot = history.getRequestsSince(ChangeRequestHistory.Counter.ZERO).get(); Assert.assertEquals(1, snapshot.getRequests().size()); Assert.assertEquals(1, snapshot.getCounter().getCounter()); history.addChangeRequest(new SegmentChangeRequestNoop()); Assert.assertEquals(2, history.getLastCounter().getCounter()); snapshot = history.getRequestsSince(snapshot.getCounter()).get(); Assert.assertEquals(1, snapshot.getRequests().size()); Assert.assertEquals(2, snapshot.getCounter().getCounter()); snapshot = history.getRequestsSince(ChangeRequestHistory.Counter.ZERO).get(); Assert.assertEquals(2, snapshot.getRequests().size()); Assert.assertEquals(2, snapshot.getCounter().getCounter()); }
@Test public void testTruncatedHistory() throws Exception { ChangeRequestHistory<DataSegmentChangeRequest> history = new ChangeRequestHistory(2); history.addChangeRequest(new SegmentChangeRequestNoop()); ChangeRequestHistory.Counter one = history.getLastCounter(); history.addChangeRequest(new SegmentChangeRequestNoop()); ChangeRequestHistory.Counter two = history.getLastCounter(); history.addChangeRequest(new SegmentChangeRequestNoop()); ChangeRequestHistory.Counter three = history.getLastCounter(); history.addChangeRequest(new SegmentChangeRequestNoop()); ChangeRequestHistory.Counter four = history.getLastCounter(); Assert.assertTrue(history.getRequestsSince(ChangeRequestHistory.Counter.ZERO).get().isResetCounter()); Assert.assertTrue(history.getRequestsSince(one).get().isResetCounter()); Assert.assertTrue(history.getRequestsSince(two).get().isResetCounter()); ChangeRequestsSnapshot<DataSegmentChangeRequest> snapshot = history.getRequestsSince(three).get(); Assert.assertEquals(1, snapshot.getRequests().size()); Assert.assertEquals(4, snapshot.getCounter().getCounter()); }
private String getRequestString() { final String req; if (counter != null) { req = StringUtils.format( "%s?counter=%s&hash=%s&timeout=%s", baseRequestPath, counter.getCounter(), counter.getHash(), serverTimeoutMS ); } else { req = StringUtils.format("%s?counter=-1&timeout=%s", baseRequestPath, serverTimeoutMS); } return req; }
@Test public void testNonImmediateFuture() throws Exception { final ChangeRequestHistory history = new ChangeRequestHistory(); Future<ChangeRequestsSnapshot> future = history.getRequestsSince( ChangeRequestHistory.Counter.ZERO ); Assert.assertFalse(future.isDone()); history.addChangeRequest(new SegmentChangeRequestNoop()); ChangeRequestsSnapshot snapshot = future.get(1, TimeUnit.MINUTES); Assert.assertEquals(1, snapshot.getCounter().getCounter()); Assert.assertEquals(1, snapshot.getRequests().size()); }