00001
00002
00003
00004
00005
00006
00007
00008 #include "regDataObj.h"
00009 #include "icatHighLevelRoutines.h"
00010 #include "fileDriver.h"
00011
00012 #include "eirods_file_object.h"
00013
00014
00015
00016
00017 int
00018 rsRegDataObj (rsComm_t *rsComm, dataObjInfo_t *dataObjInfo,
00019 dataObjInfo_t **outDataObjInfo)
00020 {
00021 int status;
00022 rodsServerHost_t *rodsServerHost = NULL;
00023
00024 *outDataObjInfo = NULL;
00025
00026 status = getAndConnRcatHost (rsComm, MASTER_RCAT, dataObjInfo->objPath,
00027 &rodsServerHost);
00028 if (status < 0 || NULL == rodsServerHost ) {
00029 return(status);
00030 }
00031
00032 if (rodsServerHost->localFlag == LOCAL_HOST) {
00033 #ifdef RODS_CAT
00034 status = _rsRegDataObj (rsComm, dataObjInfo);
00035 if (status >= 0) {
00036 *outDataObjInfo = (dataObjInfo_t *) malloc (sizeof (dataObjInfo_t));
00037
00038 **outDataObjInfo = *dataObjInfo;
00039 }
00040 #else
00041 status = SYS_NO_RCAT_SERVER_ERR;
00042 #endif
00043 } else {
00044 status = rcRegDataObj (rodsServerHost->conn, dataObjInfo,
00045 outDataObjInfo);
00046 }
00047 return (status);
00048 }
00049
00050 int
00051 _rsRegDataObj (rsComm_t *rsComm, dataObjInfo_t *dataObjInfo)
00052 {
00053 #ifdef RODS_CAT
00054 int status;
00055 eirods::error ret;
00056 status = chlRegDataObj (rsComm, dataObjInfo);
00057 if(status < 0) {
00058 char* sys_error;
00059 char* rods_error = rodsErrorName(status, &sys_error);
00060 std::stringstream msg;
00061 msg << __FUNCTION__;
00062 msg << " - Failed to register data object \"" << dataObjInfo->objPath << "\"";
00063 msg << " - " << rods_error << " " << sys_error;
00064 ret = ERROR(status, msg.str());
00065 eirods::log(ret);
00066 } else {
00067 eirods::file_object_ptr file_obj(
00068 new eirods::file_object(
00069 rsComm,
00070 dataObjInfo ) );
00071 ret = fileRegistered(rsComm, file_obj);
00072 if(!ret.ok()) {
00073 std::stringstream msg;
00074 msg << __FUNCTION__;
00075 msg << " - Failed to signal resource that the data object \"";
00076 msg << dataObjInfo->objPath;
00077 msg << "\" was registered";
00078 ret = PASSMSG(msg.str(), ret);
00079 eirods::log(ret);
00080 status = ret.code();
00081 }
00082 }
00083 return (status);
00084 #else
00085 return (SYS_NO_RCAT_SERVER_ERR);
00086 #endif
00087
00088 }
00089
00090 int
00091 svrRegDataObj (rsComm_t *rsComm, dataObjInfo_t *dataObjInfo)
00092 {
00093 int status;
00094 rodsServerHost_t *rodsServerHost = NULL;
00095
00096 if (dataObjInfo->specColl != NULL) {
00097 rodsLog (LOG_NOTICE,
00098 "svrRegDataObj: Reg path %s is in spec coll",
00099 dataObjInfo->objPath);
00100 return (SYS_REG_OBJ_IN_SPEC_COLL);
00101 }
00102
00103 status = getAndConnRcatHost (rsComm, MASTER_RCAT, dataObjInfo->objPath,
00104 &rodsServerHost);
00105 if (status < 0 || NULL == rodsServerHost ) {
00106 return(status);
00107 }
00108
00109 if (rodsServerHost->localFlag == LOCAL_HOST) {
00110 #ifdef RODS_CAT
00111 status = _rsRegDataObj (rsComm, dataObjInfo);
00112 #else
00113 status = SYS_NO_RCAT_SERVER_ERR;
00114 #endif
00115 } else {
00116 dataObjInfo_t *outDataObjInfo = NULL;
00117 status = rcRegDataObj (rodsServerHost->conn, dataObjInfo,
00118 &outDataObjInfo);
00119 if (status >= 0 && NULL != outDataObjInfo ) {
00120 dataObjInfo->dataId = outDataObjInfo->dataId;
00121 free (outDataObjInfo);
00122 }
00123 }
00124
00125 return (status);
00126 }
00127