From a8cfa7ace8d80dd156d11c64592faacbe3c01a34 Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Tue, 16 Dec 2014 15:15:40 +0000 Subject: [PATCH] Extract the interface for a WriteBatch --- java/org/rocksdb/WriteBatch.java | 76 +++--------------- java/org/rocksdb/WriteBatchInterface.java | 98 +++++++++++++++++++++++ 2 files changed, 108 insertions(+), 66 deletions(-) create mode 100644 java/org/rocksdb/WriteBatchInterface.java diff --git a/java/org/rocksdb/WriteBatch.java b/java/org/rocksdb/WriteBatch.java index 3407033ab..64f472c89 100644 --- a/java/org/rocksdb/WriteBatch.java +++ b/java/org/rocksdb/WriteBatch.java @@ -22,7 +22,7 @@ package org.rocksdb; * non-const method, all threads accessing the same WriteBatch must use * external synchronization. */ -public class WriteBatch extends RocksObject { +public class WriteBatch extends RocksObject implements WriteBatchInterface { /** * Constructs a WriteBatch instance. */ @@ -41,98 +41,44 @@ public class WriteBatch extends RocksObject { newWriteBatch(reserved_bytes); } - /** - * Returns the number of updates in the batch. - * - * @return number of items in WriteBatch - */ + @Override public native int count(); - /** - *

Store the mapping "key->value" in the database.

- * - * @param key the specified key to be inserted. - * @param value the value associated with the specified key. - */ + @Override public void put(byte[] key, byte[] value) { put(key, key.length, value, value.length); } - /** - *

Store the mapping "key->value" within given column - * family.

- * - * @param columnFamilyHandle {@link org.rocksdb.ColumnFamilyHandle} - * instance - * @param key the specified key to be inserted. - * @param value the value associated with the specified key. - */ + @Override public void put(ColumnFamilyHandle columnFamilyHandle, byte[] key, byte[] value) { put(key, key.length, value, value.length, columnFamilyHandle.nativeHandle_); } - /** - *

Merge "value" with the existing value of "key" in the database. - * "key->merge(existing, value)"

- * - * @param key the specified key to be merged. - * @param value the value to be merged with the current value for - * the specified key. - */ + @Override public void merge(byte[] key, byte[] value) { merge(key, key.length, value, value.length); } - /** - *

Merge "value" with the existing value of "key" in given column family. - * "key->merge(existing, value)"

- * - * @param columnFamilyHandle {@link ColumnFamilyHandle} instance - * @param key the specified key to be merged. - * @param value the value to be merged with the current value for - * the specified key. - */ + @Override public void merge(ColumnFamilyHandle columnFamilyHandle, byte[] key, byte[] value) { merge(key, key.length, value, value.length, columnFamilyHandle.nativeHandle_); } - /** - *

If the database contains a mapping for "key", erase it. Else do nothing.

- * - * @param key Key to delete within database - */ + @Override public void remove(byte[] key) { remove(key, key.length); } - /** - *

If column family contains a mapping for "key", erase it. Else do nothing.

- * - * @param columnFamilyHandle {@link ColumnFamilyHandle} instance - * @param key Key to delete within database - */ + @Override public void remove(ColumnFamilyHandle columnFamilyHandle, byte[] key) { remove(key, key.length, columnFamilyHandle.nativeHandle_); } - /** - * Append a blob of arbitrary size to the records in this batch. The blob will - * be stored in the transaction log but not in any other file. In particular, - * it will not be persisted to the SST files. When iterating over this - * WriteBatch, WriteBatch::Handler::LogData will be called with the contents - * of the blob as it is encountered. Blobs, puts, deletes, and merges will be - * encountered in the same order in thich they were inserted. The blob will - * NOT consume sequence number(s) and will NOT increase the count of the batch - * - * Example application: add timestamps to the transaction log for use in - * replication. - * - * @param blob binary object to be inserted - */ + @Override public void putLogData(byte[] blob) { putLogData(blob, blob.length); } @@ -149,9 +95,7 @@ public class WriteBatch extends RocksObject { iterate(handler.nativeHandle_); } - /** - * Clear all updates buffered in this batch - */ + @Override public native void clear(); /** diff --git a/java/org/rocksdb/WriteBatchInterface.java b/java/org/rocksdb/WriteBatchInterface.java new file mode 100644 index 000000000..4eaf1ad9d --- /dev/null +++ b/java/org/rocksdb/WriteBatchInterface.java @@ -0,0 +1,98 @@ +// Copyright (c) 2014, Facebook, Inc. All rights reserved. +// This source code is licensed under the BSD-style license found in the +// LICENSE file in the root directory of this source tree. An additional grant +// of patent rights can be found in the PATENTS file in the same directory. + +package org.rocksdb; + +/** + *

Defines the interface for a Write Batch which + * holds a collection of updates to apply atomically to a DB.

+ */ +public interface WriteBatchInterface { + + /** + * Returns the number of updates in the batch. + * + * @return number of items in WriteBatch + */ + public int count(); + + /** + *

Store the mapping "key->value" in the database.

+ * + * @param key the specified key to be inserted. + * @param value the value associated with the specified key. + */ + public void put(byte[] key, byte[] value); + + /** + *

Store the mapping "key->value" within given column + * family.

+ * + * @param columnFamilyHandle {@link org.rocksdb.ColumnFamilyHandle} + * instance + * @param key the specified key to be inserted. + * @param value the value associated with the specified key. + */ + public void put(ColumnFamilyHandle columnFamilyHandle, + byte[] key, byte[] value); + + /** + *

Merge "value" with the existing value of "key" in the database. + * "key->merge(existing, value)"

+ * + * @param key the specified key to be merged. + * @param value the value to be merged with the current value for + * the specified key. + */ + public void merge(byte[] key, byte[] value); + + /** + *

Merge "value" with the existing value of "key" in given column family. + * "key->merge(existing, value)"

+ * + * @param columnFamilyHandle {@link ColumnFamilyHandle} instance + * @param key the specified key to be merged. + * @param value the value to be merged with the current value for + * the specified key. + */ + public void merge(ColumnFamilyHandle columnFamilyHandle, + byte[] key, byte[] value); + + /** + *

If the database contains a mapping for "key", erase it. Else do nothing.

+ * + * @param key Key to delete within database + */ + public void remove(byte[] key); + + /** + *

If column family contains a mapping for "key", erase it. Else do nothing.

+ * + * @param columnFamilyHandle {@link ColumnFamilyHandle} instance + * @param key Key to delete within database + */ + public void remove(ColumnFamilyHandle columnFamilyHandle, byte[] key); + + /** + * Append a blob of arbitrary size to the records in this batch. The blob will + * be stored in the transaction log but not in any other file. In particular, + * it will not be persisted to the SST files. When iterating over this + * WriteBatch, WriteBatch::Handler::LogData will be called with the contents + * of the blob as it is encountered. Blobs, puts, deletes, and merges will be + * encountered in the same order in thich they were inserted. The blob will + * NOT consume sequence number(s) and will NOT increase the count of the batch + * + * Example application: add timestamps to the transaction log for use in + * replication. + * + * @param blob binary object to be inserted + */ + public void putLogData(byte[] blob); + + /** + * Clear all updates buffered in this batch + */ + public void clear(); +}