> db.createCollection("test")
{ "ok" : 0, "errmsg" : "Unimplemented command: create", "code" : 1000002 }
to
> db.createCollection("test")
{ "ok" : 1 }
in five simple steps:
1.) Find out how the command is called internally. toroDB tells you that in the message:
"Unimplemented command: create"
so it is "create".
2.) Look up the "create" command. Start in QueryCommandProcessor.java with the QueryCommandGroup enum which contains all enums of all known commands. Since it is an administration command, you'll find it in AdministrationQueryCommand.java.
3.) "create" does nothing at the moment, so add some code.
I just copied it from "createIndexes" so
create,
becomes now
create {
@Override
public void doCall(RequestBaseMessage queryMessage, BSONDocument query, ProcessorCaller caller) throws Exception {
caller.create(query);
}
},
4.) Now, ProcessorCaller needs to know about the new command. It's enclosed in QueryCommandProcessor.java, so by adding
public void create(@Nonnull BSONDocument document) throws Exception {
queryCommandProcessor.create(document, messageReplier);
}
to ProcessorCaller AND the prototype
public void create(@Nonnull BSONDocument document, @Nonnull MessageReplier messageReplier) throws Exception;
to the enclosing QueryCommandProcessor class, make it known.
5.) Implement the command in ToroQueryCommandProcessor.java, which is the actual implementation of QueryCommandProcessor:
@Override
public void create(BSONDocument document, MessageReplier messageReplier) {
Map
keyValues.put("ok", MongoWP.OK);
String collectionName = (String) document.getValue("create");
Boolean capped = (Boolean) document.getValue("capped");
Boolean autoIndexId = (Boolean) document.getValue("autoIndexId");
Boolean usePowerOf2Sizes = (Boolean) document.getValue("usePowerOf2Sizes");
Double size = (Double) document.getValue("size");
Double max = (Double) document.getValue("max");
BSONDocument reply = new MongoBSONDocument(keyValues);
messageReplier.replyMessageNoCursor(reply);
}
And that's pretty much it. As of now it just reads all allowed values from the command and acknowledges OK. But now everything is set to make it a "real" command if needed.
No comments:
Post a Comment