@@ -20,7 +20,6 @@ import (
20
20
"errors"
21
21
"fmt"
22
22
"regexp"
23
- "strings"
24
23
25
24
"github.com/hyperledger/fabric/common/configtx/api"
26
25
"github.com/hyperledger/fabric/common/policies"
@@ -186,66 +185,32 @@ func (cm *configManager) commitHandlers() {
186
185
}
187
186
}
188
187
189
- func (cm * configManager ) recurseConfig (result map [string ]comparable , path []string , group * cb.ConfigGroup ) error {
190
-
191
- for key , group := range group .Groups {
192
- // TODO rename validateChainID to validateConfigID
193
- if err := validateChainID (key ); err != nil {
194
- return fmt .Errorf ("Illegal characters in group key: %s" , key )
195
- }
196
-
197
- if err := cm .recurseConfig (result , append (path , key ), group ); err != nil {
198
- return err
199
- }
200
-
201
- // TODO, uncomment to validate version validation on groups
202
- // result["[Groups]"+strings.Join(path, ".")+key] = comparable{path: path, ConfigGroup: group}
203
- }
204
-
205
- valueHandler , err := cm .initializer .Handler (path )
206
- if err != nil {
207
- return err
208
- }
209
-
210
- for key , value := range group .Values {
211
- if err := validateChainID (key ); err != nil {
212
- return fmt .Errorf ("Illegal characters in values key: %s" , key )
213
- }
214
-
215
- err := valueHandler .ProposeConfig (key , & cb.ConfigValue {
216
- Value : value .Value ,
217
- })
218
- if err != nil {
219
- return err
220
- }
221
-
222
- result ["[Values]" + strings .Join (path , "." )+ key ] = comparable {path : path , ConfigValue : value }
223
- }
224
-
225
- logger .Debugf ("Found %d policies" , len (group .Policies ))
226
- for key , policy := range group .Policies {
227
- if err := validateChainID (key ); err != nil {
228
- return fmt .Errorf ("Illegal characters in policies key: %s" , key )
229
- }
230
-
231
- logger .Debugf ("Proposing policy: %s" , key )
232
- err := cm .initializer .PolicyProposer ().ProposeConfig (key , & cb.ConfigValue {
233
- // TODO, fix policy interface to take the policy directly
234
- Value : utils .MarshalOrPanic (policy .Policy ),
235
- })
236
-
237
- if err != nil {
238
- return err
188
+ func (cm * configManager ) proposeConfig (config map [string ]comparable ) error {
189
+ for fqPath , c := range config {
190
+ logger .Debugf ("Proposing: %s" , fqPath )
191
+ switch {
192
+ case c .ConfigValue != nil :
193
+ valueHandler , err := cm .initializer .Handler (c .path )
194
+ if err != nil {
195
+ return err
196
+ }
197
+ if err := valueHandler .ProposeConfig (c .key , c .ConfigValue ); err != nil {
198
+ return err
199
+ }
200
+ case c .ConfigPolicy != nil :
201
+ if err := cm .initializer .PolicyProposer ().ProposeConfig (c .key , & cb.ConfigValue {
202
+ // TODO, fix policy interface to take the policy directly
203
+ Value : utils .MarshalOrPanic (c .ConfigPolicy .Policy ),
204
+ }); err != nil {
205
+ return err
206
+ }
239
207
}
240
-
241
- // TODO, uncomment to validate version validation on policies
242
- //result["[Policies]"+strings.Join(path, ".")+key] = comparable{path: path, ConfigPolicy: policy}
243
208
}
244
209
245
210
return nil
246
211
}
247
212
248
- func (cm * configManager ) processConfig (configtx * cb.ConfigEnvelope ) (configMap map [string ]comparable , err error ) {
213
+ func (cm * configManager ) processConfig (configtx * cb.ConfigEnvelope ) (map [string ]comparable , error ) {
249
214
// XXX as a temporary hack to get the new protos working, we assume entire config is always in the ConfigUpdate.WriteSet
250
215
251
216
if configtx .LastUpdate == nil {
@@ -284,9 +249,13 @@ func (cm *configManager) processConfig(configtx *cb.ConfigEnvelope) (configMap m
284
249
defaultModificationPolicy = & acceptAllPolicy {}
285
250
}
286
251
287
- configMap = make (map [string ]comparable )
252
+ configMap , err := mapConfig (config .WriteSet )
253
+ if err != nil {
254
+ return nil , err
255
+ }
256
+ delete (configMap , "[Groups] /Channel" ) // XXX temporary hack to prevent evaluating groups for modification
288
257
289
- if err := cm .recurseConfig (configMap , [] string {}, config . WriteSet ); err != nil {
258
+ if err := cm .proposeConfig (configMap ); err != nil {
290
259
return nil , err
291
260
}
292
261
0 commit comments