1
1

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.
Этот коммит содержится в:
Ralph Castain 2004-08-13 16:20:33 +00:00
родитель 73646b5576
Коммит 3fe4447ae4
4 изменённых файлов: 88 добавлений и 29 удалений

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

@ -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 */
}
*/