Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
ssg
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
18
Issues
18
List
Boards
Labels
Milestones
Merge Requests
2
Merge Requests
2
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sds
ssg
Commits
5372d4df
Commit
5372d4df
authored
Jul 13, 2018
by
Shane Snyder
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
get SWIM to use SSG dping fn
parent
f6d7f3fb
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
46 additions
and
70 deletions
+46
-70
src/ssg-internal.h
src/ssg-internal.h
+1
-1
src/ssg-rpc.c
src/ssg-rpc.c
+3
-3
src/ssg.c
src/ssg.c
+39
-11
src/swim-fd/swim-fd-ping.c
src/swim-fd/swim-fd-ping.c
+3
-0
src/swim-fd/swim-fd.c
src/swim-fd/swim-fd.c
+0
-55
No files found.
src/ssg-internal.h
View file @
5372d4df
...
@@ -65,7 +65,6 @@ typedef struct ssg_group_descriptor
...
@@ -65,7 +65,6 @@ typedef struct ssg_group_descriptor
typedef
struct
ssg_group_view
typedef
struct
ssg_group_view
{
{
unsigned
int
size
;
unsigned
int
size
;
ssg_member_state_t
*
member_list
;
ssg_member_state_t
*
member_map
;
ssg_member_state_t
*
member_map
;
}
ssg_group_view_t
;
}
ssg_group_view_t
;
...
@@ -76,6 +75,7 @@ typedef struct ssg_group
...
@@ -76,6 +75,7 @@ typedef struct ssg_group
ssg_group_view_t
view
;
ssg_group_view_t
view
;
ssg_group_descriptor_t
*
descriptor
;
ssg_group_descriptor_t
*
descriptor
;
swim_context_t
*
swim_ctx
;
swim_context_t
*
swim_ctx
;
ssg_member_state_t
*
member_list
;
ssg_membership_update_cb
update_cb
;
ssg_membership_update_cb
update_cb
;
void
*
update_cb_dat
;
void
*
update_cb_dat
;
UT_hash_handle
hh
;
UT_hash_handle
hh
;
...
...
src/ssg-rpc.c
View file @
5372d4df
...
@@ -248,7 +248,7 @@ DEFINE_MARGO_RPC_HANDLER(ssg_group_attach_recv_ult)
...
@@ -248,7 +248,7 @@ DEFINE_MARGO_RPC_HANDLER(ssg_group_attach_recv_ult)
static
int
ssg_group_view_serialize
(
static
int
ssg_group_view_serialize
(
ssg_group_view_t
*
view
,
void
**
buf
,
hg_size_t
*
buf_size
)
ssg_group_view_t
*
view
,
void
**
buf
,
hg_size_t
*
buf_size
)
{
{
ssg_member_state_t
*
member_state
;
ssg_member_state_t
*
member_state
,
*
tmp
;
hg_size_t
view_buf_size
=
0
;
hg_size_t
view_buf_size
=
0
;
void
*
view_buf
;
void
*
view_buf
;
void
*
buf_p
,
*
str_p
;
void
*
buf_p
,
*
str_p
;
...
@@ -257,7 +257,7 @@ static int ssg_group_view_serialize(
...
@@ -257,7 +257,7 @@ static int ssg_group_view_serialize(
*
buf_size
=
0
;
*
buf_size
=
0
;
/* first determine view size */
/* first determine view size */
LL_FOREACH
(
view
->
member_list
,
member_state
)
HASH_ITER
(
hh
,
view
->
member_map
,
member_state
,
tmp
)
{
{
view_buf_size
+=
strlen
(
member_state
->
addr_str
)
+
1
;
view_buf_size
+=
strlen
(
member_state
->
addr_str
)
+
1
;
}
}
...
@@ -267,7 +267,7 @@ static int ssg_group_view_serialize(
...
@@ -267,7 +267,7 @@ static int ssg_group_view_serialize(
return
SSG_FAILURE
;
return
SSG_FAILURE
;
buf_p
=
view_buf
;
buf_p
=
view_buf
;
LL_FOREACH
(
view
->
member_list
,
member_state
)
HASH_ITER
(
hh
,
view
->
member_map
,
member_state
,
tmp
)
{
{
str_p
=
member_state
->
addr_str
;
str_p
=
member_state
->
addr_str
;
strcpy
(
buf_p
,
str_p
);
strcpy
(
buf_p
,
str_p
);
...
...
src/ssg.c
View file @
5372d4df
...
@@ -123,21 +123,51 @@ int ssg_finalize()
...
@@ -123,21 +123,51 @@ int ssg_finalize()
*** SSG group management routines ***
*** SSG group management routines ***
*************************************/
*************************************/
/* XXX */
static
int
ssg_get_swim_dping_target
(
static
int
ssg_get_swim_dping_target
(
void
*
group_data
,
void
*
group_data
,
hg_addr_t
*
target_addr
,
hg_addr_t
*
target_addr
,
swim_member_state_t
*
target_ms
)
swim_member_state_t
*
target_swim_ms
);
static
void
ssg_gen_rand_member_list
(
ssg_group_t
*
g
);
static
int
ssg_get_swim_dping_target
(
void
*
group_data
,
hg_addr_t
*
target_addr
,
swim_member_state_t
*
target_swim_ms
)
{
{
ssg_group_t
*
g
=
(
ssg_group_t
*
)
group_data
;
ssg_group_t
*
g
=
(
ssg_group_t
*
)
group_data
;
ssg_member_state_t
*
target_ms
;
assert
(
g
!=
NULL
);
assert
(
g
!=
NULL
);
/* get a random group member, return addr and state */
/* if current member list is empty, generate a new random one */
if
(
g
->
member_list
==
NULL
)
ssg_gen_rand_member_list
(
g
);
/* pull random member off head of list and return addr */
target_ms
=
g
->
member_list
;
LL_DELETE
(
g
->
member_list
,
target_ms
);
*
target_addr
=
target_ms
->
addr
;
*
target_swim_ms
=
target_ms
->
swim_state
;
printf
(
"%lu: pinging %lu
\n
"
,
g
->
self_id
,
target_ms
->
id
);
return
0
;
return
0
;
}
}
static
void
ssg_gen_rand_member_list
(
ssg_group_t
*
g
)
{
ssg_member_state_t
*
ms
,
*
tmp
;
/* XXX generate random LL permutation from membership map */
HASH_ITER
(
hh
,
g
->
view
.
member_map
,
ms
,
tmp
)
{
LL_APPEND
(
g
->
member_list
,
ms
);
}
return
;
}
ssg_group_id_t
ssg_group_create
(
ssg_group_id_t
ssg_group_create
(
const
char
*
group_name
,
const
char
*
group_name
,
const
char
*
const
group_addr_strs
[],
const
char
*
const
group_addr_strs
[],
...
@@ -197,6 +227,9 @@ ssg_group_id_t ssg_group_create(
...
@@ -197,6 +227,9 @@ ssg_group_id_t ssg_group_create(
goto
fini
;
goto
fini
;
}
}
/* generate random list permutation of the member map */
ssg_gen_rand_member_list
(
g
);
/* initialize swim failure detector */
/* initialize swim failure detector */
// TODO: we should probably barrier or sync somehow to avoid rpc failures
// TODO: we should probably barrier or sync somehow to avoid rpc failures
// due to timing skew of different ranks initializing swim
// due to timing skew of different ranks initializing swim
...
@@ -942,7 +975,6 @@ void ssg_apply_membership_update(
...
@@ -942,7 +975,6 @@ void ssg_apply_membership_update(
member_state
);
member_state
);
if
(
member_state
)
if
(
member_state
)
{
{
LL_DELETE
(
g
->
view
.
member_list
,
member_state
);
HASH_DELETE
(
hh
,
g
->
view
.
member_map
,
member_state
);
HASH_DELETE
(
hh
,
g
->
view
.
member_map
,
member_state
);
margo_addr_free
(
ssg_inst
->
mid
,
member_state
->
addr
);
margo_addr_free
(
ssg_inst
->
mid
,
member_state
->
addr
);
free
(
member_state
->
addr_str
);
free
(
member_state
->
addr_str
);
...
@@ -1105,9 +1137,8 @@ static int ssg_group_view_create(
...
@@ -1105,9 +1137,8 @@ static int ssg_group_view_create(
if
(
self_id
)
if
(
self_id
)
*
self_id
=
tmp_ms
->
id
;
*
self_id
=
tmp_ms
->
id
;
/* add self state to membership view */
/* XXX: add self state to membership view? or somewhere static? */
LL_PREPEND
(
view
->
member_list
,
tmp_ms
);
//HASH_ADD(hh, view->member_map, id, sizeof(ssg_member_id_t), tmp_ms);
HASH_ADD
(
hh
,
view
->
member_map
,
id
,
sizeof
(
ssg_member_id_t
),
tmp_ms
);
/* don't look up our own address, we already know it */
/* don't look up our own address, we already know it */
continue
;
continue
;
...
@@ -1196,7 +1227,6 @@ static void ssg_group_lookup_ult(
...
@@ -1196,7 +1227,6 @@ static void ssg_group_lookup_ult(
&
l
->
member_state
->
addr
);
&
l
->
member_state
->
addr
);
if
(
l
->
out
==
HG_SUCCESS
)
if
(
l
->
out
==
HG_SUCCESS
)
{
{
LL_APPEND
(
l
->
view
->
member_list
,
l
->
member_state
);
HASH_ADD
(
hh
,
l
->
view
->
member_map
,
id
,
sizeof
(
ssg_member_id_t
),
HASH_ADD
(
hh
,
l
->
view
->
member_map
,
id
,
sizeof
(
ssg_member_id_t
),
l
->
member_state
);
l
->
member_state
);
}
}
...
@@ -1214,15 +1244,13 @@ static void ssg_group_view_destroy(
...
@@ -1214,15 +1244,13 @@ static void ssg_group_view_destroy(
ssg_member_state_t
*
state
,
*
tmp
;
ssg_member_state_t
*
state
,
*
tmp
;
/* destroy state for all group members */
/* destroy state for all group members */
LL_FOREACH_SAFE
(
view
->
member_list
,
state
,
tmp
)
HASH_ITER
(
hh
,
view
->
member_map
,
state
,
tmp
)
{
{
LL_DELETE
(
view
->
member_list
,
state
);
HASH_DEL
(
view
->
member_map
,
state
);
HASH_DEL
(
view
->
member_map
,
state
);
free
(
state
->
addr_str
);
free
(
state
->
addr_str
);
margo_addr_free
(
ssg_inst
->
mid
,
state
->
addr
);
margo_addr_free
(
ssg_inst
->
mid
,
state
->
addr
);
free
(
state
);
free
(
state
);
}
}
view
->
member_list
=
NULL
;
view
->
member_map
=
NULL
;
view
->
member_map
=
NULL
;
return
;
return
;
...
...
src/swim-fd/swim-fd-ping.c
View file @
5372d4df
...
@@ -18,6 +18,8 @@
...
@@ -18,6 +18,8 @@
#include "swim-fd.h"
#include "swim-fd.h"
#include "swim-fd-internal.h"
#include "swim-fd-internal.h"
#if 0
/* NOTE these defines must be kept in sync with defs in
/* NOTE these defines must be kept in sync with defs in
* ssg.h & swim-internal.h
* ssg.h & swim-internal.h
*/
*/
...
@@ -443,3 +445,4 @@ static hg_return_t hg_proc_swim_message_t(hg_proc_t proc, void *data)
...
@@ -443,3 +445,4 @@ static hg_return_t hg_proc_swim_message_t(hg_proc_t proc, void *data)
return(hret);
return(hret);
}
}
#endif
src/swim-fd/swim-fd.c
View file @
5372d4df
...
@@ -4,8 +4,6 @@
...
@@ -4,8 +4,6 @@
* See COPYRIGHT in top-level directory.
* See COPYRIGHT in top-level directory.
*/
*/
#include <ssg-config.h>
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <unistd.h>
#include <unistd.h>
...
@@ -50,11 +48,6 @@ static void swim_update_suspected_members(
...
@@ -50,11 +48,6 @@ static void swim_update_suspected_members(
ssg_group_t *g, double susp_timeout);
ssg_group_t *g, double susp_timeout);
static void swim_add_recent_member_update(
static void swim_add_recent_member_update(
ssg_group_t *g, swim_member_update_t update);
ssg_group_t *g, swim_member_update_t update);
static int swim_get_rand_group_member(
ssg_group_t *g, ssg_member_id_t *member_id);
static int swim_get_rand_group_member_set(
ssg_group_t *g, ssg_member_id_t *member_ids, int num_members,
ssg_member_id_t excluded_id);
#endif
#endif
/******************************************************
/******************************************************
...
@@ -604,52 +597,4 @@ static void swim_add_recent_member_update(
...
@@ -604,52 +597,4 @@ static void swim_add_recent_member_update(
return;
return;
}
}
static int swim_get_rand_group_member(
ssg_group_t *g, ssg_member_id_t *member_id)
{
int ret = swim_get_rand_group_member_set(g, member_id, 1,
SSG_MEMBER_ID_INVALID);
return(ret);
}
static int swim_get_rand_group_member_set(
ssg_group_t *g, ssg_member_id_t *member_ids, int num_members,
ssg_member_id_t excluded_id)
{
unsigned int i, j, rand_ndx = 0;
ssg_member_id_t r, rand_member;
if(num_members == 0)
return(0);
/* TODO: what data structure could we use to avoid looping to look
* for a set of random ranks
*/
do
{
r = rand() % g->view.size;
for(i = 0; i < g->view.size; i++)
{
rand_member = (r + i) % g->view.size;
if(rand_member == g->self_id || rand_member == excluded_id ||
!(g->view.member_states[rand_member].is_member))
continue;
for(j = 0; j < rand_ndx; j++)
{
if(rand_member == member_ids[j])
break;
}
if(j == rand_ndx)
break;
}
if(i == g->view.size)
break;
member_ids[rand_ndx++] = rand_member;
} while((int)rand_ndx < num_members);
return(rand_ndx);
}
#endif
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment