private void applyDeleteOp(long revision, DeleteOp<byte[], byte[]> op, boolean ignoreSmallerRevision, MVCCStoreImpl<byte[], byte[]> localStore) { try (DeleteResult<byte[], byte[]> result = localStore.delete(revision, op)) { if (Code.OK == result.code() || (ignoreSmallerRevision && Code.SMALLER_REVISION == result.code())) { return; } throw new MVCCStoreException(result.code(), "Failed to apply command " + op + " at revision " + revision + " to the state store " + localStore.name()); } }
void delete(K key, long revision) { try (DeleteOp<K, V> op = opFactory.newDelete( key, Options.delete())) { try (DeleteResult<K, V> result = delete(revision, op)) { if (Code.OK != result.code()) { throw new MVCCStoreException(result.code(), "Failed to delete key=" + key + "from state store " + name); } } } }
void deleteRange(K key, K endKey, long revision) { try (DeleteOp<K, V> op = opFactory.newDelete( key, opFactory.optionFactory().newDeleteOption() .endKey(endKey) .prevKv(false) .build())) { try (DeleteResult<K, V> result = delete(revision, op)) { if (Code.OK != result.code()) { throw new MVCCStoreException(result.code(), "Failed to delete key=" + key + "from state store " + name); } } } }
@Override default CompletableFuture<V> delete(K k) { DeleteOp<K, V> op = getOpFactory().newDelete( k, Options.deleteAndGet()); return delete(op).thenCompose(result -> { try { if (Code.OK == result.code()) { List<KeyValue<K, V>> prevKvs = result.prevKvs(); if (prevKvs.isEmpty()) { return FutureUtils.value(null); } else { return FutureUtils.value(prevKvs.get(0).value()); } } else { return failWithCode(result.code(), "Fail to delete key " + k + " from store " + name()); } } finally { result.close(); } }); }
@Override default CompletableFuture<List<KeyValue<K, V>>> deleteRange(K key, K endKey) { DeleteOp<K, V> op = getOpFactory().newDelete( key, getOpFactory().optionFactory().newDeleteOption() .endKey(endKey) .prevKv(true) .build()); return delete(op).thenCompose(result -> { try { if (Code.OK == result.code()) { List<KeyValue<K, V>> prevKvs = result.getPrevKvsAndClear(); return FutureUtils.value(prevKvs); } else { return failWithCode(result.code(), "Fail to delete key range [" + key + ", " + endKey + "] from store " + name()); } } finally { result.close(); } }); }