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(); } }); }
default CompletableFuture<V> delete(K key) { return delete(key, 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(); } }); }
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()); }
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); } }
@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(); } }); }