Skip to content

Commit 02f4bbd

Browse files
Merge pull request #99 from optimizely/ali/modify_config_manager
Adjusting config manager to support a Sync method
2 parents d6645c7 + 5089ec7 commit 02f4bbd

File tree

1 file changed

+27
-27
lines changed

1 file changed

+27
-27
lines changed

optimizely/config/polling_manager.go

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -53,42 +53,42 @@ type PollingProjectConfigManager struct {
5353
exeCtx utils.ExecutionCtx // context used for execution control
5454
}
5555

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)
7565
}
66+
}
7667

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)
8171
}
8272

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+
8382
if init {
84-
update()
83+
cm.SyncConfig(initialDatafile)
8584
return
8685
}
86+
8787
t := time.NewTicker(cm.pollingInterval)
8888
for {
8989
select {
9090
case <-t.C:
91-
update()
91+
cm.SyncConfig([]byte{})
9292
case <-cm.exeCtx.GetContext().Done():
9393
cmLogger.Debug("Polling Config Manager Stopped")
9494
return
@@ -114,10 +114,10 @@ func NewPollingProjectConfigManagerWithOptions(exeCtx utils.ExecutionCtx, sdkKey
114114

115115
pollingProjectConfigManager := PollingProjectConfigManager{requester: requester, pollingInterval: pollingInterval, exeCtx: exeCtx}
116116

117-
pollingProjectConfigManager.activate(options.Datafile, true) // initial poll
117+
pollingProjectConfigManager.SyncConfig(options.Datafile) // initial poll
118118

119119
cmLogger.Debug("Polling Config Manager Initiated")
120-
go pollingProjectConfigManager.activate([]byte{}, false)
120+
go pollingProjectConfigManager.start([]byte{}, false)
121121
return &pollingProjectConfigManager
122122
}
123123

0 commit comments

Comments
 (0)