00001
00002
00003
00004
00005
00006 #include "regReplica.h"
00007 #include "objMetaOpr.h"
00008 #include "icatHighLevelRoutines.h"
00009
00010 int
00011 rsRegReplica (rsComm_t *rsComm, regReplica_t *regReplicaInp)
00012 {
00013 int status;
00014 rodsServerHost_t *rodsServerHost = NULL;
00015 dataObjInfo_t *srcDataObjInfo;
00016 dataObjInfo_t *destDataObjInfo;
00017
00018 srcDataObjInfo = regReplicaInp->srcDataObjInfo;
00019 destDataObjInfo = regReplicaInp->destDataObjInfo;
00020
00021 status = getAndConnRcatHost (rsComm, MASTER_RCAT, srcDataObjInfo->objPath,
00022 &rodsServerHost);
00023 if (status < 0 || NULL == rodsServerHost ) {
00024 return(status);
00025 }
00026 if (rodsServerHost->localFlag == LOCAL_HOST) {
00027 #ifdef RODS_CAT
00028 status = _rsRegReplica (rsComm, regReplicaInp);
00029 #else
00030 status = SYS_NO_RCAT_SERVER_ERR;
00031 #endif
00032 } else {
00033 status = rcRegReplica (rodsServerHost->conn, regReplicaInp);
00034 if (status >= 0) regReplicaInp->destDataObjInfo->replNum = status;
00035
00036 }
00037
00038 return (status);
00039 }
00040
00041 int
00042 _rsRegReplica (rsComm_t *rsComm, regReplica_t *regReplicaInp)
00043 {
00044 #ifdef RODS_CAT
00045 int status;
00046 dataObjInfo_t *srcDataObjInfo;
00047 dataObjInfo_t *destDataObjInfo;
00048 int savedClientAuthFlag;
00049
00050 srcDataObjInfo = regReplicaInp->srcDataObjInfo;
00051 destDataObjInfo = regReplicaInp->destDataObjInfo;
00052 #if 0 // JMC - backport 4608
00053
00054 status = checkDupReplica (rsComm, srcDataObjInfo->dataId, destDataObjInfo->rescName, destDataObjInfo->filePath);
00055 if (status >= 0) {
00056 destDataObjInfo->replNum = status;
00057 return status;
00058 }
00059 #endif
00060 if (getValByKey (®ReplicaInp->condInput, SU_CLIENT_USER_KW) != NULL) {
00061 savedClientAuthFlag = rsComm->clientUser.authInfo.authFlag;
00062 rsComm->clientUser.authInfo.authFlag = LOCAL_PRIV_USER_AUTH;
00063 status = chlRegReplica (rsComm, srcDataObjInfo, destDataObjInfo,
00064 ®ReplicaInp->condInput);
00065
00066 rsComm->clientUser.authInfo.authFlag = savedClientAuthFlag;
00067 } else {
00068 status = chlRegReplica (rsComm, srcDataObjInfo, destDataObjInfo, ®ReplicaInp->condInput);
00069 if (status >= 0)
00070 status = destDataObjInfo->replNum;
00071 }
00072
00073
00074 if( status == CAT_SUCCESS_BUT_WITH_NO_INFO ||
00075 status == CATALOG_ALREADY_HAS_ITEM_BY_THAT_NAME ) {
00076 int status2;
00077
00078
00079 status2 = checkDupReplica( rsComm, srcDataObjInfo->dataId,
00080 destDataObjInfo->rescName,
00081 destDataObjInfo->filePath);
00082 if (status2 >= 0) {
00083 destDataObjInfo->replNum = status2;
00084 destDataObjInfo->dataId = srcDataObjInfo->dataId;
00085 return status2;
00086 }
00087 }
00088
00089 return (status);
00090 #else
00091 return (SYS_NO_RCAT_SERVER_ERR);
00092 #endif
00093 }
00094