1
1
This commit was SVN r2202.
Этот коммит содержится в:
Tim Woodall 2004-08-18 15:50:10 +00:00
родитель 775a83f039
Коммит 1ebcca8443
5 изменённых файлов: 78 добавлений и 47 удалений

Просмотреть файл

@ -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);
}