Skip to content

Commit 09d6aaa

Browse files
authored
Custom config memberlist (kleveross#68)
* fix: mismatch between time.Duration and C.Int * feat: improve join process in memberlist * feat: expose joined status
1 parent 2ff7814 commit 09d6aaa

File tree

3 files changed

+24
-8
lines changed

3 files changed

+24
-8
lines changed

ftlib/consensus/gossip/impl.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,11 @@ def __init__(
4646
if res != 0:
4747
raise RuntimeError("failed to initialize memberlist")
4848

49+
self.joined = False
4950
if known_addr_list is not None and known_addr_list != []:
50-
joined = self._join(known_addr_list=known_addr_list)
51-
if not joined:
52-
raise RuntimeError("failed to join the group")
51+
self.joined = self._join(known_addr_list=known_addr_list)
52+
if not self.joined:
53+
logging.warning("failed to join the group")
5354

5455
# we need to take a sleep here because the group may add further nodes
5556
# after this node succeeded joining the group
@@ -79,7 +80,12 @@ def get_memberlist(self):
7980
def passive_or_active(self):
8081
return ConsensusMode.ACTIVE
8182

82-
def _join(self, known_addr_list, codec="utf-8"):
83+
def manual_join(self, known_addr_list, wait_time=15):
84+
# return bool value: self._joined
85+
self.joined = self._join(known_addr_list, wait_time=wait_time)
86+
return self.joined
87+
88+
def _join(self, known_addr_list, codec="utf-8", wait_time=15):
8389
assert type(known_addr_list) == list
8490

8591
addr_list_len = len(known_addr_list)
@@ -98,7 +104,7 @@ def _join(self, known_addr_list, codec="utf-8"):
98104
# TODO: waiting for 15 sec is not an optimal choice
99105
# it will better to set 15 sec as max_timeout, and
100106
# the stop condition is
101-
time.sleep(15)
107+
time.sleep(wait_time)
102108
res = self._lib.join(t)
103109

104110
return res > 0

ftlib/consensus/gossip/memberlist/main.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,21 @@ func init_memberlist(
3434
logFileName := C.GoString(cLogFileName)
3535
customBindAddr := C.GoString(cBindAddr)
3636
customAdvertiseAddr := C.GoString(cAdvertiseAddr)
37+
customTCPTimeout := time.Duration(int64(cTCPTimeout))
3738

3839
if customBindAddr != "" {
40+
fmt.Printf("Setting Bind Address as %s\n", customBindAddr)
3941
config.BindAddr = customBindAddr
4042
}
4143

4244
if customAdvertiseAddr != "" {
45+
fmt.Printf("Setting Advertise Address as %s\n", customAdvertiseAddr)
4346
config.AdvertiseAddr = customAdvertiseAddr
4447
}
4548

46-
if cTCPTimeout > 0 {
47-
config.TCPTimeout = cTCPTimeout * time.Second
49+
if int64(cTCPTimeout) > 0 {
50+
fmt.Printf("Setting TCPTimeout as %d\n", int64(cTCPTimeout))
51+
config.TCPTimeout = customTCPTimeout * time.Second
4852
}
4953

5054
if logFileName != "" {
@@ -74,7 +78,7 @@ func join(ns []*C.char) C.int {
7478
}
7579
n, err := list.Join(addrList)
7680
if err != nil {
77-
panic("Failed to join cluster: " + err.Error())
81+
fmt.Print("Failed to join cluster: " + err.Error())
7882
return 0
7983
}
8084
return C.int(n)

ftlib/impl.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,12 @@ def set_initialized(self, is_initialized):
133133
self.commlib.abort_communicator()
134134
self.consensus.average_failure()
135135

136+
def manual_join(self, *args, **kwargs):
137+
return self.consensus.manual_join(*args, **kwargs)
138+
139+
def consensus_joined(self):
140+
return self.consensus.joined
141+
136142
# TODO: execute still under development
137143
def execute(self, func, *args, **kwargs):
138144
# Args:

0 commit comments

Comments
 (0)