@@ -53,42 +53,42 @@ type PollingProjectConfigManager struct {
53
53
exeCtx utils.ExecutionCtx // context used for execution control
54
54
}
55
55
56
- func (cm * PollingProjectConfigManager ) activate (initialPayload []byte , init bool ) {
57
-
58
- update := func () {
59
- var e error
60
- var code int
61
- var payload []byte
62
- if init && len (initialPayload ) > 0 {
63
- payload = initialPayload
64
- } else {
65
- payload , code , e = cm .requester .Get ()
66
-
67
- if e != nil {
68
- cmLogger .Error (fmt .Sprintf ("request returned with http code=%d" , code ), e )
69
- }
70
- }
71
-
72
- projectConfig , err := datafileprojectconfig .NewDatafileProjectConfig (payload )
73
- if err != nil {
74
- cmLogger .Error ("failed to create project config" , err )
56
+ // SyncConfig gets current datafile and updates projectConfig
57
+ func (cm * PollingProjectConfigManager ) SyncConfig (datafile []byte ) {
58
+ var e error
59
+ var code int
60
+ if len (datafile ) == 0 {
61
+ datafile , code , e = cm .requester .Get ()
62
+
63
+ if e != nil {
64
+ cmLogger .Error (fmt .Sprintf ("request returned with http code=%d" , code ), e )
75
65
}
66
+ }
76
67
77
- cm .configLock .Lock ()
78
- cm .projectConfig = projectConfig
79
- cm .err = err
80
- cm .configLock .Unlock ()
68
+ projectConfig , err := datafileprojectconfig .NewDatafileProjectConfig (datafile )
69
+ if err != nil {
70
+ cmLogger .Error ("failed to create project config" , err )
81
71
}
82
72
73
+ // TODO: Compare revision numbers here and set projectConfig only if the revision number has changed
74
+ cm .configLock .Lock ()
75
+ cm .projectConfig = projectConfig
76
+ cm .err = err
77
+ cm .configLock .Unlock ()
78
+ }
79
+
80
+ func (cm * PollingProjectConfigManager ) start (initialDatafile []byte , init bool ) {
81
+
83
82
if init {
84
- update ( )
83
+ cm . SyncConfig ( initialDatafile )
85
84
return
86
85
}
86
+
87
87
t := time .NewTicker (cm .pollingInterval )
88
88
for {
89
89
select {
90
90
case <- t .C :
91
- update ( )
91
+ cm . SyncConfig ([] byte {} )
92
92
case <- cm .exeCtx .GetContext ().Done ():
93
93
cmLogger .Debug ("Polling Config Manager Stopped" )
94
94
return
@@ -114,10 +114,10 @@ func NewPollingProjectConfigManagerWithOptions(exeCtx utils.ExecutionCtx, sdkKey
114
114
115
115
pollingProjectConfigManager := PollingProjectConfigManager {requester : requester , pollingInterval : pollingInterval , exeCtx : exeCtx }
116
116
117
- pollingProjectConfigManager .activate (options .Datafile , true ) // initial poll
117
+ pollingProjectConfigManager .SyncConfig (options .Datafile ) // initial poll
118
118
119
119
cmLogger .Debug ("Polling Config Manager Initiated" )
120
- go pollingProjectConfigManager .activate ([]byte {}, false )
120
+ go pollingProjectConfigManager .start ([]byte {}, false )
121
121
return & pollingProjectConfigManager
122
122
}
123
123
0 commit comments