Skip to content

Commit

Permalink
Use the strategy pattern for db operations
Browse files Browse the repository at this point in the history
  • Loading branch information
justinsb committed Dec 13, 2013
1 parent 110fde4 commit 49c3275
Show file tree
Hide file tree
Showing 16 changed files with 243 additions and 122 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Original file line Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@


import com.cloudata.keyvalue.KeyValueProto.KvAction; import com.cloudata.keyvalue.KeyValueProto.KvAction;
import com.cloudata.keyvalue.KeyValueProto.KvEntry; import com.cloudata.keyvalue.KeyValueProto.KvEntry;
import com.cloudata.keyvalue.btree.operation.DeleteOperation;
import com.cloudata.keyvalue.btree.operation.IncrementOperation;
import com.cloudata.keyvalue.btree.operation.KeyOperation;
import com.cloudata.keyvalue.btree.operation.SetOperation;
import com.google.common.base.Throwables; import com.google.common.base.Throwables;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader; import com.google.common.cache.CacheLoader;
Expand Down Expand Up @@ -83,8 +87,31 @@ public Object applyOperation(@Nonnull ByteBuffer op) {


KeyValueStore keyValueStore = getKeyValueStore(storeId); KeyValueStore keyValueStore = getKeyValueStore(storeId);


Object ret = keyValueStore.doAction(entry.getAction(), key != null ? key.asReadOnlyByteBuffer() : null, KeyOperation operation;
value != null ? value.asReadOnlyByteBuffer() : null);
switch (entry.getAction()) {

case DELETE:
operation = new DeleteOperation();
break;

case INCREMENT: {
long delta = 1;
if (entry.hasIncrementBy()) {
delta = entry.getIncrementBy();
}
operation = new IncrementOperation(delta);
break;
}

case SET:
operation = new SetOperation(value.asReadOnlyByteBuffer());
break;

default:
throw new UnsupportedOperationException();
}
Object ret = keyValueStore.doAction(key != null ? key.asReadOnlyByteBuffer() : null, operation);


return ret; return ret;
} catch (InvalidProtocolBufferException e) { } catch (InvalidProtocolBufferException e) {
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;


import com.cloudata.keyvalue.KeyValueProto.KvAction;
import com.cloudata.keyvalue.btree.Btree; import com.cloudata.keyvalue.btree.Btree;
import com.cloudata.keyvalue.btree.ByteBuffers; import com.cloudata.keyvalue.btree.ByteBuffers;
import com.cloudata.keyvalue.btree.EntryListener; import com.cloudata.keyvalue.btree.EntryListener;
import com.cloudata.keyvalue.btree.MmapPageStore; import com.cloudata.keyvalue.btree.MmapPageStore;
import com.cloudata.keyvalue.btree.PageStore; import com.cloudata.keyvalue.btree.PageStore;
import com.cloudata.keyvalue.btree.ReadOnlyTransaction; import com.cloudata.keyvalue.btree.ReadOnlyTransaction;
import com.cloudata.keyvalue.btree.WriteTransaction; import com.cloudata.keyvalue.btree.WriteTransaction;
import com.cloudata.keyvalue.btree.operation.KeyOperation;


public class KeyValueStore { public class KeyValueStore {


Expand All @@ -31,9 +31,9 @@ public KeyValueStore(File dir, boolean uniqueKeys) throws IOException {
this.btree = new Btree(pageStore, uniqueKeys); this.btree = new Btree(pageStore, uniqueKeys);
} }


public Object doAction(KvAction action, ByteBuffer key, ByteBuffer value) { public Object doAction(ByteBuffer key, KeyOperation operation) {
try (WriteTransaction txn = btree.beginReadWrite()) { try (WriteTransaction txn = btree.beginReadWrite()) {
Object ret = txn.doAction(btree, action, key, value); Object ret = txn.doAction(btree, key, operation);
txn.commit(); txn.commit();
return ret; return ret;
} }
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;


import com.cloudata.keyvalue.KeyValueProto.KvAction; import com.cloudata.keyvalue.btree.operation.KeyOperation;
import com.cloudata.util.Hex; import com.cloudata.util.Hex;


public class BranchPage extends Page { public class BranchPage extends Page {
Expand Down Expand Up @@ -412,7 +412,7 @@ Mutable getMutable() {
} }


@Override @Override
public Object doAction(Transaction txn, KvAction action, ByteBuffer key, ByteBuffer value) { public Object doAction(Transaction txn, ByteBuffer key, KeyOperation operation) {
int pos = findPos(key); int pos = findPos(key);
if (pos < 0) { if (pos < 0) {
pos = 0; pos = 0;
Expand All @@ -424,7 +424,7 @@ public Object doAction(Transaction txn, KvAction action, ByteBuffer key, ByteBuf


ByteBuffer oldLbound = childPage.getKeyLbound(); ByteBuffer oldLbound = childPage.getKeyLbound();


Object ret = childPage.doAction(txn, action, key, value); Object ret = childPage.doAction(txn, key, operation);


ByteBuffer newLbound = childPage.getKeyLbound(); ByteBuffer newLbound = childPage.getKeyLbound();


Expand Down
Loading

0 comments on commit 49c3275

Please sign in to comment.