00001
00002
00003
00004
00005
00006
00007
00008 #include "fileGetFsFreeSpace.h"
00009 #include "miscServerFunct.h"
00010
00011
00012
00013 #include "eirods_log.h"
00014 #include "eirods_file_object.h"
00015 #include "eirods_stacktrace.h"
00016 #include "eirods_resource_backport.h"
00017
00018 int
00019 rsFileGetFsFreeSpace (rsComm_t *rsComm,
00020 fileGetFsFreeSpaceInp_t *fileGetFsFreeSpaceInp,
00021 fileGetFsFreeSpaceOut_t **fileGetFsFreeSpaceOut)
00022 {
00023 rodsServerHost_t *rodsServerHost;
00024 int remoteFlag;
00025 int status;
00026
00027 *fileGetFsFreeSpaceOut = NULL;
00028
00029
00030 eirods::error ret = eirods::get_host_for_hier_string( fileGetFsFreeSpaceInp->rescHier, remoteFlag, rodsServerHost );
00031 if( !ret.ok() ) {
00032 eirods::log( PASSMSG( "failed in call to eirods::get_host_for_hier_string", ret ) );
00033 return -1;
00034 }
00035 if (remoteFlag == LOCAL_HOST) {
00036 status = _rsFileGetFsFreeSpace (rsComm, fileGetFsFreeSpaceInp,
00037 fileGetFsFreeSpaceOut);
00038 } else if (remoteFlag == REMOTE_HOST) {
00039 status = remoteFileGetFsFreeSpace (rsComm, fileGetFsFreeSpaceInp,
00040 fileGetFsFreeSpaceOut, rodsServerHost);
00041 } else {
00042 if (remoteFlag < 0) {
00043 return (remoteFlag);
00044 } else {
00045 rodsLog (LOG_NOTICE,
00046 "rsFileGetFsFreeSpace: resolveHost returned unrecognized value %d",
00047 remoteFlag);
00048 return (SYS_UNRECOGNIZED_REMOTE_FLAG);
00049 }
00050 }
00051
00052
00053
00054 return (status);
00055 }
00056
00057 int
00058 remoteFileGetFsFreeSpace (rsComm_t *rsComm,
00059 fileGetFsFreeSpaceInp_t *fileGetFsFreeSpaceInp,
00060 fileGetFsFreeSpaceOut_t **fileGetFsFreeSpaceOut,
00061 rodsServerHost_t *rodsServerHost)
00062 {
00063 int status;
00064
00065 if (rodsServerHost == NULL) {
00066 rodsLog (LOG_NOTICE,
00067 "remoteFileGetFsFreeSpace: Invalid rodsServerHost");
00068 return SYS_INVALID_SERVER_HOST;
00069 }
00070
00071 if ((status = svrToSvrConnect (rsComm, rodsServerHost)) < 0) {
00072 return status;
00073 }
00074
00075
00076 status = rcFileGetFsFreeSpace (rodsServerHost->conn, fileGetFsFreeSpaceInp,
00077 fileGetFsFreeSpaceOut);
00078
00079 if (status < 0) {
00080 rodsLog (LOG_NOTICE,
00081 "remoteFileGetFsFreeSpace: rcFileGetFsFreeSpace failed for %s, status = %d",
00082 fileGetFsFreeSpaceInp->fileName, status);
00083 }
00084
00085 return status;
00086 }
00087
00088
00089
00090 int _rsFileGetFsFreeSpace(
00091 rsComm_t* _comm,
00092 fileGetFsFreeSpaceInp_t* _freespace_inp,
00093 fileGetFsFreeSpaceOut_t** _freespace_out ) {
00094
00095
00096 if(_freespace_inp->objPath[0] == '\0') {
00097 std::stringstream msg;
00098 msg << __FUNCTION__;
00099 msg << " - Empty logical path.";
00100 eirods::log(LOG_ERROR, msg.str());
00101 return -1;
00102 }
00103
00104
00105
00106 eirods::file_object_ptr file_obj(
00107 new eirods::file_object(
00108 _comm,
00109 _freespace_inp->objPath,
00110 _freespace_inp->fileName,
00111 _freespace_inp->rescHier,
00112 0, 0,
00113 _freespace_inp->flag ) );
00114
00115 eirods::error free_err = fileGetFsFreeSpace( _comm, file_obj );
00116
00117
00118 if( !free_err.ok() ) {
00119 std::stringstream msg;
00120 msg << "fileGetFsFreeSpace failed for [";
00121 msg << _freespace_inp->fileName;
00122 msg << "]";
00123 eirods::error err = PASSMSG( msg.str(), free_err );
00124 eirods::log ( err );
00125 return ((int) free_err.code());
00126 }
00127
00128
00129
00130 *_freespace_out = (fileGetFsFreeSpaceOut_t*)malloc (sizeof (fileGetFsFreeSpaceOut_t));
00131 (*_freespace_out )->size = free_err.code();
00132
00133 return (0);
00134
00135 }
00136
00137
00138
00139
00140
00141
00142