use of org.janusgraph.diskstorage.keycolumnvalue.keyvalue.KeyValueEntry in project janusgraph by JanusGraph.
the class BerkeleyJEStoreManager method mutateMany.
@Override
public void mutateMany(Map<String, KVMutation> mutations, StoreTransaction txh) throws BackendException {
for (Map.Entry<String, KVMutation> mutation : mutations.entrySet()) {
BerkeleyJEKeyValueStore store = openDatabase(mutation.getKey());
KVMutation mutationValue = mutation.getValue();
if (!mutationValue.hasAdditions() && !mutationValue.hasDeletions()) {
log.debug("Empty mutation set for {}, doing nothing", mutation.getKey());
} else {
log.debug("Mutating {}", mutation.getKey());
}
if (mutationValue.hasAdditions()) {
for (KeyValueEntry entry : mutationValue.getAdditions()) {
store.insert(entry.getKey(), entry.getValue(), txh);
log.trace("Insertion on {}: {}", mutation.getKey(), entry);
}
}
if (mutationValue.hasDeletions()) {
for (StaticBuffer del : mutationValue.getDeletions()) {
store.delete(del, txh);
log.trace("Deletion on {}: {}", mutation.getKey(), del);
}
}
}
}
use of org.janusgraph.diskstorage.keycolumnvalue.keyvalue.KeyValueEntry in project janusgraph by JanusGraph.
the class BerkeleyJEKeyValueStore method getSlice.
@Override
public RecordIterator<KeyValueEntry> getSlice(KVQuery query, StoreTransaction txh) throws BackendException {
log.trace("beginning db={}, op=getSlice, tx={}", name, txh);
final Transaction tx = getTransaction(txh);
final StaticBuffer keyStart = query.getStart();
final StaticBuffer keyEnd = query.getEnd();
final KeySelector selector = query.getKeySelector();
final List<KeyValueEntry> result = new ArrayList<>();
final DatabaseEntry foundKey = keyStart.as(ENTRY_FACTORY);
final DatabaseEntry foundData = new DatabaseEntry();
try (final Cursor cursor = db.openCursor(tx, null)) {
OperationStatus status = cursor.getSearchKeyRange(foundKey, foundData, getLockMode(txh));
// Iterate until given condition is satisfied or end of records
while (status == OperationStatus.SUCCESS) {
StaticBuffer key = getBuffer(foundKey);
if (key.compareTo(keyEnd) >= 0)
break;
if (selector.include(key)) {
result.add(new KeyValueEntry(key, getBuffer(foundData)));
}
if (selector.reachedLimit())
break;
status = cursor.getNext(foundKey, foundData, getLockMode(txh));
}
} catch (Exception e) {
throw new PermanentBackendException(e);
}
log.trace("db={}, op=getSlice, tx={}, resultcount={}", name, txh, result.size());
return new RecordIterator<KeyValueEntry>() {
private final Iterator<KeyValueEntry> entries = result.iterator();
@Override
public boolean hasNext() {
return entries.hasNext();
}
@Override
public KeyValueEntry next() {
return entries.next();
}
@Override
public void close() {
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}
Aggregations