Esempio n. 1
0
   // PD_TRACE_DECLARE_FUNCTION( SDB__QGMPLDELETE__EXEC, "_qgmPlDelete::_execute" )
   INT32 _qgmPlDelete::_execute( _pmdEDUCB *eduCB )
   {
      PD_TRACE_ENTRY( SDB__QGMPLDELETE__EXEC ) ;
      INT32 rc = SDB_OK ;

      _SDB_KRCB *krcb = pmdGetKRCB() ;
      SDB_ROLE role = krcb->getDBRole() ;
      CHAR *msg = NULL ;
      if ( SDB_ROLE_COORD == role )
      {
         INT32 bufSize = 0 ;
         MsgOpReply dummyReply ;
         rtnCoordDelete del ;
         rc = msgBuildDeleteMsg( &msg, &bufSize,
                                 _collection.toString().c_str(),
                                 0, 0,
                                 _condition.isEmpty()?
                                 NULL : &_condition ) ;
         if ( SDB_OK != rc )
         {
            goto error ;
         }

         rc = del.execute( msg, *((SINT32 *)msg),
                           eduCB, dummyReply,
                           NULL ) ;
      }
      else
      {
         SDB_DPSCB *dpsCB = krcb->getDPSCB() ;

         if ( dpsCB && eduCB->isFromLocal() && !dpsCB->isLogLocal() )
         {
            dpsCB = NULL ;
         }
         SDB_DMSCB *dmsCB = krcb->getDMSCB() ;
         BSONObj empty ;
         rc = rtnDelete( _collection.toString().c_str(),
                         _condition, empty, 0, eduCB,
                         dmsCB, dpsCB ) ;
      }

      if ( SDB_OK != rc )
      {
         goto error ;
      }
   done:
      if ( NULL != msg )
      {
         SDB_OSS_FREE( msg ) ;
         msg = NULL ;
      }
      PD_TRACE_EXITRC( SDB__QGMPLDELETE__EXEC, rc ) ;
      return rc ;
   error:
      goto done ;
   }
Esempio n. 2
0
   // PD_TRACE_DECLARE_FUNCTION ( SDB_RTNINSERT1, "rtnInsert" )
   INT32 rtnInsert ( const CHAR *pCollectionName, BSONObj &objs, INT32 objNum,
                     INT32 flags, pmdEDUCB *cb )
   {
      INT32 rc = SDB_OK ;
      PD_TRACE_ENTRY ( SDB_RTNINSERT1 ) ;
      pmdKRCB *krcb = pmdGetKRCB () ;
      SDB_DMSCB *dmsCB = krcb->getDMSCB () ;
      SDB_DPSCB *dpsCB = krcb->getDPSCB () ;

      if ( dpsCB && cb->isFromLocal() && !dpsCB->isLogLocal() )
      {
         dpsCB = NULL ;
      }
      rc = rtnInsert ( pCollectionName, objs, objNum, flags, cb,
                       dmsCB, dpsCB ) ;
      PD_TRACE_EXITRC ( SDB_RTNINSERT1, rc ) ;
      return rc ;
   }
Esempio n. 3
0
   // PD_TRACE_DECLARE_FUNCTION ( SDB_PMDLOGGWENTPNT, "pmdLoggWEntryPoint" )
   INT32 pmdLoggWEntryPoint ( pmdEDUCB *cb, void *pData )
   {
      INT32 rc = SDB_OK ;
      PD_TRACE_ENTRY ( SDB_PMDLOGGWENTPNT );
      pmdEDUMgr * eduMgr = cb->getEDUMgr() ;
      SDB_DPSCB *dpsCb = ( SDB_DPSCB* )pData ;
      rc = eduMgr->activateEDU ( cb ) ;
      if ( rc )
      {
         PD_LOG ( PDERROR, "Failed to activate EDU" ) ;
         goto error ;
      }

      while ( !cb->isDisconnected() )
      {
         rc = dpsCb->run( cb );
         if ( rc )
         {
            PD_LOG ( PDSEVERE, "Failed to run dpsCB, rc = %d", rc ) ;
            ossPanic () ;
         }
      }

      rc = dpsCb->tearDown();
      if ( rc )
      {
         PD_LOG ( PDSEVERE, "Failed to run tearDown(), rc = %d", rc ) ;
         ossPanic() ;
      }

   done :
      PD_TRACE_EXITRC ( SDB_PMDLOGGWENTPNT, rc );
      return rc;
   error :
      switch ( rc )
      {
      case SDB_SYS :
         PD_LOG ( PDSEVERE, "System error occured" ) ;
         break ;
      default :
         PD_LOG ( PDSEVERE, "Internal error, rc = %d", rc ) ;
      }
      goto done ;
   }
