Skip to content

Commit

Permalink
Add value type to append function
Browse files Browse the repository at this point in the history
  • Loading branch information
mcslao committed Apr 15, 2017
1 parent b703fae commit 250ac86
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,8 @@ public boolean updateVectorField(int modelId, String key, int valueIndex, String
return ExceptionWrapper.run(() -> MetadataDao.updateVectorField(modelId, key, valueIndex, value, valueType, metadataDb));
}

public boolean appendToVectorField(int modelId, String vectorName, String value) throws TException {
return ExceptionWrapper.run(() -> MetadataDao.appendToVectorField(modelId, vectorName, value, metadataDb));
public boolean appendToVectorField(int modelId, String vectorName, String value, String valueType) throws TException {
return ExceptionWrapper.run(() -> MetadataDao.appendToVectorField(modelId, vectorName, value, valueType, metadataDb));
}

public List<ExperimentRun> getRunsInExperiment(int experimentId) throws TException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,11 @@ public interface MetadataDb {
* Add a new value to the vector field with the given name in the model with the given ID.
* @param modelId - The ID of the model
* @param vectorName - The name of the vector key to add to
* @param value - The value to be added
* @param value - The value to be added,
* where datetime values follow the format given
* <a href="http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTimeParser()">here</a>
* @param valueType = The type of the value (string, int, double, long, datetime, or bool)
* @return A boolean indicating if the value was added or not
*/
public boolean appendToVectorField(int modelId, String vectorName, String value);
public boolean appendToVectorField(int modelId, String vectorName, String value, String valueType);
}
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,7 @@ public List<Integer> getModelIds(Map<String, String> keyValuePairs) {
.collect(Collectors.toList());
}

public boolean createOrUpdateScalarField(int modelId, String key, String value,
String valueType) {
private BasicDBObject getCastedKeyValuePair(String key, String value, String valueType) {
BasicDBObject keyValuePair = new BasicDBObject();
switch(valueType) {
case "string":
Expand All @@ -120,6 +119,12 @@ public boolean createOrUpdateScalarField(int modelId, String key, String value,
default:
throw new IllegalArgumentException("Unsupported value type: " + valueType);
}
return keyValuePair;
}

public boolean createOrUpdateScalarField(int modelId, String key, String value,
String valueType) {
BasicDBObject keyValuePair = getCastedKeyValuePair(key, value, valueType);
DBCollection collection = metadataDb.getCollection(COLLECTION_NAME);
BasicDBObject updatedField = new BasicDBObject(
"$set", keyValuePair);
Expand Down Expand Up @@ -152,10 +157,11 @@ public boolean updateVectorField(int modelId, String vectorName, int valueIndex,
return createOrUpdateScalarField(modelId, indexDotNotation, value, valueType);
}

public boolean appendToVectorField(int modelId, String vectorName, String value) {
public boolean appendToVectorField(int modelId, String vectorName, String value,
String valueType) {
DBCollection collection = metadataDb.getCollection(COLLECTION_NAME);
BasicDBObject updatedField = new BasicDBObject(
"$push", new BasicDBObject(vectorName, value));
BasicDBObject keyValuePair = getCastedKeyValuePair(vectorName, value, valueType);
BasicDBObject updatedField = new BasicDBObject("$push", keyValuePair);
BasicDBObject modelQuery = new BasicDBObject(MODELID_KEY, modelId);
WriteResult res;
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public static boolean updateVectorField(int modelId, String key, int valueIndex,
return metadataDb.updateVectorField(modelId, key, valueIndex, value, valueType);
}

public static boolean appendToVectorField(int modelId, String vectorName, String value, MetadataDb metadataDb) {
return metadataDb.appendToVectorField(modelId, vectorName, value);
public static boolean appendToVectorField(int modelId, String vectorName, String value, String valueType, MetadataDb metadataDb) {
return metadataDb.appendToVectorField(modelId, vectorName, value, valueType);
}
}
7 changes: 7 additions & 0 deletions server/src/main/resources/reference-test.conf
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@ modeldb: {
"jdbcTestUrl": "jdbc:sqlite:modeldb_test.db",
"databaseType": "sqlite"
},
metadataDb: {
"host" : "localhost",
"port" : 27017,
"dbName" : "modeldb_metadata",
"testDbName" : "modeldb_metadata_test",
"type" : "mongodb"
},
thrift: {
"host": "localhost",
"port": 6543
Expand Down
6 changes: 3 additions & 3 deletions server/src/test/java/edu/mit/csail/db/ml/TestMetadata.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public void testStoreGet() throws Exception {
String actualDbContents = MetadataDao.get(resp.modelId,
TestBase.getMetadataDb());
DBObject parsedDbContents = (DBObject) JSON.parse(actualDbContents);
Assert.assertEquals(parsedDbContents.get("key1"), "value1");
Assert.assertEquals("value1", parsedDbContents.get("key1"));
Assert.assertEquals(30, parsedDbContents.get("key2"));
Assert.assertEquals(resp.modelId,
parsedDbContents.get(MongoMetadataDb.MODELID_KEY));
Expand Down Expand Up @@ -430,7 +430,7 @@ public void testAppendToVectorFieldNotVectorFail() throws Exception {
MetadataDao.store(resp, fe, TestBase.getMetadataDb());

Assert.assertFalse(MetadataDao.appendToVectorField(resp.modelId, "key1",
"value", TestBase.getMetadataDb()));
"value", "string", TestBase.getMetadataDb()));
String actualDbContents = MetadataDao.get(resp.modelId,
TestBase.getMetadataDb());
DBObject parsedDbContents = (DBObject) JSON.parse(actualDbContents);
Expand All @@ -448,7 +448,7 @@ public void testAppendToVectorFieldSuccess() throws Exception {
MetadataDao.store(resp, fe, TestBase.getMetadataDb());

Assert.assertTrue(MetadataDao.appendToVectorField(resp.modelId, "key1",
"elem2", TestBase.getMetadataDb()));
"elem2", "string", TestBase.getMetadataDb()));
String actualDbContents = MetadataDao.get(resp.modelId,
TestBase.getMetadataDb());
DBObject parsedDbContents = (DBObject) JSON.parse(actualDbContents);
Expand Down
6 changes: 4 additions & 2 deletions thrift/ModelDB.thrift
Original file line number Diff line number Diff line change
Expand Up @@ -1388,9 +1388,11 @@ service ModelDBService {
modelId: The ID of the model
vectorName: The name of the vector field to update, which follows MongoDB's dot notation
value: The value to be added
value: The value to be added, where datetime values follow the format given at
http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTimeParser()
valueType: The type of the value (string, int, double, long, datetime, or bool)
*/
bool appendToVectorField(1: i32 modelId, 2: string vectorName, 3: string value)
bool appendToVectorField(1: i32 modelId, 2: string vectorName, 3: string value, 4: string valueType)
throws (1: ServerLogicException svEx),

/*
Expand Down

0 comments on commit 250ac86

Please sign in to comment.