irods::error random_get_resc_for_call( irods::resource_plugin_context& _ctx, irods::resource_ptr& _resc ) { irods::error result = SUCCESS(); // =-=-=-=-=-=-=- // check incoming parameters irods::error err = random_check_params< DEST_TYPE >( _ctx ); if ( ( result = ASSERT_PASS( err, "Bad resource context." ) ).ok() ) { // =-=-=-=-=-=-=- // get the object's name std::string name; err = _ctx.prop_map().get< std::string >( irods::RESOURCE_NAME, name ); if ( ( result = ASSERT_PASS( err, "Failed to get property." ) ).ok() ) { // =-=-=-=-=-=-=- // get the object's hier string boost::shared_ptr< DEST_TYPE > dst_obj = boost::dynamic_pointer_cast< DEST_TYPE >( _ctx.fco() ); std::string hier = dst_obj->resc_hier( ); // =-=-=-=-=-=-=- // get the next child pointer given our name and the hier string err = get_next_child_in_hier( name, hier, _ctx.child_map(), _resc ); result = ASSERT_PASS( err, "Get next child failed." ); } } return result; } // random_get_resc_for_call
irods::error round_robin_get_resc_for_call( irods::resource_plugin_context& _ctx, irods::resource_ptr& _resc ) { // =-=-=-=-=-=-=- // check incoming parameters irods::error err = round_robin_check_params< DEST_TYPE >( _ctx ); if ( !err.ok() ) { return PASSMSG( "round_robin_get_resc_for_call - bad resource context", err ); } // =-=-=-=-=-=-=- // get the object's name std::string name; err = _ctx.prop_map().get< std::string >( irods::RESOURCE_NAME, name ); if ( !err.ok() ) { return PASSMSG( "round_robin_get_resc_for_call - failed to get property 'name'.", err ); } // =-=-=-=-=-=-=- // get the object's hier string boost::shared_ptr< DEST_TYPE > obj = boost::dynamic_pointer_cast< DEST_TYPE >( _ctx.fco() ); std::string hier = obj->resc_hier( ); // =-=-=-=-=-=-=- // get the next child pointer given our name and the hier string err = get_next_child_in_hier( name, hier, _ctx.child_map(), _resc ); if ( !err.ok() ) { return PASSMSG( "round_robin_get_resc_for_call - get_next_child_in_hier failed.", err ); } return SUCCESS(); } // round_robin_get_resc_for_call
/// =-=-=-=-=-=-=- /// @brief get the next resource shared pointer given this resources name /// as well as the file object irods::error get_next_child_for_open_or_write( const std::string& _name, irods::file_object_ptr& _file_obj, irods::resource_child_map& _cmap, irods::resource_ptr& _resc ) { // =-=-=-=-=-=-=- // set up iteration over physical objects std::vector< irods::physical_object > objs = _file_obj->replicas(); std::vector< irods::physical_object >::iterator itr = objs.begin(); // =-=-=-=-=-=-=- // check to see if the replica is in this resource, if one is requested for ( ; itr != objs.end(); ++itr ) { // =-=-=-=-=-=-=- // run the hier string through the parser irods::hierarchy_parser parser; parser.set_string( itr->resc_hier() ); // =-=-=-=-=-=-=- // find this resource in the hier if ( !parser.resc_in_hier( _name ) ) { continue; } // =-=-=-=-=-=-=- // if we have a hit, get the resc ptr to the next resc return get_next_child_in_hier( _name, itr->resc_hier(), _cmap, _resc ); } // for itr std::string msg( "no replica found in resc [" ); msg += _name + "]"; return ERROR( REPLICA_NOT_IN_RESC, msg ); } // get_next_child_for_open_or_write