static int server_init(int argc, char *argv[]) { int rc; uint32_t flags = CRT_FLAG_BIT_SERVER | CRT_FLAG_BIT_LM_DISABLE; d_rank_t rank = -1; uint32_t size = -1; rc = daos_debug_init(NULL); if (rc != 0) return rc; rc = register_dbtree_classes(); if (rc != 0) D_GOTO(exit_debug_init, rc); /** initialize server topology data */ rc = dss_topo_init(); if (rc != 0) D_GOTO(exit_debug_init, rc); rc = abt_init(argc, argv); if (rc != 0) goto exit_debug_init; /* initialize the modular interface */ rc = dss_module_init(); if (rc) goto exit_abt_init; D_INFO("Module interface successfully initialized\n"); /* initialize the network layer */ if (sys_map_path != NULL) flags |= CRT_FLAG_BIT_PMIX_DISABLE; rc = crt_init_opt(server_group_id, flags, daos_crt_init_opt_get(true, DSS_CTX_NR_TOTAL)); if (rc) D_GOTO(exit_mod_init, rc); if (sys_map_path != NULL) { if (self_rank == -1) { D_ERROR("self rank required\n"); D_GOTO(exit_crt_init, rc = -DER_INVAL); } rc = crt_rank_self_set(self_rank); if (rc != 0) D_ERROR("failed to set self rank %u: %d\n", self_rank, rc); rc = dss_sys_map_load(sys_map_path, server_group_id, self_rank, DSS_CTX_NR_TOTAL); if (rc) { D_ERROR("failed to load %s: %d\n", sys_map_path, rc); D_GOTO(exit_crt_init, rc); } } D_INFO("Network successfully initialized\n"); rc = crt_group_rank(NULL, &rank); D_ASSERTF(rc == 0, "%d\n", rc); if (sys_map_path != NULL) D_ASSERTF(rank == self_rank, "%u == %u\n", rank, self_rank); rc = crt_group_size(NULL, &size); D_ASSERTF(rc == 0, "%d\n", rc); /* rank 0 save attach info for singleton client if needed */ if (save_attach_info && rank == 0) { if (attach_info_path != NULL) { rc = crt_group_config_path_set(attach_info_path); if (rc != 0) { D_ERROR("crt_group_config_path_set(path %s) " "failed, rc: %d.\n", attach_info_path, rc); D_GOTO(exit_mod_init, rc); } } rc = crt_group_config_save(NULL, true); if (rc) D_GOTO(exit_mod_init, rc); D_INFO("server group attach info saved\n"); } ds_iv_init(); /* load modules */ rc = modules_load(&dss_mod_facs); if (rc) /* Some modules may have been loaded successfully. */ D_GOTO(exit_mod_loaded, rc); D_INFO("Module %s successfully loaded\n", modules); /* start up service */ rc = dss_srv_init(); if (rc) { D_ERROR("DAOS cannot be initialized using the configured " "path (%s). Please ensure it is on a PMDK compatible " "file system and writeable by the current user\n", dss_storage_path); D_GOTO(exit_mod_loaded, rc); } D_INFO("Service is now running\n"); if (dss_mod_facs & DSS_FAC_LOAD_CLI) { rc = daos_init(); if (rc) { D_ERROR("daos_init (client) failed, rc: %d.\n", rc); D_GOTO(exit_srv_init, rc); } D_INFO("Client stack enabled\n"); } else { rc = daos_hhash_init(); if (rc) { D_ERROR("daos_hhash_init failed, rc: %d.\n", rc); D_GOTO(exit_srv_init, rc); } D_INFO("daos handle hash-table initialized\n"); } /* server-side uses D_HTYPE_PTR handle */ d_hhash_set_ptrtype(daos_ht.dht_hhash); rc = drpc_init(); if (rc != 0) { D_ERROR("Failed to initialize dRPC: %d\n", rc); goto exit_daos_fini; } rc = dss_module_setup_all(); if (rc != 0) goto exit_drpc_fini; D_INFO("Modules successfully set up\n"); D_PRINT("DAOS I/O server (v%s) process %u started on rank %u " "(out of %u) with %u target xstream set(s), %d helper XS " "per target, firstcore %d.\n", DAOS_VERSION, getpid(), rank, size, dss_tgt_nr, dss_tgt_offload_xs_nr, dss_core_offset); return 0; exit_drpc_fini: drpc_fini(); exit_daos_fini: if (dss_mod_facs & DSS_FAC_LOAD_CLI) daos_fini(); else daos_hhash_fini(); exit_srv_init: dss_srv_fini(true); exit_mod_loaded: dss_module_unload_all(); ds_iv_fini(); exit_crt_init: crt_finalize(); exit_mod_init: dss_module_fini(true); exit_abt_init: abt_fini(); exit_debug_init: daos_debug_fini(); return rc; }
/* Initializes T as an empty tower. */ void tower_init (struct tower *t) { abt_init (&t->abt, NULL, reaugment_tower_node, NULL); t->cache_bottom = ULONG_MAX; }