/** * @return GTID set. Note that this value changes with each received GTID event (provided client is in GTID mode). * @see #setGtidSet(String) */ public String getGtidSet() { synchronized (gtidSetAccessLock) { return gtidSet != null ? gtidSet.toString() : null; } }
/** * Handle the supplied event with a {@link GtidEventData} that signals the beginning of a GTID transaction. * We don't yet know whether this transaction contains any events we're interested in, but we have to record * it so that we know the position of this event and know we've processed the binlog to this point. * <p> * Note that this captures the current GTID and complete GTID set, regardless of whether the connector is * {@link MySqlTaskContext#gtidSourceFilter() filtering} the GTID set upon connection. We do this because * we actually want to capture all GTID set values found in the binlog, whether or not we process them. * However, only when we connect do we actually want to pass to MySQL only those GTID ranges that are applicable * per the configuration. * * @param event the GTID event to be processed; may not be null */ protected void handleGtidEvent(Event event) { logger.debug("GTID transaction: {}", event); GtidEventData gtidEvent = unwrapData(event); String gtid = gtidEvent.getGtid(); gtidSet.add(gtid); source.startGtid(gtid, gtidSet.toString()); // rather than use the client's GTID set ignoreDmlEventByGtidSource = false; if (gtidDmlSourceFilter != null && gtid != null) { String uuid = gtid.trim().substring(0, gtid.indexOf(":")); if (!gtidDmlSourceFilter.test(uuid)) { ignoreDmlEventByGtidSource = true; } } }
if ("".equals(binlogFilename)) { synchronized (gtidSetAccessLock) { if (gtidSet != null && "".equals(gtidSet.toString()) && gtidSetFallbackToPurged) { gtidSet = new GtidSet(fetchGtidPurged()); String position; synchronized (gtidSetAccessLock) { position = gtidSet != null ? gtidSet.toString() : binlogFilename + "/" + binlogPosition;