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