Skip to content

Commit bf2d1ba

Browse files
Endorse TX store alternative implementation
Signed-off-by: Alexandros Filios <alexandros.filios@ibm.com>
1 parent c55197f commit bf2d1ba

File tree

19 files changed

+311
-11
lines changed

19 files changed

+311
-11
lines changed

platform/fabric/driver/kvs.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,22 @@ SPDX-License-Identifier: Apache-2.0
66

77
package driver
88

9-
import "github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
9+
import (
10+
"fmt"
11+
12+
"github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
13+
)
1014

1115
type Key struct {
12-
Network string
13-
Channel string
16+
Network driver.Network
17+
Channel driver.Channel
1418
TxID driver.TxID
1519
}
1620

21+
func (k Key) UniqueKey() string {
22+
return fmt.Sprintf("%s.%s.%s", k.Network, k.Channel, k.TxID)
23+
}
24+
1725
type MetadataStore interface {
1826
driver.MetadataStore[Key, TransientMap]
1927
}

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/hyperledger-labs/fabric-smart-client/pkg/utils/errors"
1111
committer2 "github.com/hyperledger-labs/fabric-smart-client/platform/common/core/generic/committer"
1212
driver2 "github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
13+
"github.com/hyperledger-labs/fabric-smart-client/platform/common/utils"
1314
digutils "github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/dig"
1415
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core"
1516
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic"
@@ -23,8 +24,11 @@ import (
2324
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/rwset"
2425
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/vault"
2526
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/driver"
27+
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/services"
2628
vdriver "github.com/hyperledger-labs/fabric-smart-client/platform/view/driver"
29+
sdk "github.com/hyperledger-labs/fabric-smart-client/platform/view/sdk/dig"
2730
dbdriver "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver"
31+
mem "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/memory"
2832
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/events"
2933
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/hash"
3034
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/kvs"
@@ -176,3 +180,21 @@ func NewChannelProvider(in struct {
176180
[]common.HeaderType{common.HeaderType_ENDORSER_TRANSACTION},
177181
)
178182
}
183+
184+
func NewEndorseTxStore(in struct {
185+
dig.In
186+
KVS *kvs.KVS
187+
Config driver.ConfigService
188+
Drivers []dbdriver.NamedDriver `group:"db-drivers"`
189+
}) (driver.EndorseTxStore, error) {
190+
driverName := driver2.PersistenceType(utils.DefaultString(in.Config.GetString("fsc.endorsetx.persistence.type"), string(mem.MemoryPersistence)))
191+
if sdk.UnsupportedStores.Contains(driverName) {
192+
return services.NewKVSBasedEndorseTxStore(in.KVS), nil
193+
}
194+
for _, d := range in.Drivers {
195+
if d.Name == driverName {
196+
return services.NewDBBasedEndorseTxStore(d.Driver, "_default", in.Config)
197+
}
198+
}
199+
return nil, errors.New("driver not found")
200+
}

platform/fabric/sdk/dig/sdk.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func (p *SDK) Install() error {
7373
p.Container().Provide(generic2.NewEndorserTransactionHandlerProvider),
7474
p.Container().Provide(committer2.NewSerialDependencyResolver, dig.As(new(committer2.DependencyResolver))),
7575
p.Container().Provide(services.NewKVSBasedMetadataStore, dig.As(new(driver.MetadataStore))),
76-
p.Container().Provide(services.NewKVSBasedEnvelopeStore, dig.As(new(driver.EnvelopeStore))),
76+
p.Container().Provide(generic2.NewEndorseTxStore, dig.As(new(driver.EnvelopeStore))),
7777
p.Container().Provide(services.NewKVSBasedEndorseTxStore, dig.As(new(driver.EndorseTxStore))),
7878
)
7979
if err != nil {

platform/fabric/services/store.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ package services
88

99
import (
1010
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/driver"
11+
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db"
12+
driver2 "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver"
1113
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/kvs"
1214
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/storage/endorsetx"
1315
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/storage/envelope"
@@ -25,8 +27,13 @@ func NewKVSBasedEnvelopeStore(kvss *kvs.KVS) driver.EnvelopeStore {
2527
func NewKVSBasedEndorseTxStore(kvss *kvs.KVS) driver.EndorseTxStore {
2628
return endorsetx.NewKVSBased[driver.Key](kvss, keyMapper("etx"))
2729
}
30+
2831
func keyMapper(prefix string) kvs.KeyMapper[driver.Key] {
2932
return func(k driver.Key) (string, error) {
3033
return kvs.CreateCompositeKey(prefix, []string{k.Channel, k.Network, k.TxID})
3134
}
3235
}
36+
37+
func NewDBBasedEndorseTxStore(dbDriver driver2.Driver, namespace string, cp db.Config) (driver.EndorseTxStore, error) {
38+
return endorsetx.NewWithConfig[driver.Key](dbDriver, namespace, cp)
39+
}

platform/orion/driver/kvs.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,21 @@ SPDX-License-Identifier: Apache-2.0
66

77
package driver
88

9-
import "github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
9+
import (
10+
"fmt"
11+
12+
"github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
13+
)
1014

1115
type Key struct {
12-
Network string
16+
Network driver.Network
1317
TxID driver.TxID
1418
}
1519

20+
func (k Key) UniqueKey() string {
21+
return fmt.Sprintf("%s.%s", k.Network, k.TxID)
22+
}
23+
1624
type MetadataStore interface {
1725
driver.MetadataStore[Key, TransientMap]
1826
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
Copyright IBM Corp. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package orion
8+
9+
import (
10+
driver2 "github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
11+
"github.com/hyperledger-labs/fabric-smart-client/platform/common/utils"
12+
driver3 "github.com/hyperledger-labs/fabric-smart-client/platform/orion/driver"
13+
"github.com/hyperledger-labs/fabric-smart-client/platform/orion/services"
14+
"github.com/hyperledger-labs/fabric-smart-client/platform/view/driver"
15+
sdk "github.com/hyperledger-labs/fabric-smart-client/platform/view/sdk/dig"
16+
dbdriver "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver"
17+
mem "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/memory"
18+
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/kvs"
19+
"github.com/pkg/errors"
20+
"go.uber.org/dig"
21+
)
22+
23+
func NewEndorseTxStore(in struct {
24+
dig.In
25+
KVS *kvs.KVS
26+
Config driver.ConfigService
27+
Drivers []dbdriver.NamedDriver `group:"db-drivers"`
28+
}) (driver3.EndorseTxStore, error) {
29+
driverName := driver2.PersistenceType(utils.DefaultString(in.Config.GetString("fsc.endorsetx.persistence.type"), string(mem.MemoryPersistence)))
30+
if sdk.UnsupportedStores.Contains(driverName) {
31+
return services.NewKVSBasedEndorseTxStore(in.KVS), nil
32+
}
33+
for _, d := range in.Drivers {
34+
if d.Name == driverName {
35+
return services.NewDBBasedEndorseTxStore(d.Driver, "_default", in.Config)
36+
}
37+
}
38+
return nil, errors.New("driver not found")
39+
}

platform/orion/sdk/dig/sdk.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ func (p *SDK) Install() error {
7979
p.Container().Provide(digutils.Identity[*core.ONSProvider](), dig.As(new(driver2.OrionNetworkServiceProvider))),
8080
p.Container().Provide(finality2.NewHandler, dig.Group("finality-handlers")),
8181
p.Container().Provide(services.NewKVSBasedMetadataStore, dig.As(new(driver2.MetadataStore))),
82-
p.Container().Provide(services.NewKVSBasedEndorseTxStore, dig.As(new(driver2.EndorseTxStore))),
82+
p.Container().Provide(NewEndorseTxStore, dig.As(new(driver2.EndorseTxStore))),
8383
p.Container().Provide(services.NewKVSBasedEnvelopeStore, dig.As(new(driver2.EnvelopeStore))),
8484
)
8585
if err != nil {

platform/orion/services/store.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ package services
88

99
import (
1010
"github.com/hyperledger-labs/fabric-smart-client/platform/orion/driver"
11+
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db"
12+
driver2 "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver"
1113
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/kvs"
1214
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/storage/endorsetx"
1315
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/storage/envelope"
@@ -29,3 +31,7 @@ func NewKVSBasedEndorseTxStore(kvss *kvs.KVS) driver.EndorseTxStore {
2931
func keyMapper(prefix string) kvs.KeyMapper[driver.Key] {
3032
return func(k driver.Key) (string, error) { return kvs.CreateCompositeKey(prefix, []string{k.Network, k.TxID}) }
3133
}
34+
35+
func NewDBBasedEndorseTxStore(dbDriver driver2.Driver, namespace string, cp db.Config) (driver.EndorseTxStore, error) {
36+
return endorsetx.NewWithConfig[driver.Key](dbDriver, namespace, cp)
37+
}

platform/view/sdk/dig/providers.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func newKVS(in struct {
3838
return nil, errors.New("driver not found")
3939
}
4040

41-
var unsupportedStores = collections.NewSet(badger.FilePersistence, badger.BadgerPersistence)
41+
var UnsupportedStores = collections.NewSet(badger.FilePersistence, badger.BadgerPersistence)
4242

4343
func newBindingStore(in struct {
4444
dig.In
@@ -47,7 +47,7 @@ func newBindingStore(in struct {
4747
Drivers []driver2.NamedDriver `group:"db-drivers"`
4848
}) (driver4.BindingStore, error) {
4949
driverName := driver4.PersistenceType(utils.DefaultString(in.Config.GetString("fsc.binding.persistence.type"), string(mem.MemoryPersistence)))
50-
if unsupportedStores.Contains(driverName) {
50+
if UnsupportedStores.Contains(driverName) {
5151
return binding.NewKVSBased(in.KVS), nil
5252
}
5353
for _, d := range in.Drivers {
@@ -65,7 +65,7 @@ func newSignerInfoStore(in struct {
6565
Drivers []driver2.NamedDriver `group:"db-drivers"`
6666
}) (driver4.SignerInfoStore, error) {
6767
driverName := driver4.PersistenceType(utils.DefaultString(in.Config.GetString("fsc.signerinfo.persistence.type"), string(mem.MemoryPersistence)))
68-
if unsupportedStores.Contains(driverName) {
68+
if UnsupportedStores.Contains(driverName) {
6969
return signerinfo.NewKVSBased(in.KVS), nil
7070
}
7171
for _, d := range in.Drivers {
@@ -83,7 +83,7 @@ func newAuditInfoStore(in struct {
8383
Drivers []driver2.NamedDriver `group:"db-drivers"`
8484
}) (driver4.AuditInfoStore, error) {
8585
driverName := driver4.PersistenceType(utils.DefaultString(in.Config.GetString("fsc.auditinfo.persistence.type"), string(mem.MemoryPersistence)))
86-
if unsupportedStores.Contains(driverName) {
86+
if UnsupportedStores.Contains(driverName) {
8787
return auditinfo.NewKVSBased(in.KVS), nil
8888
}
8989
for _, d := range in.Drivers {

platform/view/services/db/driver/badger/driver.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,7 @@ func (d *Driver) NewSignerInfo(string, driver.Config) (driver.SignerInfoPersiste
7676
func (d *Driver) NewAuditInfo(string, driver.Config) (driver.AuditInfoPersistence, error) {
7777
panic("not implemented")
7878
}
79+
80+
func (d *Driver) NewEndorseTx(string, driver.Config) (driver.EndorseTxPersistence, error) {
81+
panic("not implemented")
82+
}

0 commit comments

Comments
 (0)