Add comments to the key progress
diff --git a/syncer/etcd/agent.go b/syncer/etcd/agent.go
index 941ecd1..19898af 100644
--- a/syncer/etcd/agent.go
+++ b/syncer/etcd/agent.go
@@ -55,9 +55,12 @@
case <-etcd.Server.ReadyNotify():
log.Info("start etcd success")
close(a.readyCh)
+
// Be returns when the server is stopped
case <-etcd.Server.StopNotify():
err = errors.New("unknown error cause start etcd failed, check etcd")
+
+ // Returns an error when running goroutine fails in the etcd startup process
case err = <-etcd.Err():
case <-ctx.Done():
err = ctx.Err()
@@ -70,10 +73,12 @@
}
}
+// Ready Returns a channel that will be closed when etcd is ready
func (a *Agent) Ready() <-chan struct{} {
return a.readyCh
}
+// Error Returns a channel that will be transmit an etcd error
func (a *Agent) Error() <-chan error {
return a.errorCh
}
diff --git a/syncer/grpc/server.go b/syncer/grpc/server.go
index 9da3c96..086b657 100644
--- a/syncer/grpc/server.go
+++ b/syncer/grpc/server.go
@@ -85,10 +85,12 @@
close(s.readyCh)
}
+// Ready Returns a channel that will be closed when grpc is ready
func (s *Server) Ready() <-chan struct{} {
return s.readyCh
}
+// Error Returns a channel that will be transmit a grpc error
func (s *Server) Error() <-chan error {
return s.errorCh
}
diff --git a/syncer/serf/agent.go b/syncer/serf/agent.go
index c36c82b..3881edf 100644
--- a/syncer/serf/agent.go
+++ b/syncer/serf/agent.go
@@ -19,7 +19,6 @@
import (
"context"
"errors"
- "fmt"
"time"
"github.com/apache/servicecomb-service-center/pkg/log"
@@ -75,7 +74,10 @@
}
}
-// HandleEvent Handles events from serf
+// HandleEvent Handles serf.EventMemberJoin events,
+// which will wait for members to join until the number of group members is equal to "groupExpect"
+// when the startup mode is "ModeCluster",
+// used for logical grouping of serf nodes
func (a *Agent) HandleEvent(event serf.Event) {
if event.EventType() != serf.EventMemberJoin {
return
@@ -90,14 +92,17 @@
close(a.readyCh)
}
+// Ready Returns a channel that will be closed when serf is ready
func (a *Agent) Ready() <-chan struct{} {
return a.readyCh
}
+// Error Returns a channel that will be transmit a serf error
func (a *Agent) Error() <-chan error {
return a.errorCh
}
+// Stop serf agent
func (a *Agent) Stop() {
if a.errorCh != nil {
a.Leave()
@@ -107,6 +112,7 @@
}
}
+// LocalMember returns the Member information for the local node
func (a *Agent) LocalMember() *serf.Member {
serfAgent := a.Agent.Serf()
if serfAgent != nil {
@@ -121,7 +127,7 @@
serfAgent := a.Agent.Serf()
if serfAgent != nil {
for _, member := range serfAgent.Members() {
- fmt.Println("member: ", member.Tags[tagKeyCluster])
+ log.Infof("member = %s, groupName = %s", member.Name, member.Tags[tagKeyCluster])
if member.Tags[tagKeyCluster] == a.conf.ClusterName {
members = append(members, member)
}
@@ -170,17 +176,24 @@
return nil
}
+ // Count of attempts
attempt := 0
ticker := time.NewTicker(a.conf.RetryInterval)
for {
log.Infof("serf: Joining cluster...(replay: %v)", a.conf.ReplayOnJoin)
var n int
+
+ // Try to join the specified serf nodes
n, err = a.Join(a.conf.RetryJoin, a.conf.ReplayOnJoin)
if err == nil {
log.Infof("serf: Join completed. Synced with %d initial agents", n)
break
}
attempt++
+
+ // If RetryMaxAttempts is greater than 0, agent will exit
+ // and throw an error when the number of attempts exceeds RetryMaxAttempts,
+ // else agent will try to join other nodes until successful always
if a.conf.RetryMaxAttempts > 0 && attempt > a.conf.RetryMaxAttempts {
err = errors.New("serf: maximum retry join attempts made, exiting")
log.Errorf(err, err.Error())
@@ -190,6 +203,7 @@
case <-ctx.Done():
err = ctx.Err()
goto done
+ // Waiting for ticker to trigger
case <-ticker.C:
}
}
diff --git a/syncer/server/handler.go b/syncer/server/handler.go
index 2f19438..da662e9 100644
--- a/syncer/server/handler.go
+++ b/syncer/server/handler.go
@@ -56,7 +56,8 @@
return s.servicecenter.Discovery()
}
-// HandleEvent Handles events from serf
+// HandleEvent Handles serf.EventUser/serf.EventQuery,
+// used for message passing and processing between serf nodes
func (s *Server) HandleEvent(event serf.Event) {
switch event.EventType() {
case serf.EventUser:
diff --git a/syncer/server/server.go b/syncer/server/server.go
index ae315ee..b06473b 100644
--- a/syncer/server/server.go
+++ b/syncer/server/server.go
@@ -37,8 +37,14 @@
var stopChanErr = errors.New("stopped syncer by stopCh")
type moduleServer interface {
+ // Starts launches the module server, the returned is not guaranteed that the server is ready
+ // The moduleServer.Ready() channel will be transmit a message when server completed
Start(ctx context.Context)
+
+ // Returns a channel that will be closed when the module server is ready
Ready() <-chan struct{}
+
+ // Returns a channel that will be transmit a module server error
Error() <-chan error
}
@@ -61,6 +67,7 @@
// Wraps the grpc server
grpc *grpc.Server
+ // The channel will be closed when receiving a system interrupt signal
stopCh chan struct{}
}
@@ -80,6 +87,7 @@
return
}
+ // Start system signal listening, wait for user interrupt program
gopool.Go(syssig.Run)
err = s.startModuleServer(s.agent)
diff --git a/syncer/servicecenter/servicecenter_test.go b/syncer/servicecenter/servicecenter_test.go
index 0e13774..5efe211 100644
--- a/syncer/servicecenter/servicecenter_test.go
+++ b/syncer/servicecenter/servicecenter_test.go
@@ -21,11 +21,10 @@
"errors"
"testing"
- "github.com/apache/servicecomb-service-center/syncer/pkg/mock/mocksotrage"
-
"github.com/apache/servicecomb-service-center/server/core/proto"
"github.com/apache/servicecomb-service-center/syncer/config"
"github.com/apache/servicecomb-service-center/syncer/pkg/mock/mockplugin"
+ "github.com/apache/servicecomb-service-center/syncer/pkg/mock/mocksotrage"
"github.com/apache/servicecomb-service-center/syncer/plugins"
pb "github.com/apache/servicecomb-service-center/syncer/proto"
)