古月一刀 发表于 2015-7-6 09:17:13

Mongodb源码分析--插入记录及索引B树构建

在之前的一篇文章中,介绍了assembleResponse函数(位于instance.cpp第224行),它会根据op操作枚举类型来调用相应的crud操作,枚举类型定义如下:


   enum Operations {
      opReply = 1,   /* reply. responseTo is set. */
      dbMsg = 1000,    /* generic msg command followed by a string */
      dbUpdate = 2001, /* update object */
      dbInsert = 2002,
      //dbGetByOID = 2003,
      dbQuery = 2004,
      dbGetMore = 2005,
      dbDelete = 2006,
      dbKillCursors = 2007
    };
    可以看到dbInsert = 2002 为插入操作枚举值,下面我们看一下assembleResponse在确定是插入操作时调用的方法,如下:


assembleResponse( Message &m, DbResponse &dbresponse, const SockAddr &client ) {
    .....
            try {
                if ( op == dbInsert ) {//添加记录操作
                  receivedInsert(m, currentOp);
                }
                else if ( op == dbUpdate ) { //更新记录
                  receivedUpdate(m, currentOp);
                }
                else if ( op == dbDelete ) { //删除记录
                  receivedDelete(m, currentOp);
                }
                else if ( op == dbKillCursors ) { //删除Cursors(游标)对象
                  currentOp.ensureStarted();
                  logThreshold = 10;
                  ss code;
                  saveerrmsg = le->msg;
                }
                else {
                  savecode = e.getCode();
                  saveerrmsg = e.what();
                }
                //回滚索引操作(drop索引)
                string name = idx.indexName();
                BSONObjBuilder b;
                string errmsg;
                bool ok = dropIndexes(tableToIndex, tabletoidxns.c_str(), name.c_str(), errmsg, b, true);
                if( !ok ) {
                  log()
页: [1]
查看完整版本: Mongodb源码分析--插入记录及索引B树构建