00001
00002
00003
00004
00005
00006 #include "fileFsync.h"
00007 #include "miscServerFunct.h"
00008 #include "rsGlobalExtern.h"
00009
00010 int
00011 rsFileFsync (rsComm_t *rsComm, fileFsyncInp_t *fileFsyncInp)
00012 {
00013 rodsServerHost_t *rodsServerHost;
00014 int remoteFlag;
00015 int retVal;
00016
00017 remoteFlag = getServerHostByFileInx (fileFsyncInp->fileInx,
00018 &rodsServerHost);
00019
00020 if (remoteFlag == LOCAL_HOST) {
00021 retVal = _rsFileFsync (rsComm, fileFsyncInp);
00022 } else if (remoteFlag == REMOTE_HOST) {
00023 retVal = remoteFileFsync (rsComm, fileFsyncInp, rodsServerHost);
00024 } else {
00025 if (remoteFlag < 0) {
00026 return (remoteFlag);
00027 } else {
00028 rodsLog (LOG_NOTICE,
00029 "rsFileFsync: resolveHost returned unrecognized value %d",
00030 remoteFlag);
00031 return (SYS_UNRECOGNIZED_REMOTE_FLAG);
00032 }
00033 }
00034
00035
00036
00037 return (retVal);
00038 }
00039
00040 int
00041 remoteFileFsync (rsComm_t *rsComm, fileFsyncInp_t *fileFsyncInp,
00042 rodsServerHost_t *rodsServerHost)
00043 {
00044 int status;
00045
00046 if (rodsServerHost == NULL) {
00047 rodsLog (LOG_NOTICE,
00048 "remoteFileFsync: Invalid rodsServerHost");
00049 return SYS_INVALID_SERVER_HOST;
00050 }
00051
00052 if ((status = svrToSvrConnect (rsComm, rodsServerHost)) < 0) {
00053 return status;
00054 }
00055
00056 fileFsyncInp->fileInx = convL3descInx (fileFsyncInp->fileInx);
00057 status = rcFileFsync (rodsServerHost->conn, fileFsyncInp);
00058
00059 if (status < 0) {
00060 rodsLog (LOG_NOTICE,
00061 "remoteFileFsync: rcFileFsync failed for %d, status = %d",
00062 fileFsyncInp->fileInx, status);
00063 }
00064
00065 return status;
00066 }
00067
00068 int
00069 _rsFileFsync (rsComm_t *rsComm, fileFsyncInp_t *fileFsyncInp)
00070 {
00071 int status;
00072
00073 status = fileFsync (FileDesc[fileFsyncInp->fileInx].fileType,
00074 rsComm, FileDesc[fileFsyncInp->fileInx].fd);
00075
00076 if (status < 0) {
00077 rodsLog (LOG_NOTICE,
00078 "_rsFileFsync: fileFsync failed for %d, status = %d",
00079 fileFsyncInp->fileInx, status);
00080 return (status);
00081 }
00082
00083 return (status);
00084 }