int gw_em_mad_submit( int jid, char *rm_contact, char *rsl_file, char *info ) { int rc; int *i; char rsl_string[4096]; int fd; int j; if (!mad.initialized) { strcpy(info, "MAD not initialized"); return 1; } fd = open(rsl_file, O_RDONLY); if (fd == -1) { strcpy(info, "Error opening RSL file"); return 1; } j = read(fd, (void *) rsl_string, sizeof(char)*4095); if ((j ==-1)||(j==0)) { strcpy(info, "Error reading RSL file"); close(fd); return 1; } else rsl_string[j]='\0'; i = (int *) malloc( sizeof(int)); *i = jid; rc = globus_gram_client_register_job_request(rm_contact, rsl_string, GLOBUS_GRAM_PROTOCOL_JOB_STATE_ALL, mad.callback_contact, GLOBUS_GRAM_CLIENT_NO_ATTR, gw_em_mad_submit_callback, (void *) i); if (rc != GLOBUS_SUCCESS) { sprintf(info, "GRAM client job request failed: %s (error %d)", globus_gram_client_error_string(rc), rc); close(fd); return 1; } close(fd); return 0; }
int main(int argc, char *argv[]) { int rc; globus_gram_client_attr_t attr; struct monitor_t monitor; if (argc < 3) { fprintf(stderr, "Usage: %s RESOURCE-MANAGER-CONTACT RSL-SPEC...\n", argv[0]); rc = 1; goto out; } printf("Submiting job to %s with full proxy\n", argv[1]); /* * Always activate the GLOBUS_GRAM_CLIENT_MODULE prior to using any * functions from the GRAM Client API or behavior is undefined. */ rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error activating %s because %s (Error %d)\n", GLOBUS_GRAM_CLIENT_MODULE->module_name, globus_gram_client_error_string(rc), rc); goto out; } rc = globus_mutex_init(&monitor.mutex, NULL); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error initializing mutex %d\n", rc); goto deactivate; } rc = globus_cond_init(&monitor.cond, NULL); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error initializing condition variable %d\n", rc); goto destroy_mutex; } monitor.done = GLOBUS_FALSE; /* Initialize attribute so that we can set the delegation attribute */ rc = globus_gram_client_attr_init(&attr); /* Set the proxy attribute */ rc = globus_gram_client_attr_set_delegation_mode( attr, GLOBUS_IO_SECURE_DELEGATION_MODE_FULL_PROXY); /* Submit the job rsl from argv[2] */ globus_mutex_lock(&monitor.mutex); /* When the job has been submitted, the example_submit_callback * will be called, either from another thread or from a * globus_cond_wait in a nonthreaded build */ rc = globus_gram_client_register_job_request( argv[1], argv[2], 0, NULL, attr, example_submit_callback, &monitor); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "Unable to submit job %s because %s (Error %d)\n", argv[2], globus_gram_client_error_string(rc), rc); } /* Wait until the example_submit_callback function has been called for * the job submission */ while (!monitor.done) { globus_cond_wait(&monitor.cond, &monitor.mutex); } globus_mutex_unlock(&monitor.mutex); globus_cond_destroy(&monitor.cond); destroy_mutex: globus_mutex_destroy(&monitor.mutex); deactivate: /* * Deactivating the module allows it to free memory and close network * connections. */ rc = globus_module_deactivate(GLOBUS_GRAM_CLIENT_MODULE); out: return rc; }
int main(int argc, char *argv[]) { int rc; int i; struct monitor_t monitor; if (argc < 3) { fprintf(stderr, "Usage: %s RESOURCE-MANAGER-CONTACT RSL-SPEC...\n", argv[0]); rc = 1; goto out; } printf("Submiting %d jobs to %s\n", argc-2, argv[1]); /* * Always activate the GLOBUS_GRAM_CLIENT_MODULE prior to using any * functions from the GRAM Client API or behavior is undefined. */ rc = globus_module_activate(GLOBUS_GRAM_CLIENT_MODULE); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error activating %s because %s (Error %d)\n", GLOBUS_GRAM_CLIENT_MODULE->module_name, globus_gram_client_error_string(rc), rc); goto out; } rc = globus_mutex_init(&monitor.mutex, NULL); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error initializing mutex %d\n", rc); goto deactivate; } rc = globus_cond_init(&monitor.cond, NULL); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "Error initializing condition variable %d\n", rc); goto destroy_mutex; } monitor.submit_pending = 0; /* Submits jobs from argv[2] until end of the argv array. At most * CONCURRENT_SUBMITS will be pending at any given time. */ globus_mutex_lock(&monitor.mutex); for (i = 2; i < argc; i++) { /* This throttles the number of concurrent job submissions */ while (monitor.submit_pending >= CONCURRENT_SUBMITS) { globus_cond_wait(&monitor.cond, &monitor.mutex); } /* When the job has been submitted, the example_submit_callback * will be called, either from another thread or from a * globus_cond_wait in a nonthreaded build */ rc = globus_gram_client_register_job_request( argv[1], argv[i], 0, NULL, NULL, example_submit_callback, &monitor); if (rc != GLOBUS_SUCCESS) { fprintf(stderr, "Unable to submit job %s because %s (Error %d)\n", argv[i], globus_gram_client_error_string(rc), rc); } else { monitor.submit_pending++; } } /* Wait until the example_submit_callback function has been called for * each job submission */ while (monitor.submit_pending > 0) { globus_cond_wait(&monitor.cond, &monitor.mutex); } globus_mutex_unlock(&monitor.mutex); printf("Submitted %d jobs (%d successfully)\n", argc-2, monitor.successful_submits); globus_cond_destroy(&monitor.cond); destroy_mutex: globus_mutex_destroy(&monitor.mutex); deactivate: /* * Deactivating the module allows it to free memory and close network * connections. */ rc = globus_module_deactivate(GLOBUS_GRAM_CLIENT_MODULE); out: return rc; }