/* _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, "" ) ; }
// 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 ; }
// 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 ; }