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