コード例 #1
0
ファイル: putUtil.cpp プロジェクト: hurngchunlee/irods
int
bulkPutDirUtil( rcComm_t **myConn, char *srcDir, char *targColl,
                rodsEnv *myRodsEnv, rodsArguments_t *rodsArgs, dataObjInp_t *dataObjOprInp,
                bulkOprInp_t *bulkOprInp, rodsRestart_t *rodsRestart ) {
    int status;
    bulkOprInfo_t bulkOprInfo;

    /* do large files first */
    bzero( &bulkOprInfo, sizeof( bulkOprInfo ) );
    bulkOprInfo.flags = BULK_OPR_LARGE_FILES;

    status = putDirUtil( myConn, srcDir, targColl, myRodsEnv, rodsArgs,
                         dataObjOprInp, bulkOprInp, rodsRestart, &bulkOprInfo );

    if ( status < 0 ) {
        rodsLogError( LOG_ERROR, status,
                      "bulkPutDirUtil: Large files bulkPut error for %s", srcDir );
        return status;
    }

    /* now bulk put the small files */
    bzero( &bulkOprInfo, sizeof( bulkOprInfo ) );
    bulkOprInfo.flags = BULK_OPR_SMALL_FILES;
    rstrcpy( dataObjOprInp->objPath, targColl, MAX_NAME_LEN );
    rstrcpy( bulkOprInp->objPath, targColl, MAX_NAME_LEN );
    bulkOprInfo.bytesBuf.len = 0;
    bulkOprInfo.bytesBuf.buf = malloc( BULK_OPR_BUF_SIZE );

    status = putDirUtil( myConn, srcDir, targColl, myRodsEnv, rodsArgs,
                         dataObjOprInp, bulkOprInp, rodsRestart, &bulkOprInfo );

    if ( status < 0 ) {
        rodsLogError( LOG_ERROR, status,
                      "bulkPutDirUtil: Small files bulkPut error for %s", srcDir );
        return status;
    }

    if ( bulkOprInfo.count > 0 ) {
        status = sendBulkPut( *myConn, bulkOprInp, &bulkOprInfo, rodsArgs );
        if ( status >= 0 ) {
            if ( rodsRestart->fd > 0 ) {
                rodsRestart->curCnt += bulkOprInfo.count;
                /* last entry. */
                writeRestartFile( rodsRestart, bulkOprInfo.cachedTargPath );
            }
        }
        else {
            rodsLogError( LOG_ERROR, status,
                          "bulkPutDirUtil: tarAndBulkPut error for %s",
                          bulkOprInfo.phyBunDir );
        }
        clearBulkOprInfo( &bulkOprInfo );
        if ( bulkOprInfo.bytesBuf.buf != NULL ) {
            free( bulkOprInfo.bytesBuf.buf );
            bulkOprInfo.bytesBuf.buf = NULL;
        }

    }
    return status;
}
コード例 #2
0
ファイル: abstractengine.cpp プロジェクト: jonarbo/GREASY
void AbstractEngine::buildFinalSummary() {
  
  int completed = 0;
  int failed = 0;
  int cancelled = 0;
  int invalid = 0;
  int total = taskMap.size();
  map<int,GreasyTask*>::iterator it;
  GreasyTask* task;
  unsigned long usedTime = 0;
  float rup = 0;

  log->record(GreasyLog::devel, "AbstractEngine::buildFinalSummary", "Entering...");
  // Compute final stats
  for (it=taskMap.begin();it!=taskMap.end(); it++) {
    task = it->second;
    usedTime += task->getElapsedTimeAcc();
    switch(task->getTaskState()) {
      case GreasyTask::invalid:
	invalid++;
	break;
      case GreasyTask::completed:
	completed++;
	break;
      case GreasyTask::failed:
	failed++;
	break;
      case GreasyTask::cancelled:
	cancelled++;
	break;
    }
  }
  
  // Compute the resource utilization %
  if (globalTimer.secsElapsed()>0&&nworkers>0) {
    int aux = usedTime*10000 / (globalTimer.secsElapsed()*nworkers);
    rup = (float)aux/(float)100;
  }
  
  log->record(GreasyLog::info,"Summary of " + toString(total) + " tasks: " + toString(completed) +
			      " OK, "+toString(failed) + " FAILED, " + toString(cancelled) + 
			      " CANCELLED, " + toString(invalid) + " INVALID.");
  log->record(GreasyLog::info,"Total time: " + globalTimer.getElapsed());
  log->record(GreasyLog::info,"Resource Utilization: " + toString(rup) +"%" );
  
  // Write a restart if we find not completed tasks
  if (failed + cancelled + invalid > 0) writeRestartFile();
  
  log->record(GreasyLog::devel, "AbstractEngine::buildFinalSummary", "Exiting...");
  
}
コード例 #3
0
ファイル: putUtil.cpp プロジェクト: hurngchunlee/irods
int
putDirUtil( rcComm_t **myConn, char *srcDir, char *targColl,
            rodsEnv *myRodsEnv, rodsArguments_t *rodsArgs, dataObjInp_t *dataObjOprInp,
            bulkOprInp_t *bulkOprInp, rodsRestart_t *rodsRestart,
            bulkOprInfo_t *bulkOprInfo ) {
    char srcChildPath[MAX_NAME_LEN], targChildPath[MAX_NAME_LEN];

    if ( srcDir == NULL || targColl == NULL ) {
        rodsLog( LOG_ERROR,
                 "putDirUtil: NULL srcDir or targColl input" );
        return USER__NULL_INPUT_ERR;
    }

    if ( isPathSymlink( rodsArgs, srcDir ) > 0 ) {
        return 0;
    }

    if ( rodsArgs->recursive != True ) {
        rodsLog( LOG_ERROR,
                 "putDirUtil: -r option must be used for putting %s directory",
                 srcDir );
        return USER_INPUT_OPTION_ERR;
    }

    if ( rodsArgs->redirectConn == True && rodsArgs->force != True ) {
        int reconnFlag;
        if ( rodsArgs->reconnect == True ) {
            reconnFlag = RECONN_TIMEOUT;
        }
        else {
            reconnFlag = NO_RECONN;
        }
        /* reconnect to the resource server */
        rstrcpy( dataObjOprInp->objPath, targColl, MAX_NAME_LEN );
        redirectConnToRescSvr( myConn, dataObjOprInp, myRodsEnv, reconnFlag );
        rodsArgs->redirectConn = 0;    /* only do it once */
    }

    rcComm_t *conn = *myConn;
    boost::filesystem::path srcDirPath( srcDir );
    if ( !exists( srcDirPath ) || !is_directory( srcDirPath ) ) {
        rodsLog( LOG_ERROR,
                 "putDirUtil: opendir local dir error for %s, errno = %d\n",
                 srcDir, errno );
        return USER_INPUT_PATH_ERR;
    }

    if ( rodsArgs->verbose == True ) {
        fprintf( stdout, "C- %s:\n", targColl );
    }

    int bulkFlag = NON_BULK_OPR;
    if ( bulkOprInfo != NULL ) {
        bulkFlag = bulkOprInfo->flags;
    }

    int savedStatus = 0;
    boost::filesystem::directory_iterator end_itr; // default construction yields past-the-end
    for ( boost::filesystem::directory_iterator itr( srcDirPath ); itr != end_itr; ++itr ) {
        boost::filesystem::path p = itr->path();
        snprintf( srcChildPath, MAX_NAME_LEN, "%s",
                  p.c_str() );

        if ( isPathSymlink( rodsArgs, srcChildPath ) > 0 ) {
            continue;
        }
        if ( !exists( p ) ) {
            rodsLog( LOG_ERROR,
                     "putDirUtil: stat error for %s, errno = %d\n",
                     srcChildPath, errno );
            return USER_INPUT_PATH_ERR;
        }

        if ( is_symlink( p ) ) {
            boost::filesystem::path cp = read_symlink( p );
            snprintf( srcChildPath, MAX_NAME_LEN, "%s/%s",
                      srcDir, cp.c_str() );
            p = boost::filesystem::path( srcChildPath );
        }
        rodsLong_t dataSize = 0;
        dataObjOprInp->createMode = getPathStMode( p.c_str() );
        objType_t childObjType;
        if ( is_regular_file( p ) ) {
            childObjType = DATA_OBJ_T;
            dataSize = file_size( p );
        }
        else if ( is_directory( p ) ) {
            childObjType = COLL_OBJ_T;
        }
        else {
            rodsLog( LOG_ERROR,
                     "putDirUtil: unknown local path type for %s",
                     srcChildPath );
            savedStatus = USER_INPUT_PATH_ERR;
            continue;
        }
        boost::filesystem::path childPath = p.filename();
        snprintf( targChildPath, MAX_NAME_LEN, "%s/%s",
                  targColl, childPath.c_str() );
        if ( childObjType == DATA_OBJ_T ) {
            if ( bulkFlag == BULK_OPR_SMALL_FILES &&
                    file_size( p ) > MAX_BULK_OPR_FILE_SIZE ) {
                continue;
            }
            else if ( bulkFlag == BULK_OPR_LARGE_FILES &&
                      file_size( p ) <= MAX_BULK_OPR_FILE_SIZE ) {
                continue;
            }
        }

        int status = chkStateForResume( conn, rodsRestart, targChildPath,
                                        rodsArgs, childObjType, &dataObjOprInp->condInput, 1 );

        if ( status < 0 ) {
            /* restart failed */
            return status;
        }
        else if ( status == 0 ) {
            if ( bulkFlag == BULK_OPR_SMALL_FILES &&
                    ( rodsRestart->restartState & LAST_PATH_MATCHED ) != 0 ) {
                /* enable foreFlag one time */
                setForceFlagForRestart( bulkOprInp, bulkOprInfo );
            }
            continue;
        }

        if ( childObjType == DATA_OBJ_T ) {   /* a file */
            if ( bulkFlag == BULK_OPR_SMALL_FILES ) {
                status = bulkPutFileUtil( conn, srcChildPath, targChildPath,
                                          dataSize,  dataObjOprInp->createMode, rodsArgs,
                                          bulkOprInp, bulkOprInfo );
            }
            else {
                /* normal put */
                status = putFileUtil( conn, srcChildPath, targChildPath,
                                      dataSize, rodsArgs, dataObjOprInp );
            }
            if ( rodsRestart->fd > 0 ) {
                if ( status >= 0 ) {
                    if ( bulkFlag == BULK_OPR_SMALL_FILES ) {
                        if ( status > 0 ) {
                            /* status is the number of files bulk loaded */
                            rodsRestart->curCnt += status;
                            status = writeRestartFile( rodsRestart,
                                                       targChildPath );
                        }
                    }
                    else {
                        /* write the restart file */
                        rodsRestart->curCnt ++;
                        status = writeRestartFile( rodsRestart, targChildPath );
                    }
                }
            }
        }
        else {        /* a directory */
            status = mkColl( conn, targChildPath );
            if ( status < 0 ) {
                rodsLogError( LOG_ERROR, status,
                              "putDirUtil: mkColl error for %s", targChildPath );
            }
            status = putDirUtil( myConn, srcChildPath, targChildPath,
                                 myRodsEnv, rodsArgs, dataObjOprInp, bulkOprInp,
                                 rodsRestart, bulkOprInfo );

        }

        if ( status < 0 &&
                status != CAT_NO_ROWS_FOUND ) {
            rodsLogError( LOG_ERROR, status,
                          "putDirUtil: put %s failed. status = %d",
                          srcChildPath, status );
            savedStatus = status;
            if ( rodsRestart->fd > 0 ) {
                break;
            }
        }
    }
    return savedStatus;
}