Example #1
0
File: imeta.c Project: UPPMAX/irods
/*
 Modify (add or remove) AVUs
 */
int
modAVUMetadata(char *arg0, char *arg1, char *arg2, char *arg3, 
	       char *arg4, char *arg5, char *arg6, char *arg7, char *arg8) {
   modAVUMetadataInp_t modAVUMetadataInp;
   int status;
   char *mySubName;
   char *myName;
   char fullName[MAX_NAME_LEN];

   strncpy(fullName, cwd, MAX_NAME_LEN);
   if (strcmp(arg1,"-R")==0 || strcmp(arg1,"-r")==0 || 
       strcmp(arg1,"-G")==0 || strcmp(arg1,"-g")==0 || 
       strcmp(arg1,"-u")==0) {
      strncpy(fullName, arg2, MAX_NAME_LEN);
   }
   else {
      if (strlen(arg2)>0) {
	 if (*arg2=='/') {
	    strncpy(fullName, arg2, MAX_NAME_LEN);
	 }
	 else {
	    rstrcat(fullName, "/", MAX_NAME_LEN);
	    rstrcat(fullName, arg2, MAX_NAME_LEN);
	 }
      }
   }

   modAVUMetadataInp.arg0 = arg0;
   modAVUMetadataInp.arg1 = arg1;
   modAVUMetadataInp.arg2 = fullName;
   modAVUMetadataInp.arg3 = arg3;
   modAVUMetadataInp.arg4 = arg4;
   modAVUMetadataInp.arg5 = arg5;
   modAVUMetadataInp.arg6 = arg6;
   modAVUMetadataInp.arg7 = arg7;
   modAVUMetadataInp.arg8 = arg8;
   modAVUMetadataInp.arg9 ="";

   status = rcModAVUMetadata(Conn, &modAVUMetadataInp);
   lastCommandStatus = status;

   if (status < 0 ) {
      if (Conn->rError) {
	 rError_t *Err;
         rErrMsg_t *ErrMsg;
	 int i, len;
	 Err = Conn->rError;
	 len = Err->len;
	 for (i=0;i<len;i++) {
	    ErrMsg = Err->errMsg[i];
	    rodsLog(LOG_ERROR, "Level %d: %s",i, ErrMsg->msg);
	 }
      }
      myName = rodsErrorName(status, &mySubName);
      rodsLog (LOG_ERROR, "rcModAVUMetadata failed with error %d %s %s",
	       status, myName, mySubName);
   }
   return(status);
}
Example #2
0
int
rsModAVUMetadata (rsComm_t *rsComm, modAVUMetadataInp_t *modAVUMetadataInp )
{
    rodsServerHost_t *rodsServerHost;
    int status;
    char *myHint;

    if (strcmp(modAVUMetadataInp->arg0,"add")==0) {
	myHint = modAVUMetadataInp->arg2;
    } else if (strcmp(modAVUMetadataInp->arg0,"adda")==0) {
        myHint = modAVUMetadataInp->arg2;
    } else if (strcmp(modAVUMetadataInp->arg0,"addw")==0) {
        myHint = modAVUMetadataInp->arg2;
    } else if (strcmp(modAVUMetadataInp->arg0,"rmw")==0) {
        myHint = modAVUMetadataInp->arg2;
    } else if (strcmp(modAVUMetadataInp->arg0,"rmi")==0) {
        myHint = modAVUMetadataInp->arg2;
    } else if (strcmp(modAVUMetadataInp->arg0,"rm")==0) {
        myHint = modAVUMetadataInp->arg2;
    } else if (strcmp(modAVUMetadataInp->arg0,"cp")==0) {
        myHint = modAVUMetadataInp->arg3;
    } else if (strcmp(modAVUMetadataInp->arg0,"mod")==0) {
        myHint = modAVUMetadataInp->arg2;
    } else if (strcmp(modAVUMetadataInp->arg0,"set")==0) {
        myHint = modAVUMetadataInp->arg2;
    } else {
	/* assume local */
	myHint = NULL;
    }
 
    status = getAndConnRcatHost(rsComm, MASTER_RCAT, myHint, &rodsServerHost);
    if (status < 0) {
       return(status);
    }

    if (rodsServerHost->localFlag == LOCAL_HOST) {
#ifdef RODS_CAT
       status = _rsModAVUMetadata (rsComm, modAVUMetadataInp);
#else
       status = SYS_NO_RCAT_SERVER_ERR;
#endif
    }
    else {
       status = rcModAVUMetadata(rodsServerHost->conn,
			       modAVUMetadataInp);
    }

    if (status < 0) { 
       rodsLog (LOG_NOTICE,
		"rsModAVUMetadata: rcModAVUMetadata failed");
    }
    return (status);
}
Example #3
0
int
rsModAVUMetadata( rsComm_t *rsComm, modAVUMetadataInp_t *modAVUMetadataInp ) {
    rodsServerHost_t *rodsServerHost;
    int status;
    char *myHint;

    if ( strcmp( modAVUMetadataInp->arg0, "add" ) == 0 ) {
        myHint = modAVUMetadataInp->arg2;
    }
    else if ( strcmp( modAVUMetadataInp->arg0, "adda" ) == 0 ) {
        myHint = modAVUMetadataInp->arg2;
    }
    else if ( strcmp( modAVUMetadataInp->arg0, "addw" ) == 0 ) {
        myHint = modAVUMetadataInp->arg2;
    }
    else if ( strcmp( modAVUMetadataInp->arg0, "rmw" ) == 0 ) {
        myHint = modAVUMetadataInp->arg2;
    }
    else if ( strcmp( modAVUMetadataInp->arg0, "rmi" ) == 0 ) {
        myHint = modAVUMetadataInp->arg2;
    }
    else if ( strcmp( modAVUMetadataInp->arg0, "rm" ) == 0 ) {
        myHint = modAVUMetadataInp->arg2;
    }
    else if ( strcmp( modAVUMetadataInp->arg0, "cp" ) == 0 ) {
        myHint = modAVUMetadataInp->arg3;
    }
    else if ( strcmp( modAVUMetadataInp->arg0, "mod" ) == 0 ) {
        myHint = modAVUMetadataInp->arg2;
    }
    else if ( strcmp( modAVUMetadataInp->arg0, "set" ) == 0 ) { // JMC - backport 4836
        myHint = modAVUMetadataInp->arg2;
    }
    else {
        /* assume local */
        myHint = NULL;
    }

    status = getAndConnRcatHost( rsComm, MASTER_RCAT, ( const char* )myHint, &rodsServerHost );
    if ( status < 0 ) {
        return status;
    }

    if ( rodsServerHost->localFlag == LOCAL_HOST ) {
        std::string svc_role;
        irods::error ret = get_catalog_service_role(svc_role);
        if(!ret.ok()) {
            irods::log(PASS(ret));
            return ret.code();
        }

        if( irods::CFG_SERVICE_ROLE_PROVIDER == svc_role ) {
            status = _rsModAVUMetadata( rsComm, modAVUMetadataInp );
        } else if( irods::CFG_SERVICE_ROLE_CONSUMER == svc_role ) {
            status = SYS_NO_RCAT_SERVER_ERR;
        } else {
            rodsLog(
                LOG_ERROR,
                "role not supported [%s]",
                svc_role.c_str() );
            status = SYS_SERVICE_ROLE_NOT_SUPPORTED;
        }

    }
    else {
        status = rcModAVUMetadata( rodsServerHost->conn,
                                   modAVUMetadataInp );
    }

    if ( status < 0 ) {
        rodsLog( LOG_NOTICE,
                 "rsModAVUMetadata: rcModAVUMetadata failed" );
    }
    return status;
}
Example #4
0
File: imeta.c Project: UPPMAX/irods
/*
 Modify (copy) AVUs
 */