Esempio n. 4
0
   // PD_TRACE_DECLARE_FUNCTION( SDB__QGMPLDELETE__EXEC, "_qgmPlDelete::_execute" )
   INT32 _qgmPlDelete::_execute( _pmdEDUCB *eduCB )
   {
      PD_TRACE_ENTRY( SDB__QGMPLDELETE__EXEC ) ;
      INT32 rc = SDB_OK ;

      _SDB_KRCB *krcb = pmdGetKRCB() ;
      SDB_ROLE role = krcb->getDBRole() ;
      CHAR *msg = NULL ;
      INT32 bufSize = 0 ;

      if ( SDB_ROLE_COORD == role )
      {
         CoordCB *pCoord = krcb->getCoordCB() ;
         INT64 contextID = -1 ;
         rtnContextBuf buff ;

         coordDeleteOperator opr ;
         rc = msgBuildDeleteMsg( &msg, &bufSize,
                                 _collection.toString().c_str(),
                                 0, 0,
                                 _condition.isEmpty() ? NULL : &_condition,
                                 NULL, eduCB ) ;
         if ( rc )
         {
            PD_LOG( PDERROR, "Build delete message failed, rc: %d", rc ) ;
            goto error ;
         }

         rc = opr.init( pCoord->getResource(), eduCB ) ;
         if ( rc )
         {
            PD_LOG( PDERROR, "Init operator[%s] failed, rc: %d",
                    opr.getName(), rc ) ;
            goto error ;
         }
         rc = opr.execute( (MsgHeader*)msg, eduCB, contextID, &buff ) ;
      }
      else
      {
         SDB_DPSCB *dpsCB = krcb->getDPSCB() ;

         if ( dpsCB && eduCB->isFromLocal() && !dpsCB->isLogLocal() )
         {
            dpsCB = NULL ;
         }
         SDB_DMSCB *dmsCB = krcb->getDMSCB() ;
         BSONObj empty ;
         rc = rtnDelete( _collection.toString().c_str(),
                         _condition, empty, 0, eduCB,
                         dmsCB, dpsCB ) ;
      }

      if ( rc )
      {
         goto error ;
      }

   done:
      if ( NULL != msg )
      {
         msgReleaseBuffer( msg, eduCB ) ;
      }
      PD_TRACE_EXITRC( SDB__QGMPLDELETE__EXEC, rc ) ;
      return rc ;
   error:
      goto done ;
   }
