@Override public Event nextEvent(ByteArrayInputStream inputStream) throws IOException { try { // Delegate to the superclass ... Event event = super.nextEvent(inputStream); // We have to record the most recent TableMapEventData for each table number for our custom deserializers ... if (event.getHeader().getEventType() == EventType.TABLE_MAP) { TableMapEventData tableMapEvent = event.getData(); tableMapEventByTableId.put(tableMapEvent.getTableId(), tableMapEvent); } return event; } // DBZ-217 In case an event couldn't be read we create a pseudo-event for the sake of logging catch(EventDataDeserializationException edde) { EventHeaderV4 header = new EventHeaderV4(); header.setEventType(EventType.INCIDENT); header.setTimestamp(edde.getEventHeader().getTimestamp()); header.setServerId(edde.getEventHeader().getServerId()); if(edde.getEventHeader() instanceof EventHeaderV4) { header.setEventLength(((EventHeaderV4)edde.getEventHeader()).getEventLength()); header.setNextPosition(((EventHeaderV4)edde.getEventHeader()).getNextPosition()); header.setFlags(((EventHeaderV4)edde.getEventHeader()).getFlags()); } EventData data = new EventDataDeserializationExceptionData(edde); return new Event(header, data); } } };
public BinlogConnectorEvent(Event event, String filename, String gtidSetStr, String gtid, MaxwellOutputConfig outputConfig) { this.event = event; this.gtidSetStr = gtidSetStr; this.gtid = gtid; EventHeaderV4 hV4 = (EventHeaderV4) event.getHeader(); this.nextPosition = new BinlogPosition(gtidSetStr, gtid, hV4.getNextPosition(), filename); this.position = new BinlogPosition(gtidSetStr, gtid, hV4.getPosition(), filename); this.outputConfig = outputConfig; }
@Override public long getDataLength() { return getEventLength() - getHeaderLength(); }
@Override public EventHeaderV4 deserialize(ByteArrayInputStream inputStream) throws IOException { EventHeaderV4 header = new EventHeaderV4(); header.setTimestamp(inputStream.readLong(4) * 1000L); header.setEventType(getEventType(inputStream.readInteger(1))); header.setServerId(inputStream.readLong(4)); header.setEventLength(inputStream.readLong(4)); header.setNextPosition(inputStream.readLong(4)); header.setFlags(inputStream.readInteger(2)); return header; }
Event event = rawBinlogEvent.getEvent(); EventHeaderV4 header = event.getHeader(); long timestamp = header.getTimestamp(); EventType eventType = header.getEventType(); currentBinlogPosition = header.getPosition(); log.debug("Got message event type: {} ", new Object[]{header.getEventType().toString()}); switch (eventType) { case TABLE_MAP: currentBinlogPosition = header.getNextPosition();
} else if (eventHeader instanceof EventHeaderV4) { EventHeaderV4 trackableEventHeader = (EventHeaderV4) eventHeader; source.setEventPosition(trackableEventHeader.getPosition(), trackableEventHeader.getEventLength());
private void updateClientBinlogFilenameAndPosition(Event event) { EventHeader eventHeader = event.getHeader(); EventType eventType = eventHeader.getEventType(); if (eventType == EventType.ROTATE) { RotateEventData rotateEventData = (RotateEventData) EventDataWrapper.internal(event.getData()); binlogFilename = rotateEventData.getBinlogFilename(); binlogPosition = rotateEventData.getBinlogPosition(); } else // do not update binlogPosition on TABLE_MAP so that in case of reconnect (using a different instance of // client) table mapping cache could be reconstructed before hitting row mutation event if (eventType != EventType.TABLE_MAP && eventHeader instanceof EventHeaderV4) { EventHeaderV4 trackableEventHeader = (EventHeaderV4) eventHeader; long nextBinlogPosition = trackableEventHeader.getNextPosition(); if (nextBinlogPosition > 0) { binlogPosition = nextBinlogPosition; } } }
private void handleWriteRowsEvent(Event event, Consumer<M> eventConsumer) { logger.debug("Got binlog event {}", event); offset = ((EventHeaderV4) event.getHeader()).getPosition(); WriteRowsEventData eventData = event.getData(); if (tableMapEventByTableId.containsKey(eventData.getTableId())) { try { eventConsumer.accept(writeRowsEventDataParser.parseEventData(eventData, getCurrentBinlogFilename(), offset ) ); } catch (IOException e) { throw new RuntimeException("Event row parsing exception", e); } } }
Event event = rawBinlogEvent.getEvent(); EventHeaderV4 header = event.getHeader(); long timestamp = header.getTimestamp(); EventType eventType = header.getEventType(); currentBinlogPosition = header.getPosition(); log.debug("Got message event type: {} ", new Object[]{header.getEventType().toString()}); switch (eventType) { case TABLE_MAP: currentBinlogPosition = header.getNextPosition();
private void processXidEvent(Event event) { EventHeaderV4 header = event.getHeader(); XidEventData data = event.getData(); String binlogFilename = binaryLogClient.getBinlogFilename(); Long position = header.getNextPosition(); Long xid = data.getXid(); BinlogPosition binlogPosition = new BinlogPosition(binlogFilename, position); transaction.setNextBinlogPosition(binlogPosition); transaction.setXid(xid); replicator.commit(transaction, true); transaction = new Transaction(config); }
offset = ((EventHeaderV4) event.getHeader()).getPosition(); WriteRowsEventData eventData = event.getData(); if (tableMapEventByTableId.containsKey(eventData.getTableId())) {
tableId, System.lineSeparator(), eventHeader.getPosition(), eventHeader.getNextPosition(), source.binlogFilename() ); System.lineSeparator(), System.lineSeparator(), eventHeader.getPosition(), eventHeader.getNextPosition(), source.binlogFilename() ); System.lineSeparator(), System.lineSeparator(), eventHeader.getPosition(), eventHeader.getNextPosition(), source.binlogFilename() );
source.offset(), System.lineSeparator(), eventHeader.getPosition(), eventHeader.getNextPosition(), source.binlogFilename() ); System.lineSeparator(), System.lineSeparator(), eventHeader.getPosition(), eventHeader.getNextPosition(), source.binlogFilename(), data.getCause()