Completes the oob interface for the name server by adding the server-side functions. These have NOT been tested, but do compile. The non-blocking receive is missing but will be added when the oob supports it.
This commit was SVN r2117.
Этот коммит содержится в:
родитель
73646b5576
Коммит
3fe4447ae4
@ -46,6 +46,12 @@ mca_ns_base_cellid_t ns_base_create_cellid(void)
|
||||
return MCA_NS_BASE_CELLID_MAX;
|
||||
}
|
||||
|
||||
if ((OMPI_SUCCESS != ompi_unpack(*answer, &command, 1, MCA_NS_OOB_PACK_CMD))
|
||||
|| (MCA_NS_CREATE_CELLID_CMD != command)) {
|
||||
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);
|
||||
return MCA_NS_BASE_CELLID_MAX;
|
||||
@ -83,6 +89,12 @@ mca_ns_base_jobid_t ns_base_create_jobid(void)
|
||||
return MCA_NS_BASE_JOBID_MAX;
|
||||
}
|
||||
|
||||
if ((OMPI_SUCCESS != ompi_unpack(*answer, &command, 1, MCA_NS_OOB_PACK_CMD))
|
||||
|| (MCA_NS_CREATE_JOBID_CMD != command)) {
|
||||
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);
|
||||
return MCA_NS_BASE_JOBID_MAX;
|
||||
@ -128,6 +140,12 @@ 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 ((OMPI_SUCCESS != ompi_unpack(*answer, &command, 1, MCA_NS_OOB_PACK_CMD))
|
||||
|| (MCA_NS_RESERVE_RANGE_CMD != command)) {
|
||||
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);
|
||||
return MCA_NS_BASE_VPID_MAX;
|
||||
|
@ -51,6 +51,7 @@
|
||||
#define MCA_NS_CREATE_JOBID_CMD 0x02
|
||||
#define MCA_NS_RESERVE_RANGE_CMD 0x04
|
||||
#define MCA_NS_FREE_NAME_CMD 0x08
|
||||
#define MCA_NS_ERROR 0xff
|
||||
|
||||
|
||||
/*
|
||||
|
@ -6,8 +6,6 @@
|
||||
#ifndef NS_REPLICA_H
|
||||
#define NS_REPLICA_H
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
#include "ompi_config.h"
|
||||
#include "include/types.h"
|
||||
#include "include/constants.h"
|
||||
@ -35,7 +33,6 @@ OBJ_CLASS_DECLARATION(mca_ns_replica_name_tracker_t);
|
||||
extern mca_ns_base_cellid_t mca_ns_replica_last_used_cellid;
|
||||
extern mca_ns_base_jobid_t mca_ns_replica_last_used_jobid;
|
||||
extern ompi_list_t mca_ns_replica_name_tracker;
|
||||
extern pthread_t *mca_ns_replica_thread;
|
||||
|
||||
/*
|
||||
* Module open / close
|
||||
@ -53,10 +50,10 @@ int mca_ns_replica_finalize(void);
|
||||
/*
|
||||
* oob interface
|
||||
*/
|
||||
/*
|
||||
void *mca_ns_replica_recv_thread(void*);
|
||||
mca_oob_callback_packed_fn_t mca_ns_replica_recv(int status, ompi_process_name_t* sender,
|
||||
ompi_buffer_t* buffer, int tag,
|
||||
void* cbdata);
|
||||
|
||||
*/
|
||||
/*
|
||||
* Implementation of create_cellid().
|
||||
*/
|
||||
|
@ -146,11 +146,14 @@ mca_ns_base_module_t* mca_ns_replica_init(bool *allow_multi_user_threads, bool *
|
||||
|
||||
/* set my_replica to point to myself */
|
||||
|
||||
mca_ns_my_replica = mca_ns_replica.copy_process_name(&ompi_process_info.name);
|
||||
mca_ns_my_replica = mca_ns_replica.copy_process_name(ompi_process_info.name);
|
||||
|
||||
/* Return the module */
|
||||
|
||||
initialized = true;
|
||||
|
||||
/* issue non-blocking receive for call_back function */
|
||||
|
||||
return &mca_ns_replica;
|
||||
} else {
|
||||
return NULL;
|
||||
@ -174,29 +177,69 @@ int mca_ns_replica_finalize(void)
|
||||
|
||||
return OMPI_SUCCESS;
|
||||
}
|
||||
/*
|
||||
mca_oob_callback_fn_t mca_ns_replica_recv(int status, const ompi_process_name_t *sender,
|
||||
const struct iovec *msg, size_t count,
|
||||
void *cbdata)
|
||||
|
||||
mca_oob_callback_packed_fn_t mca_ns_replica_recv(int status, ompi_process_name_t* sender,
|
||||
ompi_buffer_t* buffer, int tag,
|
||||
void* cbdata)
|
||||
{
|
||||
ompi_ns_msg_buffer_t *cmd, answer;
|
||||
mca_ns_base_cellid_t tmp1;
|
||||
struct iovec reply;
|
||||
int i;
|
||||
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;
|
||||
|
||||
for (i=0; i<count; i++) { loop through all included commands
|
||||
cmd = (ompi_ns_msg_buffer_t*)msg->iov_base;
|
||||
if (OMPI_NS_CREATE_CELLID == cmd->command) { got create_cellid command
|
||||
tmp1 = ompi_name_server.create_cellid();
|
||||
answer.command = cmd->command;
|
||||
answer.buflen = sizeof(tmp1);
|
||||
answer.buf = (uint8_t*)&tmp1;
|
||||
|
||||
reply.iov_base = (char*)&answer;
|
||||
reply.iov_len = sizeof(answer);
|
||||
mca_oob_send(sender, &reply, 1, MCA_OOB_TAG_ANY, 0);
|
||||
}
|
||||
if (OMPI_SUCCESS != ompi_unpack(*buffer, (void*)&command, 1, MCA_NS_OOB_PACK_CMD)) {
|
||||
goto RETURN_ERROR;
|
||||
}
|
||||
return OMPI_SUCCESS;
|
||||
|
||||
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)) {
|
||||
goto RETURN_ERROR;
|
||||
}
|
||||
cell = ompi_name_server.create_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)) {
|
||||
/* 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)) {
|
||||
goto RETURN_ERROR;
|
||||
}
|
||||
job = ompi_name_server.create_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)) {
|
||||
/* 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)) {
|
||||
goto RETURN_ERROR;
|
||||
}
|
||||
|
||||
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)) {
|
||||
goto RETURN_ERROR;
|
||||
}
|
||||
|
||||
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)) {
|
||||
/* RHC -- not sure what to do if the return send fails */
|
||||
}
|
||||
} else { /* got an unrecognized command */
|
||||
RETURN_ERROR:
|
||||
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);
|
||||
}
|
||||
|
||||
/* reissue the non-blocking receive */
|
||||
}
|
||||
*/
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user