Skip to content

Commit c625899

Browse files
authored
config service: import a TMS configuration #1209 (#1210)
Signed-off-by: Angelo De Caro <adc@zurich.ibm.com>
1 parent 25cd47b commit c625899

File tree

38 files changed

+653
-478
lines changed

38 files changed

+653
-478
lines changed

token/core/common/tracing/tracing.go

Lines changed: 0 additions & 32 deletions
This file was deleted.

token/core/tms.go

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@ import (
1919
"github.com/hyperledger-labs/fabric-token-sdk/token/services/logging"
2020
)
2121

22+
var logger = logging.MustGetLogger()
23+
2224
type CallbackFunc func(tms driver.TokenManagerService, network, channel, namespace string) error
2325

2426
type PublicParametersStorage interface {
2527
PublicParams(ctx context.Context, networkID string, channel string, namespace string) ([]byte, error)
2628
}
2729

28-
type ConfigProvider interface {
30+
type ConfigService interface {
2931
Configurations() ([]driver.Configuration, error)
3032
ConfigurationFor(network string, channel string, namespace string) (driver.Configuration, error)
3133
}
@@ -37,8 +39,7 @@ type PublicParameters struct {
3739
// TMSProvider is a token management service provider.
3840
// It is responsible for creating token management services for different networks.
3941
type TMSProvider struct {
40-
logger logging.Logger
41-
configProvider ConfigProvider
42+
configService ConfigService
4243
publicParametersStorage PublicParametersStorage
4344
callback CallbackFunc
4445
tokenDriverService *TokenDriverService
@@ -47,10 +48,13 @@ type TMSProvider struct {
4748
services map[string]driver.TokenManagerService
4849
}
4950

50-
func NewTMSProvider(logger logging.Logger, configProvider ConfigProvider, pps PublicParametersStorage, tokenDriverService *TokenDriverService) *TMSProvider {
51+
func NewTMSProvider(
52+
configService ConfigService,
53+
pps PublicParametersStorage,
54+
tokenDriverService *TokenDriverService,
55+
) *TMSProvider {
5156
ms := &TMSProvider{
52-
logger: logger,
53-
configProvider: configProvider,
57+
configService: configService,
5458
publicParametersStorage: pps,
5559
services: map[string]driver.TokenManagerService{},
5660
tokenDriverService: tokenDriverService,
@@ -70,7 +74,7 @@ func (m *TMSProvider) GetTokenManagerService(opts driver.ServiceOptions) (servic
7074
}
7175

7276
key := tmsKey(opts)
73-
m.logger.Debugf("check existence token manager service for [%s] with key [%s]", opts, key)
77+
logger.Debugf("check existence token manager service for [%s] with key [%s]", opts, key)
7478
m.lock.RLock()
7579
service, ok := m.services[key]
7680
if ok {
@@ -79,18 +83,18 @@ func (m *TMSProvider) GetTokenManagerService(opts driver.ServiceOptions) (servic
7983
}
8084
m.lock.RUnlock()
8185

82-
m.logger.Debugf("lock to create token manager service for [%s] with key [%s]", opts, key)
86+
logger.Debugf("lock to create token manager service for [%s] with key [%s]", opts, key)
8387

8488
m.lock.Lock()
8589
defer m.lock.Unlock()
8690

8791
service, ok = m.services[key]
8892
if ok {
89-
m.logger.Debugf("token manager service for [%s] with key [%s] exists, return it", opts, key)
93+
logger.Debugf("token manager service for [%s] with key [%s] exists, return it", opts, key)
9094
return service, nil
9195
}
9296

93-
m.logger.Debugf("creating new token manager service for [%s] with key [%s]", opts, key)
97+
logger.Debugf("creating new token manager service for [%s] with key [%s]", opts, key)
9498
service, err = m.getTokenManagerService(opts)
9599
if err != nil {
96100
return nil, err
@@ -106,7 +110,7 @@ func (m *TMSProvider) NewTokenManagerService(opts driver.ServiceOptions) (driver
106110
if len(opts.Namespace) == 0 {
107111
return nil, errors.Errorf("namespace not specified")
108112
}
109-
m.logger.Debugf("creating new token manager service for [%s]", opts)
113+
logger.Debugf("creating new token manager service for [%s]", opts)
110114

111115
service, err := m.newTMS(&opts)
112116
if err != nil {
@@ -127,21 +131,21 @@ func (m *TMSProvider) Update(opts driver.ServiceOptions) (err error) {
127131
}
128132

129133
key := tmsKey(opts)
130-
m.logger.Debugf("update tms for [%s] with key [%s]", opts, key)
134+
logger.Debugf("update tms for [%s] with key [%s]", opts, key)
131135

132136
m.lock.Lock()
133137
defer m.lock.Unlock()
134138
service, ok := m.services[key]
135139
if !ok {
136-
m.logger.Debugf("no service found, instantiate token management system for [%s:%s:%s] for key [%s]", opts.Network, opts.Channel, opts.Namespace, key)
140+
logger.Debugf("no service found, instantiate token management system for [%s:%s:%s] for key [%s]", opts.Network, opts.Channel, opts.Namespace, key)
137141
} else {
138142
// update only if the public params are different from the current
139143
if bytes.Equal(service.PublicParamsManager().PublicParamsHash(), hash.Hashable(opts.PublicParams).Raw()) {
140-
m.logger.Debugf("service found, no need to update token management system for [%s:%s:%s] for key [%s], public params are the same", opts.Network, opts.Channel, opts.Namespace, key)
144+
logger.Debugf("service found, no need to update token management system for [%s:%s:%s] for key [%s], public params are the same", opts.Network, opts.Channel, opts.Namespace, key)
141145
return nil
142146
}
143147

144-
m.logger.Debugf("service found, unload token management system for [%s:%s:%s] for key [%s] and reload it", opts.Network, opts.Channel, opts.Namespace, key)
148+
logger.Debugf("service found, unload token management system for [%s:%s:%s] for key [%s] and reload it", opts.Network, opts.Channel, opts.Namespace, key)
145149
}
146150

147151
// create the service for the new public params
@@ -159,22 +163,12 @@ func (m *TMSProvider) Update(opts driver.ServiceOptions) (err error) {
159163
return err
160164
}
161165

162-
func (m *TMSProvider) Configurations() ([]driver.Configuration, error) {
163-
tmsConfigs, err := m.configProvider.Configurations()
164-
if err != nil {
165-
return nil, errors.WithMessagef(err, "failed to get token managers")
166-
}
167-
res := make([]driver.Configuration, len(tmsConfigs))
168-
copy(res, tmsConfigs)
169-
return res, nil
170-
}
171-
172166
func (m *TMSProvider) SetCallback(callback CallbackFunc) {
173167
m.callback = callback
174168
}
175169

176170
func (m *TMSProvider) getTokenManagerService(opts driver.ServiceOptions) (service driver.TokenManagerService, err error) {
177-
m.logger.Debugf("creating new token manager service for [%s]", opts)
171+
logger.Debugf("creating new token manager service for [%s]", opts)
178172
service, err = m.newTMS(&opts)
179173
if err != nil {
180174
return nil, err
@@ -183,7 +177,7 @@ func (m *TMSProvider) getTokenManagerService(opts driver.ServiceOptions) (servic
183177
if m.callback != nil {
184178
err = m.callback(service, opts.Network, opts.Channel, opts.Namespace)
185179
if err != nil {
186-
m.logger.Fatalf("failed to initialize tms for [%s]: [%s]", opts, err)
180+
logger.Fatalf("failed to initialize tms for [%s]: [%s]", opts, err)
187181
}
188182
}
189183
return service, nil
@@ -195,7 +189,7 @@ func (m *TMSProvider) newTMS(opts *driver.ServiceOptions) (driver.TokenManagerSe
195189
return nil, errors.WithMessagef(err, "failed to get driver for [%s]", opts)
196190
}
197191
opts.PublicParams = ppRaw
198-
m.logger.Debugf("instantiating token service for [%s]", opts)
192+
logger.Debugf("instantiating token service for [%s]", opts)
199193

200194
ts, err := m.tokenDriverService.NewTokenService(driver.TMSID{Network: opts.Network, Channel: opts.Channel, Namespace: opts.Namespace}, opts.PublicParams)
201195
if err != nil {
@@ -213,12 +207,12 @@ func (m *TMSProvider) loadPublicParams(opts *driver.ServiceOptions) ([]byte, err
213207
// 4. public parameters fetcher, if any
214208
for _, retriever := range []func(options *driver.ServiceOptions) ([]byte, error){m.ppFromOpts, m.ppFromStorage, m.ppFromConfig, m.ppFromFetcher} {
215209
if ppRaw, err := retriever(opts); err != nil {
216-
m.logger.Warnf("failed to retrieve params for [%s]: [%s]", opts, err)
210+
logger.Warnf("failed to retrieve params for [%s]: [%s]", opts, err)
217211
} else if len(ppRaw) != 0 {
218212
return ppRaw, nil
219213
}
220214
}
221-
m.logger.Errorf("cannot retrieve public params for [%s]: [%s]", opts, string(debug.Stack()))
215+
logger.Errorf("cannot retrieve public params for [%s]: [%s]", opts, string(debug.Stack()))
222216
return nil, errors.Errorf("cannot retrieve public params for [%s]", opts)
223217
}
224218

@@ -241,7 +235,7 @@ func (m *TMSProvider) ppFromStorage(opts *driver.ServiceOptions) ([]byte, error)
241235
}
242236

243237
func (m *TMSProvider) ppFromConfig(opts *driver.ServiceOptions) ([]byte, error) {
244-
tmsConfig, err := m.configProvider.ConfigurationFor(opts.Network, opts.Channel, opts.Namespace)
238+
tmsConfig, err := m.configService.ConfigurationFor(opts.Network, opts.Channel, opts.Namespace)
245239
if err != nil {
246240
return nil, errors.WithMessagef(err, "failed to identify driver from the configuration of [%s], loading driver from public parameters failed too [%s]", opts, err)
247241
}
@@ -250,7 +244,7 @@ func (m *TMSProvider) ppFromConfig(opts *driver.ServiceOptions) ([]byte, error)
250244
return nil, errors.WithMessagef(err, "failed to unmarshal public parameters")
251245
}
252246
if len(cPP.Path) != 0 {
253-
m.logger.Infof("load public parameters from [%s]...", cPP.Path)
247+
logger.Infof("load public parameters from [%s]...", cPP.Path)
254248
ppRaw, err := os.ReadFile(cPP.Path)
255249
if err != nil {
256250
return nil, errors.Errorf("failed to load public parameters from [%s]: [%s]", cPP.Path, err)

token/driver/tms.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,4 @@ type TokenManagerServiceProvider interface {
9595
// If the public parameters in the options are identical to those in the current TMS, then nothing happens.
9696
// If a TMS does not exist for the given options, one is created with the given public parameters.
9797
Update(options ServiceOptions) error
98-
99-
// Configurations returns the current TMS configurations.
100-
Configurations() ([]Configuration, error)
10198
}

token/provider.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"sync"
1212

1313
"github.com/hyperledger-labs/fabric-smart-client/pkg/utils/errors"
14-
"github.com/hyperledger-labs/fabric-token-sdk/token/core"
1514
"github.com/hyperledger-labs/fabric-token-sdk/token/driver"
1615
"github.com/hyperledger-labs/fabric-token-sdk/token/services/logging"
1716
)
@@ -71,15 +70,14 @@ type ManagementServiceProvider struct {
7170

7271
// NewManagementServiceProvider returns a new instance of ManagementServiceProvider
7372
func NewManagementServiceProvider(
74-
logger logging.Logger,
7573
tmsProvider driver.TokenManagerServiceProvider,
7674
normalizer TMSNormalizer,
7775
vaultProvider VaultProvider,
7876
certificationClientProvider CertificationClientProvider,
7977
selectorManagerProvider SelectorManagerProvider,
8078
) *ManagementServiceProvider {
8179
return &ManagementServiceProvider{
82-
logger: logger,
80+
logger: logging.MustGetLogger(),
8381
tmsProvider: tmsProvider,
8482
normalizer: normalizer,
8583
certificationClientProvider: certificationClientProvider,
@@ -197,21 +195,25 @@ func (p *ManagementServiceProvider) managementService(opts ...ServiceOption) (*M
197195
return ms, nil
198196
}
199197

198+
type ConfigService interface {
199+
Configurations() ([]driver.Configuration, error)
200+
}
201+
200202
type tmsNormalizer struct {
201-
tmsProvider core.ConfigProvider
202-
normalizer Normalizer
203+
configService ConfigService
204+
normalizer Normalizer
203205
}
204206

205-
func NewTMSNormalizer(tmsProvider core.ConfigProvider, normalizer Normalizer) *tmsNormalizer {
207+
func NewTMSNormalizer(tmsProvider ConfigService, normalizer Normalizer) *tmsNormalizer {
206208
return &tmsNormalizer{
207-
tmsProvider: tmsProvider,
208-
normalizer: normalizer,
209+
configService: tmsProvider,
210+
normalizer: normalizer,
209211
}
210212
}
211213

212214
func (p *tmsNormalizer) Normalize(opt *ServiceOptions) (*ServiceOptions, error) {
213215
// lookup configurations
214-
configs, err := p.tmsProvider.Configurations()
216+
configs, err := p.configService.Configurations()
215217
if err != nil {
216218
return nil, errors.Wrapf(err, "failed getting tms configs")
217219
}

token/sdk/db/config.go

Lines changed: 0 additions & 39 deletions
This file was deleted.

0 commit comments

Comments
 (0)