From d5626110064d504e0c4cd6698731cf9845656f0d Mon Sep 17 00:00:00 2001 From: "Robert J. Moore" <Robert.J.Moore@allanbank.com> Date: Thu, 19 Jun 2014 22:17:54 -0400 Subject: [PATCH] Bump the MongoDB versions. --- .../java/com/yahoo/ycsb/db/MongoDbClient.java | 141 +++++++----------- .../com/yahoo/ycsb/db/OptionsSupport.java | 10 ++ pom.xml | 4 +- 3 files changed, 70 insertions(+), 85 deletions(-) diff --git a/mongodb/src/main/java/com/yahoo/ycsb/db/MongoDbClient.java b/mongodb/src/main/java/com/yahoo/ycsb/db/MongoDbClient.java index c7f34956..98f0bd3e 100644 --- a/mongodb/src/main/java/com/yahoo/ycsb/db/MongoDbClient.java +++ b/mongodb/src/main/java/com/yahoo/ycsb/db/MongoDbClient.java @@ -13,19 +13,21 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Properties; -import java.util.Random; import java.util.Set; import java.util.Vector; import java.util.concurrent.atomic.AtomicInteger; -import com.mongodb.BasicDBObject; -import com.mongodb.DBCollection; -import com.mongodb.DBCursor; -import com.mongodb.DBObject; +import org.bson.Document; + import com.mongodb.MongoClient; import com.mongodb.MongoClientURI; import com.mongodb.ReadPreference; import com.mongodb.WriteConcern; +import com.mongodb.client.FindIterable; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoCursor; +import com.mongodb.client.MongoDatabase; +import com.mongodb.client.model.UpdateOptions; import com.yahoo.ycsb.ByteArrayByteIterator; import com.yahoo.ycsb.ByteIterator; import com.yahoo.ycsb.DB; @@ -95,24 +97,20 @@ public class MongoDbClient extends DB { */ @Override public int delete(String table, String key) { - com.mongodb.DB db = null; + MongoDatabase db = null; try { - db = mongo.getDB(database); - db.requestStart(); - DBCollection collection = db.getCollection(table); - DBObject q = new BasicDBObject().append("_id", key); - collection.remove(q, writeConcern); + db = mongo.getDatabase(database); + MongoCollection<Document> collection = db.getCollection(table); + + Document q = new Document("_id", key); + collection.withWriteConcern(writeConcern).deleteOne(q); + return 0; } catch (Exception e) { System.err.println(e.toString()); return 1; } - finally { - if (db != null) { - db.requestDone(); - } - } } /** @@ -206,21 +204,19 @@ public class MongoDbClient extends DB { @Override public int insert(String table, String key, HashMap<String, ByteIterator> values) { - com.mongodb.DB db = null; + MongoDatabase db = null; try { - db = mongo.getDB(database); - - db.requestStart(); - - DBCollection collection = db.getCollection(table); - DBObject criteria = new BasicDBObject().append("_id", key); - DBObject toInsert = new BasicDBObject().append("_id", key); + db = mongo.getDatabase(database); + MongoCollection<Document> collection = db.getCollection(table); + Document criteria = new Document("_id", key); + Document toInsert = new Document("_id", key); for (Map.Entry<String, ByteIterator> entry : values.entrySet()) { toInsert.put(entry.getKey(), entry.getValue().toArray()); } - collection.update(criteria, toInsert, true, false, writeConcern); + collection.withWriteConcern(writeConcern).updateOne(criteria, + toInsert, new UpdateOptions().upsert(true)); return 0; } @@ -228,11 +224,6 @@ public class MongoDbClient extends DB { e.printStackTrace(); return 1; } - finally { - if (db != null) { - db.requestDone(); - } - } } /** @@ -250,34 +241,32 @@ public class MongoDbClient extends DB { * @return Zero on success, a non-zero error code on error or "not found". */ @Override - @SuppressWarnings("unchecked") public int read(String table, String key, Set<String> fields, HashMap<String, ByteIterator> result) { - com.mongodb.DB db = null; + MongoDatabase db = null; try { - db = mongo.getDB(database); - - db.requestStart(); + db = mongo.getDatabase(database); - DBCollection collection = db.getCollection(table); - DBObject q = new BasicDBObject().append("_id", key); - DBObject fieldsToReturn = new BasicDBObject(); + MongoCollection<Document> collection = db.getCollection(table); + Document q = new Document("_id", key); + Document fieldsToReturn = new Document(); - DBObject queryResult = null; + Document queryResult = null; if (fields != null) { Iterator<String> iter = fields.iterator(); while (iter.hasNext()) { fieldsToReturn.put(iter.next(), INCLUDE); } - queryResult = collection.findOne(q, fieldsToReturn, - readPreference); + queryResult = collection.withReadPreference(readPreference) + .find(q).projection(fieldsToReturn).first(); } else { - queryResult = collection.findOne(q, null, readPreference); + queryResult = collection.withReadPreference(readPreference) + .find(q).first(); } if (queryResult != null) { - result.putAll(queryResult.toMap()); + fillMap(result, queryResult); } return queryResult != null ? 0 : 1; } @@ -285,11 +274,6 @@ public class MongoDbClient extends DB { System.err.println(e.toString()); return 1; } - finally { - if (db != null) { - db.requestDone(); - } - } } /** @@ -313,23 +297,27 @@ public class MongoDbClient extends DB { @Override public int scan(String table, String startkey, int recordcount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { - com.mongodb.DB db = null; - DBCursor cursor = null; + MongoDatabase db = null; + FindIterable<Document> cursor = null; + MongoCursor<Document> iter = null; try { - db = mongo.getDB(database); - db.requestStart(); - DBCollection collection = db.getCollection(table); + db = mongo.getDatabase(database); + + MongoCollection<Document> collection = db.getCollection(table); + // { "_id":{"$gte":startKey, "$lte":{"appId":key+"\uFFFF"}} } - DBObject scanRange = new BasicDBObject().append("$gte", startkey); - DBObject q = new BasicDBObject().append("_id", scanRange); - cursor = collection.find(q).setReadPreference(readPreference) + Document scanRange = new Document("$gte", startkey); + Document q = new Document("_id", scanRange); + cursor = collection.withReadPreference(readPreference).find(q) .limit(recordcount); - while (cursor.hasNext()) { + + iter = cursor.iterator(); + while (iter.hasNext()) { // toMap() returns a Map, but result.add() expects a // Map<String,String>. Hence, the suppress warnings. HashMap<String, ByteIterator> resultMap = new HashMap<String, ByteIterator>(); - DBObject obj = cursor.next(); + Document obj = iter.next(); fillMap(resultMap, obj); result.add(resultMap); @@ -342,14 +330,10 @@ public class MongoDbClient extends DB { return 1; } finally { - if (db != null) { - if (cursor != null) { - cursor.close(); - } - db.requestDone(); + if (iter != null) { + iter.close(); } } - } /** @@ -369,35 +353,28 @@ public class MongoDbClient extends DB { @Override public int update(String table, String key, HashMap<String, ByteIterator> values) { - com.mongodb.DB db = null; + MongoDatabase db = null; try { - db = mongo.getDB(database); + db = mongo.getDatabase(database); - db.requestStart(); + MongoCollection<Document> collection = db.getCollection(table); + Document q = new Document("_id", key); - DBCollection collection = db.getCollection(table); - DBObject q = new BasicDBObject().append("_id", key); - DBObject u = new BasicDBObject(); - DBObject fieldsToSet = new BasicDBObject(); + Document fieldsToSet = new Document(); Iterator<String> keys = values.keySet().iterator(); while (keys.hasNext()) { String tmpKey = keys.next(); fieldsToSet.put(tmpKey, values.get(tmpKey).toArray()); - } - u.put("$set", fieldsToSet); - collection.update(q, u, false, false, writeConcern); + Document u = new Document("$set", fieldsToSet); + + collection.withWriteConcern(writeConcern).updateOne(q, u); return 0; } catch (Exception e) { System.err.println(e.toString()); return 1; } - finally { - if (db != null) { - db.requestDone(); - } - } } /** @@ -408,10 +385,8 @@ public class MongoDbClient extends DB { * @param obj * The object to copy values from. */ - @SuppressWarnings("unchecked") - protected void fillMap(HashMap<String, ByteIterator> resultMap, DBObject obj) { - Map<String, Object> objMap = obj.toMap(); - for (Map.Entry<String, Object> entry : objMap.entrySet()) { + protected void fillMap(HashMap<String, ByteIterator> resultMap, Document obj) { + for (Map.Entry<String, Object> entry : obj.entrySet()) { if (entry.getValue() instanceof byte[]) { resultMap.put(entry.getKey(), new ByteArrayByteIterator( (byte[]) entry.getValue())); diff --git a/mongodb/src/main/java/com/yahoo/ycsb/db/OptionsSupport.java b/mongodb/src/main/java/com/yahoo/ycsb/db/OptionsSupport.java index 698e2f77..8e002872 100644 --- a/mongodb/src/main/java/com/yahoo/ycsb/db/OptionsSupport.java +++ b/mongodb/src/main/java/com/yahoo/ycsb/db/OptionsSupport.java @@ -27,6 +27,16 @@ import java.util.Properties; */ public final class OptionsSupport { + /** + * Updates the URL with the appropriate attributes if legacy properties are + * set and the URL does not have the property already set. + * + * @param url + * The URL to update. + * @param props + * The legacy properties. + * @return The updated URL. + */ public static String updateUrl(String url, Properties props) { String result = url; diff --git a/pom.xml b/pom.xml index 3a767b31..66e36081 100644 --- a/pom.xml +++ b/pom.xml @@ -50,8 +50,8 @@ <infinispan.version>7.1.0.CR1</infinispan.version> <openjpa.jdbc.version>2.1.1</openjpa.jdbc.version> <!--<mapkeeper.version>1.0</mapkeeper.version>--> - <mongodb.version>2.13.1</mongodb.version> - <mongodb.async.version>2.0.0-SNAPSHOT</mongodb.async.version> + <mongodb.version>3.0.1</mongodb.version> + <mongodb.async.version>2.0.1</mongodb.async.version> <orientdb.version>1.0.1</orientdb.version> <redis.version>2.0.0</redis.version> <voldemort.version>0.81</voldemort.version> -- GitLab