Esempio n. 5
0
   // PD_TRACE_DECLARE_FUNCTION( SDB__QGMPLCOMMAND__EXECONDATA, "_qgmPlCommand::_executeOnData" )
   INT32 _qgmPlCommand::_executeOnData( _pmdEDUCB *eduCB )
   {
      PD_TRACE_ENTRY( SDB__QGMPLCOMMAND__EXECONDATA ) ;
      INT32 rc = SDB_OK ;
      pmdKRCB *pKrcb = pmdGetKRCB();
      SDB_DMSCB *dmsCB = pKrcb->getDMSCB() ;
      SDB_DPSCB *dpsCB = pKrcb->getDPSCB() ;
      SDB_RTNCB *rtnCB = pKrcb->getRTNCB() ;
      BOOLEAN addInfo = eduCB->getType() == EDU_TYPE_SHARDAGENT ?
                        TRUE : FALSE ;

      if ( dpsCB && eduCB->isFromLocal() && !dpsCB->isLogLocal() )
      {
         dpsCB = NULL ;
      }

      if ( SQL_GRAMMAR::CRTCS == _commandType )
      {
         rc = rtnCreateCollectionSpaceCommand(
                                  _fullName.toString().c_str(),
                                  eduCB, dmsCB, dpsCB ) ;
      }
      else if ( SQL_GRAMMAR::DROPCS == _commandType )
      {
         rc = rtnDropCollectionSpaceCommand(
                                    _fullName.toString().c_str(),
                                    eduCB, dmsCB, dpsCB ) ;
      }
      else if ( SQL_GRAMMAR::CRTCL == _commandType )
      {
         if ( _partition.isEmpty() )
         {
            rc = rtnCreateCollectionCommand(
                        _fullName.toString().c_str(),
                        0, eduCB, dmsCB, dpsCB ) ;
         }
         else
         {
            rc = rtnCreateCollectionCommand(
                            _fullName.toString().c_str(),
                            _partition, 0,
                            eduCB, dmsCB, dpsCB ) ;
         }
      }
      else if ( SQL_GRAMMAR::DROPCL == _commandType )
      {
         rc = rtnDropCollectionCommand(
                         _fullName.toString().c_str(),
                         eduCB, dmsCB, dpsCB ) ;
      }
      else if ( SQL_GRAMMAR::CRTINDEX == _commandType )
      {
         BSONObjBuilder builder ;
         BSONObj index ;
         qgmOPFieldVec::const_iterator itr = _indexColumns.begin() ;
         for ( ; itr != _indexColumns.end(); itr++ )
         {
            builder.append( itr->value.attr().toString(),
                            SQL_GRAMMAR::ASC == itr->type?
                            1 : -1 ) ;
         }
         index = builder.obj() ;
         if ( !_uniqIndex )
         {
            rc = rtnCreateIndexCommand(
                        _fullName.toString().c_str(),
                        BSON("key"<<index<<"name"<<_indexName.toString()),
                        eduCB, dmsCB, dpsCB ) ;
         }
         else
         {
            BSONObjBuilder indexBuilder ;
            indexBuilder.append( "key", index) ;
            indexBuilder.append("name", _indexName.toString()) ;
            indexBuilder.appendBool( "unique", TRUE ) ;
            rc =  rtnCreateIndexCommand(
                        _fullName.toString().c_str(),
                        indexBuilder.obj(),
                        eduCB, dmsCB, dpsCB ) ;
         }
      }
      else if ( SQL_GRAMMAR::DROPINDEX == _commandType )
      {
         BSONObj identifier = BSON( "name" << _indexName.toString() ) ;
         BSONElement ele = identifier.firstElement() ;
         rc = rtnDropIndexCommand(
                          _fullName.toString().c_str(),
                          ele, eduCB, dmsCB, dpsCB ) ;
      }
      else if ( SQL_GRAMMAR::LISTCS == _commandType )
      {
         BSONObj empty ;
         rc = rtnListCommandEntry( CMD_LIST_COLLECTIONSPACES,
                                   empty, empty, empty, empty, 0, eduCB,
                                   0, -1, dmsCB, rtnCB,
                                   _contextID, addInfo ) ;
      }
      else if ( SQL_GRAMMAR::LISTCL == _commandType )
      {
         BSONObj empty ;
         rc = rtnListCommandEntry( CMD_LIST_COLLECTIONS,
                                   empty, empty, empty, empty, 0, eduCB,
                                   0, -1, dmsCB, rtnCB,
                                   _contextID, addInfo ) ;
      }
      else if ( SQL_GRAMMAR::BEGINTRAN == _commandType )
      {
         rc = rtnTransBegin( eduCB ) ;
      }
      else if ( SQL_GRAMMAR::ROLLBACK == _commandType )
      {
         rc = rtnTransRollback( eduCB, dpsCB ) ;
      }
      else if ( SQL_GRAMMAR::COMMIT == _commandType )
      {
         rc = rtnTransCommit( eduCB, dpsCB ) ;
      }
      else
      {
         PD_LOG( PDERROR, "invalid command type:%d", _commandType ) ;
         rc = SDB_SYS ;
         goto error ;
      }

      if ( SDB_OK != rc )
      {
         goto error ;
      }
   done:
      PD_TRACE_EXITRC( SDB__QGMPLCOMMAND__EXECONDATA, rc ) ;
      return rc ;
   error:
      goto done ;
   }
