cleanup for oob
This commit was SVN r2202.
Этот коммит содержится в:
родитель
775a83f039
Коммит
1ebcca8443
@ -23,7 +23,7 @@ mca_ns_base_cellid_t ns_base_create_cellid(void)
|
||||
{
|
||||
ompi_buffer_t cmd;
|
||||
mca_ns_base_cellid_t cell;
|
||||
ompi_buffer_t *answer;
|
||||
ompi_buffer_t answer;
|
||||
mca_ns_cmd_flag_t command;
|
||||
int recv_tag;
|
||||
|
||||
@ -42,21 +42,21 @@ mca_ns_base_cellid_t ns_base_create_cellid(void)
|
||||
return MCA_NS_BASE_CELLID_MAX;
|
||||
}
|
||||
|
||||
if (0 > mca_oob_recv_packed(mca_ns_my_replica, answer, &recv_tag)) {
|
||||
if (0 > mca_oob_recv_packed(mca_ns_my_replica, &answer, &recv_tag)) {
|
||||
return MCA_NS_BASE_CELLID_MAX;
|
||||
}
|
||||
|
||||
if ((OMPI_SUCCESS != ompi_unpack(*answer, &command, 1, MCA_NS_OOB_PACK_CMD))
|
||||
if ((OMPI_SUCCESS != ompi_unpack(answer, &command, 1, MCA_NS_OOB_PACK_CMD))
|
||||
|| (MCA_NS_CREATE_CELLID_CMD != command)) {
|
||||
ompi_buffer_free(*answer);
|
||||
ompi_buffer_free(answer);
|
||||
return MCA_NS_BASE_CELLID_MAX;
|
||||
}
|
||||
|
||||
if (OMPI_SUCCESS != ompi_unpack(*answer, &cell, 1, MCA_NS_OOB_PACK_CELLID)) {
|
||||
ompi_buffer_free(*answer);
|
||||
if (OMPI_SUCCESS != ompi_unpack(answer, &cell, 1, MCA_NS_OOB_PACK_CELLID)) {
|
||||
ompi_buffer_free(answer);
|
||||
return MCA_NS_BASE_CELLID_MAX;
|
||||
} else {
|
||||
ompi_buffer_free(*answer);
|
||||
ompi_buffer_free(answer);
|
||||
return cell;
|
||||
}
|
||||
}
|
||||
@ -66,7 +66,7 @@ mca_ns_base_jobid_t ns_base_create_jobid(void)
|
||||
{
|
||||
ompi_buffer_t cmd;
|
||||
mca_ns_base_jobid_t job;
|
||||
ompi_buffer_t *answer;
|
||||
ompi_buffer_t answer;
|
||||
mca_ns_cmd_flag_t command;
|
||||
int recv_tag;
|
||||
|
||||
@ -85,21 +85,21 @@ mca_ns_base_jobid_t ns_base_create_jobid(void)
|
||||
return MCA_NS_BASE_JOBID_MAX;
|
||||
}
|
||||
|
||||
if (0 > mca_oob_recv_packed(mca_ns_my_replica, answer, &recv_tag)) {
|
||||
if (0 > mca_oob_recv_packed(mca_ns_my_replica, &answer, &recv_tag)) {
|
||||
return MCA_NS_BASE_JOBID_MAX;
|
||||
}
|
||||
|
||||
if ((OMPI_SUCCESS != ompi_unpack(*answer, &command, 1, MCA_NS_OOB_PACK_CMD))
|
||||
if ((OMPI_SUCCESS != ompi_unpack(answer, &command, 1, MCA_NS_OOB_PACK_CMD))
|
||||
|| (MCA_NS_CREATE_JOBID_CMD != command)) {
|
||||
ompi_buffer_free(*answer);
|
||||
ompi_buffer_free(answer);
|
||||
return MCA_NS_BASE_JOBID_MAX;
|
||||
}
|
||||
|
||||
if (OMPI_SUCCESS != ompi_unpack(*answer, &job, 1, MCA_NS_OOB_PACK_JOBID)) {
|
||||
ompi_buffer_free(*answer);
|
||||
if (OMPI_SUCCESS != ompi_unpack(answer, &job, 1, MCA_NS_OOB_PACK_JOBID)) {
|
||||
ompi_buffer_free(answer);
|
||||
return MCA_NS_BASE_JOBID_MAX;
|
||||
} else {
|
||||
ompi_buffer_free(*answer);
|
||||
ompi_buffer_free(answer);
|
||||
return job;
|
||||
}
|
||||
}
|
||||
@ -109,7 +109,7 @@ mca_ns_base_vpid_t ns_base_reserve_range(mca_ns_base_jobid_t job, mca_ns_base_vp
|
||||
{
|
||||
ompi_buffer_t cmd;
|
||||
mca_ns_base_vpid_t starting_vpid;
|
||||
ompi_buffer_t *answer;
|
||||
ompi_buffer_t answer;
|
||||
mca_ns_cmd_flag_t command;
|
||||
int recv_tag;
|
||||
|
||||
@ -136,21 +136,21 @@ mca_ns_base_vpid_t ns_base_reserve_range(mca_ns_base_jobid_t job, mca_ns_base_vp
|
||||
return MCA_NS_BASE_VPID_MAX;
|
||||
}
|
||||
|
||||
if (0 > mca_oob_recv_packed(mca_ns_my_replica, answer, &recv_tag)) {
|
||||
if (0 > mca_oob_recv_packed(mca_ns_my_replica, &answer, &recv_tag)) {
|
||||
return MCA_NS_BASE_VPID_MAX;
|
||||
}
|
||||
|
||||
if ((OMPI_SUCCESS != ompi_unpack(*answer, &command, 1, MCA_NS_OOB_PACK_CMD))
|
||||
if ((OMPI_SUCCESS != ompi_unpack(answer, &command, 1, MCA_NS_OOB_PACK_CMD))
|
||||
|| (MCA_NS_RESERVE_RANGE_CMD != command)) {
|
||||
ompi_buffer_free(*answer);
|
||||
ompi_buffer_free(answer);
|
||||
return MCA_NS_BASE_VPID_MAX;
|
||||
}
|
||||
|
||||
if (OMPI_SUCCESS != ompi_unpack(*answer, &starting_vpid, 1, MCA_NS_OOB_PACK_VPID)) {
|
||||
ompi_buffer_free(*answer);
|
||||
if (OMPI_SUCCESS != ompi_unpack(answer, &starting_vpid, 1, MCA_NS_OOB_PACK_VPID)) {
|
||||
ompi_buffer_free(answer);
|
||||
return MCA_NS_BASE_VPID_MAX;
|
||||
} else {
|
||||
ompi_buffer_free(*answer);
|
||||
ompi_buffer_free(answer);
|
||||
return starting_vpid;
|
||||
}
|
||||
}
|
||||
|
@ -434,6 +434,13 @@ typedef mca_ns_base_cellid_t (*mca_ns_base_module_get_cellid_fn_t)(const ompi_pr
|
||||
*/
|
||||
typedef int (*mca_ns_base_module_compare_fn_t)(ompi_ns_cmp_bitmask_t fields, const ompi_process_name_t *name1, const ompi_process_name_t *name2);
|
||||
|
||||
/**
|
||||
* Called after all RTE components have been initialized. Provides the selected
|
||||
* module the chance to perform additional initialization (e.g. register w/ OOB).
|
||||
*/
|
||||
|
||||
typedef int (*mca_ns_base_module_init_fn_t)(void);
|
||||
|
||||
/*
|
||||
* Ver 1.0.0
|
||||
*/
|
||||
@ -453,7 +460,9 @@ struct mca_ns_base_module_1_0_0_t {
|
||||
mca_ns_base_module_get_jobid_fn_t get_jobid;
|
||||
mca_ns_base_module_get_cellid_fn_t get_cellid;
|
||||
mca_ns_base_module_compare_fn_t compare;
|
||||
mca_ns_base_module_init_fn_t init;
|
||||
};
|
||||
|
||||
typedef struct mca_ns_base_module_1_0_0_t mca_ns_base_module_1_0_0_t;
|
||||
typedef mca_ns_base_module_1_0_0_t mca_ns_base_module_t;
|
||||
|
||||
|
@ -25,6 +25,10 @@
|
||||
#include "mca/ns/base/base.h"
|
||||
#include "ns_proxy.h"
|
||||
|
||||
/* empty stub for proxy */
|
||||
static int ns_proxy_init(void)
|
||||
{ return OMPI_SUCCESS; }
|
||||
|
||||
|
||||
/*
|
||||
* Struct of function pointers that need to be initialized
|
||||
@ -65,7 +69,8 @@ static mca_ns_base_module_t mca_ns_proxy = {
|
||||
ns_base_get_vpid,
|
||||
ns_base_get_jobid,
|
||||
ns_base_get_cellid,
|
||||
ns_base_compare
|
||||
ns_base_compare,
|
||||
ns_proxy_init
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -51,9 +51,7 @@ int mca_ns_replica_finalize(void);
|
||||
* oob interface
|
||||
*/
|
||||
|
||||
void mca_ns_replica_recv(int status, ompi_process_name_t* sender,
|
||||
ompi_buffer_t* buffer, int* tag,
|
||||
void* cbdata);
|
||||
void mca_ns_replica_recv(int status, ompi_process_name_t* sender, ompi_buffer_t buffer, int tag, void* cbdata);
|
||||
|
||||
/*
|
||||
* Implementation of create_cellid().
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "mca/ns/base/base.h"
|
||||
#include "ns_replica.h"
|
||||
|
||||
static int mca_ns_replica_module_init(void);
|
||||
|
||||
/*
|
||||
* Struct of function pointers that need to be initialized
|
||||
@ -65,7 +66,8 @@ static mca_ns_base_module_t mca_ns_replica = {
|
||||
ns_base_get_vpid,
|
||||
ns_base_get_jobid,
|
||||
ns_base_get_cellid,
|
||||
ns_base_compare
|
||||
ns_base_compare,
|
||||
mca_ns_replica_module_init
|
||||
};
|
||||
|
||||
/*
|
||||
@ -178,76 +180,93 @@ int mca_ns_replica_finalize(void)
|
||||
return OMPI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* handle message from proxies
|
||||
*/
|
||||
|
||||
void mca_ns_replica_recv(int status, ompi_process_name_t* sender,
|
||||
ompi_buffer_t* buffer, int* tag,
|
||||
ompi_buffer_t buffer, int tag,
|
||||
void* cbdata)
|
||||
{
|
||||
ompi_buffer_t *answer, *error_answer;
|
||||
ompi_buffer_t answer, error_answer;
|
||||
mca_ns_cmd_flag_t command;
|
||||
mca_ns_base_cellid_t cell;
|
||||
mca_ns_base_jobid_t job;
|
||||
mca_ns_base_vpid_t vpid, range;
|
||||
|
||||
if (OMPI_SUCCESS != ompi_unpack(*buffer, (void*)&command, 1, MCA_NS_OOB_PACK_CMD)) {
|
||||
if (OMPI_SUCCESS != ompi_unpack(buffer, (void*)&command, 1, MCA_NS_OOB_PACK_CMD)) {
|
||||
goto RETURN_ERROR;
|
||||
}
|
||||
|
||||
if (OMPI_SUCCESS != ompi_buffer_init(answer, 0)) {
|
||||
if (OMPI_SUCCESS != ompi_buffer_init(&answer, 0)) {
|
||||
/* RHC -- not sure what to do if this fails */
|
||||
}
|
||||
|
||||
if (MCA_NS_CREATE_CELLID_CMD == command) { /* got a command to create a cellid */
|
||||
if (OMPI_SUCCESS != ompi_pack(*answer, (void*)&command, 1, MCA_NS_OOB_PACK_CMD)) {
|
||||
if (OMPI_SUCCESS != ompi_pack(answer, (void*)&command, 1, MCA_NS_OOB_PACK_CMD)) {
|
||||
goto RETURN_ERROR;
|
||||
}
|
||||
cell = ompi_name_server.create_cellid();
|
||||
if (OMPI_SUCCESS != ompi_pack(*answer, (void*)&cell, 1, MCA_NS_OOB_PACK_CELLID)) {
|
||||
if (OMPI_SUCCESS != ompi_pack(answer, (void*)&cell, 1, MCA_NS_OOB_PACK_CELLID)) {
|
||||
goto RETURN_ERROR;
|
||||
}
|
||||
if (0 > mca_oob_send_packed(sender, *answer, *tag, 0)) {
|
||||
if (0 > mca_oob_send_packed(sender, answer, tag, 0)) {
|
||||
/* RHC -- not sure what to do if the return send fails */
|
||||
}
|
||||
} else if (MCA_NS_CREATE_JOBID_CMD == command) { /* got command to create jobid */
|
||||
if (OMPI_SUCCESS != ompi_pack(*answer, (void*)&command, 1, MCA_NS_OOB_PACK_CMD)) {
|
||||
if (OMPI_SUCCESS != ompi_pack(answer, (void*)&command, 1, MCA_NS_OOB_PACK_CMD)) {
|
||||
goto RETURN_ERROR;
|
||||
}
|
||||
job = ompi_name_server.create_jobid();
|
||||
if (OMPI_SUCCESS != ompi_pack(*answer, (void*)&job, 1, MCA_NS_OOB_PACK_JOBID)) {
|
||||
if (OMPI_SUCCESS != ompi_pack(answer, (void*)&job, 1, MCA_NS_OOB_PACK_JOBID)) {
|
||||
goto RETURN_ERROR;
|
||||
}
|
||||
if (0 > mca_oob_send_packed(sender, *answer, *tag, 0)) {
|
||||
if (0 > mca_oob_send_packed(sender, answer, tag, 0)) {
|
||||
/* RHC -- not sure what to do if the return send fails */
|
||||
}
|
||||
} else if (MCA_NS_RESERVE_RANGE_CMD == command) { /* got command to reserve vpid range */
|
||||
if (OMPI_SUCCESS != ompi_unpack(*buffer, (void*)&job, 1, MCA_NS_OOB_PACK_JOBID)) {
|
||||
if (OMPI_SUCCESS != ompi_unpack(buffer, (void*)&job, 1, MCA_NS_OOB_PACK_JOBID)) {
|
||||
goto RETURN_ERROR;
|
||||
}
|
||||
|
||||
if (OMPI_SUCCESS != ompi_unpack(*buffer, (void*)&range, 1, MCA_NS_OOB_PACK_VPID)) {
|
||||
if (OMPI_SUCCESS != ompi_unpack(buffer, (void*)&range, 1, MCA_NS_OOB_PACK_VPID)) {
|
||||
goto RETURN_ERROR;
|
||||
}
|
||||
|
||||
vpid = ompi_name_server.reserve_range(job, range);
|
||||
if (OMPI_SUCCESS != ompi_pack(*answer, (void*)&command, 1, MCA_NS_OOB_PACK_CMD)) {
|
||||
if (OMPI_SUCCESS != ompi_pack(answer, (void*)&command, 1, MCA_NS_OOB_PACK_CMD)) {
|
||||
goto RETURN_ERROR;
|
||||
}
|
||||
|
||||
if (OMPI_SUCCESS != ompi_pack(*answer, (void*)&vpid, 1, MCA_NS_OOB_PACK_VPID)) {
|
||||
if (OMPI_SUCCESS != ompi_pack(answer, (void*)&vpid, 1, MCA_NS_OOB_PACK_VPID)) {
|
||||
goto RETURN_ERROR;
|
||||
}
|
||||
if (0 > mca_oob_send_packed(sender, *answer, *tag, 0)) {
|
||||
if (0 > mca_oob_send_packed(sender, answer, tag, 0)) {
|
||||
/* RHC -- not sure what to do if the return send fails */
|
||||
}
|
||||
ompi_buffer_free(answer);
|
||||
} else { /* got an unrecognized command */
|
||||
RETURN_ERROR:
|
||||
ompi_buffer_free(*buffer);
|
||||
ompi_buffer_init(error_answer, 0);
|
||||
ompi_buffer_init(&error_answer, 8);
|
||||
command = MCA_NS_ERROR;
|
||||
ompi_pack(*error_answer, (void*)&command, 1, MCA_NS_OOB_PACK_CMD);
|
||||
mca_oob_send_packed(sender, *error_answer, *tag, 0);
|
||||
ompi_pack(error_answer, (void*)&command, 1, MCA_NS_OOB_PACK_CMD);
|
||||
mca_oob_send_packed(sender, error_answer, tag, 0);
|
||||
ompi_buffer_free(error_answer);
|
||||
}
|
||||
|
||||
ompi_buffer_free(*buffer);
|
||||
|
||||
/* reissue the non-blocking receive */
|
||||
mca_oob_recv_packed_nb(MCA_OOB_NAME_ANY, MCA_OOB_TAG_NS, 0, mca_ns_replica_recv, NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* init the selected module - this is called after all RTE components
|
||||
* have been initialized
|
||||
*/
|
||||
|
||||
static int mca_ns_replica_module_init(void)
|
||||
{
|
||||
return mca_oob_recv_packed_nb(MCA_OOB_NAME_ANY, MCA_OOB_TAG_NS, 0, mca_ns_replica_recv, NULL);
|
||||
}
|
||||
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user