use of com.linkedin.databus.core.data_model.LogicalSourceId in project databus by linkedin.
the class RelayPullThread method buildSubsList.
/**
* Build the string of subs to be sent in the register call.
*/
private String buildSubsList(List<DatabusSubscription> subs, Map<String, IdNamePair> sourceNameMap) {
StringBuilder sb = new StringBuilder(128);
sb.append("[");
boolean first = true;
for (DatabusSubscription sub : subs) {
if (!first)
sb.append(',');
DatabusSubscription realSub = sub;
LogicalSource ls = sub.getLogicalSource();
if (!ls.idKnown() && !ls.isWildcard()) {
IdNamePair sourceEntry = sourceNameMap.get(ls.getName());
if (null == sourceEntry) {
// this should never happen
throw new RuntimeException("FATAL! unable to find logical source " + ls.getName() + " in " + sourceNameMap);
}
realSub = new DatabusSubscription(sub.getPhysicalSource(), sub.getPhysicalPartition(), new LogicalSourceId(new LogicalSource(sourceEntry.getId().intValue(), ls.getName()), sub.getLogicalPartition().getId()));
}
sb.append(realSub.toJsonString());
first = false;
}
sb.append("]");
return sb.toString();
}
use of com.linkedin.databus.core.data_model.LogicalSourceId in project databus by linkedin.
the class TestDbusEventBufferMult method testSubscriptionStream.
@Test
public void testSubscriptionStream() throws Exception {
final Logger log = Logger.getLogger("TestDbusEventBufferMult.testSubscriptionStream");
log.info("start");
TestSetup t = new TestSetup();
PhysicalPartition pp100 = new PhysicalPartition(100, "multBufferTest1");
PhysicalPartitionKey pk1 = new PhysicalPartitionKey(pp100);
PhysicalPartition pp101 = new PhysicalPartition(101, "multBufferTest2");
PhysicalPartitionKey pk2 = new PhysicalPartitionKey(pp101);
// generate events in pp100
byte[] schema = "abcdefghijklmnop".getBytes(Charset.defaultCharset());
DbusEventBufferAppendable buf100 = t._eventBuffer.getDbusEventBufferAppendable(pp100);
buf100.startEvents();
assertTrue(buf100.appendEvent(new DbusEventKey(1), (short) 100, (short) 0, System.currentTimeMillis() * 1000000, (short) 1, schema, new byte[100], false, null));
assertTrue(buf100.appendEvent(new DbusEventKey(10), (short) 100, (short) 0, System.currentTimeMillis() * 1000000, (short) 1, schema, new byte[100], false, null));
assertTrue(buf100.appendEvent(new DbusEventKey(11), (short) 100, (short) 0, System.currentTimeMillis() * 1000000, (short) 1, schema, new byte[100], false, null));
assertTrue(buf100.appendEvent(new DbusEventKey(2), (short) 100, (short) 0, System.currentTimeMillis() * 1000000, (short) 2, schema, new byte[100], false, null));
buf100.endEvents(100, null);
buf100.startEvents();
assertTrue(buf100.appendEvent(new DbusEventKey(3), (short) 100, (short) 0, System.currentTimeMillis() * 1000000, (short) 2, schema, new byte[100], false, null));
assertTrue(buf100.appendEvent(new DbusEventKey(4), (short) 100, (short) 1, System.currentTimeMillis() * 1000000, (short) 2, schema, new byte[100], false, null));
buf100.endEvents(200, null);
// generate events in pp100
DbusEventBufferAppendable buf101 = t._eventBuffer.getDbusEventBufferAppendable(pp101);
buf101.startEvents();
assertTrue(buf101.appendEvent(new DbusEventKey(51), (short) 101, (short) 0, System.currentTimeMillis() * 1000000, (short) 11, schema, new byte[100], false, null));
assertTrue(buf101.appendEvent(new DbusEventKey(52), (short) 101, (short) 0, System.currentTimeMillis() * 1000000, (short) 12, schema, new byte[100], false, null));
assertTrue(buf101.appendEvent(new DbusEventKey(53), (short) 101, (short) 2, System.currentTimeMillis() * 1000000, (short) 2, schema, new byte[100], false, null));
buf101.endEvents(120, null);
buf101.startEvents();
assertTrue(buf101.appendEvent(new DbusEventKey(54), (short) 101, (short) 2, System.currentTimeMillis() * 1000000, (short) 2, schema, new byte[100], false, null));
assertTrue(buf101.appendEvent(new DbusEventKey(55), (short) 101, (short) 2, System.currentTimeMillis() * 1000000, (short) 2, schema, new byte[100], false, null));
assertTrue(buf101.appendEvent(new DbusEventKey(56), (short) 101, (short) 2, System.currentTimeMillis() * 1000000, (short) 2, schema, new byte[100], false, null));
buf101.endEvents(200, null);
// initialization
DatabusSubscription sub1 = DatabusSubscription.createPhysicalPartitionReplicationSubscription(new PhysicalPartition(100, "multBufferTest1"));
DbusFilter filter1 = t._eventBuffer.constructFilters(Arrays.asList(sub1));
assertNotNull(filter1);
CheckpointMult cpMult1 = new CheckpointMult();
Checkpoint cp100 = new Checkpoint();
cp100.init();
cp100.setConsumptionMode(DbusClientMode.ONLINE_CONSUMPTION);
cp100.setWindowScn(10L);
cp100.setWindowOffset(-1);
cpMult1.addCheckpoint(pp100, cp100);
String[] pnames = { "multBufferTest1:100", "multBufferTest2:101" };
StatsCollectors<DbusEventsStatisticsCollector> statsColls1 = createStats(pnames);
DbusEventsStatisticsCollector statsCol1 = statsColls1.getStatsCollector("multBufferTest1:100");
DbusEventsStatisticsCollector statsCol2 = statsColls1.getStatsCollector("multBufferTest2:101");
// read an entire buffer
DbusEventBufferBatchReadable reader1 = t._eventBuffer.getDbusEventBufferBatchReadable(cpMult1, Arrays.asList(pk1), statsColls1);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// Try a call with 20 bytes of fetch size, we should see the event size in the first return with 0 events read.
StreamEventsResult result = reader1.streamEvents(false, 20, Channels.newChannel(baos), Encoding.BINARY, filter1);
assertEquals(0, result.getNumEventsStreamed());
assertEquals(161, result.getSizeOfPendingEvent());
result = reader1.streamEvents(false, 1000000, Channels.newChannel(baos), Encoding.BINARY, filter1);
int eventsRead = result.getNumEventsStreamed();
// 4 events + 1 eop + 2 events + 1 eop
assertEquals(eventsRead, 8);
assertEquals(statsColls1.getStatsCollector("multBufferTest1:100").getTotalStats().getNumSysEvents(), 2);
assertEquals(statsColls1.getStatsCollector("multBufferTest1:100").getTotalStats().getNumDataEvents(), 6);
assertEquals(result.getSizeOfPendingEvent(), 0, "Size of pending event not zero");
// Now that we have read all the events, we should not see a pending event even if we offer a small fetch size.
result = reader1.streamEvents(false, 20, Channels.newChannel(baos), Encoding.BINARY, filter1);
assertEquals(0, result.getNumEventsStreamed(), "There should be no more events in the buffer now");
assertEquals(0, result.getSizeOfPendingEvent(), "We should not see pending event size since there are no events in buffer");
baos.reset();
statsCol1.reset();
statsCol2.reset();
// read from two buffers, filtering out one
cpMult1 = new CheckpointMult();
cp100.init();
cp100.setConsumptionMode(DbusClientMode.ONLINE_CONSUMPTION);
cp100.setWindowScn(10L);
cp100.setWindowOffset(-1);
cpMult1.addCheckpoint(pp100, cp100);
reader1 = t._eventBuffer.getDbusEventBufferBatchReadable(cpMult1, Arrays.asList(pk1, pk2), statsColls1);
eventsRead = reader1.streamEvents(false, 1000000, Channels.newChannel(baos), Encoding.BINARY, filter1).getNumEventsStreamed();
// 4 events + 1 eop + 1 eop from the other buffer + 2 events +
assertEquals(eventsRead, 10);
// 1 eop + 1 eop from the other buffer
assertEquals(statsColls1.getStatsCollector("multBufferTest1:100").getTotalStats().getNumSysEvents(), 2);
assertEquals(statsColls1.getStatsCollector("multBufferTest1:100").getTotalStats().getNumDataEvents(), 6);
baos.reset();
statsCol1.reset();
// read from one buffer and one source partition
DatabusSubscription sub2 = new DatabusSubscription(PhysicalSource.MASTER_PHISYCAL_SOURCE, new PhysicalPartition(101, "multBufferTest2"), new LogicalSourceId(new LogicalSource(2, "srcName2"), (short) 2));
DbusFilter filter2 = t._eventBuffer.constructFilters(Arrays.asList(sub2));
assertNotNull(filter2);
CheckpointMult cpMult2 = new CheckpointMult();
Checkpoint cp101 = new Checkpoint();
cp101.init();
cp101.setConsumptionMode(DbusClientMode.ONLINE_CONSUMPTION);
cp101.setWindowScn(10L);
cp101.setWindowOffset(-1);
cpMult2.addCheckpoint(pp101, cp101);
DbusEventBufferBatchReadable reader2 = t._eventBuffer.getDbusEventBufferBatchReadable(cpMult2, Arrays.asList(pk2), statsColls1);
eventsRead = reader2.streamEvents(false, 1000000, Channels.newChannel(baos), Encoding.BINARY, filter2).getNumEventsStreamed();
// 1 events + 1 eop + 3events + 1 eop
assertEquals(eventsRead, 6);
baos.reset();
statsCol1.reset();
statsCol2.reset();
// read all partitions for a source
DatabusSubscription sub3 = new DatabusSubscription(PhysicalSource.MASTER_PHISYCAL_SOURCE, PhysicalPartition.ANY_PHYSICAL_PARTITION, LogicalSourceId.createAllPartitionsWildcard(new LogicalSource(2, "srcName2")));
DbusFilter filter3 = t._eventBuffer.constructFilters(Arrays.asList(sub3));
assertNotNull(filter3);
CheckpointMult cpMult3 = new CheckpointMult();
cp100.init();
cp100.setConsumptionMode(DbusClientMode.ONLINE_CONSUMPTION);
cp100.setWindowScn(10L);
cp100.setWindowOffset(-1);
cpMult1.addCheckpoint(pp100, cp100);
cp101.init();
cp101.setConsumptionMode(DbusClientMode.ONLINE_CONSUMPTION);
cp101.setWindowScn(10L);
cp101.setWindowOffset(-1);
cpMult2.addCheckpoint(pp101, cp101);
DbusEventBufferBatchReadable reader3 = t._eventBuffer.getDbusEventBufferBatchReadable(cpMult3, Arrays.asList(pk1, pk2), statsColls1);
eventsRead = reader3.streamEvents(false, 1000000, Channels.newChannel(baos), Encoding.BINARY, filter3).getNumEventsStreamed();
// 1 events + 1 eop + 1 events + 1 eop + 2 events + 1 eop + 3 events + 1 eop
assertEquals(eventsRead, 11);
assertEquals(statsColls1.getStatsCollector("multBufferTest1:100").getTotalStats().getNumSysEvents(), 2);
assertEquals(statsColls1.getStatsCollector("multBufferTest2:101").getTotalStats().getNumSysEvents(), 2);
assertEquals(statsColls1.getStatsCollector("multBufferTest1:100").getTotalStats().getNumDataEventsFiltered(), 3);
assertEquals(statsColls1.getStatsCollector("multBufferTest2:101").getTotalStats().getNumDataEventsFiltered(), 4);
baos.reset();
statsCol1.reset();
statsCol2.reset();
log.info("end");
}
use of com.linkedin.databus.core.data_model.LogicalSourceId in project databus by linkedin.
the class TestDbusEventBufferMult method testConstructFilters.
@Test
public void testConstructFilters() throws Exception {
TestSetup t = new TestSetup();
// test single Physical Partition subscription
DatabusSubscription sub1 = DatabusSubscription.createPhysicalPartitionReplicationSubscription(new PhysicalPartition(100, "multBufferTest1"));
DbusFilter filter1 = t._eventBuffer.constructFilters(Arrays.asList(sub1));
assertNotNull(filter1);
assertTrue(filter1 instanceof PhysicalPartitionDbusFilter);
PhysicalPartitionDbusFilter ppfilter1 = (PhysicalPartitionDbusFilter) filter1;
assertEquals(ppfilter1.getPhysicalPartition(), new PhysicalPartition(100, "multBufferTest1"));
assertNull(ppfilter1.getNestedFilter());
DatabusSubscription sub2 = DatabusSubscription.createPhysicalPartitionReplicationSubscription(new PhysicalPartition(101, "multBufferTest2"));
// test two Physical Partition subscriptions
DbusFilter filter2 = t._eventBuffer.constructFilters(Arrays.asList(sub1, sub2));
assertNotNull(filter2);
assertTrue(filter2 instanceof ConjunctionDbusFilter);
ConjunctionDbusFilter conjFilter2 = (ConjunctionDbusFilter) filter2;
boolean hasPP100 = false;
boolean hasPP101 = false;
assertEquals(conjFilter2.getFilterList().size(), 2);
for (DbusFilter f : conjFilter2.getFilterList()) {
assertTrue(f instanceof PhysicalPartitionDbusFilter);
PhysicalPartitionDbusFilter ppf = (PhysicalPartitionDbusFilter) f;
if (ppf.getPhysicalPartition().getId() == 100)
hasPP100 = true;
else if (ppf.getPhysicalPartition().getId() == 101)
hasPP101 = true;
else
fail("unknown physical partition filter:" + ppf.getPhysicalPartition());
}
assertTrue(hasPP100);
assertTrue(hasPP101);
// test a subcription with a logical source
DatabusSubscription sub3 = DatabusSubscription.createSimpleSourceSubscription(new LogicalSource(2, "srcName2"));
DbusFilter filter3 = t._eventBuffer.constructFilters(Arrays.asList(sub3));
assertNotNull(filter3);
assertTrue(filter3 instanceof PhysicalPartitionDbusFilter);
PhysicalPartitionDbusFilter ppfilter3 = (PhysicalPartitionDbusFilter) filter3;
assertEquals(ppfilter3.getPhysicalPartition(), PhysicalPartition.ANY_PHYSICAL_PARTITION);
DbusFilter ppfilter3_child = ppfilter3.getNestedFilter();
assertNotNull(ppfilter3_child);
assertTrue(ppfilter3_child instanceof LogicalSourceAndPartitionDbusFilter);
LogicalSourceAndPartitionDbusFilter lsourceFilter3 = (LogicalSourceAndPartitionDbusFilter) ppfilter3_child;
LogicalSourceAndPartitionDbusFilter.LogicalPartitionDbusFilter lpartFilter3_1 = lsourceFilter3.getSourceFilter(2);
assertNotNull(lpartFilter3_1);
assertTrue(lpartFilter3_1.isAllPartitionsWildcard());
// test a subcription with a physical and logical partition
DatabusSubscription sub4 = new DatabusSubscription(PhysicalSource.MASTER_PHISYCAL_SOURCE, new PhysicalPartition(101, "multBufferTest2"), new LogicalSourceId(new LogicalSource(2, "srcName2"), (short) 2));
DbusFilter filter4 = t._eventBuffer.constructFilters(Arrays.asList(sub4));
assertNotNull(filter4);
assertTrue(filter4 instanceof PhysicalPartitionDbusFilter);
PhysicalPartitionDbusFilter ppfilter4 = (PhysicalPartitionDbusFilter) filter4;
assertEquals(ppfilter4.getPhysicalPartition(), new PhysicalPartition(101, "multBufferTest2"));
DbusFilter ppfilter4_child = ppfilter4.getNestedFilter();
assertNotNull(ppfilter4_child);
assertTrue(ppfilter4_child instanceof LogicalSourceAndPartitionDbusFilter);
LogicalSourceAndPartitionDbusFilter lsourceFilter4 = (LogicalSourceAndPartitionDbusFilter) ppfilter4_child;
LogicalSourceAndPartitionDbusFilter.LogicalPartitionDbusFilter lpartFilter4_1 = lsourceFilter4.getSourceFilter(2);
assertNotNull(lpartFilter4_1);
assertTrue(lpartFilter4_1.getPartitionsMask().contains(2));
}
Aggregations