public UpdateRowsEventData updateRowsData() { return (UpdateRowsEventData) event.getData(); }
public WriteRowsEventData writeRowsData() { return (WriteRowsEventData) event.getData(); }
public DeleteRowsEventData deleteRowsData() { return (DeleteRowsEventData) event.getData(); }
public XidEventData xidData() { return (XidEventData) event.getData(); }
public QueryEventData queryData() { return (QueryEventData) event.getData(); }
public TableMapEventData tableMapData() { return (TableMapEventData) event.getData(); }
@SuppressWarnings("unchecked") protected <T extends EventData> T unwrapData(Event event) { EventData eventData = event.getData(); if (eventData instanceof EventDeserializer.EventDataWrapper) { eventData = ((EventDeserializer.EventDataWrapper) eventData).getInternal(); } return (T) eventData; }
private void processQueryEvent(Event event) { QueryEventData data = event.getData(); String sql = data.getSql(); if (createTablePattern.matcher(sql).find()) { schema.reset(); } }
private void notifyEventListeners(Event event) { if (event.getData() instanceof EventDataWrapper) { event = new Event(event.getHeader(), ((EventDataWrapper) event.getData()).getExternal()); } for (EventListener eventListener : eventListeners) { try { eventListener.onEvent(event); } catch (Exception e) { if (logger.isLoggable(Level.WARNING)) { logger.log(Level.WARNING, eventListener + " choked on " + event, e); } } } }
private void processUpdateEvent(Event event) { UpdateRowsEventData data = event.getData(); Long tableId = data.getTableId(); List<Map.Entry<Serializable[], Serializable[]>> list = data.getRows(); for (Map.Entry<Serializable[], Serializable[]> entry : list) { addRow("UPDATE", tableId, entry.getValue()); } }
private void processWriteEvent(Event event) { WriteRowsEventData data = event.getData(); Long tableId = data.getTableId(); List<Serializable[]> list = data.getRows(); for (Serializable[] row : list) { addRow("WRITE", tableId, row); } }
private void processDeleteEvent(Event event) { DeleteRowsEventData data = event.getData(); Long tableId = data.getTableId(); List<Serializable[]> list = data.getRows(); for (Serializable[] row : list) { addRow("DELETE", tableId, row); } }
private void processTableMapEvent(Event event) { TableMapEventData data = event.getData(); String dbName = data.getDatabase(); String tableName = data.getTable(); Long tableId = data.getTableId(); Table table = schema.getTable(dbName, tableName); tableMap.put(tableId, table); }
/** * Blocks until the listener has seen the specified number of events with event data matching the specified class, * or until the specified time has passed. * * @param eventCount the number of events * @param eventDataClass the EventData subclass * @param timeoutMillis the maximum amount of time in milliseconds that this method should block * @throws TimeoutException if the waiting timed out before the expected number of events were received */ public void consume(int eventCount, Class<? extends EventData> eventDataClass, long timeoutMillis) throws TimeoutException { consume(eventCount, defaultTimeoutInMillis, event -> { EventData data = event.getData(); return data != null && data.getClass().equals(eventDataClass); }); }
switch(eventHeader.getEventType()) { case GTID: GtidEventData gtidEventData = (GtidEventData) EventDataWrapper.internal(event.getData()); gtid = gtidEventData.getGtid(); break; break; case QUERY: QueryEventData queryEventData = (QueryEventData) EventDataWrapper.internal(event.getData()); String sql = queryEventData.getSql(); if (sql == null) {
gtid = ((GtidEventData)event.getData()).getGtid();
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; } } }
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); }
@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); } } };