int
modCopyAVUMetadata(char *arg0, char *arg1, char *arg2, char *arg3, 
	     char *arg4, char *arg5, char *arg6, char *arg7) {
   modAVUMetadataInp_t modAVUMetadataInp;
   int status;
   char *mySubName;
   char *myName;
   char fullName1[MAX_NAME_LEN];
   char fullName2[MAX_NAME_LEN];

   strncpy(fullName1, cwd, MAX_NAME_LEN);
   if (strcmp(arg1,"-R")==0 || strcmp(arg1,"-r")==0 || 
       strcmp(arg1,"-G")==0 || strcmp(arg1,"-g")==0 || 
       strcmp(arg1,"-u")==0) {
      strncpy(fullName1, arg3, MAX_NAME_LEN);
   }
   else {
      if (strlen(arg3)>0) {
	 if (*arg3=='/') {
	    strncpy(fullName1, arg3, MAX_NAME_LEN);
	 }
	 else {
	    rstrcat(fullName1, "/", MAX_NAME_LEN);
	    rstrcat(fullName1, arg3, MAX_NAME_LEN);
	 }
      }
   }

   strncpy(fullName2, cwd, MAX_NAME_LEN);
   if (strcmp(arg2,"-R")==0 || strcmp(arg2,"-r")==0 || 
       strcmp(arg2,"-G")==0 || strcmp(arg2,"-g")==0 || 
       strcmp(arg2,"-u")==0) {
      strncpy(fullName2, arg4, MAX_NAME_LEN);
   }
   else {
      if (strlen(arg4)>0) {
	 if (*arg4=='/') {
	    strncpy(fullName2, arg4, MAX_NAME_LEN);
	 }
	 else {
	    rstrcat(fullName2, "/", MAX_NAME_LEN);
	    rstrcat(fullName2, arg4, MAX_NAME_LEN);
	 }
      }
   }

   modAVUMetadataInp.arg0 = arg0;
   modAVUMetadataInp.arg1 = arg1;
   modAVUMetadataInp.arg2 = arg2;
   modAVUMetadataInp.arg3 = fullName1;
   modAVUMetadataInp.arg4 = fullName2;
   modAVUMetadataInp.arg5 = arg5;
   modAVUMetadataInp.arg6 = arg6;
   modAVUMetadataInp.arg7 = arg7;
   modAVUMetadataInp.arg8 ="";
   modAVUMetadataInp.arg9 ="";

   status = rcModAVUMetadata(Conn, &modAVUMetadataInp);
   lastCommandStatus = status;

   if (status < 0 ) {
      if (Conn->rError) {
	 rError_t *Err;
         rErrMsg_t *ErrMsg;
	 int i, len;
	 Err = Conn->rError;
	 len = Err->len;
	 for (i=0;i<len;i++) {
	    ErrMsg = Err->errMsg[i];
	    rodsLog(LOG_ERROR, "Level %d: %s",i, ErrMsg->msg);
	 }
      }
      myName = rodsErrorName(status, &mySubName);
      rodsLog (LOG_ERROR, "rcModAVUMetadata failed with error %d %s %s",
	       status, myName, mySubName);
   }

   if (status == CAT_UNKNOWN_FILE) {
      char tempName[MAX_NAME_LEN]="/";
      int len;
      int isRemote=0;
      strncat(tempName, myEnv.rodsZone, MAX_NAME_LEN);
      len = strlen(tempName);
      if (strncmp(tempName, fullName1, len) != 0) {
	 printf("Cannot copy metadata from a remote zone.\n");
	 isRemote=1;
      }
      if (strncmp(tempName, fullName2, len) != 0) {
	 printf("Cannot copy metadata to a remote zone.\n");
	 isRemote=1;
      }
      if (isRemote) {
	 printf("Copying of metadata is done via SQL within each ICAT\n");
	 printf("for efficiency.  Copying metadata between zones is\n");
	 printf("not implemented.\n");
      }
   }
   return(status);
}