ssg.h 2.13 KB
Newer Older
Jonathan Jenkins's avatar
Jonathan Jenkins committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*
 * Copyright (c) 2016 UChicago Argonne, LLC
 *
 * See COPYRIGHT in top-level directory.
 */

#pragma once

// "simple stupid group" interface
//
// Contains trivial wireup and connection management functionality, with a
// model of a static (at startup) member list.

#ifdef __cplusplus
extern "C" {
#endif

#include <mercury.h>

Jonathan Jenkins's avatar
Jonathan Jenkins committed
20
// using pointer so that we can use proc (proc has to allocate in this case)
Jonathan Jenkins's avatar
Jonathan Jenkins committed
21
22
23
24
25
26
27
28
29
30
31
32
33
typedef struct ssg *ssg_t;

// some defines
// null pointer shim
#define SSG_NULL ((ssg_t)NULL)
// after init, rank is possibly unknown
#define SSG_RANK_UNKNOWN (-1)
// if ssg_t is gotten from another process (RPC output), then, by definition,
// the receiving entity is not part of the group
#define SSG_EXTERNAL_RANK (-2)

/// participant initialization

34
// config file based - load up the given config file
Jonathan Jenkins's avatar
Jonathan Jenkins committed
35
// containing a set of hostnames
36
37
38
39
// is_member - nonzero if caller is expected to be in the group, zero otherwise
//           - ssg_lookup fails if caller is unable to identify with one of the
//             config entries
ssg_t ssg_init_config(const char * fname, int is_member);
Jonathan Jenkins's avatar
Jonathan Jenkins committed
40

Jonathan Jenkins's avatar
Jonathan Jenkins committed
41
// once the ssg has been initialized, wireup (a collection of HG_Addr_lookups)
Jonathan Jenkins's avatar
Jonathan Jenkins committed
42
// note that this is a simple blocking implementation - no margo/etc here
43
hg_return_t ssg_lookup(ssg_t s, hg_context_t *hgctx);
Jonathan Jenkins's avatar
Jonathan Jenkins committed
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

/// finalization

// teardown all connections associated with the given ssg
void ssg_finalize(ssg_t s);

/// accessors

// get my rank
int ssg_get_rank(const ssg_t s);

// get the number of participants
int ssg_get_count(const ssg_t s);

// get the address for the group member at the given rank
Jonathan Jenkins's avatar
Jonathan Jenkins committed
59
hg_addr_t ssg_get_addr(const ssg_t s, int rank);
Jonathan Jenkins's avatar
Jonathan Jenkins committed
60
61
62
63
64
65
66
67
68

// get the string hostname for the group member at the given rank
const char * ssg_get_addr_str(const ssg_t s, int rank);

/// mercury support

// group serialization mechanism
hg_return_t hg_proc_ssg_t(hg_proc_t proc, ssg_t *s);

69
70
71
72
73
74
75
/// utility functions

// dump address list to the given file
// returns -1 on error, corresponding to the return code of open/write/close,
// and sets errno
int ssg_dump(const ssg_t s, const char *fname);

Jonathan Jenkins's avatar
Jonathan Jenkins committed
76
77
78
79
80
81
82
#ifdef __cplusplus
}
#endif

/**
 * vim: ft=c sw=4 ts=4 sts=4 tw=80 expandtab
 */