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( "rsFileCreate - 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( rsComm_t *rsComm, fileGetFsFreeSpaceInp_t *fileGetFsFreeSpaceInp,
00091 fileGetFsFreeSpaceOut_t **fileGetFsFreeSpaceOut) {
00092
00093 if(fileGetFsFreeSpaceInp->objPath[0] == '\0') {
00094 std::stringstream msg;
00095 msg << __FUNCTION__;
00096 msg << " - Empty logical path.";
00097 eirods::log(LOG_ERROR, msg.str());
00098 return -1;
00099 }
00100
00101
00102
00103 eirods::file_object file_obj( rsComm, fileGetFsFreeSpaceInp->objPath, fileGetFsFreeSpaceInp->fileName, fileGetFsFreeSpaceInp->rescHier,
00104 0, 0, fileGetFsFreeSpaceInp->flag );
00105
00106 eirods::error free_err = fileGetFsFreeSpace( rsComm, file_obj );
00107
00108
00109 if( !free_err.ok() ) {
00110 std::stringstream msg;
00111 msg << "_rsFileGetFsFreeSpace: fileGetFsFreeSpace for ";
00112 msg << fileGetFsFreeSpaceInp->fileName;
00113 msg << ", status = ";
00114 msg << free_err.code();
00115 eirods::error err = PASS( false, free_err.code(), msg.str(), free_err );
00116 eirods::log ( err );
00117 return ((int) free_err.code());
00118 }
00119
00120
00121
00122 *fileGetFsFreeSpaceOut = (fileGetFsFreeSpaceOut_t*)malloc (sizeof (fileGetFsFreeSpaceOut_t));
00123 (*fileGetFsFreeSpaceOut)->size = free_err.code();
00124
00125 return (0);
00126
00127 }
00128
00129
00130
00131
00132
00133
00134