int rsRsyncFileToData( rsComm_t *rsComm, dataObjInp_t *dataObjInp ) { char * fileChksumStr = getValByKey( &dataObjInp->condInput, RSYNC_CHKSUM_KW ); if ( fileChksumStr == NULL ) { rodsLog( LOG_ERROR, "rsRsyncFileToData: RSYNC_CHKSUM_KW input is missing" ); return CHKSUM_EMPTY_IN_STRUCT_ERR; } addKeyVal( &dataObjInp->condInput, ORIG_CHKSUM_KW, fileChksumStr ); // =-=-=-=-=-=-=- // determine the resource hierarchy if one is not provided if ( getValByKey( &dataObjInp->condInput, RESC_HIER_STR_KW ) == NULL ) { std::string hier; irods::error ret = irods::resolve_resource_hierarchy( irods::OPEN_OPERATION, rsComm, dataObjInp, hier ); if ( !ret.ok() ) { std::stringstream msg; msg << __FUNCTION__; msg << " :: failed in irods::resolve_resource_hierarchy for ["; msg << dataObjInp->objPath << "]"; irods::log( PASSMSG( msg.str(), ret ) ); return ret.code(); } // =-=-=-=-=-=-=- // we resolved the redirect and have a host, set the hier str for subsequent // api calls, etc. addKeyVal( &dataObjInp->condInput, RESC_HIER_STR_KW, hier.c_str() ); } // if keyword char *dataObjChksumStr = NULL; dataObjInfo_t *dataObjInfoHead = NULL; int status = _rsDataObjChksum( rsComm, dataObjInp, &dataObjChksumStr, &dataObjInfoHead ); if ( status < 0 && status != CAT_NO_ACCESS_PERMISSION && status != CAT_NO_ROWS_FOUND ) { /* XXXXX CAT_NO_ACCESS_PERMISSION mean the chksum was calculated but * cannot be registered. But the chksum value is OK. */ rodsLog( LOG_ERROR, "rsRsyncFileToData: _rsDataObjChksum of %s error. status = %d", dataObjInp->objPath, status ); } freeAllDataObjInfo( dataObjInfoHead ); if ( dataObjChksumStr != NULL && strcmp( dataObjChksumStr, fileChksumStr ) == 0 ) { free( dataObjChksumStr ); return 0; } free( dataObjChksumStr ); return SYS_SVR_TO_CLI_PUT_ACTION; }
int rsRsyncDataToFile( rsComm_t *rsComm, dataObjInp_t *dataObjInp ) { int status; char *fileChksumStr = NULL; char *dataObjChksumStr = NULL; dataObjInfo_t *dataObjInfoHead = NULL; fileChksumStr = getValByKey( &dataObjInp->condInput, RSYNC_CHKSUM_KW ); if ( fileChksumStr == NULL ) { rodsLog( LOG_ERROR, "rsRsyncDataToFile: RSYNC_CHKSUM_KW input is missing for %s", dataObjInp->objPath ); return CHKSUM_EMPTY_IN_STRUCT_ERR; } addKeyVal( &dataObjInp->condInput, ORIG_CHKSUM_KW, fileChksumStr ); status = _rsDataObjChksum( rsComm, dataObjInp, &dataObjChksumStr, &dataObjInfoHead ); if ( status < 0 && status != CAT_NO_ACCESS_PERMISSION && status != CAT_NO_ROWS_FOUND ) { /* XXXXX CAT_NO_ACCESS_PERMISSION mean the chksum was calculated but * cannot be registered. But the chksum value is OK. */ rodsLog( LOG_ERROR, "rsRsyncDataToFile: _rsDataObjChksum of %s error. status = %d", dataObjInp->objPath, status ); return status; } freeAllDataObjInfo( dataObjInfoHead ); status = dataObjChksumStr && strcmp( dataObjChksumStr, fileChksumStr ) == 0 ? 0 : SYS_SVR_TO_CLI_GET_ACTION; free( dataObjChksumStr ); return status; }
int rsRsyncFileToData (rsComm_t *rsComm, dataObjInp_t *dataObjInp) { int status; char *fileChksumStr = NULL; char *dataObjChksumStr = NULL; dataObjInfo_t *dataObjInfoHead = NULL; fileChksumStr = getValByKey (&dataObjInp->condInput, RSYNC_CHKSUM_KW); if (fileChksumStr == NULL) { rodsLog (LOG_ERROR, "rsRsyncFileToData: RSYNC_CHKSUM_KW input is missing"); return (CHKSUM_EMPTY_IN_STRUCT_ERR); } status = _rsDataObjChksum (rsComm, dataObjInp, &dataObjChksumStr, &dataObjInfoHead); if (status < 0 && status != CAT_NO_ACCESS_PERMISSION && status != CAT_NO_ROWS_FOUND) { /* XXXXX CAT_NO_ACCESS_PERMISSION mean the chksum was calculated but * cannot be registered. But the chksum value is OK. */ rodsLog (LOG_ERROR, "rsRsyncFileToData: _rsDataObjChksum of %s error. status = %d", dataObjInp->objPath, status); } freeAllDataObjInfo (dataObjInfoHead); if (dataObjChksumStr != NULL && strcmp (dataObjChksumStr, fileChksumStr) == 0) { free (dataObjChksumStr); return (0); } return SYS_SVR_TO_CLI_PUT_ACTION; #if 0 msParamArray_t *myMsParamArray; dataObjInp_t *myDataObjInp; myMsParamArray = malloc (sizeof (msParamArray_t)); memset (myMsParamArray, 0, sizeof (msParamArray_t)); /* have to get its own dataObjInp_t */ myDataObjInp = malloc (sizeof (dataObjInp_t)); replDataObjInp (dataObjInp, myDataObjInp); addKeyVal (&myDataObjInp->condInput, REG_CHKSUM_KW, fileChksumStr); status = addMsParam (myMsParamArray, CL_PUT_ACTION, DataObjInp_MS_T, (void *) myDataObjInp, NULL); if (status < 0) { rodsLogAndErrorMsg (LOG_ERROR, &rsComm->rError, status, "rsRsyncDataToFile: addMsParam error. status = %d", status); return (status); } /* tell the client to do the put */ status = sendAndRecvBranchMsg (rsComm, rsComm->apiInx, SYS_SVR_TO_CLI_MSI_REQUEST, (void *) myMsParamArray, NULL); return (status); #endif }