Skip to content

Commit c04fcff

Browse files
authored
Add range and partition support on FoundationDB adapter for batch processing (#48)
Signed-off-by: Randy Hu <[email protected]>
1 parent c9bab67 commit c04fcff

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

src/main/java/org/janusgraph/diskstorage/foundationdb/FoundationDBKeyValueStore.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
package org.janusgraph.diskstorage.foundationdb;
1616

1717
import com.apple.foundationdb.KeyValue;
18+
import com.apple.foundationdb.LocalityUtil;
19+
import com.apple.foundationdb.async.CloseableAsyncIterator;
1820
import com.apple.foundationdb.async.AsyncIterator;
1921
import com.apple.foundationdb.directory.DirectorySubspace;
2022
import com.google.common.base.Preconditions;
@@ -30,14 +32,15 @@
3032
import org.slf4j.Logger;
3133
import org.slf4j.LoggerFactory;
3234

35+
import java.util.ArrayList;
3336
import java.util.List;
3437
import java.util.Map;
3538
import java.util.HashMap;
3639

3740
/**
3841
* @author Ted Wilmes ([email protected])
3942
*/
40-
public class FoundationDBKeyValueStore implements OrderedKeyValueStore {
43+
public class FoundationDBKeyValueStore implements OrderedKeyValueStore, AutoCloseable {
4144

4245
private static final Logger log = LoggerFactory.getLogger(FoundationDBKeyValueStore.class);
4346

@@ -254,6 +257,13 @@ public void delete(StaticBuffer key, StoreTransaction txh) throws BackendExcepti
254257
throw new PermanentBackendException(e);
255258
}
256259
}
260+
public List<StaticBuffer> getBoundaryKeys() {
261+
List<StaticBuffer> keys = new ArrayList<>();
262+
try (CloseableAsyncIterator<byte[]> it = LocalityUtil.getBoundaryKeys(manager.db, db.range().begin, db.range().end)) {
263+
it.forEachRemaining(key -> keys.add(getBuffer(db.unpack(key).getBytes(0))));
264+
}
265+
return keys;
266+
}
257267

258268
static StaticBuffer getBuffer(byte[] entry) {
259269
return new StaticArrayBuffer(entry);

src/main/java/org/janusgraph/diskstorage/foundationdb/FoundationDBRangeQuery.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
import com.apple.foundationdb.KeySelector;
1818
import com.apple.foundationdb.subspace.Subspace;
19+
20+
import org.janusgraph.diskstorage.StaticBuffer;
1921
import org.janusgraph.diskstorage.keycolumnvalue.keyvalue.KVQuery;
2022

2123
/**
@@ -32,8 +34,13 @@ public FoundationDBRangeQuery(Subspace db, KVQuery kvQuery) {
3234
originalQuery = kvQuery;
3335
limit = kvQuery.getLimit();
3436

35-
byte[] startKey = db.pack(kvQuery.getStart().as(FoundationDBKeyValueStore.ENTRY_FACTORY));
36-
byte[] endKey = db.pack(kvQuery.getEnd().as(FoundationDBKeyValueStore.ENTRY_FACTORY));
37+
final StaticBuffer keyStart = kvQuery.getStart();
38+
final StaticBuffer keyEnd = kvQuery.getEnd();
39+
40+
byte[] startKey = (keyStart == null) ?
41+
db.range().begin : db.pack(keyStart.as(FoundationDBKeyValueStore.ENTRY_FACTORY));
42+
byte[] endKey = (keyEnd == null) ?
43+
db.range().end : db.pack(keyEnd.as(FoundationDBKeyValueStore.ENTRY_FACTORY));
3744

3845
startKeySelector = KeySelector.firstGreaterOrEqual(startKey);
3946
endKeySelector = KeySelector.firstGreaterOrEqual(endKey);

src/main/java/org/janusgraph/diskstorage/foundationdb/FoundationDBStoreManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
*
5757
* @author Ted Wilmes ([email protected])
5858
*/
59-
public class FoundationDBStoreManager extends AbstractStoreManager implements OrderedKeyValueStoreManager {
59+
public class FoundationDBStoreManager extends AbstractStoreManager implements OrderedKeyValueStoreManager, AutoCloseable {
6060

6161
private static final Logger log = LoggerFactory.getLogger(FoundationDBStoreManager.class);
6262

0 commit comments

Comments
 (0)