// =-=-=-=-=-=-=- // pass_thru_file_rebalance - code which would rebalance the subtree irods::error pass_thru_file_rebalance( irods::resource_plugin_context& _ctx ) { // =-=-=-=-=-=-=- // forward request for rebalance to children irods::error result = SUCCESS(); irods::resource_child_map::iterator itr = _ctx.child_map().begin(); for ( ; itr != _ctx.child_map().end(); ++itr ) { irods::error ret = itr->second.second->call( _ctx.comm(), irods::RESOURCE_OP_REBALANCE, _ctx.fco() ); if ( !ret.ok() ) { irods::log( PASS( ret ) ); result = ret; } } if( !result.ok() ) { return PASS( result ); } return update_resource_object_count( _ctx.comm(), _ctx.prop_map() ); } // pass_thru_file_rebalancec
/// =-=-=-=-=-=-=- /// @brief interface to notify of a file modification irods::error round_robin_file_modified( irods::resource_plugin_context& _ctx ) { // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = round_robin_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( !err.ok() ) { return PASS( err ); } // =-=-=-=-=-=-=- // call modified on the child err = resc->call( _ctx.comm(), irods::RESOURCE_OP_MODIFIED, _ctx.fco() ); if ( !err.ok() ) { return PASS( err ); } // =-=-=-=-=-=-=- // if file modified is successful then we will update the next // child in the round robin within the database std::string name; _ctx.prop_map().get< std::string >( irods::RESOURCE_NAME, name ); std::string next_child; _ctx.prop_map().get< std::string >( NEXT_CHILD_PROP, next_child ); setRoundRobinContextInp_t inp; strncpy( inp.resc_name_, name.c_str(), NAME_LEN ); strncpy( inp.context_, next_child.c_str(), MAX_NAME_LEN ); int status = irods::server_api_call( SET_RR_CTX_AN, _ctx.comm(), &inp, NULL, ( void** ) NULL, NULL ); if ( status < 0 ) { std::stringstream msg; msg << "failed to update round robin context for ["; msg << name << "] with context [" << next_child << "]"; return ERROR( status, msg.str() ); } else { return SUCCESS(); } } // round_robin_file_modified
// =-=-=-=-=-=-=- // univ_mss__file_rebalance - code which would rebalance the subtree irods::error univ_mss__file_rebalance( irods::resource_plugin_context& _ctx ) { return update_resource_object_count( _ctx.comm(), _ctx.prop_map() ); } // univ_mss__file_rebalancec
// =-=-=-=-=-=-=- // unixRedirectPlugin - used to allow the resource to determine which host // should provide the requested operation irods::error pass_thru_redirect_plugin( irods::resource_plugin_context& _ctx, const std::string* _opr, const std::string* _curr_host, irods::hierarchy_parser* _out_parser, float* _out_vote ) { // =-=-=-=-=-=-=- // check incoming parameters irods::error result = SUCCESS(); irods::error ret = pass_thru_check_params( _ctx ); if ( !ret.ok() ) { result = PASSMSG( "pass_thru_redirect_plugin - invalid resource context.", ret ); } if ( !_opr ) { return ERROR( SYS_INVALID_INPUT_PARAM, "pass_thru_redirect_plugin - null operation" ); } if ( !_curr_host ) { return ERROR( SYS_INVALID_INPUT_PARAM, "pass_thru_redirect_plugin - null operation" ); } if ( !_out_parser ) { return ERROR( SYS_INVALID_INPUT_PARAM, "pass_thru_redirect_plugin - null outgoing hier parser" ); } if ( !_out_vote ) { return ERROR( SYS_INVALID_INPUT_PARAM, "pass_thru_redirect_plugin - null outgoing vote" ); } // =-=-=-=-=-=-=- // get the name of this resource std::string resc_name; ret = _ctx.prop_map().get< std::string >( irods::RESOURCE_NAME, resc_name ); if ( !ret.ok() ) { std::stringstream msg; msg << "pass_thru_redirect_plugin - failed in get property for name"; return ERROR( -1, msg.str() ); } // =-=-=-=-=-=-=- // add ourselves to the hierarchy parser by default _out_parser->add_child( resc_name ); irods::resource_ptr resc; ret = pass_thru_get_first_chid_resc( _ctx.child_map(), resc ); if ( !ret.ok() ) { return PASSMSG( "pass_thru_redirect_plugin - failed getting the first child resource pointer.", ret ); } return resc->call < const std::string*, const std::string*, irods::hierarchy_parser*, float* > ( _ctx.comm(), irods::RESOURCE_OP_RESOLVE_RESC_HIER, _ctx.fco(), _opr, _curr_host, _out_parser, _out_vote ); } // pass_thru_redirect_plugin
// =-=-=-=-=-=-=- // mock_archive_rebalance - code which would rebalance the subtree irods::error mock_archive_rebalance( irods::resource_plugin_context& _ctx ) { return update_resource_object_count( _ctx.comm(), _ctx.prop_map() ); } // mock_archive_file_rebalancec
/// =-=-=-=-=-=-=- /// @brief This routine is for testing the TEST_STAGE_FILE_TYPE. /// Just copy the file from filename to cacheFilename. optionalInfo info /// is not used. irods::error univ_mss_file_stage_to_cache( 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(); // =-=-=-=-=-=-=- // get the script property std::string script; err = _ctx.prop_map().get< std::string >( SCRIPT_PROP, script ); if ( !err.ok() ) { return PASSMSG( __FUNCTION__, err ); } int status = 0; execCmd_t execCmdInp; char cmdArgv[HUGE_NAME_LEN] = ""; execCmdOut_t *execCmdOut = NULL; bzero( &execCmdInp, sizeof( execCmdInp ) ); rstrcpy( execCmdInp.cmd, script.c_str(), LONG_NAME_LEN ); strcat( cmdArgv, "stageToCache" ); strcat( cmdArgv, " '" ); strcat( cmdArgv, filename.c_str() ); strcat( cmdArgv, "' '" ); strcat( cmdArgv, _cache_file_name ); 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 ) { status = UNIV_MSS_STAGETOCACHE_ERR - errno; std::stringstream msg; msg << "univ_mss_file_stage_to_cache: staging from ["; msg << _cache_file_name; msg << "] to ["; msg << filename; msg << "] failed."; return ERROR( status, msg.str() ); } return CODE( status ); } // univ_mss_file_stage_to_cache
/// =-=-=-=-=-=-=- /// @brief interface for POSIX mkdir irods::error univ_mss_file_mkdir( irods::resource_plugin_context& _ctx ) { // =-=-=-=-=-=-=- // check context irods::error err = univ_mss_check_param< irods::collection_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::collection_object_ptr fco = boost::dynamic_pointer_cast< irods::collection_object >( _ctx.fco() ); std::string dirname = fco->physical_path(); int status = 0; execCmd_t execCmdInp; char cmdArgv[HUGE_NAME_LEN] = ""; execCmdOut_t *execCmdOut = NULL; bzero( &execCmdInp, sizeof( execCmdInp ) ); rstrcpy( execCmdInp.cmd, script.c_str(), LONG_NAME_LEN ); strcat( cmdArgv, "mkdir" ); strcat( cmdArgv, " '" ); strcat( cmdArgv, dirname.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 ) { status = UNIV_MSS_MKDIR_ERR - errno; std::stringstream msg; msg << "univ_mss_file_mkdir - mkdir failed for ["; msg << dirname; msg << "]"; return ERROR( status, msg.str() ); } int mode = getDefDirMode(); fco->mode( mode ); err = univ_mss_file_chmod( _ctx ); return err; } // univ_mss_file_mkdir
/// =-=-=-=-=-=-=- /// @brief interface for POSIX truncate irods::error round_robin_file_truncate( irods::resource_plugin_context& _ctx ) { // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = round_robin_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( !err.ok() ) { return PASS( err ); } // =-=-=-=-=-=-=- // call truncate on the child return resc->call( _ctx.comm(), irods::RESOURCE_OP_TRUNCATE, _ctx.fco() ); } // round_robin_file_truncate
/// =-=-=-=-=-=-=- /// @brief interface to notify of a file unregistration irods::error load_balanced_file_unregistered( irods::resource_plugin_context& _ctx ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = load_balanced_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( ( result = ASSERT_PASS( err, "Failed selecting load_balanced resource." ) ).ok() ) { // =-=-=-=-=-=-=- // call rename on the child err = resc->call( _ctx.comm(), irods::RESOURCE_OP_UNREGISTERED, _ctx.fco() ); result = ASSERT_PASS( err, "Failed calling child operation." ); } return result; } // load_balanced_file_unregistered
/// =-=-=-=-=-=-=- /// @brief This routine copys data from the archive resource to the cache resource /// in a compound resource composition irods::error load_balanced_file_stage_to_cache( irods::resource_plugin_context& _ctx, const char* _cache_file_name ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = load_balanced_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( ( result = ASSERT_PASS( err, "Failed to select load_balanced resource." ) ).ok() ) { // =-=-=-=-=-=-=- // call stage on the child err = resc->call< const char* >( _ctx.comm(), irods::RESOURCE_OP_STAGETOCACHE, _ctx.fco(), _cache_file_name ); result = ASSERT_PASS( err, "Failed calling child operation." ); } return result; } // load_balanced_file_stage_to_cache
/// =-=-=-=-=-=-=- /// @brief interface for POSIX Close irods::error load_balanced_file_close( irods::resource_plugin_context& _ctx ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = load_balanced_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( ( result = ASSERT_PASS( err, "Failed to select load_balanced resource." ) ).ok() ) { // =-=-=-=-=-=-=- // call close on the child err = resc->call( _ctx.comm(), irods::RESOURCE_OP_CLOSE, _ctx.fco() ); result = ASSERT_PASS( err, "Failed calling operation in child." ); } return result; } // load_balanced_file_close
/// =-=-=-=-=-=-=- /// @brief interface to notify of a file unregistration irods::error round_robin_file_unregistered( irods::resource_plugin_context& _ctx ) { // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = round_robin_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( !err.ok() ) { std::stringstream msg; msg << __FUNCTION__; msg << " - failed."; return PASSMSG( msg.str(), err ); } // =-=-=-=-=-=-=- // call unregistered on the child return resc->call( _ctx.comm(), irods::RESOURCE_OP_UNREGISTERED, _ctx.fco() ); } // round_robin_file_unregistered
// =-=-=-=-=-=-=- /// @brief interface for POSIX closedir irods::error round_robin_file_closedir( irods::resource_plugin_context& _ctx ) { // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = round_robin_get_resc_for_call< irods::collection_object >( _ctx, resc ); if ( !err.ok() ) { std::stringstream msg; msg << __FUNCTION__; msg << " - failed."; return PASSMSG( msg.str(), err ); } // =-=-=-=-=-=-=- // call closedir on the child return resc->call( _ctx.comm(), irods::RESOURCE_OP_CLOSEDIR, _ctx.fco() ); } // round_robin_file_closedir
/// =-=-=-=-=-=-=- /// @brief interface for POSIX create irods::error random_file_create( irods::resource_plugin_context& _ctx ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = random_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( ( result = ASSERT_PASS( err, "Invalid resource context." ) ).ok() ) { // =-=-=-=-=-=-=- // call create on the child err = resc->call( _ctx.comm(), irods::RESOURCE_OP_CREATE, _ctx.fco() ); result = ASSERT_PASS( err, "Failed calling create on child resource." ); } return result; } // random_file_create
// =-=-=-=-=-=-=- // interface for POSIX Open irods::error random_file_open( irods::resource_plugin_context& _ctx ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = random_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( ( result = ASSERT_PASS( err, "Failed in file open." ) ).ok() ) { // =-=-=-=-=-=-=- // call open operation on the child err = resc->call( _ctx.comm(), irods::RESOURCE_OP_OPEN, _ctx.fco() ); result = ASSERT_PASS( err, "Failed calling open on the child." ); } return result; } // random_file_open
// =-=-=-=-=-=-=- /// @brief interface for POSIX closedir irods::error random_file_closedir( irods::resource_plugin_context& _ctx ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = random_get_resc_for_call< irods::collection_object >( _ctx, resc ); if ( ( result = ASSERT_PASS( err, "Failed to select random resource." ) ).ok() ) { // =-=-=-=-=-=-=- // call closedir on the child err = resc->call( _ctx.comm(), irods::RESOURCE_OP_CLOSEDIR, _ctx.fco() ); result = ASSERT_PASS( err, "Failed calling child operation." ); } return result; } // random_file_closedir
/// =-=-=-=-=-=-=- /// @brief interface to notify of a file modification irods::error random_file_modified( irods::resource_plugin_context& _ctx ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = random_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( ( result = ASSERT_PASS( err, "Failed selecting random resource." ) ).ok() ) { // =-=-=-=-=-=-=- // call rename on the child err = resc->call( _ctx.comm(), irods::RESOURCE_OP_MODIFIED, _ctx.fco() ); result = ASSERT_PASS( err, "Failed calling child operation." ); } return result; } // random_file_modified
/// =-=-=-=-=-=-=- /// @brief interface for POSIX Unlink irods::error random_file_unlink( irods::resource_plugin_context& _ctx ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = random_get_resc_for_call< irods::data_object >( _ctx, resc ); if ( ( result = ASSERT_PASS( err, "Failed to select random resource." ) ).ok() ) { // =-=-=-=-=-=-=- // call unlink on the child err = resc->call( _ctx.comm(), irods::RESOURCE_OP_UNLINK, _ctx.fco() ); result = ASSERT_PASS( err, "Failed during call to child operation." ); } return result; } // random_file_unlink
/// =-=-=-=-=-=-=- /// @brief interface to notify a resource of an operation irods::error random_file_notify( irods::resource_plugin_context& _ctx, const std::string* _opr ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = random_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( ( result = ASSERT_PASS( err, "Failed selecting random resource." ) ).ok() ) { // =-=-=-=-=-=-=- // call rename on the child err = resc->call( _ctx.comm(), irods::RESOURCE_OP_NOTIFY, _ctx.fco(), _opr ); result = ASSERT_PASS_MSG( err, "Failed calling child operation." ); } return result; } // random_file_notify
/// =-=-=-=-=-=-=- /// @brief interface for POSIX Stat irods::error round_robin_file_stat( irods::resource_plugin_context& _ctx, struct stat* _statbuf ) { // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = round_robin_get_resc_for_call< irods::data_object >( _ctx, resc ); if ( !err.ok() ) { std::stringstream msg; msg << __FUNCTION__; msg << " - failed."; return PASSMSG( msg.str(), err ); } // =-=-=-=-=-=-=- // call stat on the child return resc->call< struct stat* >( _ctx.comm(), irods::RESOURCE_OP_STAT, _ctx.fco(), _statbuf ); } // round_robin_file_stat
/// =-=-=-=-=-=-=- /// @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 round_robin_file_sync_to_arch( irods::resource_plugin_context& _ctx, const char* _cache_file_name ) { // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = round_robin_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( !err.ok() ) { std::stringstream msg; msg << __FUNCTION__; msg << " - failed."; return PASSMSG( msg.str(), err ); } // =-=-=-=-=-=-=- // call synctoarch on the child return resc->call< const char* >( _ctx.comm(), irods::RESOURCE_OP_SYNCTOARCH, _ctx.fco(), _cache_file_name ); } // round_robin_file_sync_to_arch
/// =-=-=-=-=-=-=- /// @brief interface for POSIX readdir irods::error load_balanced_file_readdir( irods::resource_plugin_context& _ctx, struct rodsDirent** _dirent_ptr ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = load_balanced_get_resc_for_call< irods::collection_object >( _ctx, resc ); if ( ( result = ASSERT_PASS( err, "Failed to select load_balanced resource." ) ).ok() ) { // =-=-=-=-=-=-=- // call readdir on the child err = resc->call< struct rodsDirent** >( _ctx.comm(), irods::RESOURCE_OP_READDIR, _ctx.fco(), _dirent_ptr ); result = ASSERT_PASS( err, "Failed calling child operation." ); } return result; } // load_balanced_file_readdir
/// =-=-=-=-=-=-=- /// @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 random_file_sync_to_arch( irods::resource_plugin_context& _ctx, const char* _cache_file_name ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = random_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( ( result = ASSERT_PASS( err, "Failed selecting random resource." ) ).ok() ) { // =-=-=-=-=-=-=- // call synctoarch on the child err = resc->call< const char* >( _ctx.comm(), irods::RESOURCE_OP_SYNCTOARCH, _ctx.fco(), _cache_file_name ); result = ASSERT_PASS( err, "Failed calling child operation." ); } return result; } // random_file_sync_to_arch
/// =-=-=-=-=-=-=- /// @brief interface for POSIX rename irods::error random_file_rename( irods::resource_plugin_context& _ctx, const char* _new_file_name ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = random_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( ( result = ASSERT_PASS( err, "Failed to select random resource." ) ).ok() ) { // =-=-=-=-=-=-=- // call rename on the child err = resc->call< const char* >( _ctx.comm(), irods::RESOURCE_OP_RENAME, _ctx.fco(), _new_file_name ); result = ASSERT_PASS( err, "Failed calling child operation." ); } return result; } // random_file_rename
/// =-=-=-=-=-=-=- /// @brief interface for POSIX Stat irods::error random_file_stat( irods::resource_plugin_context& _ctx, struct stat* _statbuf ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = random_get_resc_for_call< irods::data_object >( _ctx, resc ); if ( ( result = ASSERT_PASS( err, "Failed selecting random child resource." ) ).ok() ) { // =-=-=-=-=-=-=- // call stat on the child err = resc->call< struct stat* >( _ctx.comm(), irods::RESOURCE_OP_STAT, _ctx.fco(), _statbuf ); result = ASSERT_PASS( err, "Failed in call to child operation." ); } return result; } // random_file_stat
/// =-=-=-=-=-=-=- /// @brief interface for POSIX lseek irods::error round_robin_file_lseek( irods::resource_plugin_context& _ctx, long long _offset, int _whence ) { // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = round_robin_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( !err.ok() ) { std::stringstream msg; msg << __FUNCTION__; msg << " - failed."; return PASSMSG( msg.str(), err ); } // =-=-=-=-=-=-=- // call lseek on the child return resc->call< long long, int >( _ctx.comm(), irods::RESOURCE_OP_LSEEK, _ctx.fco(), _offset, _whence ); } // round_robin_file_lseek
/// =-=-=-=-=-=-=- /// @brief interface for POSIX lseek irods::error random_file_lseek( irods::resource_plugin_context& _ctx, long long _offset, int _whence ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = random_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( ( result = ASSERT_PASS( err, "Failed to select random child." ) ).ok() ) { // =-=-=-=-=-=-=- // call lseek on the child err = resc->call< long long, int >( _ctx.comm(), irods::RESOURCE_OP_LSEEK, _ctx.fco(), _offset, _whence ); result = ASSERT_PASS( err, "Failed calling child operation." ); } return result; } // random_file_lseek
/// =-=-=-=-=-=-=- /// @brief interface for POSIX Write irods::error random_file_write( irods::resource_plugin_context& _ctx, void* _buf, int _len ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = random_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( ( result = ASSERT_PASS( err, "Failed choosing child resource." ) ).ok() ) { // =-=-=-=-=-=-=- // call write on the child err = resc->call< void*, int >( _ctx.comm(), irods::RESOURCE_OP_WRITE, _ctx.fco(), _buf, _len ); result = ASSERT_PASS( err, "Failed calling operation on child resource." ); } return result; } // random_file_write
/// =-=-=-=-=-=-=- /// @brief interface for POSIX Write irods::error round_robin_file_write( irods::resource_plugin_context& _ctx, void* _buf, int _len ) { // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = round_robin_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( !err.ok() ) { std::stringstream msg; msg << __FUNCTION__; msg << " - failed."; return PASSMSG( msg.str(), err ); } // =-=-=-=-=-=-=- // call write on the child return resc->call< void*, int >( _ctx.comm(), irods::RESOURCE_OP_WRITE, _ctx.fco(), _buf, _len ); } // round_robin_file_write
/// =-=-=-=-=-=-=- /// @brief interface for POSIX Read irods::error load_balanced_file_read( irods::resource_plugin_context& _ctx, void* _buf, int _len ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // get the child resc to call irods::resource_ptr resc; irods::error err = load_balanced_get_resc_for_call< irods::file_object >( _ctx, resc ); if ( ( result = ASSERT_PASS( err, "Failed finding resource." ) ).ok() ) { // =-=-=-=-=-=-=- // call read on the child err = resc->call< void*, int >( _ctx.comm(), irods::RESOURCE_OP_READ, _ctx.fco(), _buf, _len ); result = ASSERT_PASS( err, "Failed calling operation on child resource." ); } return result; } // load_balanced_file_read