00001
00002
00003
00004
00005
00006
00007
00008 #include "fileStageToCache.h"
00009 #include "fileOpr.h"
00010 #include "miscServerFunct.h"
00011 #include "dataObjOpr.h"
00012 #include "physPath.h"
00013
00014 int
00015 rsFileStageToCache (rsComm_t *rsComm, fileStageSyncInp_t *fileStageToCacheInp)
00016 {
00017 rodsServerHost_t *rodsServerHost;
00018 int remoteFlag;
00019 int status;
00020
00021 remoteFlag = resolveHost (&fileStageToCacheInp->addr, &rodsServerHost);
00022
00023 if (remoteFlag < 0) {
00024 return (remoteFlag);
00025 } else {
00026 status = rsFileStageToCacheByHost (rsComm, fileStageToCacheInp,
00027 rodsServerHost);
00028 return (status);
00029 }
00030 }
00031
00032 int
00033 rsFileStageToCacheByHost (rsComm_t *rsComm,
00034 fileStageSyncInp_t *fileStageToCacheInp, rodsServerHost_t *rodsServerHost)
00035 {
00036 int status;
00037 int remoteFlag;
00038
00039 if (rodsServerHost == NULL) {
00040 rodsLog (LOG_NOTICE,
00041 "rsFileStageToCacheByHost: Input NULL rodsServerHost");
00042 return (SYS_INTERNAL_NULL_INPUT_ERR);
00043 }
00044
00045 remoteFlag = rodsServerHost->localFlag;
00046
00047 if (remoteFlag == LOCAL_HOST) {
00048 status = _rsFileStageToCache (rsComm, fileStageToCacheInp);
00049 } else if (remoteFlag == REMOTE_HOST) {
00050 status = remoteFileStageToCache (rsComm, fileStageToCacheInp,
00051 rodsServerHost);
00052 } else {
00053 if (remoteFlag < 0) {
00054 return (remoteFlag);
00055 } else {
00056 rodsLog (LOG_NOTICE,
00057 "rsFileStageToCacheByHost: resolveHost returned value %d",
00058 remoteFlag);
00059 return (SYS_UNRECOGNIZED_REMOTE_FLAG);
00060 }
00061 }
00062
00063 return (status);
00064 }
00065
00066 int
00067 remoteFileStageToCache (rsComm_t *rsComm,
00068 fileStageSyncInp_t *fileStageToCacheInp, rodsServerHost_t *rodsServerHost)
00069 {
00070 int status;
00071
00072 if (rodsServerHost == NULL) {
00073 rodsLog (LOG_NOTICE,
00074 "remoteFileStageToCache: Invalid rodsServerHost");
00075 return SYS_INVALID_SERVER_HOST;
00076 }
00077
00078 if ((status = svrToSvrConnect (rsComm, rodsServerHost)) < 0) {
00079 return status;
00080 }
00081
00082 status = rcFileStageToCache (rodsServerHost->conn, fileStageToCacheInp);
00083
00084 if (status < 0) {
00085 rodsLog (LOG_NOTICE,
00086 "remoteFileStageToCache: rcFileStageToCache failed for %s",
00087 fileStageToCacheInp->filename);
00088 }
00089
00090 return status;
00091 }
00092
00093
00094
00095
00096 int
00097 _rsFileStageToCache (rsComm_t *rsComm, fileStageSyncInp_t *fileStageToCacheInp)
00098 {
00099 int status;
00100
00101
00102
00103
00104
00105
00106
00107 mkDirForFilePath (fileStageToCacheInp->cacheFileType, rsComm,
00108 "/", fileStageToCacheInp->cacheFilename, getDefDirMode ());
00109
00110 status = fileStageToCache (fileStageToCacheInp->fileType, rsComm,
00111 fileStageToCacheInp->cacheFileType,
00112 fileStageToCacheInp->mode, fileStageToCacheInp->flags,
00113 fileStageToCacheInp->filename, fileStageToCacheInp->cacheFilename,
00114 fileStageToCacheInp->dataSize, &fileStageToCacheInp->condInput);
00115
00116 if (status < 0) {
00117 if (getErrno (status) == EEXIST) {
00118
00119 fileRmdir (fileStageToCacheInp->cacheFileType, rsComm,
00120 fileStageToCacheInp->cacheFilename);
00121 } else {
00122 rodsLog (LOG_NOTICE,
00123 "_rsFileStageToCache: fileStageToCache for %s, status = %d",
00124 fileStageToCacheInp->filename, status);
00125 return (status);
00126 }
00127 status = fileStageToCache (fileStageToCacheInp->fileType, rsComm,
00128 fileStageToCacheInp->cacheFileType,
00129 fileStageToCacheInp->mode, fileStageToCacheInp->flags,
00130 fileStageToCacheInp->filename, fileStageToCacheInp->cacheFilename,
00131 fileStageToCacheInp->dataSize, &fileStageToCacheInp->condInput);
00132 if (status < 0) {
00133 rodsLog (LOG_NOTICE,
00134 "_rsFileStageToCache: fileStageToCache for %s, status = %d",
00135 fileStageToCacheInp->filename, status);
00136 }
00137 }
00138 return (status);
00139 }
00140