/** * @param gtids the string representation of the GTIDs. */ public GtidSet(String gtids) { gtids = gtids.replaceAll("\n", "").replaceAll("\r", ""); new com.github.shyiko.mysql.binlog.GtidSet(gtids).getUUIDSets().forEach(uuidSet -> { uuidSetsByServerId.put(uuidSet.getUUID(), new UUIDSet(uuidSet)); }); StringBuilder sb = new StringBuilder(); uuidSetsByServerId.values().forEach(uuidSet -> { if (sb.length() != 0) sb.append(','); sb.append(uuidSet.toString()); }); }
@Override public byte[] toByteArray() throws IOException { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); buffer.writeInteger(CommandType.BINLOG_DUMP_GTID.ordinal(), 1); buffer.writeInteger(0, 2); // flag buffer.writeLong(this.serverId, 4); buffer.writeInteger(this.binlogFilename.length(), 4); buffer.writeString(this.binlogFilename); buffer.writeLong(this.binlogPosition, 8); Collection<GtidSet.UUIDSet> uuidSets = gtidSet.getUUIDSets(); int dataSize = 8 /* number of uuidSets */; for (GtidSet.UUIDSet uuidSet : uuidSets) { dataSize += 16 /* uuid */ + 8 /* number of intervals */ + uuidSet.getIntervals().size() /* number of intervals */ * 16 /* start-end */; } buffer.writeInteger(dataSize, 4); buffer.writeLong(uuidSets.size(), 8); for (GtidSet.UUIDSet uuidSet : uuidSets) { buffer.write(hexToByteArray(uuidSet.getUUID().replace("-", ""))); Collection<GtidSet.Interval> intervals = uuidSet.getIntervals(); buffer.writeLong(intervals.size(), 8); for (GtidSet.Interval interval : intervals) { buffer.writeLong(interval.getStart(), 8); buffer.writeLong(interval.getEnd() + 1 /* right-open */, 8); } } return buffer.toByteArray(); }