@Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof UUIDSet) { UUIDSet that = (UUIDSet) obj; return this.getUUID().equalsIgnoreCase(that.getUUID()) && this.getIntervals().equals(that.getIntervals()); } return super.equals(obj); }
protected UUIDSet(com.github.shyiko.mysql.binlog.GtidSet.UUIDSet uuidSet) { this.uuid = uuidSet.getUUID(); uuidSet.getIntervals().forEach(interval -> { intervals.add(new Interval(interval.getStart(), interval.getEnd())); }); Collections.sort(this.intervals); if (this.intervals.size() > 1) { // Collapse adjacent intervals ... for (int i = intervals.size() - 1; i != 0; --i) { Interval before = this.intervals.get(i - 1); Interval after = this.intervals.get(i); if ((before.getEnd() + 1) == after.getStart()) { this.intervals.set(i - 1, new Interval(before.getStart(), after.getEnd())); this.intervals.remove(i); } } } } protected UUIDSet(String uuid, Interval interval) {
@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(); }