public Position(int ts, int order, Long opId) { this(new BsonTimestamp(ts, order), opId); }
private BsonTimestamp greaterOf(final BsonTimestamp newOperationTime) { if (newOperationTime == null) { return operationTime; } else if (operationTime == null) { return newOperationTime; } else { return newOperationTime.compareTo(operationTime) > 0 ? newOperationTime : operationTime; } }
private static <T> Object doGetTimestamp(Object timestamp, Class<T> targetType) { if (ClassUtils.isAssignableValue(targetType, timestamp)) { return timestamp; } if (timestamp instanceof Instant) { return new BsonTimestamp((int) ((Instant) timestamp).getEpochSecond(), 0); } if (timestamp instanceof BsonTimestamp) { return Instant.ofEpochSecond(((BsonTimestamp) timestamp).getTime()); } throw new IllegalArgumentException( "o_O that should actually not happen. The timestamp should be an Instant or a BsonTimestamp but was " + ObjectUtils.nullSafeClassName(timestamp)); }
@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(); }
public int getTime() { return this.ts.getTime(); }
public int getInc() { return this.ts.getInc(); }
return false; if (clusterTime != null ? !clusterTime.equals(that.clusterTime) : that.clusterTime != null) { return false;
@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); }
@Nullable @Override public Instant convert(BsonTimestamp source) { return Instant.ofEpochSecond(source.getTime(), 0); } }
return false; if (clusterTime != null ? !clusterTime.equals(that.clusterTime) : that.clusterTime != null) { return false;
@Override protected BsonTimestamp doReadTimestamp() { return new BsonTimestamp(bsonInput.readInt64()); }
@Test public void shouldSetAndReturnRecordedOffset() { Document event = new Document().append("ts", new BsonTimestamp(100, 2)) .append("h", Long.valueOf(1987654321)) .append("ns", "dbA.collectA"); assertThat(ts.getTime()).isEqualTo(100); assertThat(ts.getInc()).isEqualTo(2);
colValue = keyvalueforStruct.getValue().asTimestamp().getTime(); break;
public synchronized BsonDocument greaterOf(final BsonDocument other) { if (other == null) { return clusterTime; } else if (clusterTime == null) { return other; } else { return other.getTimestamp(CLUSTER_TIME_KEY).compareTo(clusterTime.getTimestamp(CLUSTER_TIME_KEY)) > 0 ? other : clusterTime; } } }
@Override public void encode(final BsonWriter writer, final BSONTimestamp value, final EncoderContext encoderContext) { writer.writeTimestamp(new BsonTimestamp(value.getTime(), value.getInc())); }
@Nullable @Override public Instant convert(BsonTimestamp source) { return Instant.ofEpochSecond(source.getTime(), 0); } }