00001
00002
00003
00004
00005
00006 #include "databaseObjControl.h"
00007 #include "objMetaOpr.h"
00008 #include "resource.h"
00009 #include "miscServerFunct.h"
00010 #include "dboHighLevelRoutines.h"
00011
00012 int
00013 remoteDatabaseObjControl(rsComm_t *rsComm,
00014 databaseObjControlInp_t *databaseObjControlInp,
00015 databaseObjControlOut_t **databaseObjControlOut,
00016 rodsServerHost_t *rodsServerHost) {
00017 int status;
00018
00019 if (rodsServerHost == NULL) {
00020 rodsLog (LOG_NOTICE,
00021 "remoteDatabaseControl: Invalid rodsServerHost");
00022 return SYS_INVALID_SERVER_HOST;
00023 }
00024
00025 if ((status = svrToSvrConnect (rsComm, rodsServerHost)) < 0) {
00026 *databaseObjControlOut = (databaseObjControlOut_t*)malloc(sizeof(databaseObjControlOut_t));
00027 memset (*databaseObjControlOut, 0, sizeof (databaseObjControlOut_t));
00028 return status;
00029 }
00030
00031 status = rcDatabaseObjControl(rodsServerHost->conn,
00032 databaseObjControlInp, databaseObjControlOut);
00033 return status;
00034 }
00035
00036 int
00037 rsDatabaseObjControl (rsComm_t *rsComm, databaseObjControlInp_t *databaseObjControlInp,
00038 databaseObjControlOut_t **databaseObjControlOut)
00039 {
00040 rodsServerHost_t *rodsServerHost;
00041 int status;
00042 int remoteFlag;
00043 rodsHostAddr_t rescAddr;
00044 rescGrpInfo_t *rescGrpInfo = NULL;
00045
00046 status = _getRescInfo (rsComm, databaseObjControlInp->dbrName, &rescGrpInfo);
00047 if (status < 0 || NULL == rescGrpInfo ) {
00048 rodsLog (LOG_ERROR,
00049 "rsDatabaseObjControl: _getRescInfo of %s error, stat = %d",
00050 databaseObjControlInp->dbrName, status);
00051 char *outBuf;
00052 databaseObjControlOut_t *myObjControlOut;
00053 outBuf = (char*)malloc(200);
00054 *outBuf='\0';
00055 strncpy(outBuf, "DBR not found",200);
00056 myObjControlOut = (databaseObjControlOut_t*)malloc(sizeof(databaseObjControlOut_t));
00057 memset (myObjControlOut, 0, sizeof (databaseObjControlOut_t));
00058 myObjControlOut->outBuf = outBuf;
00059 *databaseObjControlOut = myObjControlOut;
00060 return status;
00061 }
00062
00063 bzero (&rescAddr, sizeof (rescAddr));
00064 rstrcpy (rescAddr.hostAddr, rescGrpInfo->rescInfo->rescLoc, NAME_LEN);
00065 remoteFlag = resolveHost (&rescAddr, &rodsServerHost);
00066
00067 if (remoteFlag == LOCAL_HOST) {
00068 status = _rsDatabaseObjControl(rsComm, databaseObjControlInp,
00069 databaseObjControlOut);
00070 } else if (remoteFlag == REMOTE_HOST) {
00071 status = remoteDatabaseObjControl(rsComm,
00072 databaseObjControlInp,
00073 databaseObjControlOut,
00074 rodsServerHost );
00075 } else if (remoteFlag < 0) {
00076 status = remoteFlag;
00077 }
00078
00079 if (status < 0 ) {
00080 rodsLog (LOG_NOTICE,
00081 "rsDatabaseObjControl: rcDatabaseObjControl failed, status = %d",
00082 status);
00083 }
00084 return (status);
00085 }
00086
00087
00088 int
00089 _rsDatabaseObjControl (rsComm_t *rsComm,
00090 databaseObjControlInp_t *databaseObjControlInp,
00091 databaseObjControlOut_t **databaseObjControlOut) {
00092 char *outBuf;
00093 databaseObjControlOut_t *myObjControlOut;
00094 #ifdef DBR
00095 int status;
00096 int maxBufSize;
00097 int validOption=0;
00098
00099 maxBufSize = 1024*50;
00100
00101 outBuf = (char *)malloc(maxBufSize);
00102 *outBuf='\0';
00103
00104 if (databaseObjControlInp->option == DBO_EXECUTE) {
00105 validOption=1;
00106 status = dboExecute(rsComm,
00107 databaseObjControlInp->dbrName,
00108 databaseObjControlInp->dboName,
00109 databaseObjControlInp->dborName,
00110 databaseObjControlInp->subOption,
00111 outBuf, maxBufSize,
00112 databaseObjControlInp->args);
00113 }
00114 if (databaseObjControlInp->option == DBR_COMMIT) {
00115 validOption=1;
00116 status = dbrCommit(rsComm,
00117 databaseObjControlInp->dbrName);
00118 }
00119 if (databaseObjControlInp->option == DBR_ROLLBACK) {
00120 validOption=1;
00121 status = dbrRollback(rsComm,
00122 databaseObjControlInp->dbrName);
00123 }
00124
00125 if (validOption==0) {
00126 return(DBO_INVALID_CONTROL_OPTION);
00127 }
00128
00129 myObjControlOut = (databaseObjControlOut_t *)malloc(sizeof(databaseObjControlOut_t));
00130 memset (myObjControlOut, 0, sizeof (databaseObjControlOut_t));
00131 myObjControlOut->outBuf = outBuf;
00132
00133 *databaseObjControlOut = myObjControlOut;
00134
00135 if (status < 0 ) {
00136 rodsLog (LOG_NOTICE,
00137 "_rsDatabaseObjControl: databaseObjControl status = %d",
00138 status);
00139 return (status);
00140 }
00141
00142 return (status);
00143 #else
00144 myObjControlOut = (databaseObjControlOut_t*)malloc(sizeof(databaseObjControlOut_t));
00145 memset (myObjControlOut, 0, sizeof (databaseObjControlOut_t));
00146 outBuf = (char*)malloc(100);
00147 strcpy(outBuf,
00148 "The iRODS system needs to be re-compiled with DBR support enabled");
00149 myObjControlOut->outBuf = outBuf;
00150 *databaseObjControlOut = myObjControlOut;
00151 return(DBR_NOT_COMPILED_IN);
00152 #endif
00153 }