java-bindings: Add function to disable/enable/resize DirectBuffer

This commit is contained in:
Vishesh Yadav 2020-08-25 16:19:42 -07:00
parent 5cefb27fe2
commit 738cd82a85
3 changed files with 22 additions and 3 deletions

View File

@ -33,6 +33,8 @@ import java.util.concurrent.CompletableFuture;
class DirectBufferPool {
static final DirectBufferPool __instance = new DirectBufferPool();
// When tuning this, make sure that the size of the buffer,
// is always greater than the maximum size KV allowed by FDB.
static private final int DEFAULT_NUM_BUFFERS = 128;
static private final int DEFAULT_BUFFER_SIZE = 1024 * 512;

View File

@ -37,6 +37,7 @@ class FDBTransaction extends NativeObjectWrapper implements Transaction, OptionC
private final TransactionOptions options;
private boolean transactionOwner;
private boolean enableDirectBufferQueries = false;
public final ReadTransaction snapshot;
@ -283,6 +284,17 @@ class FDBTransaction extends NativeObjectWrapper implements Transaction, OptionC
return this.getEstimatedRangeSizeBytes(range.begin, range.end);
}
///////////////////
// Feature Options
///////////////////
/**
* Use DirectByteBuffers to fetch getRange() results.
*/
public void setDirectBufferQueryEnabled(boolean v) {
enableDirectBufferQueries = v;
}
///////////////////
// getRange -> KeySelectors
///////////////////
@ -373,7 +385,7 @@ class FDBTransaction extends NativeObjectWrapper implements Transaction, OptionC
return new FutureResults(Transaction_getRange(
getPtr(), begin.getKey(), begin.orEqual(), begin.getOffset(),
end.getKey(), end.orEqual(), end.getOffset(), rowLimit, targetBytes,
streamingMode, iteration, isSnapshot, reverse), executor);
streamingMode, iteration, isSnapshot, reverse), enableDirectBufferQueries, executor);
} finally {
pointerReadLock.unlock();
}

View File

@ -24,9 +24,10 @@ import java.nio.ByteBuffer;
import java.util.concurrent.Executor;
class FutureResults extends NativeFuture<RangeResultInfo> {
FutureResults(long cPtr, Executor executor) {
FutureResults(long cPtr, boolean enableDirectBufferQueries, Executor executor) {
super(cPtr);
registerMarshalCallback(executor);
this.enableDirectBufferQueries = enableDirectBufferQueries;
}
@Override
@ -46,7 +47,9 @@ class FutureResults extends NativeFuture<RangeResultInfo> {
}
public RangeResult getResults() {
DirectBufferIterator directIterator = new DirectBufferIterator();
DirectBufferIterator directIterator = enableDirectBufferQueries
? new DirectBufferIterator()
: null;
try {
pointerReadLock.lock();
if (directIterator.getBuffer() != null) {
@ -61,6 +64,8 @@ class FutureResults extends NativeFuture<RangeResultInfo> {
}
}
private boolean enableDirectBufferQueries = false;
private native RangeResult FutureResults_get(long cPtr) throws FDBException;
private native void FutureResults_getDirect(long cPtr, ByteBuffer buffer, int capacity)
throws FDBException;