Skip to content

Commit de9c888

Browse files
fix: restructure error handling on polling manager (#183)
1 parent fbaeab1 commit de9c888

File tree

1 file changed

+16
-15
lines changed

1 file changed

+16
-15
lines changed

pkg/config/polling_manager.go

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -89,32 +89,30 @@ func InitialDatafile(datafile []byte) OptionFunc {
8989
func (cm *PollingProjectConfigManager) SyncConfig(datafile []byte) {
9090
var e error
9191
var code int
92+
93+
closeMutex := func(e error) {
94+
cm.err = e
95+
cm.configLock.Unlock()
96+
}
97+
9298
if len(datafile) == 0 {
9399
datafile, code, e = cm.requester.Get()
94100

95101
if e != nil {
96102
cmLogger.Error(fmt.Sprintf("request returned with http code=%d", code), e)
97-
cm.err = nil
98-
if cm.projectConfig == nil {
99-
cm.err = e
100-
}
103+
cm.configLock.Lock()
104+
closeMutex(e)
101105
return
102106
}
103107
}
104108

105109
projectConfig, err := datafileprojectconfig.NewDatafileProjectConfig(datafile)
106110

107111
cm.configLock.Lock()
108-
closeMutex := func() {
109-
cm.err = nil
110-
if cm.projectConfig == nil {
111-
cm.err = err
112-
}
113-
cm.configLock.Unlock()
114-
}
112+
115113
if err != nil {
116114
cmLogger.Error("failed to create project config", err)
117-
closeMutex()
115+
closeMutex(err)
118116
return
119117
}
120118

@@ -124,12 +122,12 @@ func (cm *PollingProjectConfigManager) SyncConfig(datafile []byte) {
124122
}
125123
if projectConfig.GetRevision() == previousRevision {
126124
cmLogger.Debug(fmt.Sprintf("No datafile updates. Current revision number: %s", cm.projectConfig.GetRevision()))
127-
closeMutex()
125+
closeMutex(nil)
128126
return
129127
}
130128
cmLogger.Debug(fmt.Sprintf("New datafile set with revision: %s. Old revision: %s", projectConfig.GetRevision(), previousRevision))
131129
cm.projectConfig = projectConfig
132-
closeMutex()
130+
closeMutex(nil)
133131

134132
if cm.notificationCenter != nil {
135133
projectConfigUpdateNotification := notification.ProjectConfigUpdateNotification{
@@ -182,7 +180,10 @@ func NewPollingProjectConfigManager(sdkKey string, pollingMangerOptions ...Optio
182180
func (cm *PollingProjectConfigManager) GetConfig() (pkg.ProjectConfig, error) {
183181
cm.configLock.RLock()
184182
defer cm.configLock.RUnlock()
185-
return cm.projectConfig, cm.err
183+
if cm.projectConfig == nil {
184+
return cm.projectConfig, cm.err
185+
}
186+
return cm.projectConfig, nil
186187
}
187188

188189
// OnProjectConfigUpdate registers a handler for ProjectConfigUpdate notifications

0 commit comments

Comments
 (0)