Esempio n. 6
0
   INT32 _qgmPlInsert::_execute( _pmdEDUCB *eduCB )
   {
      PD_TRACE_ENTRY( SDB__QGMPLINSERT__EXEC ) ;
      INT32 rc = SDB_OK ;
      pmdKRCB *pKrcb                   = pmdGetKRCB();
      rtnCoordInsert insert ;
      CHAR *pMsg    = NULL ;
      INT32 bufSize = 0 ;
      BSONObj obj ;
      MsgOpReply dummyReply ;
      SDB_DMSCB *dmsCB = pKrcb->getDMSCB() ;
      SDB_DPSCB *dpsCB = pKrcb->getDPSCB() ;
      BSONObj *err = NULL ;

      if ( dpsCB && eduCB->isFromLocal() && !dpsCB->isLogLocal() )
      {
         dpsCB = NULL ;
      }

      while ( TRUE )
      {
         rc = _nextRecord( eduCB, obj ) ;
         if ( SDB_DMS_EOC == rc )
         {
            rc = SDB_OK ;
            goto done ;
         }
         else if ( SDB_OK != rc )
         {
            goto error ;
         }
         else
         {
            if ( SDB_ROLE_COORD == _role )
            {
               rc = msgBuildInsertMsg ( &pMsg,
                                        &bufSize,
                                        _fullName.c_str(),
                                        0, 0,
                                        &obj ) ;
               if ( SDB_OK != rc )
               {
                  goto error ;
               }

               rc = insert.execute ( pMsg, *(SINT32*)pMsg, NULL, eduCB,
                                     dummyReply, &err ) ;
               SDB_ASSERT( NULL == err, "impossible" ) ;
               PD_RC_CHECK ( rc, PDERROR, "Failed to execute insert on coord, "
                             "rc = %d", rc ) ;
            }
            else
            {
               rc = rtnInsert ( _fullName.c_str(), obj, 1, 0, eduCB,
                                dmsCB, dpsCB ) ;
               PD_RC_CHECK ( rc, PDERROR,
                          "Failed to insert on non-coord, rc = %d", rc ) ;
            }
         }
      }
   done:
      if ( pMsg )
      {
         SDB_OSS_FREE ( pMsg ) ;
      }
      PD_TRACE_EXITRC( SDB__QGMPLINSERT__EXEC, rc ) ;
      return rc ;
   error:
      goto done ;
   }
