private void flushConsistentState() throws RollbackException, RetrierGiveUpException { retrier.retry(() -> { try (WriteDmlTransaction trans = backendService.openWriteTransaction()) { trans.writeMetaInfo(getConsistencyKey(), KvBoolean.from(consistent)); trans.commit(); } catch (UserException ex) { throw new RetrierAbortException(ex); } return null; }); }
private void loadConsistent() { try (DmlTransaction trans = backendService.openReadTransaction()) { Optional<KvValue<?>> valueOpt = trans.readMetaInfo(getConsistencyKey()); if (!valueOpt.isPresent()) { consistent = false; return; } KvValue<?> value = valueOpt.get(); if (!value.getType().equals(BooleanType.INSTANCE)) { throw new IllegalStateException("Unexpected consistency value " + "found. Expected a boolean but " + valueOpt + " was " + "found"); } consistent = ((KvBoolean) value).getPrimitiveValue(); } }
@Override public Boolean to(KvBoolean userObject) { return userObject.getValue(); }
@Override public String toString() { return getValue().toString(); }
@Override public KvBoolean from(Boolean databaseObject) { return KvBoolean.from(databaseObject); }
/** * Two KvBoolean are equal if their primitive values are equal. * * @param obj * @return */ @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj == null) { return false; } if (!(obj instanceof KvBoolean)) { return false; } return this.getPrimitiveValue() == ((KvBoolean) obj).getPrimitiveValue(); }
public Builder putValue(String key, boolean value) { return putValue(key, KvBoolean.from(value)); }
/** * The hashCode of a KvBoolean the same as {@link Boolean#hashCode() } applied to its value. * * @return */ @Override public int hashCode() { return Booleans.hashCode(getPrimitiveValue()); }
@SuppressWarnings("unchecked") private KvValue<?> convertValue(Object value) { if (value == null) { return KvNull.getInstance(); } if (value instanceof Map) { return convertMap((Map<String, Object>) value); } else if (value instanceof List) { return convertList((List<Object>) value); } else if (value instanceof String) { return new StringKvString((String) value); } else if (value instanceof Integer) { return KvInteger.of((Integer) value); } else if (value instanceof Double) { return KvDouble.of((Double) value); } else if (value instanceof Long) { return KvLong.of((Long) value); } else if (value instanceof Boolean) { return KvBoolean.from((boolean) value); } else { throw new RuntimeException("Unexpected type value"); } }
@Override public BsonValue<?> visit(KvBoolean value, Void arg) { return newBoolean(value.getPrimitiveValue()); }