1212// See the License for the specific language governing permissions and
1313// limitations under the License.
1414
15- package net .lvsq .jgossip .core ;
16-
15+ package com .webex .cgossip .core ;
16+
17+ import com .webex .cgossip .event .GossipListener ;
18+ import com .webex .cgossip .model .Ack2Message ;
19+ import com .webex .cgossip .model .AckMessage ;
20+ import com .webex .cgossip .model .GossipDigest ;
21+ import com .webex .cgossip .model .GossipMember ;
22+ import com .webex .cgossip .model .GossipState ;
23+ import com .webex .cgossip .model .HeartbeatState ;
24+ import com .webex .cgossip .model .MessageType ;
25+ import com .webex .cgossip .model .SeedMember ;
1726import io .vertx .core .buffer .Buffer ;
1827import io .vertx .core .json .JsonArray ;
1928import io .vertx .core .json .JsonObject ;
2029import io .vertx .core .logging .Logger ;
2130import io .vertx .core .logging .LoggerFactory ;
22- import net .lvsq .jgossip .event .GossipListener ;
23- import net .lvsq .jgossip .model .Ack2Message ;
24- import net .lvsq .jgossip .model .AckMessage ;
25- import net .lvsq .jgossip .model .GossipDigest ;
26- import net .lvsq .jgossip .model .GossipMember ;
27- import net .lvsq .jgossip .model .GossipState ;
28- import net .lvsq .jgossip .model .HeartbeatState ;
29- import net .lvsq .jgossip .model .MessageType ;
30- import net .lvsq .jgossip .model .SeedMember ;
3131
3232import java .net .UnknownHostException ;
3333import java .util .ArrayList ;
@@ -144,7 +144,6 @@ class GossipTask implements Runnable {
144144 @ Override
145145 public void run () {
146146 //Update local member version
147- long t = System .currentTimeMillis ();
148147 long newversion = endpointMembers .get (getSelf ()).updateVersion ();
149148 if (isDiscoverable (getSelf ())) {
150149 up (getSelf ());
@@ -171,7 +170,6 @@ public void run() {
171170 }
172171 checkStatus ();
173172
174- System .out .println ("execute time " + (System .currentTimeMillis () - t ));
175173 if (LOGGER .isTraceEnabled ()) {
176174 LOGGER .trace ("live member : " + getLiveMembers ());
177175 LOGGER .trace ("dead member : " + getDeadMembers ());
@@ -318,6 +316,14 @@ private void gossip2Seed(Buffer buffer) {
318316 private boolean sendGossip (Buffer buffer , List <GossipMember > members , int index ) {
319317 if (buffer != null && index >= 0 ) {
320318 GossipMember target = members .get (index );
319+ if (target .equals (getSelf ())) {
320+ int m_size = members .size ();
321+ if (m_size == 1 ) {
322+ return false ;
323+ } else {
324+ target = members .get ((index + 1 ) % m_size );
325+ }
326+ }
321327 settings .getMsgService ().sendMsg (target .getIpAddress (), target .getPort (), buffer );
322328 return settings .getSeedMembers ().contains (target );
323329 }
@@ -343,6 +349,7 @@ private void checkStatus() {
343349 long now = System .currentTimeMillis ();
344350 long duration = now - state .getHeartbeatTime ();
345351 LOGGER .info ("check : " + k .toString () + " state : " + state .toString () + " duration : " + duration + " convictedTime : " + convictedTime ());
352+ //TODO: delete the service from deadmembers which outage for a long time
346353 if (duration > convictedTime () && (isAlive (k ) || getLiveMembers ().contains (k ))) {
347354 LOGGER .info ("down ~~" );
348355 down (k );
0 commit comments