Skip to content

Commit 40da6c3

Browse files
authored
ENH: Handles updates for global services (#15)
* ENH: Handles of image updates for global services * ENH: Considers nodeInfo when polling
1 parent e70080e commit 40da6c3

File tree

5 files changed

+20
-9
lines changed

5 files changed

+20
-9
lines changed

service/eventservicelistener.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,5 @@ func (s SwarmServiceListener) ListenForServiceEvents(eventChan chan<- Event) {
6666

6767
// validEventNode returns true when event is valid (should be passed through)
6868
func (s SwarmServiceListener) validEventNode(msg events.Message) bool {
69-
if msg.Action != "update" {
70-
return true
71-
}
72-
if name, ok := msg.Actor.Attributes["updatestate.new"]; ok && len(name) > 0 {
73-
return false
74-
}
7569
return true
7670
}

service/servicepoller.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ type SwarmServicePoller struct {
1616
SSClient SwarmServiceInspector
1717
SSCache SwarmServiceCacher
1818
PollingInterval int
19+
IncludeNodeInfo bool
1920
MinifyFunc func(SwarmService) SwarmServiceMini
2021
Log *log.Logger
2122
}
@@ -25,13 +26,15 @@ func NewSwarmServicePoller(
2526
ssClient SwarmServiceInspector,
2627
ssCache SwarmServiceCacher,
2728
pollingInterval int,
29+
includeNodeInfo bool,
2830
minifyFunc func(SwarmService) SwarmServiceMini,
2931
log *log.Logger,
3032
) *SwarmServicePoller {
3133
return &SwarmServicePoller{
3234
SSClient: ssClient,
3335
SSCache: ssCache,
3436
PollingInterval: pollingInterval,
37+
IncludeNodeInfo: includeNodeInfo,
3538
MinifyFunc: minifyFunc,
3639
Log: log,
3740
}
@@ -45,17 +48,27 @@ func (s SwarmServicePoller) Run(
4548
return
4649
}
4750

51+
ctx := context.Background()
52+
4853
s.Log.Printf("Polling for Service Changes")
4954
time.Sleep(time.Duration(s.PollingInterval) * time.Second)
55+
5056
for {
51-
services, err := s.SSClient.SwarmServiceList(context.Background())
57+
services, err := s.SSClient.SwarmServiceList(ctx)
5258
if err != nil {
5359
s.Log.Printf("ERROR (SwarmServicePolling): %v", err)
5460
} else {
5561
nowTimeNano := time.Now().UTC().UnixNano()
5662
keys := s.SSCache.Keys()
5763
for _, ss := range services {
5864
delete(keys, ss.ID)
65+
66+
if s.IncludeNodeInfo {
67+
if nodeInfo, err := s.SSClient.GetNodeInfo(ctx, ss); err == nil {
68+
ss.NodeInfo = nodeInfo
69+
}
70+
}
71+
5972
ssMini := s.MinifyFunc(ss)
6073
if s.SSCache.IsNewOrUpdated(ssMini) {
6174
eventChan <- Event{

service/servicepoller_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ func (s *ServicePollerTestSuite) SetupTest() {
4040
s.SSClientMock,
4141
s.SSCacheMock,
4242
1,
43+
false,
4344
s.MinifyFunc,
4445
s.Logger,
4546
)

service/swarmlistener.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ func NewSwarmListenerFromEnv(
186186
}
187187

188188
ssPoller := NewSwarmServicePoller(
189-
ssClient, ssCache, servicePollingInterval,
189+
ssClient, ssCache, servicePollingInterval, includeNodeInfo,
190190
func(ss SwarmService) SwarmServiceMini {
191191
return MinifySwarmService(ss, ignoreKey, "com.docker.stack.namespace")
192192
}, logger)

service/task.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,10 @@ func GetTaskList(ctx context.Context, client *client.Client, serviceID string) (
107107
rollback bool
108108
)
109109

110-
taskList := []swarm.Task{}
110+
taskList, err := getUpToDateTasks()
111+
if err != nil {
112+
return taskList, err
113+
}
111114

112115
for {
113116
service, _, err := client.ServiceInspectWithRaw(ctx, serviceID, types.ServiceInspectOptions{})

0 commit comments

Comments
 (0)