Skip to content

Commit

Permalink
Merge pull request #140 from zznate/assumefix
Browse files Browse the repository at this point in the history
Assumefix
  • Loading branch information
edwardcapriolo committed Mar 3, 2013
2 parents 8f54f1e + c5fa658 commit 711f8e3
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,20 @@ public class AssumeHandler implements Handler<Message<JsonObject>> {
public void handle(Message<JsonObject> event) {
Integer id = event.body.getInteger("id");
JsonObject params = event.body.getObject("op");

JsonObject state = event.body.getObject("state");
JsonObject meta = state.getObject("meta");
if (meta == null) {
meta = new JsonObject();
}
meta.putObject(params.getString("type"), new JsonObject()
.putString("keyspace", HandlerUtils.determineKs(params, state))
.putString("columnfamily", HandlerUtils.determineCf(params, state))
.putString("type", params.getString("type"))
StringBuilder key = new StringBuilder();
key.append( HandlerUtils.determineKs(params, state));
key.append( ' ' );
key.append( HandlerUtils.determineCf(params, state));
key.append( ' ' );
key.append( params.getString("type") );
meta.putObject(key.toString(), new JsonObject()
.putString("clazz", params.getString("clazz")));
state.putObject("meta", meta);

event.reply(new JsonObject()
.putString(id.toString(), "OK")
.putObject("state", state)
Expand Down
25 changes: 19 additions & 6 deletions src/main/java/org/usergrid/vx/server/operations/HandlerUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.apache.cassandra.exceptions.UnavailableException;
import org.apache.cassandra.exceptions.WriteTimeoutException;
import org.apache.cassandra.service.StorageProxy;
import org.apache.cassandra.thrift.CfDef;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.usergrid.vx.experimental.TypeHelper;
import org.vertx.java.core.Handler;
Expand Down Expand Up @@ -51,9 +52,8 @@ public static JsonArray readCf(ColumnFamily columnFamily, JsonObject state, Json
IColumn ic = it.next();
if (ic.isLive()) {
HashMap m = new HashMap();

if (components.contains("name")) {
JsonObject columnMetadata = state.getObject("meta").getObject("column");
JsonObject columnMetadata = findMetaData(columnFamily, state, "column" );
if (columnMetadata == null) {
m.put("name", TypeHelper.getBytes(ic.name()));
} else {
Expand All @@ -70,7 +70,7 @@ public static JsonArray readCf(ColumnFamily columnFamily, JsonObject state, Json
if ( ic instanceof CounterColumn ) {
m.put("value", ((CounterColumn)ic).total());
} else {
JsonObject valueMetadata = state.getObject("meta").getObject("value");
JsonObject valueMetadata = findMetaData(columnFamily, state, "value" );
if (valueMetadata == null) {
m.put("value", TypeHelper.getBytes(ic.value()));
} else {
Expand All @@ -95,7 +95,20 @@ public static JsonArray readCf(ColumnFamily columnFamily, JsonObject state, Json
}
return array;
}

public static JsonObject findMetaData(ColumnFamily cf, JsonObject state, String type){
JsonObject meta = state.getObject("meta");
if (meta == null){
return null;
} else {
StringBuilder key = new StringBuilder();
key.append(cf.metadata().ksName);
key.append(' ');
key.append(cf.metadata().cfName);
key.append(' ');
key.append(type);
return meta.getObject(key.toString());
}
}
public static void readCf(ColumnFamily columnFamily, JsonObject state, EventBus eb,
Handler<Message<JsonArray>> filterReplyHandler) {
JsonArray components = state.getArray("components");
Expand All @@ -106,7 +119,7 @@ public static void readCf(ColumnFamily columnFamily, JsonObject state, EventBus
HashMap m = new HashMap();

if (components.contains("name")) {
JsonObject columnMetadata = state.getObject("meta").getObject("column");
JsonObject columnMetadata = findMetaData(columnFamily, state, "column" );
if (columnMetadata == null) {
m.put("name", ByteBufferUtil.getArray(column.name()));
} else {
Expand All @@ -118,7 +131,7 @@ public static void readCf(ColumnFamily columnFamily, JsonObject state, EventBus
if (column instanceof CounterColumn ) {
m.put("value", ((CounterColumn)column).total());
} else {
JsonObject valueMetadata = state.getObject("meta").getObject("value");
JsonObject valueMetadata = findMetaData(columnFamily, state, "value" );
if (valueMetadata == null) {
m.put("value", ByteBufferUtil.getArray(column.value()));
} else {
Expand Down
35 changes: 35 additions & 0 deletions src/test/java/org/usergrid/vx/experimental/IntraServiceITest.java
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,40 @@ public void assumeTest() throws Exception{
Assert.assertEquals( "wow", x.get(0).get("value") );
}

@Test
public void assume2CfsTest() throws Exception {
IntraReq req = new IntraReq();
req.add( Operations.setKeyspaceOp("system") );
req.add( Operations.createKsOp("assks1",1) );
req.add( Operations.createKsOp("assks2",1) );

req.add( Operations.setKeyspaceOp("assks1") );
req.add( Operations.createCfOp("asscf1"));

req.add( Operations.setKeyspaceOp("assks2") );
req.add( Operations.createCfOp("asscf2"));
req.add( Operations.setAutotimestampOp(true) );
req.add( Operations.assumeOp("assks1", "asscf1", "value", "UTF8Type"));
req.add( Operations.assumeOp("assks1", "asscf1", "column", "UTF8Type"));
req.add( Operations.assumeOp("assks2", "asscf2", "value", "Int32Type"));
req.add( Operations.assumeOp("assks2", "asscf2", "column", "Int32Type"));

req.add( Operations.setKeyspaceOp("assks1"));
req.add( Operations.setColumnFamilyOp("asscf1"));
req.add( Operations.setOp("rowa", "col1", "wow"));
req.add( Operations.getOp("rowa", "col1"));

req.add( Operations.setKeyspaceOp("assks2"));
req.add( Operations.setColumnFamilyOp("asscf2"));
req.add( Operations.setOp("rowa", 4, 3));
req.add( Operations.getOp("rowa", 4));

IntraClient2 ic2 = new IntraClient2("localhost", 8080);
IntraRes res = ic2.sendBlocking(req);
System.out.println(res);

}

@Test
public void filterTest() throws Exception {
IntraReq req = new IntraReq();
Expand Down Expand Up @@ -353,6 +387,7 @@ public void CqlTest() throws Exception{

IntraClient2 ic2 = new IntraClient2("localhost", 8080);
IntraRes res = ic2.sendBlocking(req);
System.out.println(res);
List<Map> x = (List<Map>) res.getOpsRes().get(8);

Assert.assertEquals( 1, x.get(0).get("name") );
Expand Down

0 comments on commit 711f8e3

Please sign in to comment.