Exemple #1
0
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;
}
Exemple #2
0
/* 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;
}