00001
00002
00003
00004
00005
00006
00007
00008 #include "apiHeaderAll.h"
00009 #include "dataObjOpr.h"
00010 #include "objMetaOpr.h"
00011 #include "icatHighLevelRoutines.h"
00012
00013 #include "eirods_stacktrace.h"
00014
00015 int
00016 rsBulkDataObjReg (rsComm_t *rsComm, genQueryOut_t *bulkDataObjRegInp,
00017 genQueryOut_t **bulkDataObjRegOut)
00018 {
00019 sqlResult_t *objPath;
00020 int status;
00021 rodsServerHost_t *rodsServerHost = NULL;
00022
00023 if (bulkDataObjRegInp->rowCnt <= 0) return 0;
00024
00025 if ((objPath =
00026 getSqlResultByInx (bulkDataObjRegInp, COL_DATA_NAME)) == NULL) {
00027 rodsLog (LOG_NOTICE,
00028 "rsBulkDataObjReg: getSqlResultByInx for COL_DATA_NAME failed");
00029 return (UNMATCHED_KEY_OR_INDEX);
00030 }
00031
00032 status = getAndConnRcatHost (rsComm, MASTER_RCAT, objPath->value,
00033 &rodsServerHost);
00034 if (status < 0 || rodsServerHost == NULL ) {
00035 return(status);
00036 }
00037
00038 if (rodsServerHost->localFlag == LOCAL_HOST) {
00039 #ifdef RODS_CAT
00040 status = _rsBulkDataObjReg (rsComm, bulkDataObjRegInp,
00041 bulkDataObjRegOut);
00042 #else
00043 status = SYS_NO_RCAT_SERVER_ERR;
00044 #endif
00045 } else {
00046 status = rcBulkDataObjReg (rodsServerHost->conn, bulkDataObjRegInp,
00047 bulkDataObjRegOut);
00048 }
00049
00050 return (status);
00051 }
00052
00053 int
00054 _rsBulkDataObjReg (rsComm_t *rsComm, genQueryOut_t *bulkDataObjRegInp,
00055 genQueryOut_t **bulkDataObjRegOut)
00056 {
00057 #ifdef RODS_CAT
00058 dataObjInfo_t dataObjInfo;
00059 sqlResult_t *objPath, *dataType, *dataSize, *rescName, *rescHier, *filePath,
00060 *dataMode, *oprType, *rescGroupName, *replNum, *chksum;
00061 char *tmpObjPath, *tmpDataType, *tmpDataSize, *tmpRescName, *tmpRescHier, *tmpFilePath,
00062 *tmpDataMode, *tmpOprType, *tmpRescGroupName, *tmpReplNum, *tmpChksum;
00063 sqlResult_t *objId;
00064 char *tmpObjId;
00065 int status, i;
00066
00067 if ((rescHier =
00068 getSqlResultByInx (bulkDataObjRegInp, COL_D_RESC_HIER)) == NULL) {
00069 rodsLog (LOG_NOTICE,
00070 "rsBulkDataObjReg: getSqlResultByInx for COL_D_RESC_HIER failed");
00071 return (UNMATCHED_KEY_OR_INDEX);
00072 }
00073
00074 if ((objPath =
00075 getSqlResultByInx (bulkDataObjRegInp, COL_DATA_NAME)) == NULL) {
00076 rodsLog (LOG_NOTICE,
00077 "rsBulkDataObjReg: getSqlResultByInx for COL_DATA_NAME failed");
00078 return (UNMATCHED_KEY_OR_INDEX);
00079 }
00080
00081 if ((dataType =
00082 getSqlResultByInx (bulkDataObjRegInp, COL_DATA_TYPE_NAME)) == NULL) {
00083 rodsLog (LOG_NOTICE,
00084 "rsBulkDataObjReg: getSqlResultByInx for COL_DATA_TYPE_NAME failed");
00085 return (UNMATCHED_KEY_OR_INDEX);
00086 }
00087 if ((dataSize =
00088 getSqlResultByInx (bulkDataObjRegInp, COL_DATA_SIZE)) == NULL) {
00089 rodsLog (LOG_NOTICE,
00090 "rsBulkDataObjReg: getSqlResultByInx for COL_DATA_SIZE failed");
00091 return (UNMATCHED_KEY_OR_INDEX);
00092 }
00093
00094 if ((rescName =
00095 getSqlResultByInx (bulkDataObjRegInp, COL_D_RESC_NAME)) == NULL) {
00096 rodsLog (LOG_NOTICE,
00097 "rsBulkDataObjReg: getSqlResultByInx for COL_D_RESC_NAME failed");
00098 return (UNMATCHED_KEY_OR_INDEX);
00099 }
00100
00101 if ((filePath =
00102 getSqlResultByInx (bulkDataObjRegInp, COL_D_DATA_PATH)) == NULL) {
00103 rodsLog (LOG_NOTICE,
00104 "rsBulkDataObjReg: getSqlResultByInx for COL_D_DATA_PATH failed");
00105 return (UNMATCHED_KEY_OR_INDEX);
00106 }
00107
00108 if ((dataMode =
00109 getSqlResultByInx (bulkDataObjRegInp, COL_DATA_MODE)) == NULL) {
00110 rodsLog (LOG_NOTICE,
00111 "rsBulkDataObjReg: getSqlResultByInx for COL_DATA_MODE failed");
00112 return (UNMATCHED_KEY_OR_INDEX);
00113 }
00114
00115 if ((oprType =
00116 getSqlResultByInx (bulkDataObjRegInp, OPR_TYPE_INX)) == NULL) {
00117 rodsLog (LOG_ERROR,
00118 "rsBulkDataObjReg: getSqlResultByInx for OPR_TYPE_INX failed");
00119 return (UNMATCHED_KEY_OR_INDEX);
00120 }
00121
00122 if ((rescGroupName =
00123 getSqlResultByInx (bulkDataObjRegInp, COL_RESC_GROUP_NAME)) == NULL) {
00124 rodsLog (LOG_ERROR,
00125 "rsBulkDataObjReg: getSqlResultByInx for COL_RESC_GROUP_NAME failed");
00126 return (UNMATCHED_KEY_OR_INDEX);
00127 }
00128
00129 if ((replNum =
00130 getSqlResultByInx (bulkDataObjRegInp, COL_DATA_REPL_NUM)) == NULL) {
00131 rodsLog (LOG_ERROR,
00132 "rsBulkDataObjReg: getSqlResultByInx for COL_DATA_REPL_NUM failed");
00133 return (UNMATCHED_KEY_OR_INDEX);
00134 }
00135
00136 chksum = getSqlResultByInx (bulkDataObjRegInp, COL_D_DATA_CHECKSUM);
00137
00138
00139 initBulkDataObjRegOut (bulkDataObjRegOut);
00140 if ((objId =
00141 getSqlResultByInx (*bulkDataObjRegOut, COL_D_DATA_ID)) == NULL) {
00142 rodsLog (LOG_ERROR,
00143 "rsBulkDataObjReg: getSqlResultByInx for COL_D_DATA_ID failed");
00144 return (UNMATCHED_KEY_OR_INDEX);
00145 }
00146
00147 (*bulkDataObjRegOut)->rowCnt = bulkDataObjRegInp->rowCnt;
00148 for (i = 0;i < bulkDataObjRegInp->rowCnt; i++) {
00149 tmpObjPath = &objPath->value[objPath->len * i];
00150 tmpDataType = &dataType->value[dataType->len * i];
00151 tmpDataSize = &dataSize->value[dataSize->len * i];
00152 tmpRescName = &rescName->value[rescName->len * i];
00153 tmpRescHier = &rescHier->value[rescHier->len * i];
00154 tmpFilePath = &filePath->value[filePath->len * i];
00155 tmpDataMode = &dataMode->value[dataMode->len * i];
00156 tmpOprType = &oprType->value[oprType->len * i];
00157 tmpRescGroupName = &rescGroupName->value[rescGroupName->len * i];
00158 tmpReplNum = &replNum->value[replNum->len * i];
00159 tmpObjId = &objId->value[objId->len * i];
00160
00161 bzero (&dataObjInfo, sizeof (dataObjInfo_t));
00162 dataObjInfo.flags = NO_COMMIT_FLAG;
00163 rstrcpy (dataObjInfo.objPath, tmpObjPath, MAX_NAME_LEN);
00164 rstrcpy (dataObjInfo.dataType, tmpDataType, NAME_LEN);
00165 dataObjInfo.dataSize = strtoll (tmpDataSize, 0, 0);
00166 rstrcpy (dataObjInfo.rescName, tmpRescName, NAME_LEN);
00167 rstrcpy (dataObjInfo.rescHier, tmpRescHier, MAX_NAME_LEN);
00168 rstrcpy (dataObjInfo.filePath, tmpFilePath, MAX_NAME_LEN);
00169 rstrcpy (dataObjInfo.dataMode, tmpDataMode, NAME_LEN);
00170 rstrcpy (dataObjInfo.rescGroupName, tmpRescGroupName, NAME_LEN);
00171 dataObjInfo.replNum = atoi (tmpReplNum);
00172 if (chksum != NULL) {
00173 tmpChksum = &chksum->value[chksum->len * i];
00174 if (strlen (tmpChksum) > 0) {
00175 rstrcpy (dataObjInfo.chksum, tmpChksum, NAME_LEN);
00176 }
00177 }
00178
00179 dataObjInfo.replStatus = NEWLY_CREATED_COPY;
00180 if (strcmp (tmpOprType, REGISTER_OPR) == 0) {
00181 status = svrRegDataObj (rsComm, &dataObjInfo);
00182 } else {
00183 status = modDataObjSizeMeta (rsComm, &dataObjInfo, tmpDataSize);
00184 }
00185 if (status >= 0) {
00186 snprintf (tmpObjId, NAME_LEN, "%lld", dataObjInfo.dataId);
00187 } else {
00188 rodsLog (LOG_ERROR,
00189 "rsBulkDataObjReg: RegDataObj or ModDataObj failed for %s,stat=%d",
00190 tmpObjPath, status);
00191 chlRollback (rsComm);
00192 freeGenQueryOut (bulkDataObjRegOut);
00193 *bulkDataObjRegOut = NULL;
00194 return status;
00195 }
00196 }
00197 status = chlCommit(rsComm);
00198
00199 if (status < 0) {
00200 rodsLog (LOG_ERROR,
00201 "rsBulkDataObjReg: chlCommit failed, status = %d", status);
00202 freeGenQueryOut (bulkDataObjRegOut);
00203 *bulkDataObjRegOut = NULL;
00204 }
00205 return status;
00206 #else
00207 return (SYS_NO_RCAT_SERVER_ERR);
00208 #endif
00209
00210 }
00211
00212 int
00213 modDataObjSizeMeta (rsComm_t *rsComm, dataObjInfo_t *dataObjInfo,
00214 char *strDataSize)
00215 {
00216 modDataObjMeta_t modDataObjMetaInp;
00217 keyValPair_t regParam;
00218 char tmpStr[MAX_NAME_LEN];
00219 int status;
00220
00221 bzero (&modDataObjMetaInp, sizeof (modDataObjMetaInp));
00222 bzero (®Param, sizeof (regParam));
00223 addKeyVal (®Param, DATA_SIZE_KW, strDataSize);
00224 addKeyVal (®Param, ALL_REPL_STATUS_KW, "");
00225 snprintf (tmpStr, MAX_NAME_LEN, "%d", (int) time (NULL));
00226 addKeyVal (®Param, DATA_MODIFY_KW, tmpStr);
00227 if (strlen (dataObjInfo->chksum) > 0) {
00228 addKeyVal (®Param, CHKSUM_KW, dataObjInfo->chksum);
00229 }
00230 modDataObjMetaInp.dataObjInfo = dataObjInfo;
00231 modDataObjMetaInp.regParam = ®Param;
00232
00233 status = _rsModDataObjMeta (rsComm, &modDataObjMetaInp);
00234
00235 clearKeyVal (®Param);
00236
00237 return status;
00238 }
00239