public EventType getType() { return event.getHeader().getEventType(); }
@Override public String getLastEvent() { EventHeader eventHeader = lastEventHeader.get(); return eventHeader == null ? null : eventHeader.getEventType() + "/" + eventHeader.getTimestamp() + " from server " + eventHeader.getServerId(); }
@Override public void onEvent(Event event) { EventHeader header = event.getHeader(); lastEventHeader.set(header); timestampOfLastEvent.set(getCurrentTimeMillis()); totalNumberOfEventsSeen.getAndIncrement(); totalBytesReceived.getAndAdd(header.getHeaderLength() + header.getDataLength()); }
boolean trackMetrics = false; if (event.getHeader().getEventType() == EventType.GTID) { gtid = ((GtidEventData)event.getData()).getGtid(); trackMetrics = true; eventSeenAt = System.currentTimeMillis(); replicationLag = eventSeenAt - event.getHeader().getTimestamp();
EventType eventType = eventHeader.getEventType(); EventData eventData = event.getData(); long timestamp = eventHeader.getTimestamp(); long lag = System.currentTimeMillis() - timestamp; timestamp, lag, eventHeader.getEventType(), eventHeader.getDataLength() });
@Override public long getSecondsBehindMaster() { // because lastEventHeader and timestampOfLastEvent are not guarded by the common lock // we may get some "distorted" results, though shouldn't be a problem given the nature of the final value long timestamp = timestampOfLastEvent.get(); EventHeader eventHeader = lastEventHeader.get(); if (timestamp == 0 || eventHeader == null) { return -1; } return (timestamp - eventHeader.getTimestamp()) / 1000; }
break; rowBuffer.setServerId(event.getEvent().getHeader().getServerId()); rowBuffer.setThreadId(qe.getThreadId()); rowBuffer.setSchemaId(getSchemaId());
private EventData deserializeEventData(ByteArrayInputStream inputStream, EventHeader eventHeader, EventDataDeserializer eventDataDeserializer) throws EventDataDeserializationException { int eventBodyLength = (int) eventHeader.getDataLength() - checksumLength; EventData eventData; try { inputStream.enterBlock(eventBodyLength); try { eventData = eventDataDeserializer.deserialize(inputStream); } finally { inputStream.skipToTheEndOfTheBlock(); inputStream.skip(checksumLength); } } catch (IOException e) { throw new EventDataDeserializationException(eventHeader, e); } return eventData; }
EventType eventType = event.getEvent().getHeader().getEventType(); if (event.isCommitEvent()) { if (!buffer.isEmpty()) { buffer.getLast().setTXCommit(); long timeSpent = buffer.getLast().getTimestampMillis() - beginEvent.getEvent().getHeader().getTimestamp(); transactionExecutionTime.update(timeSpent); transactionRowCount.update(buffer.size());
private RowMap buildRowMap(String type, Position position, Position nextPosition, Serializable[] data, Table table, BitSet includedColumns, String rowQuery) { RowMap map = new RowMap( type, table.getDatabase(), table.getName(), event.getHeader().getTimestamp(), table.getPKList(), position, nextPosition, rowQuery ); writeData(table, map, data, includedColumns); return map; }
formatDescEventDataDeserializer : getEventDataDeserializer(EventType.FORMAT_DESCRIPTION); int eventBodyLength = (int) eventHeader.getDataLength(); EventData eventData; try {
private void switchToBufferFullMode() { largeTxNotBufferedPosition = reader.getCurrentBinlogPosition(); LOGGER.info("Buffer full, will need to re-read part of the transaction from binlog from {}", largeTxNotBufferedPosition); reader.getMetrics().onLargeTransaction(); // Position for TABLE_MAP is not stored by com.github.shyiko.mysql.binlog.BinaryLogClient.updateClientBinlogFilenameAndPosition(Event) if (buffer.peek().getHeader().getEventType() == EventType.TABLE_MAP) { buffer.remove(); } }
source.setBinlogTimestampSeconds(eventHeader.getTimestamp() / 1000L); // client returns milliseconds, but only second source.setBinlogServerId(eventHeader.getServerId()); EventType eventType = eventHeader.getEventType(); if (eventType == EventType.ROTATE) { EventData eventData = event.getData();
private void processQueryEvent(BinlogConnectorEvent event) throws Exception { QueryEventData data = event.queryData(); processQueryEvent( data.getDatabase(), data.getSql(), this.schemaStore, Position.valueOf(event.getPosition(), getLastHeartbeatRead()), Position.valueOf(event.getNextPosition(), getLastHeartbeatRead()), event.getEvent().getHeader().getTimestamp() ); }
/** * @return deserialized event or null in case of end-of-stream */ public Event nextEvent(ByteArrayInputStream inputStream) throws IOException { if (inputStream.peek() == -1) { return null; } EventHeader eventHeader = eventHeaderDeserializer.deserialize(inputStream); EventData eventData; switch (eventHeader.getEventType()) { case FORMAT_DESCRIPTION: eventData = deserializeFormatDescriptionEventData(inputStream, eventHeader); break; case TABLE_MAP: eventData = deserializeTableMapEventData(inputStream, eventHeader); break; default: EventDataDeserializer eventDataDeserializer = getEventDataDeserializer(eventHeader.getEventType()); eventData = deserializeEventData(inputStream, eventHeader, eventDataDeserializer); } return new Event(eventHeader, eventData); }
@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); } } };
if (event.getHeader().getEventType() == EventType.QUERY) { QueryEventData command = reader.unwrapData(event); LOGGER.debug("Received query command: {}", event); consumeEvent(event); } else if (event.getHeader().getEventType() == EventType.XID) { completeTransaction(true, event); } else {
switch (event.getHeader().getEventType()) { case TABLE_MAP: processTableMapEvent(event);
public Long getTableID() { EventData data = event.getData(); switch ( event.getHeader().getEventType() ) { case EXT_WRITE_ROWS: case WRITE_ROWS: return ((WriteRowsEventData) data).getTableId(); case EXT_UPDATE_ROWS: case UPDATE_ROWS: return ((UpdateRowsEventData) data).getTableId(); case EXT_DELETE_ROWS: case DELETE_ROWS: return ((DeleteRowsEventData) data).getTableId(); case TABLE_MAP: return ((TableMapEventData) data).getTableId(); } return null; }
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; } } }