use of com.linkedin.databus.client.pub.ConsumerCallbackResult in project databus by linkedin.
the class TestMultiConsumerCallback method test1ConsumerTimeout.
@Test
public void test1ConsumerTimeout() {
LOG.info("\n\nstarting test1ConsumerTimeout()");
//create dummy events
Hashtable<Long, AtomicInteger> keyCounts = new Hashtable<Long, AtomicInteger>();
DbusEventBuffer eventsBuf = new DbusEventBuffer(_generic100KBufferStaticConfig);
eventsBuf.start(0);
eventsBuf.startEvents();
initBufferWithEvents(eventsBuf, 1, 2, (short) 1, keyCounts);
initBufferWithEvents(eventsBuf, 3, 1, (short) 2, keyCounts);
eventsBuf.endEvents(100L);
DbusEventBuffer.DbusEventIterator iter = eventsBuf.acquireIterator("myIter1");
Assert.assertTrue(iter.hasNext(), "unable to read event");
//skip over the first system event
iter.next();
Assert.assertTrue(iter.hasNext(), "unable to read event");
DbusEvent event1 = iter.next().createCopy();
Assert.assertTrue(iter.hasNext(), "unable to read event");
DbusEvent event2 = iter.next().createCopy();
Assert.assertTrue(iter.hasNext(), "unable to read event");
DbusEvent event3 = iter.next().createCopy();
//make up some sources
List<String> sources = new ArrayList<String>();
Map<Long, IdNamePair> sourcesMap = new HashMap<Long, IdNamePair>();
for (int i = 1; i <= 3; ++i) {
IdNamePair sourcePair = new IdNamePair((long) i, "source" + i);
sources.add(sourcePair.getName());
sourcesMap.put(sourcePair.getId(), sourcePair);
}
//create the consumer mock up
DatabusStreamConsumer mockConsumer1 = EasyMock.createStrictMock("consumer1", DatabusStreamConsumer.class);
SelectingDatabusCombinedConsumer sdccMockConsumer1 = new SelectingDatabusCombinedConsumer(mockConsumer1);
EasyMock.makeThreadSafe(mockConsumer1, true);
DatabusV2ConsumerRegistration consumerReg = new DatabusV2ConsumerRegistration(sdccMockConsumer1, sources, null);
EasyMock.expect(mockConsumer1.onStartConsumption()).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "startConsumption() called"), 150));
EasyMock.expect(mockConsumer1.onStartDataEventSequence(null)).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "onStartDataEventSequence() called"), 110));
EasyMock.expect(mockConsumer1.onStartSource("source1", null)).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "onStartSource() called"), 40));
EasyMock.expect(mockConsumer1.onDataEvent(event1, null)).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "onDataEvet(1) called"), 50));
EasyMock.expect(mockConsumer1.onDataEvent(event2, null)).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "onDataEvet(2) called"), 210));
EasyMock.expect(mockConsumer1.onDataEvent(event1, null)).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "onDataEvet(1) called"), 40));
EasyMock.expect(mockConsumer1.onEndSource("source1", null)).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "onStartSource() called"), 50));
EasyMock.replay(mockConsumer1);
ConsumerCallbackStats consumerStatsCollector = new ConsumerCallbackStats(1, "test", "test", true, false, null);
UnifiedClientStats unifiedStatsCollector = new UnifiedClientStats(1, "test", "test.unified");
//Create and fire up callbacks
List<DatabusV2ConsumerRegistration> allRegistrations = Arrays.asList(consumerReg);
MultiConsumerCallback callback = new MultiConsumerCallback(allRegistrations, Executors.newCachedThreadPool(), 100, new StreamConsumerCallbackFactory(consumerStatsCollector, unifiedStatsCollector), consumerStatsCollector, unifiedStatsCollector, null, null);
callback.setSourceMap(sourcesMap);
ConsumerCallbackResult startConsumptionRes = callback.onStartConsumption();
Assert.assertTrue(ConsumerCallbackResult.isFailure(startConsumptionRes), "startConsumption() failed");
ConsumerCallbackResult startWindowRes = callback.onStartDataEventSequence(null);
Assert.assertTrue(ConsumerCallbackResult.isFailure(startWindowRes), "startDataEventSequence() failed");
ConsumerCallbackResult startSourceRes = callback.onStartSource("source1", null);
Assert.assertTrue(ConsumerCallbackResult.isSuccess(startSourceRes), "startSources(source1) succeeded");
ConsumerCallbackResult event1Res = callback.onDataEvent(event1, null);
Assert.assertTrue(ConsumerCallbackResult.isSuccess(event1Res), "onDataEvent(1) succeeded");
ConsumerCallbackResult event2Res = callback.onDataEvent(event2, null);
Assert.assertTrue(ConsumerCallbackResult.isSuccess(event2Res), "onDataEvent(2) queued up");
ConsumerCallbackResult event3Res = callback.onDataEvent(event1, null);
Assert.assertTrue(ConsumerCallbackResult.isSuccess(event3Res), "onDataEvent(1) queued up");
ConsumerCallbackResult endSourceRes = callback.onEndSource("source1", null);
Assert.assertTrue(ConsumerCallbackResult.isFailure(endSourceRes), "onEndSource fails because of timeout in onDataEvent(2)");
EasyMock.reset(mockConsumer1);
EasyMock.makeThreadSafe(mockConsumer1, true);
EasyMock.expect(mockConsumer1.onStartSource("source2", null)).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "onStartSource() called"), 150)).times(0, 1);
EasyMock.expect(mockConsumer1.onDataEvent(event3, null)).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "onDataEvet(3) called"), 40));
EasyMock.expect(mockConsumer1.onEndSource("source2", null)).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "onStartSource() called"), 60));
EasyMock.replay(mockConsumer1);
startSourceRes = callback.onStartSource("source2", null);
Assert.assertTrue(ConsumerCallbackResult.isFailure(startSourceRes), "startSources(source2) fails");
event1Res = callback.onDataEvent(event3, null);
Assert.assertTrue(ConsumerCallbackResult.isSuccess(event1Res), "onDataEvent(3) succeeded");
endSourceRes = callback.onEndSource("source2", null);
Assert.assertTrue(ConsumerCallbackResult.isSuccess(endSourceRes), "onEndSource succeeds");
long eventsErrProcessed = consumerStatsCollector.getNumErrorsProcessed();
long totalEvents = consumerStatsCollector.getNumEventsReceived();
long totalEventsProcessed = consumerStatsCollector.getNumEventsProcessed();
System.out.println("eventsReceived = " + consumerStatsCollector.getNumEventsReceived() + " eventsProcessed=" + consumerStatsCollector.getNumEventsProcessed());
System.out.println("eventsErrProcessed =" + consumerStatsCollector.getNumErrorsProcessed() + " eventsErrReceived=" + consumerStatsCollector.getNumErrorsReceived() + " totalEvents=" + consumerStatsCollector.getNumEventsReceived() + " totalEventsProcessed=" + totalEventsProcessed);
//FIXME
Assert.assertTrue(totalEvents >= totalEventsProcessed + eventsErrProcessed);
Assert.assertTrue(eventsErrProcessed > 0);
Assert.assertTrue(totalEventsProcessed < totalEvents);
//NOTE: We don't verify because all the canceled callbacks are not detected by EasyMock
//EasyMock.verify(mockConsumer1);
}
use of com.linkedin.databus.client.pub.ConsumerCallbackResult in project databus by linkedin.
the class TestMultiConsumerCallback method test2ConsumerTimeout.
@Test
public void test2ConsumerTimeout() {
Logger log = Logger.getLogger("TestMultiConsumerCallback.test2ConsumerTimeout");
//Logger.getRootLogger().setLevel(Level.INFO);
log.info("\n\nstarting test2ConsumerTimeout()");
log.info("create dummy events");
Hashtable<Long, AtomicInteger> keyCounts = new Hashtable<Long, AtomicInteger>();
DbusEventBuffer eventsBuf = new DbusEventBuffer(_generic100KBufferStaticConfig);
eventsBuf.start(0);
eventsBuf.startEvents();
initBufferWithEvents(eventsBuf, 1, 2, (short) 1, keyCounts);
initBufferWithEvents(eventsBuf, 3, 1, (short) 2, keyCounts);
eventsBuf.endEvents(100L);
DbusEventBuffer.DbusEventIterator iter = eventsBuf.acquireIterator("myIter1");
Assert.assertTrue(iter.hasNext(), "unable to read event");
//skip over the first system event
iter.next();
Assert.assertTrue(iter.hasNext(), "unable to read event");
DbusEvent event1 = iter.next().createCopy();
Assert.assertTrue(iter.hasNext(), "unable to read event");
DbusEvent event2 = iter.next().createCopy();
Assert.assertTrue(iter.hasNext(), "unable to read event");
log.info("make up some sources");
List<String> sources = new ArrayList<String>();
Map<Long, IdNamePair> sourcesMap = new HashMap<Long, IdNamePair>();
for (int i = 1; i <= 3; ++i) {
IdNamePair sourcePair = new IdNamePair((long) i, "source" + i);
sources.add(sourcePair.getName());
sourcesMap.put(sourcePair.getId(), sourcePair);
}
log.info("create the consumer mock up");
DatabusStreamConsumer mockConsumer1 = EasyMock.createStrictMock("consumer1", DatabusStreamConsumer.class);
SelectingDatabusCombinedConsumer sdccMockConsumer1 = new SelectingDatabusCombinedConsumer(mockConsumer1);
EasyMock.makeThreadSafe(mockConsumer1, true);
DatabusV2ConsumerRegistration consumerReg = new DatabusV2ConsumerRegistration(sdccMockConsumer1, sources, null);
EasyMock.expect(mockConsumer1.onStartConsumption()).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "startConsumption() called"), 1));
EasyMock.expect(mockConsumer1.onStartDataEventSequence(null)).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "onStartDataEventSequence() called"), 1));
EasyMock.expect(mockConsumer1.onStartSource("source1", null)).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "onStartSource() called"), 1));
EasyMock.expect(mockConsumer1.onDataEvent(event1, null)).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "onDataEvet(1) called"), 1));
EasyMock.expect(mockConsumer1.onDataEvent(event2, null)).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "onDataEvet(2) called"), 1));
EasyMock.expect(mockConsumer1.onDataEvent(event1, null)).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "onDataEvet(1) called"), 1));
EasyMock.expect(mockConsumer1.onEndSource("source1", null)).andAnswer(new SleepingAnswer<ConsumerCallbackResult>(new LoggedAnswer<ConsumerCallbackResult>(ConsumerCallbackResult.SUCCESS, LOG, Level.DEBUG, "onStartSource() called"), 1));
EasyMock.replay(mockConsumer1);
ConsumerCallbackStats consumerStatsCollector = new ConsumerCallbackStats(1, "test", "test", true, false, null);
UnifiedClientStats unifiedStatsCollector = new UnifiedClientStats(1, "test", "test.unified");
log.info("Create and fire up callbacks");
List<DatabusV2ConsumerRegistration> allRegistrations = Arrays.asList(consumerReg);
TimingOutMultiConsumerCallback callback = new TimingOutMultiConsumerCallback(allRegistrations, Executors.newCachedThreadPool(), 300, new StreamConsumerCallbackFactory(consumerStatsCollector, unifiedStatsCollector), consumerStatsCollector, unifiedStatsCollector, 3);
callback.setSourceMap(sourcesMap);
ConsumerCallbackResult startConsumptionRes = callback.onStartConsumption();
Assert.assertTrue(ConsumerCallbackResult.isSuccess(startConsumptionRes), "startConsumption() succeeded: " + startConsumptionRes);
ConsumerCallbackResult startWindowRes = callback.onStartDataEventSequence(null);
Assert.assertTrue(ConsumerCallbackResult.isSuccess(startWindowRes), "startDataEventSequence() succeeded");
ConsumerCallbackResult startSourceRes = callback.onStartSource("source1", null);
Assert.assertTrue(ConsumerCallbackResult.isSuccess(startSourceRes), "startSources(source1) succeeded");
ConsumerCallbackResult event1Res = callback.onDataEvent(event1, null);
Assert.assertTrue(ConsumerCallbackResult.isSuccess(event1Res), "onDataEvent(1) succeeded");
ConsumerCallbackResult event2Res = callback.onDataEvent(event2, null);
Assert.assertTrue(ConsumerCallbackResult.isSuccess(event2Res), "onDataEvent(2) queued up");
ConsumerCallbackResult event3Res = callback.onDataEvent(event1, null);
Assert.assertTrue(ConsumerCallbackResult.isSuccess(event3Res), "onDataEvent(1) queued up");
ConsumerCallbackResult endSourceRes = callback.onEndSource("source1", null);
Assert.assertTrue(ConsumerCallbackResult.isFailure(endSourceRes), "onEndSource fails because of timeout in onDataEvent(2)");
EasyMock.reset(mockConsumer1);
log.info("test2ConsumerTimeout: end");
}
use of com.linkedin.databus.client.pub.ConsumerCallbackResult in project databus by linkedin.
the class MultiConsumerCallback method onStopConsumption.
@Override
public ConsumerCallbackResult onStopConsumption() {
long curNanos = System.nanoTime();
for (DatabusV2ConsumerRegistration consumerReg : _registrations) {
for (DatabusCombinedConsumer consumer : consumerReg.getConsumers()) {
ConsumerCallable<ConsumerCallbackResult> endConsumptionCallable = _callbackFactory.createEndConsumptionCallable(curNanos, consumer, true);
_currentBatch.add(endConsumptionCallable);
if (_consumerStats != null)
_consumerStats.registerEventsReceived(1);
}
}
if (_loggingConsumer != null) {
ConsumerCallable<ConsumerCallbackResult> endConsumptionCallable = _callbackFactory.createEndConsumptionCallable(curNanos, _loggingConsumer, false);
_currentBatch.add(endConsumptionCallable);
}
if (_log.isDebugEnabled()) {
long endNanos = System.nanoTime();
_log.debug("Time spent in databus clientlib by onStopConsumption = " + (endNanos - curNanos) / DbusConstants.NUM_NSECS_IN_MSEC + "ms");
}
return submitBatch(curNanos, true, true);
}
use of com.linkedin.databus.client.pub.ConsumerCallbackResult in project databus by linkedin.
the class MultiConsumerCallback method onRollback.
@Override
public ConsumerCallbackResult onRollback(SCN startScn) {
long curNanos = System.nanoTime();
for (DatabusV2ConsumerRegistration consumerReg : _registrations) {
for (DatabusCombinedConsumer consumer : consumerReg.getConsumers()) {
ConsumerCallable<ConsumerCallbackResult> rollbackCallable = _callbackFactory.createRollbackCallable(curNanos, startScn, consumer, true);
_currentBatch.add(rollbackCallable);
if (_consumerStats != null)
_consumerStats.registerEventsReceived(1);
}
}
if (_loggingConsumer != null) {
ConsumerCallable<ConsumerCallbackResult> rollbackCallable = _callbackFactory.createRollbackCallable(curNanos, startScn, _loggingConsumer, false);
_currentBatch.add(rollbackCallable);
}
if (_log.isDebugEnabled()) {
long endNanos = System.nanoTime();
_log.debug("Time spent in databus clientlib by onRollback = " + (endNanos - curNanos) / DbusConstants.NUM_NSECS_IN_MSEC + "ms");
}
return submitBatch(curNanos, true, true);
}
use of com.linkedin.databus.client.pub.ConsumerCallbackResult in project databus by linkedin.
the class MultiConsumerCallback method onEndDataEventSequence.
@Override
public ConsumerCallbackResult onEndDataEventSequence(SCN endScn) {
long curNanos = System.nanoTime();
for (DatabusV2ConsumerRegistration consumerReg : _registrations) {
for (DatabusCombinedConsumer consumer : consumerReg.getConsumers()) {
ConsumerCallable<ConsumerCallbackResult> endWindowCallable = _callbackFactory.createEndDataEventSequenceCallable(curNanos, endScn, consumer, true);
_currentBatch.add(endWindowCallable);
if (_consumerStats != null)
_consumerStats.registerSystemEventReceived();
}
}
if (_loggingConsumer != null) {
ConsumerCallable<ConsumerCallbackResult> endWindowCallable = _callbackFactory.createEndDataEventSequenceCallable(curNanos, endScn, _loggingConsumer, false);
_currentBatch.add(endWindowCallable);
}
if (_log.isDebugEnabled()) {
long endNanos = System.nanoTime();
_log.debug("Time spent in databus clientlib by onEndDataEventSequence = " + (endNanos - curNanos) / DbusConstants.NUM_NSECS_IN_MSEC + "ms");
}
return submitBatch(curNanos, true, true);
}
Aggregations