public int getInc() { return this.ts.getInc(); }
@Override public void convert(final BsonTimestamp value, final StrictJsonWriter writer) { writer.writeRaw(format("Timestamp(%d, %d)", value.getTime(), value.getInc())); } }
@Override public String toString() { return "Timestamp{" + "value=" + getValue() + ", seconds=" + getTime() + ", inc=" + getInc() + '}'; }
@Override public BSONTimestamp decode(final BsonReader reader, final DecoderContext decoderContext) { BsonTimestamp timestamp = reader.readTimestamp(); return new BSONTimestamp(timestamp.getTime(), timestamp.getInc()); }
@Override public void doWriteTimestamp(final BsonTimestamp value) { bsonCallback.gotTimestamp(getName(), value.getTime(), value.getInc()); }
@Override public void convert(final BsonTimestamp value, final StrictJsonWriter writer) { writer.writeStartObject(); writer.writeStartObject("$timestamp"); writer.writeNumber("t", UnsignedLongs.toString(toUnsignedLong(value.getTime()))); writer.writeNumber("i", UnsignedLongs.toString(toUnsignedLong(value.getInc()))); writer.writeEndObject(); writer.writeEndObject(); }
assertThat(ts.getInc()).isEqualTo(2);
case TIMESTAMP: BsonTimestamp timestamp = reader.readTimestamp(); return new BSONTimestamp(timestamp.getTime(), timestamp.getInc()); case INT64: return reader.readInt64();
@Test public void shouldReturnRecordedOffsetForUsedReplicaName() { Document event = new Document().append("ts", new BsonTimestamp(100, 2)) .append("h", Long.valueOf(1987654321)) .append("ns", "dbA.collectA"); assertThat(source.hasOffset(REPLICA_SET_NAME)).isEqualTo(false); source.offsetStructForEvent(REPLICA_SET_NAME, event); assertThat(source.hasOffset(REPLICA_SET_NAME)).isEqualTo(true); Map<String, ?> offset = source.lastOffset(REPLICA_SET_NAME); assertThat(offset.get(SourceInfo.TIMESTAMP)).isEqualTo(100); assertThat(offset.get(SourceInfo.ORDER)).isEqualTo(2); assertThat(offset.get(SourceInfo.OPERATION_ID)).isEqualTo(1987654321L); BsonTimestamp ts = source.lastOffsetTimestamp(REPLICA_SET_NAME); assertThat(ts.getTime()).isEqualTo(100); assertThat(ts.getInc()).isEqualTo(2); Struct struct = source.lastOffsetStruct(REPLICA_SET_NAME,new CollectionId(REPLICA_SET_NAME,"dbA","collectA")); assertThat(struct.getInt32(SourceInfo.TIMESTAMP)).isEqualTo(100); assertThat(struct.getInt32(SourceInfo.ORDER)).isEqualTo(2); assertThat(struct.getInt64(SourceInfo.OPERATION_ID)).isEqualTo(1987654321L); assertThat(struct.getString(SourceInfo.NAMESPACE)).isEqualTo("dbA.collectA"); assertThat(struct.getString(SourceInfo.REPLICA_SET_NAME)).isEqualTo(REPLICA_SET_NAME); assertThat(struct.getString(SourceInfo.SERVER_NAME)).isEqualTo("serverX"); assertThat(struct.getBoolean(SourceInfo.INITIAL_SYNC)).isNull(); }
@Test public void shouldReturnRecordedOffsetForUsedReplicaNameDuringInitialSync() { source.startInitialSync(REPLICA_SET_NAME); Document event = new Document().append("ts", new BsonTimestamp(100, 2)) .append("h", Long.valueOf(1987654321)) .append("ns", "dbA.collectA"); assertThat(source.hasOffset(REPLICA_SET_NAME)).isEqualTo(false); source.offsetStructForEvent(REPLICA_SET_NAME, event); assertThat(source.hasOffset(REPLICA_SET_NAME)).isEqualTo(true); Map<String, ?> offset = source.lastOffset(REPLICA_SET_NAME); assertThat(offset.get(SourceInfo.TIMESTAMP)).isEqualTo(100); assertThat(offset.get(SourceInfo.ORDER)).isEqualTo(2); assertThat(offset.get(SourceInfo.OPERATION_ID)).isEqualTo(1987654321L); BsonTimestamp ts = source.lastOffsetTimestamp(REPLICA_SET_NAME); assertThat(ts.getTime()).isEqualTo(100); assertThat(ts.getInc()).isEqualTo(2); Struct struct = source.lastOffsetStruct(REPLICA_SET_NAME,new CollectionId(REPLICA_SET_NAME,"dbA","collectA")); assertThat(struct.getInt32(SourceInfo.TIMESTAMP)).isEqualTo(100); assertThat(struct.getInt32(SourceInfo.ORDER)).isEqualTo(2); assertThat(struct.getInt64(SourceInfo.OPERATION_ID)).isEqualTo(1987654321L); assertThat(struct.getString(SourceInfo.NAMESPACE)).isEqualTo("dbA.collectA"); assertThat(struct.getString(SourceInfo.REPLICA_SET_NAME)).isEqualTo(REPLICA_SET_NAME); assertThat(struct.getString(SourceInfo.SERVER_NAME)).isEqualTo("serverX"); assertThat(struct.getBoolean(SourceInfo.INITIAL_SYNC)).isEqualTo(true); }
@Test public void shouldReturnOffsetForUnusedReplicaName() { assertThat(source.hasOffset(REPLICA_SET_NAME)).isEqualTo(false); Map<String, ?> offset = source.lastOffset(REPLICA_SET_NAME); assertThat(offset.get(SourceInfo.TIMESTAMP)).isEqualTo(0); assertThat(offset.get(SourceInfo.ORDER)).isEqualTo(0); assertThat(offset.get(SourceInfo.OPERATION_ID)).isNull(); BsonTimestamp ts = source.lastOffsetTimestamp(REPLICA_SET_NAME); assertThat(ts.getTime()).isEqualTo(0); assertThat(ts.getInc()).isEqualTo(0); Struct struct = source.lastOffsetStruct(REPLICA_SET_NAME,new CollectionId(REPLICA_SET_NAME,"dbA","collectA")); assertThat(struct.getInt32(SourceInfo.TIMESTAMP)).isEqualTo(0); assertThat(struct.getInt32(SourceInfo.ORDER)).isEqualTo(0); assertThat(struct.getInt64(SourceInfo.OPERATION_ID)).isNull(); assertThat(struct.getString(SourceInfo.NAMESPACE)).isEqualTo("dbA.collectA"); assertThat(struct.getString(SourceInfo.REPLICA_SET_NAME)).isEqualTo(REPLICA_SET_NAME); assertThat(struct.getString(SourceInfo.SERVER_NAME)).isEqualTo("serverX"); assertThat(struct.getBoolean(SourceInfo.INITIAL_SYNC)).isNull(); assertThat(source.hasOffset(REPLICA_SET_NAME)).isEqualTo(false); }
@Test public void shouldReturnOffsetForUnusedReplicaNameDuringInitialSync() { source.startInitialSync(REPLICA_SET_NAME); assertThat(source.hasOffset(REPLICA_SET_NAME)).isEqualTo(false); Map<String, ?> offset = source.lastOffset(REPLICA_SET_NAME); assertThat(offset.get(SourceInfo.TIMESTAMP)).isEqualTo(0); assertThat(offset.get(SourceInfo.ORDER)).isEqualTo(0); assertThat(offset.get(SourceInfo.OPERATION_ID)).isNull(); BsonTimestamp ts = source.lastOffsetTimestamp(REPLICA_SET_NAME); assertThat(ts.getTime()).isEqualTo(0); assertThat(ts.getInc()).isEqualTo(0); Struct struct = source.lastOffsetStruct(REPLICA_SET_NAME,new CollectionId(REPLICA_SET_NAME,"dbA","collectA")); assertThat(struct.getInt32(SourceInfo.TIMESTAMP)).isEqualTo(0); assertThat(struct.getInt32(SourceInfo.ORDER)).isEqualTo(0); assertThat(struct.getInt64(SourceInfo.OPERATION_ID)).isNull(); assertThat(struct.getString(SourceInfo.NAMESPACE)).isEqualTo("dbA.collectA"); assertThat(struct.getString(SourceInfo.REPLICA_SET_NAME)).isEqualTo(REPLICA_SET_NAME); assertThat(struct.getString(SourceInfo.SERVER_NAME)).isEqualTo("serverX"); assertThat(struct.getBoolean(SourceInfo.INITIAL_SYNC)).isEqualTo(true); assertThat(source.hasOffset(REPLICA_SET_NAME)).isEqualTo(false); }
/** * Calculates the timestamp of the message. * * @param message from which retrieve the timestamp * @return BsonTimestamp formatted as a String (seconds+inc) */ private String getTimestamp(Document message) { BsonTimestamp timestamp = (BsonTimestamp) message.get("ts"); return new StringBuilder() .append(timestamp.getTime()) .append("_") .append(timestamp.getInc()) .toString(); }
@Override public BSONTimestamp decode(final BsonReader reader, final DecoderContext decoderContext) { BsonTimestamp timestamp = reader.readTimestamp(); return new BSONTimestamp(timestamp.getTime(), timestamp.getInc()); }
@Override public Struct toStruct(Document document, Schema schema) { Struct messageStruct = new Struct(schema); BsonTimestamp bsonTimestamp = (BsonTimestamp) document.get("ts"); Integer seconds = bsonTimestamp.getTime(); Integer order = bsonTimestamp.getInc(); messageStruct.put("timestamp", seconds); messageStruct.put("order", order); messageStruct.put("operation", document.get("op")); messageStruct.put("database", document.get("ns")); messageStruct.put("object", document.get("o").toString()); return messageStruct; }
@Override public Struct toStruct(Document document, Schema schema) { final Struct messageStruct = new Struct(schema); final BsonTimestamp bsonTimestamp = (BsonTimestamp) document.get("ts"); final Integer seconds = bsonTimestamp.getTime(); final Integer order = bsonTimestamp.getInc(); messageStruct.put("timestamp", seconds); messageStruct.put("order", order); messageStruct.put("operation", document.get("op")); messageStruct.put("database", document.get("ns")); final Document modifiedDocument = (Document) document.get("o"); messageStruct.put("object", modifiedDocument.toJson()); return messageStruct; }
case TIMESTAMP: { BsonTimestamp casted = value.asTimestamp(); return new DefaultBsonTimestamp(casted.getTime(), casted.getInc());
case TIMESTAMP: { BsonTimestamp casted = value.asTimestamp(); return new DefaultBsonTimestamp(casted.getTime(), casted.getInc());