static int init_framework(sge_gdi_ctx_class_t *ctx, bdb_info *info) { int ret = EXIT_FAILURE; lList *answer_list = NULL; lListElem *spooling_context = NULL; const char *spooling_method = ctx->get_spooling_method(ctx); const char *spooling_lib = ctx->get_spooling_lib(ctx); const char *spooling_params = ctx->get_spooling_params(ctx); DENTER(TOP_LAYER, "init_framework"); #ifdef HP1164 sge_set_admin_username("none", NULL); #endif /* create spooling context */ spooling_context = spool_create_dynamic_context(&answer_list, spooling_method, spooling_lib, spooling_params); answer_list_output(&answer_list); if (!strcmp(bootstrap_get_spooling_method(),"classic")) { CRITICAL((SGE_EVENT, MSG_SPOOLDEFAULTS_CANTHANDLECLASSICSPOOLING)); } else if (spooling_context == NULL) { CRITICAL((SGE_EVENT, MSG_SPOOLDEFAULTS_CANNOTCREATECONTEXT)); } else { spool_set_default_context(spooling_context); spool_set_option(&answer_list, spooling_context, "recover=false"); answer_list_output(&answer_list); /* initialize spooling context */ if (!spool_startup_context(&answer_list, spooling_context, true)) { CRITICAL((SGE_EVENT, MSG_SPOOLDEFAULTS_CANNOTSTARTUPCONTEXT)); } else { /* search the berkeley db info - take it from any object type, * berkeleydb spools all objects using the same rule. */ lListElem *type = spool_context_search_type(spooling_context, SGE_TYPE_JOB); lListElem *rule = spool_type_search_default_rule(type); *info = (bdb_info)lGetRef(rule, SPR_clientdata); ret = EXIT_SUCCESS; } answer_list_output(&answer_list); } DRETURN(ret); }
int main(int argc, char *argv[]) { const char *url; int i, threads; pthread_t *t; int *args; lList *answer_list = NULL; lListElem *spooling_context; DENTER_MAIN(TOP_LAYER, "test_berkeleydb_mt"); /* parse commandline parameters */ if (argc < 3) { ERROR((SGE_EVENT, "usage: test_berkeleydb_mt <url> <threads> [<delay>]\n")); ERROR((SGE_EVENT, " <url> = path or host:database\n")); ERROR((SGE_EVENT, " <threads> = number of threads\n")); ERROR((SGE_EVENT, " <delay> = delay after writing [ms]\n")); SGE_EXIT(NULL, 1); } url = argv[1]; threads = atoi(argv[2]); if (argc > 3) { delay = atoi(argv[3]); } /* allocate memory for pthreads and arguments */ t = (pthread_t *)malloc(threads * sizeof(pthread_t)); args = (int *)malloc(threads * sizeof(int)); DPRINTF(("writing to database %s from %d threads\n", url, threads)); /* initialize spooling */ spooling_context = spool_create_dynamic_context(&answer_list, NULL, url, NULL); answer_list_output(&answer_list); if (spooling_context == NULL) { SGE_EXIT(NULL, EXIT_FAILURE); } spool_set_default_context(spooling_context); if (!spool_startup_context(&answer_list, spooling_context, true)) { answer_list_output(&answer_list); SGE_EXIT(NULL, EXIT_FAILURE); } answer_list_output(&answer_list); /* let n threads to parallel spooling */ for (i = 0; i < threads; i++) { args[i] = i + 1; pthread_create(&(t[i]), NULL, work, (void*)(&args[i])); } /* also work in current thread */ work((void *)0); /* wait for termination of all threads */ for (i = 0; i < threads; i++) { pthread_join(t[i], NULL); } /* shutdown spooling */ spool_shutdown_context(&answer_list, spooling_context); answer_list_output(&answer_list); sge_free(&t); DEXIT; return EXIT_SUCCESS; }