@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(); } }); }
default CompletableFuture<List<KeyValue<K, V>>> deleteRange(K pKey, K lStartKey, K lEndKey) { DeleteOption<K> option = opFactory().optionFactory().newDeleteOption() .prevKv(true) .endKey(lEndKey) .build(); return delete(pKey, lStartKey, option) .thenApply(result -> { try { return result.getPrevKvsAndClear(); } finally { result.close(); } }) .whenComplete((v, cause) -> option.close()); }
default CompletableFuture<KeyValue<K, V>> rDelete(K key, long expectedRevision) { Txn<K, V> txn = txn(key); txn .If( opFactory().compareModRevision(CompareResult.EQUAL, key, expectedRevision)) .Then( opFactory().newDelete( key, Options.deleteAndGet())); return txn.commit() .thenCompose(result -> { try { if (result.isSuccess()) { DeleteResult<K, V> deleteResult = (DeleteResult<K, V>) result.results().get(0); if (deleteResult.prevKvs().isEmpty()) { return FutureUtils.value(null); } else { List<KeyValue<K, V>> prevKvs = deleteResult.getPrevKvsAndClear(); return FutureUtils.value(prevKvs.get(0)); } } else { return FutureUtils.exception( new KvApiException(Code.BAD_REVISION, "Failed to rDelete key " + key + " (mod_rev = " + expectedRevision + ")")); } } 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(); } }); }
List<Result<K, V>> subResults = result.results(); DeleteResult<K, V> deleteResult = (DeleteResult<K, V>) subResults.get(0); List<KeyValue<K, V>> prevKvs = deleteResult.getPrevKvsAndClear(); if (prevKvs.isEmpty()) { return FutureUtils.value(null);
synchronized DeleteResult<K, V> processDelete(long revision, DeleteOp<K, V> op) { checkStoreOpen(); WriteBatch batch = new WriteBatch(); DeleteResult<K, V> result = null; try { result = delete(revision, batch, op, true); executeBatch(batch); return result; } catch (StateStoreRuntimeException e) { if (null != result) { result.close(); } throw e; } finally { RocksUtils.close(batch); } }
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()); } }
default CompletableFuture<KeyValue<K, V>> rDelete(K pKey, K lKey, long expectedRevision) { Txn<K, V> txn = txn(pKey); txn .If( opFactory().compareModRevision(CompareResult.EQUAL, lKey, expectedRevision)) .Then( opFactory().newDelete( lKey, Options.deleteAndGet())); return txn.commit() .thenCompose(result -> { try { if (result.isSuccess()) { DeleteResult<K, V> deleteResult = (DeleteResult<K, V>) result.results().get(0); if (deleteResult.prevKvs().isEmpty()) { return FutureUtils.value(null); } else { List<KeyValue<K, V>> prevKvs = deleteResult.getPrevKvsAndClear(); return FutureUtils.value(prevKvs.get(0)); } } else { return FutureUtils.exception( new KvApiException(Code.BAD_REVISION, "Failed to rDelete key " + lKey + " (mod_rev = " + expectedRevision + ")")); } } finally { result.close(); } }); }
default CompletableFuture<V> delete(K pKey, K lKey) { return delete(pKey, lKey, Options.deleteAndGet()) .thenApply(result -> { try { List<KeyValue<K, V>> prevKvs = result.prevKvs(); if (prevKvs.isEmpty()) { return null; } else { return retain(prevKvs.get(0).value()); } } finally { result.close(); } }); }
List<Result<K, V>> subResults = result.results(); DeleteResult<K, V> deleteResult = (DeleteResult<K, V>) subResults.get(0); List<KeyValue<K, V>> prevKvs = deleteResult.getPrevKvsAndClear(); if (prevKvs.isEmpty()) { return FutureUtils.value(null);
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); } } } }
default CompletableFuture<KeyValue<K, V>> vDelete(K key, long expectedVersion) { Txn<K, V> txn = txn(key); txn .If( opFactory().compareVersion(CompareResult.EQUAL, key, expectedVersion)) .Then( opFactory().newDelete( key, Options.deleteAndGet())); return txn.commit() .thenCompose(result -> { try { if (result.isSuccess()) { DeleteResult<K, V> deleteResult = (DeleteResult<K, V>) result.results().get(0); if (deleteResult.prevKvs().isEmpty()) { return FutureUtils.value(null); } else { List<KeyValue<K, V>> prevKvs = deleteResult.getPrevKvsAndClear(); return FutureUtils.value(prevKvs.get(0)); } } else { return FutureUtils.exception( new KvApiException(Code.BAD_REVISION, "Failed to vDelete key " + key + " (version = " + expectedVersion + ")")); } } finally { result.close(); } }); }
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); } } } }
default CompletableFuture<KeyValue<K, V>> vDelete(K pKey, K lKey, long expectedVersion) { Txn<K, V> txn = txn(pKey); txn .If( opFactory().compareVersion(CompareResult.EQUAL, lKey, expectedVersion)) .Then( opFactory().newDelete( lKey, Options.deleteAndGet())); return txn.commit() .thenCompose(result -> { try { if (result.isSuccess()) { DeleteResult<K, V> deleteResult = (DeleteResult<K, V>) result.results().get(0); if (deleteResult.prevKvs().isEmpty()) { return FutureUtils.value(null); } else { List<KeyValue<K, V>> prevKvs = deleteResult.getPrevKvsAndClear(); return FutureUtils.value(prevKvs.get(0)); } } else { return FutureUtils.exception( new KvApiException(Code.BAD_REVISION, "Failed to vDelete key " + lKey + " (version = " + expectedVersion + ")")); } } finally { result.close(); } }); }