Пример #1
0
   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 ;
   }
Пример #2
0
   // 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 ;
   }
Пример #3
0
   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 ;
   }
Пример #4
0
   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 ;
   }