/*
      _coordOmStrategyAccessor implement
   */
   _coordOmStrategyAccessor::_coordOmStrategyAccessor( INT64 timeout )
   {
      pmdKRCB *krcb = pmdGetKRCB() ;
      CoordCB *pCoord = krcb->getCoordCB() ;
      pmdOptionsCB *optionsCB = krcb->getOptionCB() ;

      _pOmProxy = pCoord->getResource()->getOmProxy() ;
      _oprTimeout = timeout ;

      optionsCB->getFieldStr( PMD_OPTION_CLUSTER_NAME, _clsName, "" ) ;
      optionsCB->getFieldStr( PMD_OPTION_BUSINESS_NAME, _bizName, "" ) ;
   }
Exemplo n.º 2
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 ;
   }
Exemplo n.º 3
0
   // PD_TRACE_DECLARE_FUNCTION( SDB__QGMPLCOMMAND_EXECONCOORD, "_qgmPlCommand::_executeOnCoord" )
   INT32 _qgmPlCommand::_executeOnCoord( _pmdEDUCB *eduCB )
   {
      PD_TRACE_ENTRY( SDB__QGMPLCOMMAND_EXECONCOORD ) ;
      INT32 rc = SDB_OK ;

      CoordCB *pCoord = pmdGetKRCB()->getCoordCB() ;
      coordCommandFactory *pFactory = coordGetFactory() ;
      coordOperator *pOpr = NULL ;

      CHAR *msg = NULL ;
      INT32 bufSize = 0 ;
      const CHAR *pCommand = NULL ;
      rtnContextBuf buff ;

      if ( SQL_GRAMMAR::CRTCS == _commandType )
      {
         pCommand = CMD_NAME_CREATE_COLLECTIONSPACE ;
         BSONObj obj = BSON( FIELD_NAME_NAME << _fullName.toString() ) ;
         rc = msgBuildQueryMsg( &msg, &bufSize,
                                CMD_ADMIN_PREFIX CMD_NAME_CREATE_COLLECTIONSPACE,
                                0, 0, 0, -1,
                                &obj, NULL, NULL, NULL,
                                eduCB ) ;
      }
      else if ( SQL_GRAMMAR::DROPCS == _commandType )
      {
         pCommand = CMD_NAME_DROP_COLLECTIONSPACE ;
         BSONObj obj = BSON( FIELD_NAME_NAME << _fullName.toString() ) ;
         rc = msgBuildQueryMsg( &msg, &bufSize,
                                CMD_ADMIN_PREFIX CMD_NAME_DROP_COLLECTIONSPACE,
                                0, 0, 0, -1,
                                &obj, NULL, NULL, NULL,
                                eduCB ) ;
      }
      else if ( SQL_GRAMMAR::CRTCL == _commandType )
      {
         pCommand = CMD_NAME_CREATE_COLLECTION ;
         BSONObj obj ;
         if ( _partition.isEmpty() )
         {
            obj = BSON( FIELD_NAME_NAME << _fullName.toString() ) ;
         }
         else
         {
            obj = BSON( FIELD_NAME_NAME << _fullName.toString() <<
                        FIELD_NAME_SHARDINGKEY << _partition ) ;
         }
         rc = msgBuildQueryMsg( &msg, &bufSize,
                                CMD_ADMIN_PREFIX CMD_NAME_CREATE_COLLECTION,
                                0, 0, 0, -1,
                                &obj, NULL, NULL, NULL,
                                eduCB ) ;
      }
      else if ( SQL_GRAMMAR::DROPCL == _commandType )
      {
         pCommand = CMD_NAME_DROP_COLLECTION ;
         BSONObj obj = BSON( FIELD_NAME_NAME << _fullName.toString() ) ;
         rc = msgBuildQueryMsg( &msg, &bufSize,
                                CMD_ADMIN_PREFIX CMD_NAME_DROP_COLLECTION,
                                0, 0, 0, -1,
                                &obj, NULL, NULL, NULL,
                                eduCB ) ;
      }
      else if ( SQL_GRAMMAR::CRTINDEX == _commandType )
      {
         pCommand = CMD_NAME_CREATE_INDEX ;
         BSONObjBuilder builder ;
         qgmOPFieldVec::const_iterator itr = _indexColumns.begin() ;
         for ( ; itr != _indexColumns.end(); itr++ )
         {
            builder.append( itr->value.attr().toString(),
                            SQL_GRAMMAR::ASC == itr->type?
                            1 : -1 ) ;
         }

         BSONObj index ;
         if ( !_uniqIndex )
         {
            index = BSON( IXM_FIELD_NAME_KEY << builder.obj() <<
                          IXM_FIELD_NAME_NAME << _indexName.toString() ) ;
         }
         else
         {
            BSONObjBuilder indexBuilder ;
            indexBuilder.append( IXM_FIELD_NAME_KEY, builder.obj()) ;
            indexBuilder.append( IXM_FIELD_NAME_NAME, _indexName.toString()) ;
            indexBuilder.appendBool( IXM_FIELD_NAME_UNIQUE, TRUE ) ;
            index = indexBuilder.obj() ;
         }

         BSONObj obj = BSON( FIELD_NAME_COLLECTION << _fullName.toString() <<
                             FIELD_NAME_INDEX << index ) ;
         rc = msgBuildQueryMsg( &msg, &bufSize,
                                CMD_ADMIN_PREFIX CMD_NAME_CREATE_INDEX,
                                0, 0, 0, -1,
                                &obj, NULL, NULL, NULL,
                                eduCB ) ;
      }
      else if ( SQL_GRAMMAR::DROPINDEX == _commandType )
      {
         pCommand = CMD_NAME_DROP_INDEX ;
         BSONObj obj = BSON( FIELD_NAME_COLLECTION << _fullName.toString() <<
                             FIELD_NAME_INDEX <<
                                 BSON( IXM_FIELD_NAME_NAME << _indexName.toString() << 
                                       IXM_FIELD_NAME_KEY << "" )
                            ) ;
         rc = msgBuildQueryMsg( &msg, &bufSize,
                                CMD_ADMIN_PREFIX CMD_NAME_DROP_INDEX,
                                0, 0, 0, -1,
                                &obj, NULL, NULL, NULL,
                                eduCB ) ;
      }
      else if ( SQL_GRAMMAR::LISTCS == _commandType )
      {
         pCommand = CMD_NAME_LIST_COLLECTIONSPACES ;
         BSONObj obj ;
         rc = msgBuildQueryMsg( &msg, &bufSize,
                                CMD_ADMIN_PREFIX CMD_NAME_LIST_COLLECTIONSPACES,
                                0, 0, 0, -1,
                                &obj, NULL, NULL, NULL,
                                eduCB ) ;
      }
      else if ( SQL_GRAMMAR::LISTCL == _commandType )
      {
         pCommand = CMD_NAME_LIST_COLLECTIONS ;
         BSONObj obj ;
         rc = msgBuildQueryMsg( &msg, &bufSize,
                                CMD_ADMIN_PREFIX CMD_NAME_LIST_COLLECTIONS,
                                0, 0, 0, -1,
                                &obj, NULL, NULL, NULL,
                                eduCB ) ;
      }
      else if ( SQL_GRAMMAR::BEGINTRAN == _commandType )
      {
         coordTransBegin opr ;
         MsgOpTransBegin transMsg ;
         transMsg.header.messageLength = sizeof( MsgOpTransBegin ) ;
         transMsg.header.opCode = MSG_BS_TRANS_BEGIN_REQ ;
         transMsg.header.TID = 0 ;
         transMsg.header.routeID.value = 0 ;

         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 *)&transMsg, eduCB,
                           _contextID, &buff ) ;
         if ( rc )
         {
            PD_LOG( PDERROR, "Execute operator[%s] failed, rc: %d",
                    opr.getName(), rc ) ;
            goto error ;
         }
      }
      else if ( SQL_GRAMMAR::ROLLBACK == _commandType )
      {
         coordTransRollback opr ;
         MsgOpTransRollback transMsg ;
         transMsg.header.messageLength = sizeof( MsgOpTransRollback ) ;
         transMsg.header.opCode = MSG_BS_TRANS_ROLLBACK_REQ ;
         transMsg.header.TID = 0 ;
         transMsg.header.routeID.value = 0 ;

         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 *)&transMsg, eduCB,
                           _contextID, &buff ) ;
         if ( rc )
         {
            PD_LOG( PDERROR, "Execute operator[%s] failed, rc: %d",
                    opr.getName(), rc ) ;
            goto error ;
         }
      }
      else if ( SQL_GRAMMAR::COMMIT == _commandType )
      {
         coordTransCommit opr ;
         MsgOpTransCommit transMsg ;
         transMsg.header.messageLength = sizeof( MsgOpTransCommit ) ;
         transMsg.header.opCode = MSG_BS_TRANS_COMMIT_REQ ;
         transMsg.header.TID = 0 ;
         transMsg.header.routeID.value = 0 ;

         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 *)&transMsg, eduCB,
                           _contextID, &buff ) ;
         if ( rc )
         {
            PD_LOG( PDERROR, "Execute operator[%s] failed, rc: %d",
                    opr.getName(), rc ) ;
            goto error ;
         }
      }
      else
      {
         PD_LOG( PDERROR, "Invalid command type:%d", _commandType ) ;
         rc = SDB_SYS ;
         goto error ;
      }

      if ( rc )
      {
         PD_LOG( PDERROR, "Build message failed, rc: %d", rc ) ;
         goto error ;
      }

      if ( pCommand )
      {
         rc = pFactory->create( pCommand, pOpr ) ;
         if ( rc )
         {
            PD_LOG( PDERROR, "Create operator by name[%s] failed, rc: %d",
                    pCommand, rc ) ;
            goto error ;
         }
         rc = pOpr->init( pCoord->getResource(), eduCB ) ;
         if ( rc )
         {
            PD_LOG( PDERROR, "Init operator[%s] failed, rc: %d",
                    pOpr->getName(), rc ) ;
            goto error ;
         }
         SDB_ASSERT( msg, "Msg cant' be NULL" ) ;
         if ( !msg )
         {
            rc = SDB_SYS ;
            goto error ;
         }
         rc = pOpr->execute( (MsgHeader*)msg, eduCB, _contextID, &buff ) ;
         if ( rc )
         {
            PD_LOG( PDERROR, "Execute operator[%s] failed, rc: %d",
                    pOpr->getName(), rc ) ;
            goto error ;
         }
      }

   done:
      if ( NULL != msg )
      {
         msgReleaseBuffer( msg, eduCB ) ;
      }
      if ( pOpr )
      {
         pFactory->release( pOpr ) ;
      }
      PD_TRACE_EXITRC( SDB__QGMPLCOMMAND_EXECONCOORD, rc ) ;
      return rc ;
   error:
      goto done ;
   }