static INT32 _rtnParseQueryMeta( const BSONObj &meta, const CHAR *&scanType, const CHAR *&indexName, INT32 &indexLID, INT32 &direction, BSONObj &blockObj ) { INT32 rc = SDB_OK ; BSONElement ele ; rc = rtnGetStringElement( meta, FIELD_NAME_SCANTYPE, &scanType ) ; PD_RC_CHECK( rc, PDERROR, "Failed to get field[%s], rc: %d", FIELD_NAME_SCANTYPE, rc ) ; if ( 0 == ossStrcmp( scanType, VALUE_NAME_IXSCAN ) ) { ele = meta.getField( FIELD_NAME_INDEXBLOCKS ) ; rc = rtnGetStringElement( meta, FIELD_NAME_INDEXNAME, &indexName ) ; PD_RC_CHECK( rc, PDERROR, "Failed to get field[%s], rc: %d", FIELD_NAME_INDEXNAME, rc ) ; rc = rtnGetIntElement( meta, FIELD_NAME_INDEXLID, indexLID ) ; PD_RC_CHECK( rc, PDERROR, "Failed to get field[%s], rc: %d", FIELD_NAME_INDEXLID, rc ) ; rc = rtnGetIntElement( meta, FIELD_NAME_DIRECTION, direction ) ; PD_RC_CHECK( rc, PDERROR, "Failed to get field[%s], rc: %d", FIELD_NAME_DIRECTION, rc ) ; } else if ( 0 == ossStrcmp( scanType, VALUE_NAME_TBSCAN ) ) { ele = meta.getField( FIELD_NAME_DATABLOCKS ) ; } else { PD_LOG( PDERROR, "Query meta[%s] scan type error", meta.toString().c_str() ) ; rc = SDB_INVALIDARG ; goto error ; } if ( Array != ele.type() ) { PD_LOG( PDERROR, "Block field[%s] type error", ele.toString().c_str() ) ; rc = SDB_INVALIDARG ; goto error ; } blockObj = ele.embeddedObject() ; done: return rc ; error: goto done ; }
// PD_TRACE_DECLARE_FUNCTION ( SDB_RTNBACKUP, "rtnBackup" ) INT32 rtnBackup( pmdEDUCB *cb, const CHAR *path, const CHAR *backupName, BOOLEAN ensureInc, BOOLEAN rewrite, const CHAR *desp, const BSONObj &option ) { INT32 rc = SDB_OK ; PD_TRACE_ENTRY ( SDB_RTNBACKUP ) ; string bkpath ; INT32 maxDataFileSize = 0 ; barBKOfflineLogger logger ; BOOLEAN isSubDir = FALSE ; BOOLEAN enableDateDir = FALSE ; BOOLEAN backupLog = FALSE ; const CHAR *prefix = NULL ; BOOLEAN compressed = TRUE ; const CHAR *pCompType = VALUE_NAME_SNAPPY ; UTIL_COMPRESSOR_TYPE compType = UTIL_COMPRESSOR_INVALID ; rc = rtnGetBooleanElement( option, FIELD_NAME_ISSUBDIR, isSubDir ) ; if ( SDB_FIELD_NOT_EXIST == rc ) { rc = SDB_OK ; } PD_RC_CHECK( rc, PDWARNING, "Failed to get field[%s], rc: %d", FIELD_NAME_ISSUBDIR, rc ) ; rc = rtnGetIntElement( option, FIELD_NAME_MAX_DATAFILE_SIZE, maxDataFileSize ) ; if ( SDB_FIELD_NOT_EXIST == rc ) { rc = SDB_OK ; } PD_RC_CHECK( rc, PDWARNING, "Failed to get field[%s], rc: %d", FIELD_NAME_MAX_DATAFILE_SIZE, rc ) ; rc = rtnGetBooleanElement( option, FIELD_NAME_ENABLE_DATEDIR, enableDateDir ) ; if ( SDB_FIELD_NOT_EXIST == rc ) { rc = SDB_OK ; } PD_RC_CHECK( rc, PDWARNING, "Failed to get field[%s], rc: %d", FIELD_NAME_ENABLE_DATEDIR, rc ) ; rc = rtnGetStringElement( option, FIELD_NAME_PREFIX, &prefix ) ; if ( SDB_FIELD_NOT_EXIST == rc ) { rc = SDB_OK ; } PD_RC_CHECK( rc, PDWARNING, "Failed to get field[%s], rc: %d", FIELD_NAME_PREFIX, rc ) ; rc = rtnGetBooleanElement( option, FIELD_NAME_BACKUP_LOG, backupLog ) ; if ( SDB_FIELD_NOT_EXIST == rc ) { rc = SDB_OK ; } PD_RC_CHECK( rc, PDWARNING, "Failed to get field[%s], rc: %d", FIELD_NAME_BACKUP_LOG, rc ) ; rc = rtnGetBooleanElement( option, FIELD_NAME_COMPRESSED, compressed ) ; if ( SDB_FIELD_NOT_EXIST == rc ) { rc = SDB_OK ; } PD_RC_CHECK( rc, PDWARNING, "Failed to get field[%s], rc: %d", FIELD_NAME_COMPRESSED, rc ) ; rc = rtnGetStringElement( option, FIELD_NAME_COMPRESSIONTYPE, &pCompType ) ; if ( SDB_FIELD_NOT_EXIST == rc ) { rc = SDB_OK ; } PD_RC_CHECK( rc, PDWARNING, "Failed to get field[%s], rc: %d", FIELD_NAME_COMPRESSIONTYPE, rc ) ; compType = utilString2CompressType( pCompType ) ; if ( UTIL_COMPRESSOR_INVALID == compType || UTIL_COMPRESSOR_LZW == compType ) { PD_LOG( PDERROR, "Field[%s]'s value[%s] is invalid, only support: %s", FIELD_NAME_COMPRESSIONTYPE, pCompType, "snappy/lz4/zlib" ) ; rc = SDB_INVALIDARG ; goto error ; } if ( maxDataFileSize < BAR_MIN_DATAFILE_SIZE || maxDataFileSize > BAR_MAX_DATAFILE_SIZE ) { maxDataFileSize = BAR_DFT_DATAFILE_SIZE ; } if ( isSubDir && path ) { bkpath = rtnFullPathName( pmdGetOptionCB()->getBkupPath(), path ) ; } else if ( path && 0 != path[0] ) { bkpath = path ; } else { bkpath = pmdGetOptionCB()->getBkupPath() ; } if ( enableDateDir ) { bkpath = rtnFullPathName( bkpath, _rtnMakeDateDirName() ) ; } rc = logger.init( bkpath.c_str(), backupName, maxDataFileSize, prefix, ensureInc ? BAR_BACKUP_OP_TYPE_INC : BAR_BACKUP_OP_TYPE_FULL, rewrite, desp ) ; PD_RC_CHECK( rc, PDERROR, "Init off line backup logger failed, rc: %d", rc ) ; logger.setBackupLog( backupLog ) ; logger.enableCompress( compressed, compType ) ; rc = logger.backup( cb ) ; PD_RC_CHECK( rc, PDERROR, "Off line backup failed, rc: %d", rc ) ; done: PD_TRACE_EXITRC ( SDB_RTNBACKUP, rc ) ; return rc ; error: goto done ; }
INT32 catSplitCancel( const BSONObj & splitInfo, pmdEDUCB * cb, INT32 &groupID, INT16 w ) { INT32 rc = SDB_OK ; UINT64 taskID = 0 ; BSONElement ele = splitInfo.getField( CAT_TASKID_NAME ) ; if ( !ele.eoo() ) { INT32 status = CLS_TASK_STATUS_READY ; BSONObj taskObj ; PD_CHECK( ele.isNumber(), SDB_INVALIDARG, error, PDERROR, "Failed to get field[%s], type: %d", CAT_TASKID_NAME, ele.type() ) ; taskID = ( UINT64 )ele.numberLong() ; rc = catGetTask( taskID, taskObj, cb ) ; PD_RC_CHECK( rc, PDERROR, "Failed to get task[%lld], rc: %d", taskID, rc ) ; rc = rtnGetIntElement( taskObj, CAT_STATUS_NAME, status ) ; PD_RC_CHECK( rc, PDWARNING, "Failed to get field[%s], rc: %d", CAT_STATUS_NAME, rc ) ; rc = rtnGetIntElement( taskObj, CAT_TARGETID_NAME, groupID ) ; PD_RC_CHECK( rc, PDWARNING, "Failed to get field[%s], rc: %d", CAT_TARGETID_NAME, rc ) ; if ( CLS_TASK_STATUS_META == status || CLS_TASK_STATUS_FINISH == status ) { rc = SDB_TASK_ALREADY_FINISHED ; goto error ; } else if ( CLS_TASK_STATUS_READY == status ) { rc = catRemoveTask( taskID, cb ,w ) ; PD_RC_CHECK( rc, PDERROR, "Remove task[%lld] failed, rc: %d", taskID, rc ) ; } else if ( CLS_TASK_STATUS_CANCELED != status ) { rc = catUpdateTaskStatus( taskID, CLS_TASK_STATUS_CANCELED, cb, w ) ; PD_RC_CHECK( rc, PDERROR, "Failed to update data task[%lld] to " "canceled, rc: %d", taskID, rc ) ; } } else { BSONObjBuilder matchBuilder ; matchBuilder.append( CAT_TASKTYPE_NAME, CLS_TASK_SPLIT ) ; matchBuilder.append( splitInfo.getField( CAT_COLLECTION_NAME ) ) ; matchBuilder.append( splitInfo.getField( CAT_SOURCE_NAME ) ) ; matchBuilder.append( splitInfo.getField( CAT_TARGET_NAME ) ) ; BSONElement splitKeyEle = splitInfo.getField( CAT_SPLITVALUE_NAME ) ; if ( splitKeyEle.eoo() || splitKeyEle.embeddedObject().isEmpty() ) { matchBuilder.append( splitInfo.getField( CAT_SPLITPERCENT_NAME ) ) ; } else { matchBuilder.append( splitKeyEle ) ; } BSONObj match = matchBuilder.obj() ; rc = catRemoveTask( match, cb, w ) ; PD_RC_CHECK( rc, PDERROR, "Remove task[%s] failed, rc: %d", splitInfo.toString().c_str(), rc ) ; } done: return rc ; error: goto done ; }
INT32 rtnRemoveBackup( pmdEDUCB *cb, const CHAR *path, const CHAR *backupName, const BSONObj &option ) { INT32 rc = SDB_OK ; pmdKRCB *krcb = pmdGetKRCB () ; BOOLEAN isSubDir = FALSE ; const CHAR *prefix = NULL ; string bkpath ; INT32 incID = -1 ; barBackupMgr bkMgr( krcb->getGroupName() ) ; rc = rtnGetBooleanElement( option, FIELD_NAME_ISSUBDIR, isSubDir ) ; if ( SDB_FIELD_NOT_EXIST == rc ) { rc = SDB_OK ; } PD_RC_CHECK( rc, PDWARNING, "Failed to get field[%s], rc: %d", FIELD_NAME_ISSUBDIR, rc ) ; rc = rtnGetStringElement( option, FIELD_NAME_PREFIX, &prefix ) ; if ( SDB_FIELD_NOT_EXIST == rc ) { rc = SDB_OK ; } PD_RC_CHECK( rc, PDWARNING, "Failed to get field[%s], rc: %d", FIELD_NAME_PREFIX, rc ) ; rc = rtnGetIntElement( option, FIELD_NAME_ID, incID ) ; if ( SDB_FIELD_NOT_EXIST == rc ) { rc = SDB_OK ; } PD_RC_CHECK( rc, PDWARNING, "Failed to get field[%s], rc: %d", FIELD_NAME_ID, rc ) ; if ( isSubDir && path ) { bkpath = rtnFullPathName( pmdGetOptionCB()->getBkupPath(), path ) ; } else if ( path && 0 != path[0] ) { bkpath = path ; } else { bkpath = pmdGetOptionCB()->getBkupPath() ; } rc = bkMgr.init( bkpath.c_str(), backupName, prefix ) ; PD_RC_CHECK( rc, PDERROR, "Failed to init backup manager, rc: %d", rc ) ; rc = bkMgr.drop( incID ) ; PD_RC_CHECK( rc, PDERROR, "Failed to drop backup[%s], ID:%d, rc: %d", bkMgr.backupName(), incID, rc ) ; done: return rc ; error: goto done ; }