Skip to content

Commit fe76156

Browse files
adecaroalexandrosfilios
authored andcommitted
Pass the network driver to the constructor
Signed-off-by: Angelo De Caro <adc@zurich.ibm.com>
1 parent 05c1da2 commit fe76156

File tree

6 files changed

+139
-60
lines changed

6 files changed

+139
-60
lines changed

platform/fabric/core/generic/channel.go

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,15 @@ import (
1313
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/membership"
1414
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/services"
1515
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/driver"
16+
"github.com/hyperledger/fabric-protos-go/common"
1617
"github.com/pkg/errors"
1718
)
1819

19-
type committerService interface {
20-
ReloadConfigTransactions() error
20+
type CommitterService interface {
21+
driver.Finality
2122
driver.Committer
23+
ReloadConfigTransactions() error
24+
Commit(ctx context.Context, block *common.Block) error
2225
}
2326

2427
type Delivery interface {
@@ -41,10 +44,17 @@ type Channel struct {
4144
LedgerService driver.Ledger
4245
ChannelMembershipService *membership.Service
4346
ChaincodeManagerService driver.ChaincodeManager
44-
CommitterService committerService
47+
CommitterService CommitterService
4548
PeerService *services.ClientFactory
4649
}
4750

51+
func (c *Channel) Init() error {
52+
if err := c.CommitterService.ReloadConfigTransactions(); err != nil {
53+
return errors.WithMessagef(err, "failed reloading config transactions")
54+
}
55+
return nil
56+
}
57+
4858
func (c *Channel) Name() string {
4959
return c.ChannelName
5060
}
@@ -90,13 +100,6 @@ func (c *Channel) Committer() driver.Committer {
90100
return c.CommitterService
91101
}
92102

93-
func (c *Channel) Init() error {
94-
if err := c.CommitterService.ReloadConfigTransactions(); err != nil {
95-
return errors.WithMessagef(err, "failed reloading config transactions")
96-
}
97-
return nil
98-
}
99-
100103
func (c *Channel) EnvelopeService() driver.EnvelopeService {
101104
return c.ES
102105
}

platform/fabric/core/generic/channelprovider.go

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -28,41 +28,41 @@ import (
2828
"go.opentelemetry.io/otel/trace"
2929
)
3030

31-
type VaultConstructor = func(configService driver.ConfigService, channel string, drivers []driver2.NamedDriver, metricsProvider metrics.Provider, tracerProvider trace.TracerProvider) (*vault.Vault, driver.TXIDStore, error)
31+
type VaultConstructor = func(
32+
configService driver.ConfigService,
33+
channel string,
34+
drivers []driver2.NamedDriver,
35+
metricsProvider metrics.Provider,
36+
tracerProvider trace.TracerProvider,
37+
) (*vault.Vault, driver.TXIDStore, error)
3238
type LedgerConstructor func(
3339
channelName string,
40+
nw driver.FabricNetworkService,
3441
chaincodeManager driver.ChaincodeManager,
35-
localMembership driver.LocalMembership,
36-
configService driver.ConfigService,
37-
transactionManager driver.TransactionManager,
38-
) driver.Ledger
42+
) (driver.Ledger, error)
3943
type RWSetLoaderConstructor func(
40-
network string,
4144
channel string,
45+
nw driver.FabricNetworkService,
4246
envelopeService driver.EnvelopeService,
4347
transactionService driver.EndorserTransactionService,
44-
transactionManager driver.TransactionManager,
4548
vault driver.RWSetInspector,
46-
) driver.RWSetLoader
49+
) (driver.RWSetLoader, error)
4750
type CommitterConstructor func(
48-
configService driver.ConfigService,
51+
nw driver.FabricNetworkService,
4952
channelConfig driver.ChannelConfig,
5053
vault driver.Vault,
5154
envelopeService driver.EnvelopeService,
5255
ledger driver.Ledger,
5356
rwsetLoaderService driver.RWSetLoader,
54-
processorManager driver.ProcessorManager,
5557
eventsPublisher events.Publisher,
5658
channelMembershipService *membership.Service,
57-
orderingService committer.OrderingService,
5859
fabricFinality committer.FabricFinality,
59-
transactionManager driver.TransactionManager,
6060
dependencyResolver committer.DependencyResolver,
6161
quiet bool,
6262
listenerManager driver.ListenerManager,
6363
tracerProvider trace.TracerProvider,
6464
metricsProvider metrics.Provider,
65-
) *committer.Committer
65+
) (CommitterService, error)
6666

