irods  4.2.8
About: iRODS (the integrated Rule Oriented Data System) is a distributed data-management system for creating data grids, digital libraries, persistent archives, and real-time data systems.
  Fossies Dox: irods-4.2.8.tar.gz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

rsDataObjChksum.cpp
Go to the documentation of this file.
1 #include "dataObjChksum.h"
2 #include "objMetaOpr.hpp"
3 #include "resource.hpp"
4 #include "specColl.hpp"
5 #include "dataObjOpr.hpp"
6 #include "physPath.hpp"
7 #include "rsApiHandler.hpp"
8 #include "modDataObjMeta.h"
9 #include "getRemoteZoneResc.h"
10 #include "rsDataObjChksum.hpp"
11 #include "rsModDataObjMeta.hpp"
12 #include "rsFileStat.hpp"
13 #include "boost/lexical_cast.hpp"
14 #include "rsGenQuery.hpp"
15 #define RODS_SERVER
16 #include "irods_query.hpp"
17 #undef RODS_SERVER
18 
19 // =-=-=-=-=-=-=-
22 
23 #include <optional>
24 
25 namespace {
26  // assumes zone redirection has already occurred, and that the function is being called on a server in the zone the object belongs to
27  int verifyVaultSizeEqualsDatabaseSize( rsComm_t *rsComm, dataObjInfo_t *dataObjInfo) {
28  fileStatInp_t fileStatInp;
29  memset(&fileStatInp, 0, sizeof(fileStatInp));
30  rstrcpy(fileStatInp.objPath, dataObjInfo->objPath, sizeof(fileStatInp.objPath));
31  rstrcpy(fileStatInp.rescHier, dataObjInfo->rescHier, sizeof(fileStatInp.rescHier));
32  rstrcpy(fileStatInp.fileName, dataObjInfo->filePath, sizeof(fileStatInp.fileName));
33  rodsStat_t *fileStatOut = nullptr;
34  const int status_rsFileStat = rsFileStat(rsComm, &fileStatInp, &fileStatOut);
35  if (status_rsFileStat < 0) {
36  rodsLog(LOG_ERROR, "verifyVaultSizeEqualsDatabaseSize: rsFileStat of objPath [%s] rescHier [%s] fileName [%s] failed with [%d]", fileStatInp.objPath, fileStatInp.rescHier, fileStatInp.fileName, status_rsFileStat);
37  return status_rsFileStat;
38  }
39  const rodsLong_t size_in_vault = fileStatOut->st_size;
40  free(fileStatOut);
41  std::optional<rodsLong_t> size_in_database {};
42  std::string select_and_condition {
43  (boost::format("select DATA_SIZE where DATA_PATH = '%s'") % dataObjInfo->filePath).str()
44  };
45  for (auto&& row : irods::query{rsComm, select_and_condition}) {
46  try {
47  size_in_database = boost::lexical_cast<rodsLong_t>(row[0]);
48  } catch (const boost::bad_lexical_cast&) {
49  rodsLog(LOG_ERROR, "_rsFileChksum: lexical_cast of [%s] for [%s] [%s] [%s] failed", row[0].c_str(), dataObjInfo->filePath, dataObjInfo->rescHier, dataObjInfo->objPath);
50  return INVALID_LEXICAL_CAST;
51  }
52  }
53  if (!size_in_database.has_value()) { return CAT_NO_ROWS_FOUND; }
54  if (size_in_database.value() != size_in_vault) {
55  rodsLog(LOG_ERROR, "_rsFileChksum: file size mismatch. resource hierarchy [%s] vault path [%s] size [%ji] object path [%s] size [%ji]", dataObjInfo->rescHier, dataObjInfo->filePath,
56  static_cast<intmax_t>(size_in_vault), dataObjInfo->objPath, static_cast<intmax_t>(size_in_database.value()));
58  }
59  return 0;
60  }
61 }
62 
63 int
64 rsDataObjChksum( rsComm_t *rsComm, dataObjInp_t *dataObjChksumInp,
65  char **outChksum ) {
66  int status;
67  dataObjInfo_t *dataObjInfoHead;
68  int remoteFlag;
70  specCollCache_t *specCollCache = NULL;
71 
72  resolveLinkedPath( rsComm, dataObjChksumInp->objPath, &specCollCache, &dataObjChksumInp->condInput );
73 
74  remoteFlag = getAndConnRemoteZone( rsComm, dataObjChksumInp, &rodsServerHost, REMOTE_OPEN );
75 
76  if ( remoteFlag < 0 ) {
77  return remoteFlag;
78  }
79  else if ( remoteFlag == REMOTE_HOST ) {
80  status = rcDataObjChksum( rodsServerHost->conn, dataObjChksumInp,
81  outChksum );
82  return status;
83  }
84  else {
85  // =-=-=-=-=-=-=-
86  // determine the resource hierarchy if one is not provided
87  if ( getValByKey( &dataObjChksumInp->condInput, RESC_HIER_STR_KW ) == NULL ) {
88  std::string hier;
90  rsComm, dataObjChksumInp, hier );
91  if ( !ret.ok() ) {
92  std::stringstream msg;
93  msg << "failed in irods::resolve_resource_hierarchy for [";
94  msg << dataObjChksumInp->objPath << "]";
95  irods::log( PASSMSG( msg.str(), ret ) );
96  return ret.code();
97  }
98 
99  // =-=-=-=-=-=-=-
100  // we resolved the redirect and have a host, set the hier str for subsequent
101  // api calls, etc.
102  addKeyVal( &dataObjChksumInp->condInput, RESC_HIER_STR_KW, hier.c_str() );
103 
104  } // if keyword
105 
106  status = _rsDataObjChksum( rsComm, dataObjChksumInp, outChksum,
107  &dataObjInfoHead );
108  }
109  freeAllDataObjInfo( dataObjInfoHead );
110  rodsLog( LOG_DEBUG, "rsDataObjChksum - returning status %d", status );
111  return status;
112 }
113 
114 int
115 _rsDataObjChksum( rsComm_t *rsComm, dataObjInp_t *dataObjInp,
116  char **outChksumStr, dataObjInfo_t **dataObjInfoHead ) {
117 
118  *dataObjInfoHead = NULL;
119  *outChksumStr = NULL;
120 
121  bool allFlag = getValByKey( &dataObjInp->condInput, CHKSUM_ALL_KW ) != NULL;
122  bool verifyFlag = getValByKey( &dataObjInp->condInput, VERIFY_CHKSUM_KW ) != NULL;
123  bool forceFlag = getValByKey( &dataObjInp->condInput, FORCE_CHKSUM_KW ) != NULL;
124  const bool shouldVerifyVaultSizeEqualsDatabaseSize = getValByKey( &dataObjInp->condInput, VERIFY_VAULT_SIZE_EQUALS_DATABASE_SIZE_KW ) != NULL;
125 
126  int status_getDataObjInfoIncSpecColl = getDataObjInfoIncSpecColl( rsComm, dataObjInp, dataObjInfoHead );
127  if ( status_getDataObjInfoIncSpecColl < 0 ) {
128  return status_getDataObjInfoIncSpecColl;
129  }
130 
131  // If admin flag is in play, make sure the client user is allowed to use it
132  const bool admin_flag = getValByKey( &dataObjInp->condInput, ADMIN_KW );
133  if ( admin_flag && rsComm->clientUser.authInfo.authFlag < LOCAL_PRIV_USER_AUTH ) {
135  }
136 
137  int status = 0;
138  if ( !allFlag ) {
139  /* screen out any stale copies */
140  int status_sortObjInfoForOpen = sortObjInfoForOpen( dataObjInfoHead, &dataObjInp->condInput, 0 );
141  if ( status_sortObjInfoForOpen < 0 ) {
142  return status_sortObjInfoForOpen;
143  }
144 
145  dataObjInfo_t *tmpDataObjInfo = *dataObjInfoHead;
146  do {
147  if ( ( tmpDataObjInfo->replStatus > 0 || !(*dataObjInfoHead)->next ) && strlen( tmpDataObjInfo->chksum ) > 0 ) {
148  if ( !verifyFlag && !forceFlag ) {
149  *outChksumStr = strdup( tmpDataObjInfo->chksum );
150  return 0;
151  }
152  else {
153  break;
154  }
155  }
156 
157  } while ( (tmpDataObjInfo = tmpDataObjInfo->next) );
158 
159  if ( !tmpDataObjInfo ) {
160  tmpDataObjInfo = *dataObjInfoHead;
161  }
162 
163  // Add the admin flag before running checksum
164  if ( admin_flag ) {
165  addKeyVal( &tmpDataObjInfo->condInput, ADMIN_KW, "" );
166  }
167 
168  /* need to compute the chksum */
169  if ( verifyFlag && strlen( tmpDataObjInfo->chksum ) > 0 ) {
170  status = verifyDatObjChksum( rsComm, tmpDataObjInfo,
171  outChksumStr );
172  if (status == 0 && shouldVerifyVaultSizeEqualsDatabaseSize) {
173  if (int code = verifyVaultSizeEqualsDatabaseSize(rsComm, tmpDataObjInfo)) {
174  status = code;
175  }
176  }
177  }
178  else {
179  addKeyVal( &tmpDataObjInfo->condInput, ORIG_CHKSUM_KW, getValByKey( &dataObjInp->condInput, ORIG_CHKSUM_KW ) );
180  status = dataObjChksumAndRegInfo( rsComm, tmpDataObjInfo, outChksumStr );
181  }
182  } else {
183  dataObjInfo_t *tmpDataObjInfo = *dataObjInfoHead;
184  int verifyStatus = 0;
185  do {
186  //JMC - legacy resource :: int rescClass = getRescClass (tmpDataObjInfo->rescInfo);
187  std::string resc_class;
188  irods::error err = irods::get_resource_property< std::string >(
189  tmpDataObjInfo->rescId,
191  resc_class );
192  if ( !err.ok() ) {
193  irods::log( PASSMSG( "failed in get_resource_property [class]", err ) );
194  }
195  if ( resc_class == irods::RESOURCE_CLASS_BUNDLE ) { // (rescClass == BUNDLE_CL) {
196  /* don't do BUNDLE_CL. should be done on the bundle file */
197  tmpDataObjInfo = tmpDataObjInfo->next;
198  status = 0;
199  continue;
200  }
201 
202  // Add the admin flag before running checksum
203  if ( admin_flag ) {
204  addKeyVal( &tmpDataObjInfo->condInput, ADMIN_KW, "" );
205  }
206 
207  char *tmpChksumStr = 0;
208  if ( strlen( tmpDataObjInfo->chksum ) == 0 ) {
209  /* need to chksum no matter what */
210  status = dataObjChksumAndRegInfo( rsComm, tmpDataObjInfo,
211  &tmpChksumStr );
212  }
213  else if ( verifyFlag ) {
214  if ( int code = verifyDatObjChksum( rsComm, tmpDataObjInfo, &tmpChksumStr ) ) {
215  verifyStatus = code;
216  }
217  if (verifyStatus == 0 && shouldVerifyVaultSizeEqualsDatabaseSize) {
218  if (int code = verifyVaultSizeEqualsDatabaseSize(rsComm, tmpDataObjInfo)) {
219  verifyStatus = code;
220  }
221  }
222  }
223  else if ( forceFlag ) {
224  status = dataObjChksumAndRegInfo( rsComm, tmpDataObjInfo,
225  &tmpChksumStr );
226  }
227  else {
228  tmpChksumStr = strdup( tmpDataObjInfo->chksum );
229  status = 0;
230  }
231 
232  if ( status < 0 ) {
233  return status;
234  }
235  if ( tmpDataObjInfo->replStatus > 0 && *outChksumStr == NULL ) {
236  *outChksumStr = tmpChksumStr;
237  }
238  else {
239  /* save it */
240  if ( strlen( tmpDataObjInfo->chksum ) == 0 ) {
241  rstrcpy( tmpDataObjInfo->chksum, tmpChksumStr, NAME_LEN );
242  }
243  free( tmpChksumStr );
244  }
245  } while ( (tmpDataObjInfo = tmpDataObjInfo->next) );
246  if ( *outChksumStr == NULL ) {
247  *outChksumStr = strdup( ( *dataObjInfoHead )->chksum );
248  }
249  if (status >= 0 && verifyStatus < 0) {
250  status = verifyStatus;
251  }
252  }
253 
254  return status;
255 }
256 
257 int
259  char **outChksumStr ) {
260  int status;
261  keyValPair_t regParam;
262  modDataObjMeta_t modDataObjMetaInp;
263 
264  status = _dataObjChksum( rsComm, dataObjInfo, outChksumStr );
265 
266  if ( status < 0 ) {
267  rodsLog( LOG_ERROR, "dataObjChksumAndRegInfo: _dataObjChksum error for %s, status = %d",
268  dataObjInfo->objPath, status );
269  return status;
270  }
271 
272  if ( dataObjInfo->specColl != NULL ) {
273  return status;
274  }
275 
276  memset( &regParam, 0, sizeof( regParam ) );
277  addKeyVal( &regParam, CHKSUM_KW, *outChksumStr );
278  // set pdmo flag so that chksum doesn't trigger file operations
279  addKeyVal( &regParam, IN_PDMO_KW, "" );
280  // Make sure admin flag is set as appropriate
281  if ( NULL != getValByKey( &dataObjInfo->condInput, ADMIN_KW ) ) {
284  }
285  addKeyVal( &regParam, ADMIN_KW, "" );
286  }
287  modDataObjMetaInp.dataObjInfo = dataObjInfo;
288  modDataObjMetaInp.regParam = &regParam;
289  status = rsModDataObjMeta( rsComm, &modDataObjMetaInp );
290  rodsLog( LOG_DEBUG, "dataObjChksumAndRegInfo - rsModDataObjMeta status %d", status );
291  clearKeyVal( &regParam );
292 
293  return status;
294 }
295 
296 int
298  char **outChksumStr ) {
299  int status;
300 
301  addKeyVal( &dataObjInfo->condInput, ORIG_CHKSUM_KW, dataObjInfo->chksum );
302  status = _dataObjChksum( rsComm, dataObjInfo, outChksumStr );
303  rmKeyVal( &dataObjInfo->condInput, ORIG_CHKSUM_KW );
304 
305  if ( status < 0 ) {
307  "verifyDatObjChksum:_dataObjChksum error for %s, stat=%d",
308  dataObjInfo->objPath, status );
309  return status;
310  }
311  if ( *outChksumStr == NULL ) {
312  rodsLog( LOG_ERROR, "verifyDatObjChksum: outChkSumStr is null." );
314  }
315 
316  if ( strcmp( *outChksumStr, dataObjInfo->chksum ) != 0 ) {
317  std::stringstream error_message;
318  error_message << "verifyDatObjChksum: computed chksum [" << *outChksumStr << "] != icat value [" << dataObjInfo->chksum << "] for [" << dataObjInfo->objPath << "] hierarchy [" << dataObjInfo->rescHier << "] replNum [" << dataObjInfo->replNum << "]";
319  rodsLog( LOG_ERROR, "%s", error_message.str().c_str());
320  addRErrorMsg(&rsComm->rError, USER_CHKSUM_MISMATCH, error_message.str().c_str());
321  return USER_CHKSUM_MISMATCH;
322  }
323  else {
324  return status;
325  }
326 }
rodsLog
void rodsLog(int level, const char *formatStr,...)
Definition: rodsLog.cpp:86
getValByKey
char * getValByKey(const keyValPair_t *condInput, const char *keyWord)
Definition: rcMisc.cpp:675
DataObjInp::objPath
char objPath[(1024+64)]
Definition: dataObjInpOut.h:66
NULL
#define NULL
Definition: rodsDef.h:70
irods::RESOURCE_CLASS
const std::string RESOURCE_CLASS("resource_property_class")
rsComm_t
Definition: rcConnect.h:145
addKeyVal
int addKeyVal(keyValPair_t *condInput, const char *keyWord, const char *value)
Definition: rcMisc.cpp:789
SYS_INTERNAL_NULL_INPUT_ERR
@ SYS_INTERNAL_NULL_INPUT_ERR
Definition: rodsErrorTable.h:92
getRemoteZoneResc.h
specColl.hpp
modDataObjMeta.h
rodsServerHost::conn
rcComm_t * conn
Definition: rodsConnect.h:64
irods::resolve_resource_hierarchy
error resolve_resource_hierarchy(const std::string &, rsComm_t *, dataObjInp_t *, std::string &, dataObjInfo_t **_data_obj_info=0)
Definition: irods_resource_redirect.cpp:505
CHKSUM_KW
#define CHKSUM_KW
Definition: rodsKeyWdDef.h:25
rsFileStat
int rsFileStat(rsComm_t *rsComm, fileStatInp_t *fileStatInp, rodsStat_t **fileStatOut)
Definition: rsFileStat.cpp:18
REMOTE_HOST
#define REMOTE_HOST
Definition: rodsConnect.h:45
REMOTE_OPEN
#define REMOTE_OPEN
Definition: getRemoteZoneResc.h:5
DataObjInfo::rescId
rodsLong_t rescId
Definition: objInfo.h:164
VERIFY_VAULT_SIZE_EQUALS_DATABASE_SIZE_KW
#define VERIFY_VAULT_SIZE_EQUALS_DATABASE_SIZE_KW
Definition: rodsKeyWdDef.h:84
fileStatInp_t
Definition: fileStat.h:7
DataObjInfo::rescHier
char rescHier[(1024+64)]
Definition: objInfo.h:132
rsDataObjChksum
int rsDataObjChksum(rsComm_t *rsComm, dataObjInp_t *dataObjChksumInp, char **outChksum)
Definition: rsDataObjChksum.cpp:64
DataObjInfo::replStatus
int replStatus
Definition: objInfo.h:141
INVALID_LEXICAL_CAST
@ INVALID_LEXICAL_CAST
Definition: rodsErrorTable.h:768
DataObjInfo::condInput
keyValPair_t condInput
Definition: objInfo.h:161
irods_resource_backport.hpp
PASSMSG
#define PASSMSG(message_, prev_error_)
Definition: irods_error.hpp:119
DataObjInfo::filePath
char filePath[(1024+64)]
Definition: objInfo.h:137
LOG_ERROR
#define LOG_ERROR
Definition: rodsLog.h:43
irods_resource_redirect.hpp
verifyDatObjChksum
int verifyDatObjChksum(rsComm_t *rsComm, dataObjInfo_t *dataObjInfo, char **outChksumStr)
Definition: rsDataObjChksum.cpp:297
DataObjInfo::next
struct DataObjInfo * next
Definition: objInfo.h:163
DataObjInfo::specColl
specColl_t * specColl
Definition: objInfo.h:158
resolveLinkedPath
int resolveLinkedPath(rsComm_t *rsComm, char *objPath, specCollCache_t **specCollCache, keyValPair_t *condInput)
Definition: specColl.cpp:711
irods_query.hpp
rodsStat::st_size
rodsLong_t st_size
Definition: rodsType.h:53
rsFileStat.hpp
irods::OPEN_OPERATION
const std::string OPEN_OPERATION("OPEN")
rsComm_t::rError
rError_t rError
Definition: rcConnect.h:158
irods::error::code
long long code() const
Definition: irods_error.cpp:194
rodsStat
Definition: rodsType.h:52
_rsDataObjChksum
int _rsDataObjChksum(rsComm_t *rsComm, dataObjInp_t *dataObjInp, char **outChksumStr, dataObjInfo_t **dataObjInfoHead)
Definition: rsDataObjChksum.cpp:115
RESC_HIER_STR_KW
#define RESC_HIER_STR_KW
Definition: rodsKeyWdDef.h:225
fileStatInp_t::rescHier
char rescHier[(1024+64)]
Definition: fileStat.h:10
fileStatInp_t::objPath
char objPath[(1024+64)]
Definition: fileStat.h:11
LOG_DEBUG
#define LOG_DEBUG
Definition: rodsLog.h:23
freeAllDataObjInfo
int freeAllDataObjInfo(dataObjInfo_t *dataObjInfoHead)
Definition: rcMisc.cpp:561
CAT_INSUFFICIENT_PRIVILEGE_LEVEL
@ CAT_INSUFFICIENT_PRIVILEGE_LEVEL
Definition: rodsErrorTable.h:445
getDataObjInfoIncSpecColl
int getDataObjInfoIncSpecColl(rsComm_t *rsComm, dataObjInp_t *dataObjInp, dataObjInfo_t **dataObjInfo)
Definition: dataObjOpr.cpp:1767
rcDataObjChksum
int rcDataObjChksum(rcComm_t *conn, dataObjInp_t *dataObjChksumInp, char **outChksum)
Definition: rcDataObjChksum.cpp:70
CHKSUM_ALL_KW
#define CHKSUM_ALL_KW
Definition: rodsKeyWdDef.h:59
DataObjInp
Definition: dataObjInpOut.h:65
rsDataObjChksum.hpp
rmKeyVal
int rmKeyVal(keyValPair_t *condInput, const char *keyWord)
Definition: rcMisc.cpp:710
ADMIN_KW
#define ADMIN_KW
Definition: rodsKeyWdDef.h:62
sortObjInfoForOpen
int sortObjInfoForOpen(dataObjInfo_t **dataObjInfoHead, keyValPair_t *condInput, int writeFlag)
Definition: dataObjOpr.cpp:548
addRErrorMsg
int addRErrorMsg(rError_t *myError, int status, const char *msg)
Definition: rcMisc.cpp:121
DataObjInfo::replNum
int replNum
Definition: objInfo.h:140
LOCAL_PRIV_USER_AUTH
#define LOCAL_PRIV_USER_AUTH
Definition: rodsUser.h:36
irods.pypyodbc.status
status
Definition: pypyodbc.py:467
physPath.hpp
irods::log
void log(const error &)
Definition: irods_log.cpp:13
modDataObjMeta_t::regParam
keyValPair_t * regParam
Definition: modDataObjMeta.h:9
rsComm_t::clientUser
userInfo_t clientUser
Definition: rcConnect.h:153
irods::error
Definition: irods_error.hpp:23
modDataObjMeta_t::dataObjInfo
dataObjInfo_t * dataObjInfo
Definition: modDataObjMeta.h:8
DataObjInfo::chksum
char chksum[64]
Definition: objInfo.h:135
IN_PDMO_KW
#define IN_PDMO_KW
Definition: rodsKeyWdDef.h:227
ORIG_CHKSUM_KW
#define ORIG_CHKSUM_KW
Definition: rodsKeyWdDef.h:26
rodsServerHost
Definition: rodsConnect.h:62
fileStatInp_t::fileName
char fileName[(1024+64)]
Definition: fileStat.h:9
FORCE_CHKSUM_KW
#define FORCE_CHKSUM_KW
Definition: rodsKeyWdDef.h:60
CAT_NO_ROWS_FOUND
@ CAT_NO_ROWS_FOUND
Definition: rodsErrorTable.h:423
irods::RESOURCE_CLASS_BUNDLE
const std::string RESOURCE_CLASS_BUNDLE("bundle")
VERIFY_CHKSUM_KW
#define VERIFY_CHKSUM_KW
Definition: rodsKeyWdDef.h:16
rsModDataObjMeta
int rsModDataObjMeta(rsComm_t *rsComm, modDataObjMeta_t *modDataObjMetaInp)
Definition: rsModDataObjMeta.cpp:23
getAndConnRemoteZone
int getAndConnRemoteZone(rsComm_t *rsComm, dataObjInp_t *dataObjInp, rodsServerHost_t **rodsServerHost, char *remotZoneOpr)
Definition: rodsConnect.cpp:784
dataObjChksumAndRegInfo
int dataObjChksumAndRegInfo(rsComm_t *rsComm, dataObjInfo_t *dataObjInfo, char **outChksumStr)
Definition: rsDataObjChksum.cpp:258
rsModDataObjMeta.hpp
resource.hpp
DataObjInfo::objPath
char objPath[(1024+64)]
Definition: objInfo.h:130
USER_FILE_SIZE_MISMATCH
@ USER_FILE_SIZE_MISMATCH
Definition: rodsErrorTable.h:287
rsGenQuery.hpp
userInfo_t::authInfo
authInfo_t authInfo
Definition: rodsUser.h:70
irods::query
Definition: irods_query.hpp:25
_dataObjChksum
int _dataObjChksum(rsComm_t *rsComm, dataObjInfo_t *dataObjInfo, char **chksumStr)
Definition: physPath.cpp:421
rstrcpy
char * rstrcpy(char *dest, const char *src, int maxLen)
Definition: stringOpr.cpp:51
dataObjOpr.hpp
rsApiHandler.hpp
DataObjInp::condInput
keyValPair_t condInput
Definition: dataObjInpOut.h:74
modDataObjMeta_t
Definition: modDataObjMeta.h:7
NAME_LEN
#define NAME_LEN
Definition: rodsDef.h:55
KeyValPair
Definition: objInfo.h:120
dataObjChksum.h
authInfo_t::authFlag
int authFlag
Definition: rodsUser.h:42
clearKeyVal
int clearKeyVal(keyValPair_t *condInput)
Definition: rcMisc.cpp:1047
irods::error::ok
bool ok()
Definition: irods_error.cpp:258
DataObjInfo
Definition: objInfo.h:129
USER_CHKSUM_MISMATCH
@ USER_CHKSUM_MISMATCH
Definition: rodsErrorTable.h:245
SpecCollCache
Definition: objInfo.h:102
rodsLong_t
long long rodsLong_t
Definition: rodsType.h:32
objMetaOpr.hpp