return new DatabaseEntry(makeBytes("stores/".getBytes(), user.getPublicHash()));
}
@Override
public boolean putRecord(User user, byte[] key, byte[] revision, byte[] data) {
Transaction txn = null;
try {
txn = env.beginTransaction(null, null);
DatabaseEntry storesKey = makeStoresKey(user);
DatabaseEntry lookup = new DatabaseEntry(key);
OperationStatus lookupExists = db.getSearchBoth(txn, storesKey, lookup, null);
if (OperationStatus.NOTFOUND == lookupExists){
// insert lookup
lookupExists = db.put(txn, storesKey, lookup);
}
if (OperationStatus.SUCCESS != lookupExists){
txn.abort();
return false;
}
byte[] lookupKey = makeLookupBytes(user,key);
DatabaseEntry lookupEntry = new DatabaseEntry(lookupKey);
DatabaseEntry revisionEntry = new DatabaseEntry(revision);
OperationStatus revisionExists = db.getSearchBoth(txn, lookupEntry, revisionEntry, null);
if (OperationStatus.SUCCESS == revisionExists){// already exists, abort
txn.abort();
return false;
}
// Does not exist, make it exist.
revisionExists = db.put(txn, lookupEntry, revisionEntry);
if (OperationStatus.SUCCESS != revisionExists){
txn.abort();
log.warning("Could not put revision: " + revisionExists.toString());
return false;
}
OperationStatus putValue = db.put(txn, new DatabaseEntry(makeBytes(lookupKey,SEPARATOR,revision)), new DatabaseEntry(data));
if (OperationStatus.SUCCESS != putValue){
txn.abort();
log.warning("Could not put value: " + putValue.toString());
return false;
}
txn.commit();
return true;
} catch (DatabaseException e){
severe("Exception while putting record", e);
try {
if (txn != null)
txn.abort();
} catch (DatabaseException e1) {
// we already had a failure, ignore this one.
}
return false;
}