6767
type ChannelProvider interface {
6868
NewChannel(nw driver.FabricNetworkService, name string, quiet bool) (driver.Channel, error)
@@ -120,19 +120,20 @@ func NewChannelProvider(
120120
}
121121

122122
func (p *provider) NewChannel(nw driver.FabricNetworkService, channelName string, quiet bool) (driver.Channel, error) {
123-
networkOrderingService, ok := nw.(committer.OrderingService)
124-
if !ok {
125-
return nil, errors.Errorf("fabric network service does not implement committer.OrderingService")
126-
}
127-
128123
// Channel configuration
129124
channelConfig, err := p.channelConfigProvider.GetChannelConfig(nw.Name(), channelName)
130125
if err != nil {
131126
return nil, err
132127
}
133128

134129
// Vault
135-
vault, txIDStore, err := p.newVault(nw.ConfigService(), channelName, p.drivers, p.metricsProvider, p.tracerProvider)
130+
vault, txIDStore, err := p.newVault(
131+
nw.ConfigService(),
132+
channelName,
133+
p.drivers,
134+
p.metricsProvider,
135+
p.tracerProvider,
136+
)
136137
if err != nil {
137138
return nil, err
138139
}
@@ -159,7 +160,16 @@ func (p *provider) NewChannel(nw driver.FabricNetworkService, channelName string
159160
channelMembershipService := membership.NewService()
160161

161162
// Committers
162-
rwSetLoaderService := p.newRWSetLoader(nw.Name(), channelName, envelopeService, transactionService, nw.TransactionManager(), vault)
163+
rwSetLoaderService, err := p.newRWSetLoader(
164+
channelName,
165+
nw,
166+
envelopeService,
167+
transactionService,
168+
vault,
169+
)
170+
if err != nil {
171+
return nil, errors.WithMessagef(err, "failed creating RWSetLoader for channel [%s]", channelName)
172+
}
163173

164174
chaincodeManagerService := chaincode.NewManager(
165175
nw.Name(),
@@ -176,36 +186,35 @@ func (p *provider) NewChannel(nw driver.FabricNetworkService, channelName string
176186
channelMembershipService,
177187
)
178188

179-
ledgerService := p.newLedger(
189+
ledgerService, err := p.newLedger(
180190
channelName,
191+
nw,
181192
chaincodeManagerService,
182-
nw.LocalMembership(),
183-
nw.ConfigService(),
184-
nw.TransactionManager(),
185193
)
194+
if err != nil {
195+
return nil, errors.WithMessagef(err, "failed creating ledger for channel [%s]", channelName)
196+
}
186197

187-
committerService := p.newCommitter(
188-
nw.ConfigService(),
198+
committerService, err := p.newCommitter(
199+
nw,
189200
channelConfig,
190201
vault,
191202
envelopeService,
192203
ledgerService,
193204
rwSetLoaderService,
194-
nw.ProcessorManager(),
195205
p.publisher,
196206
channelMembershipService,
197-
networkOrderingService,
198207
fabricFinality,
199-
nw.TransactionManager(),
200208
p.dependencyResolver,
201209
quiet,
202210
p.listenerManagerProvider.NewManager(),
203211
p.tracerProvider,
204212
p.metricsProvider,
205213
)
206214
if err != nil {
207-
return nil, err
215+
return nil, errors.WithMessagef(err, "failed creating committer for channel [%s]", channelName)
208216
}
217+
209218
// Finality
210219
finalityService := committerService
211220
chaincodeManagerService.Finality = finalityService

platform/fabric/core/generic/driver/identity/msp.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ package identity
99
import (
1010
"fmt"
1111

12-
"github.com/hyperledger-labs/fabric-smart-client/platform/common/services/sig"
1312
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/driver/config"
1413
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/msp"
1514
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/msp/driver"
@@ -30,7 +29,7 @@ type MSPManagerProvider interface {
3029
type localMSPManagerProvider struct {
3130
configProvider config.Provider
3231
endpointService driver.BinderService
33-
sigService *sig.Service
32+
sigService driver.SignerService
3433
identityLoaders []NamedIdentityLoader
3534
deserializerManager driver.DeserializerManager
3635
idProvider vdriver.IdentityProvider
@@ -40,7 +39,7 @@ type localMSPManagerProvider struct {
4039
func NewMSPManagerProvider(
4140
configProvider config.Provider,
4241
endpointService EndpointService,
43-
sigService *sig.Service,
42+
sigService driver.SignerService,
4443
identityLoaders []NamedIdentityLoader,
4544
deserializerManager driver.DeserializerManager,
4645
idProvider vdriver.IdentityProvider,

platform/fabric/core/generic/network.go

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ import (
1717
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/transaction"
1818
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/driver"
1919
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/grpc"
20-
"github.com/hyperledger/fabric/common/channelconfig"
21-
"github.com/pkg/errors"
2220
)
2321

2422
var logger = logging.MustGetLogger("fabric-sdk.core")
@@ -182,16 +180,6 @@ func (f *Network) Init() error {
182180
return nil
183181
}
184182

185-
func (f *Network) SetConfigOrderers(o channelconfig.Orderer, orderers []*grpc.ConnectionConfig) error {
186-
if err := f.Ordering.SetConsensusType(o.ConsensusType()); err != nil {
187-
return errors.WithMessagef(err, "failed to set consensus type from channel config")
188-
}
189-
if err := f.ConfigService().SetConfigOrderers(orderers); err != nil {
190-
return errors.WithMessagef(err, "failed to set ordererss")
191-
}
192-
return nil
193-
}
194-
195183
func (f *Network) SetTransactionManager(tm driver.TransactionManager) {
196184
f.transactionManager = tm
197185
}

platform/fabric/core/generic/ordering/ordering.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,11 @@ import (
1414
"github.com/hyperledger-labs/fabric-smart-client/platform/common/services/logging"
1515
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/metrics"
1616
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/driver"
17+
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging"
18+
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/grpc"
1719
"github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
1820
common2 "github.com/hyperledger/fabric-protos-go/common"
21+
"github.com/hyperledger/fabric/common/channelconfig"
1922
"github.com/pkg/errors"
2023
"go.uber.org/zap/zapcore"
2124
context2 "golang.org/x/net/context"
@@ -52,6 +55,7 @@ type GetEndorserTransactionServiceFunc = func(channelID string) (driver.Endorser
5255
type Service struct {
5356
GetEndorserTransactionService GetEndorserTransactionServiceFunc
5457
SigService driver.SignerService
58+
ConfigService driver.ConfigService
5559
Metrics *metrics.Metrics
5660

5761
Broadcasters map[ConsensusType]BroadcastFnc
@@ -73,6 +77,7 @@ func NewService(
7377
Broadcasters: map[ConsensusType]BroadcastFnc{},
7478
BroadcastMutex: sync.RWMutex{},
7579
Broadcaster: nil,
80+
ConfigService: configService,
7681
}
7782
s.Broadcasters[BFT] = NewBFTBroadcaster(configService, services, metrics).Broadcast
7883
cft := NewCFTBroadcaster(configService, services, metrics)
@@ -133,6 +138,16 @@ func (o *Service) SetConsensusType(consensusType ConsensusType) error {
133138
return nil
134139
}
135140

141+
func (f *Service) SetConfigOrderers(o channelconfig.Orderer, orderers []*grpc.ConnectionConfig) error {
142+
if err := f.SetConsensusType(o.ConsensusType()); err != nil {
143+
return errors.WithMessagef(err, "failed to set consensus type from channel config")
144+
}
145+
if err := f.ConfigService.SetConfigOrderers(orderers); err != nil {
146+
return errors.WithMessagef(err, "failed to set ordererss")
147+
}
148+
return nil
149+
}
150+
136151
func (o *Service) createFabricEndorseTransactionEnvelope(tx Transaction) (*common2.Envelope, error) {
137152
env, err := tx.Envelope()
138153
if err != nil {

platform/fabric/sdk/dig/generic/providers.go

Lines changed: 70 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ SPDX-License-Identifier: Apache-2.0
77
package generic
88

99
import (
10+
"github.com/hyperledger-labs/fabric-smart-client/pkg/utils/errors"
1011
committer2 "github.com/hyperledger-labs/fabric-smart-client/platform/common/core/generic/committer"
1112
digutils "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/dig"
1213
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core"
@@ -17,6 +18,7 @@ import (
1718
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/driver/config"
1819
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/driver/identity"
1920
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/ledger"
21+
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/membership"
2022
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/rwset"
2123
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/vault"
2224
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/driver"
@@ -91,13 +93,76 @@ func NewChannelProvider(in struct {
9193
generic.NewChannelConfigProvider(in.ConfigProvider),
9294
committer2.NewFinalityListenerManagerProvider[driver.ValidationCode](in.TracerProvider),
9395
committer.NewSerialDependencyResolver(),
94-
func(channelName string, chaincodeManager driver.ChaincodeManager, localMembership driver.LocalMembership, configService driver.ConfigService, transactionManager driver.TransactionManager) driver.Ledger {
95-
return ledger.New(channelName, chaincodeManager, localMembership, configService, transactionManager)
96+
func(
97+
channelName string,
98+
nw driver.FabricNetworkService,
99+
chaincodeManager driver.ChaincodeManager,
100+
) (driver.Ledger, error) {
101+
return ledger.New(
102+
channelName,
103+
chaincodeManager,
104+
nw.LocalMembership(),
105+
nw.ConfigService(),
106+
nw.TransactionManager(),
107+
), nil
96108
},
97-
func(network string, channel string, envelopeService driver.EnvelopeService, transactionService driver.EndorserTransactionService, transactionManager driver.TransactionManager, vault driver.RWSetInspector) driver.RWSetLoader {
98-
return rwset.NewLoader(network, channel, envelopeService, transactionService, transactionManager, vault)
109+
func(
110+
channel string,
111+
nw driver.FabricNetworkService,
112+
envelopeService driver.EnvelopeService,
113+
transactionService driver.EndorserTransactionService,
114+
vault driver.RWSetInspector,
115+
) (driver.RWSetLoader, error) {
116+
return rwset.NewLoader(
117+
nw.Name(),
118+
channel,
119+
envelopeService,
120+
transactionService,
121+
nw.TransactionManager(),
122+
vault,
123+
), nil
124+
},
125+
func(
126+
nw driver.FabricNetworkService,
127+
channelConfig driver.ChannelConfig,
128+
vault driver.Vault,
129+
envelopeService driver.EnvelopeService,
130+
ledger driver.Ledger,
131+
rwsetLoaderService driver.RWSetLoader,
132+
eventsPublisher events.Publisher,
133+
channelMembershipService *membership.Service,
134+
fabricFinality committer.FabricFinality,
135+
dependencyResolver committer.DependencyResolver,
136+
quiet bool,
137+
listenerManager driver.ListenerManager,
138+
tracerProvider trace.TracerProvider,
139+
metricsProvider metrics.Provider,
140+
) (generic.CommitterService, error) {
141+
os, ok := nw.OrderingService().(committer.OrderingService)
142+
if !ok {
143+
return nil, errors.New("ordering service is not a committer.OrderingService")
144+
}
145+
146+
return committer.New(
147+
nw.ConfigService(),
148+
channelConfig,
149+
vault,
150+
envelopeService,
151+
ledger,
152+
rwsetLoaderService,
153+
nw.ProcessorManager(),
154+
eventsPublisher,
155+
channelMembershipService,
156+
os,
157+
fabricFinality,
158+
nw.TransactionManager(),
159+
dependencyResolver,
160+
quiet,
161+
listenerManager,
162+
tracerProvider,
163+
metricsProvider,
164+
), nil
99165
},
100-
committer.New,
101166
true,
102167
)
103168
}

0 commit comments

Comments
 (0)