Esempio n. 7
0
   // PD_TRACE_DECLARE_FUNCTION( SDB__QGMPLCOMMAND__EXECONDATA, "_qgmPlCommand::_executeOnData" )
   INT32 _qgmPlCommand::_executeOnData( _pmdEDUCB *eduCB )
   {
      PD_TRACE_ENTRY( SDB__QGMPLCOMMAND__EXECONDATA ) ;
      INT32 rc = SDB_OK ;
      pmdKRCB *pKrcb = pmdGetKRCB();
      SDB_DMSCB *dmsCB = pKrcb->getDMSCB() ;
      SDB_DPSCB *dpsCB = pKrcb->getDPSCB() ;
      SDB_RTNCB *rtnCB = pKrcb->getRTNCB() ;

      if ( dpsCB && eduCB->isFromLocal() && !dpsCB->isLogLocal() )
      {
         dpsCB = NULL ;
      }

      if ( SQL_GRAMMAR::CRTCS == _commandType )
      {
         rc = rtnCreateCollectionSpaceCommand( _fullName.toString().c_str(),
                                               eduCB, dmsCB, dpsCB ) ;
      }
      else if ( SQL_GRAMMAR::DROPCS == _commandType )
      {
         rc = rtnDropCollectionSpaceCommand( _fullName.toString().c_str(),
                                             eduCB, dmsCB, dpsCB ) ;
      }
      else if ( SQL_GRAMMAR::CRTCL == _commandType )
      {
         if ( _partition.isEmpty() )
         {
            rc = rtnCreateCollectionCommand( _fullName.toString().c_str(),
                                             0, eduCB, dmsCB, dpsCB ) ;
         }
         else
         {
            rc = rtnCreateCollectionCommand( _fullName.toString().c_str(),
                                             _partition, 0,
                                             eduCB, dmsCB, dpsCB ) ;
         }
      }
      else if ( SQL_GRAMMAR::DROPCL == _commandType )
      {
         rc = rtnDropCollectionCommand( _fullName.toString().c_str(),
                                        eduCB, dmsCB, dpsCB ) ;
      }
      else if ( SQL_GRAMMAR::CRTINDEX == _commandType )
      {
         BSONObjBuilder builder ;
         BSONObj index ;
         qgmOPFieldVec::const_iterator itr = _indexColumns.begin() ;
         for ( ; itr != _indexColumns.end(); itr++ )
         {
            builder.append( itr->value.attr().toString(),
                            SQL_GRAMMAR::ASC == itr->type?
                            1 : -1 ) ;
         }
         index = builder.obj() ;
         if ( !_uniqIndex )
         {
            rc = rtnCreateIndexCommand( _fullName.toString().c_str(),
                                        BSON( IXM_FIELD_NAME_KEY << index <<
                                              IXM_FIELD_NAME_NAME << _indexName.toString() ),
                                        eduCB, dmsCB, dpsCB ) ;
         }
         else
         {
            BSONObjBuilder indexBuilder ;
            indexBuilder.append( IXM_FIELD_NAME_KEY, index ) ;
            indexBuilder.append( IXM_FIELD_NAME_NAME, _indexName.toString() ) ;
            indexBuilder.appendBool( IXM_FIELD_NAME_UNIQUE, TRUE ) ;
            rc =  rtnCreateIndexCommand( _fullName.toString().c_str(),
                                         indexBuilder.obj(),
                                         eduCB, dmsCB, dpsCB ) ;
         }
      }
      else if ( SQL_GRAMMAR::DROPINDEX == _commandType )
      {
         BSONObj identifier = BSON( IXM_FIELD_NAME_NAME << _indexName.toString() ) ;
         BSONElement ele = identifier.firstElement() ;
         rc = rtnDropIndexCommand( _fullName.toString().c_str(),
                                   ele, eduCB, dmsCB, dpsCB ) ;
      }
      else if ( SQL_GRAMMAR::LISTCS == _commandType )
      {
         BSONObj empty ;
         _rtnListCollectionspacesInner cmdListCS ;
         rc = cmdListCS.init( 0, 0, -1, empty.objdata(), empty.objdata(),
                              empty.objdata(), empty.objdata() ) ;
         if ( rc )
         {
            PD_LOG( PDERROR, "Init command[list collectionspace] failed, "
                    "rc: %d", rc ) ;
            goto error ;
         }
         rc = cmdListCS.doit( eduCB, dmsCB, rtnCB, dpsCB, 1, &_contextID ) ;
         if ( rc )
         {
            PD_LOG( PDERROR, "Run command[list collectionspace] failed, "
                    "rc: %d", rc ) ;
            goto error ;
         }
      }
      else if ( SQL_GRAMMAR::LISTCL == _commandType )
      {
         BSONObj empty ;
         _rtnListCollections cmdListCL ;
         rc = cmdListCL.init( 0, 0, -1, empty.objdata(),
                              empty.objdata(), empty.objdata(),
                              empty.objdata() ) ;
         if ( rc )
         {
            PD_LOG( PDERROR, "Init command[list collection] failed, rc: %d",
                    rc ) ;
            goto error ;
         }
         rc = cmdListCL.doit( eduCB, dmsCB, rtnCB, dpsCB, 1, &_contextID ) ;
         if ( rc )
         {
            PD_LOG( PDERROR, "Run command[list collection] failed, rc: %d",
                    rc ) ;
            goto error ;
         }
      }
      else if ( SQL_GRAMMAR::BEGINTRAN == _commandType )
      {
         rc = rtnTransBegin( eduCB ) ;
      }
      else if ( SQL_GRAMMAR::ROLLBACK == _commandType )
      {
         rc = rtnTransRollback( eduCB, dpsCB ) ;
      }
      else if ( SQL_GRAMMAR::COMMIT == _commandType )
      {
         rc = rtnTransCommit( eduCB, dpsCB ) ;
      }
      else
      {
         PD_LOG( PDERROR, "invalid command type:%d", _commandType ) ;
         rc = SDB_SYS ;
         goto error ;
      }

      if ( SDB_OK != rc )
      {
         goto error ;
      }
   done:
      PD_TRACE_EXITRC( SDB__QGMPLCOMMAND__EXECONDATA, rc ) ;
      return rc ;
   error:
      goto done ;
   }