int _l3DataPutSingleBuf( rsComm_t *rsComm, int l1descInx, dataObjInp_t *dataObjInp, bytesBuf_t *dataObjInpBBuf ) { int status = 0; int bytesWritten; dataObjInfo_t *myDataObjInfo; myDataObjInfo = L1desc[l1descInx].dataObjInfo; bytesWritten = l3FilePutSingleBuf( rsComm, l1descInx, dataObjInpBBuf ); if ( bytesWritten >= 0 ) { if ( L1desc[l1descInx].replStatus == NEWLY_CREATED_COPY && myDataObjInfo->specColl == NULL && L1desc[l1descInx].remoteZoneHost == NULL ) { /* the check for remoteZoneHost host is not needed because * the put would have done in the remote zone. But it make * the code easier to read (similar ro copy). */ status = svrRegDataObj( rsComm, myDataObjInfo ); if ( status < 0 ) { rodsLog( LOG_NOTICE, "l3DataPutSingleBuf: rsRegDataObj for %s failed, status = %d", myDataObjInfo->objPath, status ); if ( status != CATALOG_ALREADY_HAS_ITEM_BY_THAT_NAME ) { l3Unlink( rsComm, myDataObjInfo ); } return ( status ); } else { myDataObjInfo->replNum = status; } } /* myDataObjInfo->dataSize = bytesWritten; update size problem */ if ( bytesWritten == 0 && myDataObjInfo->dataSize > 0 ) { /* overwrite with 0 len file */ L1desc[l1descInx].bytesWritten = 1; } else { L1desc[l1descInx].bytesWritten = bytesWritten; } } L1desc[l1descInx].dataSize = dataObjInp->dataSize; return ( bytesWritten ); }
int _l3DataPutSingleBuf( rsComm_t *rsComm, int l1descInx, dataObjInp_t *dataObjInp, bytesBuf_t *dataObjInpBBuf ) { int status = 0; dataObjInfo_t *myDataObjInfo = L1desc[l1descInx].dataObjInfo; int bytesWritten = l3FilePutSingleBuf( rsComm, l1descInx, dataObjInpBBuf ); if ( bytesWritten >= 0 ) { if ( L1desc[l1descInx].replStatus == NEWLY_CREATED_COPY && myDataObjInfo->specColl == NULL && L1desc[l1descInx].remoteZoneHost == NULL ) { /* the check for remoteZoneHost host is not needed because * the put would have done in the remote zone. But it make * the code easier to read (similar ro copy). */ status = svrRegDataObj( rsComm, myDataObjInfo ); if ( status < 0 ) { rodsLog( LOG_NOTICE, "l3DataPutSingleBuf: rsRegDataObj for %s failed, status = %d", myDataObjInfo->objPath, status ); if ( status != CATALOG_ALREADY_HAS_ITEM_BY_THAT_NAME ) { l3Unlink( rsComm, myDataObjInfo ); } return status; } else { myDataObjInfo->replNum = status; } } /* myDataObjInfo->dataSize = bytesWritten; update size problem */ if ( bytesWritten == 0 && myDataObjInfo->dataSize > 0 ) { /* overwrite with 0 len file */ L1desc[l1descInx].bytesWritten = 1; } else { L1desc[l1descInx].bytesWritten = bytesWritten; } // special case of zero length files, trigger the fileModified // operation for execution of coordinating resource logic if ( 0 == dataObjInp->dataSize ) { irods::file_object_ptr file_obj( new irods::file_object( rsComm, myDataObjInfo ) ); char* pdmo_kw = getValByKey( &myDataObjInfo->condInput, IN_PDMO_KW ); if ( pdmo_kw != NULL ) { file_obj->in_pdmo( pdmo_kw ); } irods::error ret = fileModified( rsComm, file_obj ); if ( !ret.ok() ) { std::stringstream msg; msg << "fileModified failed for ["; msg << myDataObjInfo->objPath; msg << "]"; ret = PASSMSG( msg.str(), ret ); irods::log( ret ); status = ret.code(); } } } L1desc[l1descInx].dataSize = dataObjInp->dataSize; return bytesWritten; }