/// =-=-=-=-=-=-=- /// @brief This routine is for testing the TEST_STAGE_FILE_TYPE. /// Just copy the file from cacheFilename to filename. optionalInfo info /// is not used. irods::error univ_mss_file_sync_to_arch( irods::resource_plugin_context& _ctx, const char* _cache_file_name ) { // =-=-=-=-=-=-=- // check context irods::error err = univ_mss_check_param< irods::file_object >( _ctx ); if ( !err.ok() ) { std::stringstream msg; msg << __FUNCTION__; msg << " - invalid context"; return PASSMSG( msg.str(), err ); } // =-=-=-=-=-=-=- // snag a ref to the fco irods::file_object_ptr fco = boost::dynamic_pointer_cast< irods::file_object >( _ctx.fco() ); std::string filename = fco->physical_path(); // =-=-=-=-=-=-=- // first create the directory name char dirname[MAX_NAME_LEN] = ""; const char* lastpart = strrchr( filename.c_str(), '/' ); int lenDir = strlen( filename.c_str() ) - strlen( lastpart ); strncpy( dirname, filename.c_str(), lenDir ); // =-=-=-=-=-=-=- // create a context to call the mkdir operation irods::collection_object_ptr coll_obj( new irods::collection_object( dirname, fco->resc_hier(), fco->mode(), 0 ) ); irods::resource_plugin_context context( _ctx.prop_map(), coll_obj, "", _ctx.comm(), _ctx.child_map() ); // =-=-=-=-=-=-=- // create the directory on the MSS int status = 0; err = univ_mss_file_mkdir( context ); execCmdOut_t* execCmdOut = NULL; char cmdArgv[HUGE_NAME_LEN] = ""; execCmd_t execCmdInp; bzero( &execCmdInp, sizeof( execCmdInp ) ); // =-=-=-=-=-=-=- // get the script property std::string script; err = _ctx.prop_map().get< std::string >( SCRIPT_PROP, script ); if ( !err.ok() ) { return PASSMSG( __FUNCTION__, err ); } rstrcpy( execCmdInp.cmd, script.c_str(), LONG_NAME_LEN ); strcat( cmdArgv, "syncToArch" ); strcat( cmdArgv, " " ); strcat( cmdArgv, _cache_file_name ); strcat( cmdArgv, " " ); strcat( cmdArgv, filename.c_str() ); strcat( cmdArgv, "" ); rstrcpy( execCmdInp.cmdArgv, cmdArgv, HUGE_NAME_LEN ); rstrcpy( execCmdInp.execAddr, "localhost", LONG_NAME_LEN ); status = _rsExecCmd( _ctx.comm(), &execCmdInp, &execCmdOut ); if ( status == 0 ) { err = univ_mss_file_chmod( _ctx ); if ( !err.ok() ) { PASSMSG( "univ_mss_file_sync_to_arch - failed.", err ); } } else { status = UNIV_MSS_SYNCTOARCH_ERR - errno; std::stringstream msg; msg << "univ_mss_file_sync_to_arch: copy of ["; msg << _cache_file_name; msg << "] to ["; msg << filename; msg << "] failed."; msg << " stdout buff ["; msg << execCmdOut->stdoutBuf.buf; msg << "] stderr buff ["; msg << execCmdOut->stderrBuf.buf; msg << "] status ["; msg << execCmdOut->status << "]"; return ERROR( status, msg.str() ); } return CODE( status ); } // univ_mss_file_sync_to_arch
/// =-=-=-=-=-=-=- /// @brief interface for POSIX rename irods::error univ_mss_file_rename( irods::resource_plugin_context& _ctx, const char* _new_file_name ) { // =-=-=-=-=-=-=- // check context irods::error err = univ_mss_check_param< irods::file_object >( _ctx ); if ( !err.ok() ) { std::stringstream msg; msg << __FUNCTION__; msg << " - invalid context"; return PASSMSG( msg.str(), err ); } // =-=-=-=-=-=-=- // get the script property std::string script; err = _ctx.prop_map().get< std::string >( SCRIPT_PROP, script ); if ( !err.ok() ) { return PASSMSG( __FUNCTION__, err ); } // =-=-=-=-=-=-=- // snag a ref to the fco irods::file_object_ptr fco = boost::dynamic_pointer_cast< irods::file_object >( _ctx.fco() ); std::string filename = fco->physical_path(); // =-=-=-=-=-=-=- // first create the directory name char dirname[MAX_NAME_LEN] = ""; const char* lastpart = strrchr( _new_file_name, '/' ); int lenDir = strlen( _new_file_name ) - strlen( lastpart ); strncpy( dirname, _new_file_name, lenDir ); // =-=-=-=-=-=-=- // create a context to call the mkdir operation irods::collection_object_ptr coll_obj( new irods::collection_object( dirname, fco->resc_hier(), fco->mode(), 0 ) ); irods::resource_plugin_context context( _ctx.prop_map(), coll_obj, "", _ctx.comm(), _ctx.child_map() ); // =-=-=-=-=-=-=- // create the directory on the MSS int status = 0; err = univ_mss_file_mkdir( context ); execCmd_t execCmdInp; bzero( &execCmdInp, sizeof( execCmdInp ) ); snprintf( execCmdInp.cmd, sizeof( execCmdInp.cmd ), "%s", script.c_str() ); snprintf( execCmdInp.cmdArgv, sizeof( execCmdInp.cmdArgv ), "mv '%s' '%s'", filename.c_str(), _new_file_name ); snprintf( execCmdInp.execAddr, sizeof( execCmdInp.execAddr ), "%s", "localhost" ); execCmdOut_t *execCmdOut = NULL; status = _rsExecCmd( &execCmdInp, &execCmdOut ); freeCmdExecOut( execCmdOut ); if ( status < 0 ) { status = UNIV_MSS_RENAME_ERR - errno; std::stringstream msg; msg << "univ_mss_file_rename - failed for ["; msg << filename; msg << "]"; return ERROR( status, msg.str() ); } return CODE( status ); } // univ_mss_file_rename