Skip to content

Commit 3f367bb

Browse files
Simplified db driver logic
Signed-off-by: Alexandros Filios <alexandros.filios@ibm.com>
1 parent 1e83ef0 commit 3f367bb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+781
-1332
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ require (
99
github.com/gin-gonic/gin v1.10.0
1010
github.com/gobuffalo/packr/v2 v2.7.1
1111
github.com/hashicorp/go-uuid v1.0.3
12-
github.com/hyperledger-labs/fabric-smart-client v0.4.1-0.20250205113833-61674fc8947e
12+
github.com/hyperledger-labs/fabric-smart-client v0.4.1-0.20250210153725-90e0fbb00133
1313
github.com/hyperledger-labs/orion-sdk-go v0.2.10
1414
github.com/hyperledger-labs/orion-server v0.2.10
1515
github.com/hyperledger/fabric v1.4.0-rc1.0.20230405174026-695dd57e01c2

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,8 +1057,8 @@ github.com/hidal-go/hidalgo v0.0.0-20201109092204-05749a6d73df/go.mod h1:bPkrxDl
10571057
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
10581058
github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc=
10591059
github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8=
1060-
github.com/hyperledger-labs/fabric-smart-client v0.4.1-0.20250205113833-61674fc8947e h1:dbhZRYE6rJlnr2SoD0R0+w3Ci3oGguhZ8teK+cBVwLw=
1061-
github.com/hyperledger-labs/fabric-smart-client v0.4.1-0.20250205113833-61674fc8947e/go.mod h1:EdiA1cY2eOOZjqPlutIlFPkueUMMJOxLoiRH5KwOW1c=
1060+
github.com/hyperledger-labs/fabric-smart-client v0.4.1-0.20250210153725-90e0fbb00133 h1:UTyfnN+H+K9kK6TZw8ccal0+viXlf/RBHc7YiEY0XiU=
1061+
github.com/hyperledger-labs/fabric-smart-client v0.4.1-0.20250210153725-90e0fbb00133/go.mod h1:EdiA1cY2eOOZjqPlutIlFPkueUMMJOxLoiRH5KwOW1c=
10621062
github.com/hyperledger-labs/orion-sdk-go v0.2.10 h1:lFgWgxyvngIhWnIqymYGBmtmq9D6uC5d0uLG9cbyh5s=
10631063
github.com/hyperledger-labs/orion-sdk-go v0.2.10/go.mod h1:iN2xZB964AqwVJwL+EnwPOs8z1EkMEbbIg/qYeC7gDY=
10641064
github.com/hyperledger-labs/orion-server v0.2.10 h1:G4zbQEL5Egk0Oj+TwHCZWdTOLDBHOjaAEvYOT4G7ozw=

token/sdk/dig/providers.go

Lines changed: 5 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -8,120 +8,21 @@ package sdk
88

99
import (
1010
driver2 "github.com/hyperledger-labs/fabric-smart-client/platform/view/driver"
11-
sql2 "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/sql"
1211
"github.com/hyperledger-labs/fabric-token-sdk/token/core"
1312
"github.com/hyperledger-labs/fabric-token-sdk/token/driver"
14-
dbconfig "github.com/hyperledger-labs/fabric-token-sdk/token/sdk/db"
15-
"github.com/hyperledger-labs/fabric-token-sdk/token/services/auditdb"
16-
config2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/config"
1713
"github.com/hyperledger-labs/fabric-token-sdk/token/services/db"
1814
dbdriver "github.com/hyperledger-labs/fabric-token-sdk/token/services/db/driver"
19-
"github.com/hyperledger-labs/fabric-token-sdk/token/services/db/sql/driver/unity"
20-
"github.com/hyperledger-labs/fabric-token-sdk/token/services/identitydb"
21-
"github.com/hyperledger-labs/fabric-token-sdk/token/services/tokendb"
22-
tokensql "github.com/hyperledger-labs/fabric-token-sdk/token/services/tokendb/db/sql"
23-
"github.com/hyperledger-labs/fabric-token-sdk/token/services/tokenlockdb"
24-
"github.com/hyperledger-labs/fabric-token-sdk/token/services/ttxdb"
2515
"go.uber.org/dig"
2616
)
2717

28-
// Token Lock DB
29-
30-
func NewTokenLockDBManager(in struct {
31-
dig.In
32-
ConfigService driver2.ConfigService
33-
ConfigProvider *config2.Service
34-
Drivers []db.NamedDriver[dbdriver.TokenLockDBDriver] `group:"tokenlockdb-drivers"`
35-
}) *tokenlockdb.Manager {
36-
return tokenlockdb.NewHolder(in.Drivers).NewManager(in.ConfigService, dbconfig.NewConfig(in.ConfigProvider, "tokenlockdb.persistence.type", "db.persistence.type"))
37-
}
38-
39-
// Audit DB
40-
41-
func NewAuditDBManager(in struct {
42-
dig.In
43-
ConfigService driver2.ConfigService
44-
ConfigProvider *config2.Service
45-
Drivers []db.NamedDriver[dbdriver.AuditDBDriver] `group:"auditdb-drivers"`
46-
}) *auditdb.Manager {
47-
return auditdb.NewHolder(in.Drivers).NewManager(in.ConfigService, dbconfig.NewConfig(in.ConfigProvider, "auditdb.persistence.type", "db.persistence.type"))
48-
}
49-
50-
// Transaction DB
51-
52-
func NewTTXDBManager(in struct {
18+
func NewDriverHolder(in struct {
5319
dig.In
54-
ConfigService driver2.ConfigService
55-
ConfigProvider *config2.Service
56-
Drivers []db.NamedDriver[dbdriver.TTXDBDriver] `group:"ttxdb-drivers"`
57-
}) *ttxdb.Manager {
58-
return ttxdb.NewHolder(in.Drivers).NewManager(in.ConfigService, dbconfig.NewConfig(in.ConfigProvider, "ttxdb.persistence.type", "db.persistence.type"))
20+
Drivers []dbdriver.NamedDriver `group:"token-db-drivers"`
21+
ConfigProvider driver2.ConfigService
22+
}) *db.DriverHolder {
23+
return db.NewDriverHolder(in.ConfigProvider, in.Drivers...)
5924
}
6025

61-
// Identity DB
62-
63-
func NewIdentityDBManager(in struct {
64-
dig.In
65-
ConfigService driver2.ConfigService
66-
ConfigProvider *config2.Service
67-
Drivers []db.NamedDriver[dbdriver.IdentityDBDriver] `group:"identitydb-drivers"`
68-
}) *identitydb.Manager {
69-
return identitydb.NewManager(in.Drivers, in.ConfigService, dbconfig.NewConfig(in.ConfigProvider, "identitydb.persistence.type", "db.persistence.type"))
70-
}
71-
72-
// Token DB
73-
74-
type TokenDriverResult struct {
75-
dig.Out
76-
DBDriver db.NamedDriver[dbdriver.TokenDBDriver] `group:"tokendb-drivers"`
77-
NotifierDriver db.NamedDriver[dbdriver.TokenNotifierDriver] `group:"tokennotifier-drivers"`
78-
}
79-
80-
func NewTokenDrivers() TokenDriverResult {
81-
return TokenDriverResult{
82-
DBDriver: db.NamedDriver[dbdriver.TokenDBDriver]{Name: sql2.SQLPersistence, Driver: tokensql.NewDBDriver()},
83-
NotifierDriver: db.NamedDriver[dbdriver.TokenNotifierDriver]{Name: sql2.SQLPersistence, Driver: tokensql.NewNotifierDriver()},
84-
}
85-
}
86-
87-
func NewTokenManagers(in struct {
88-
dig.In
89-
ConfigService driver2.ConfigService
90-
ConfigProvider *config2.Service
91-
DBDrivers []db.NamedDriver[dbdriver.TokenDBDriver] `group:"tokendb-drivers"`
92-
NotifierDrivers []db.NamedDriver[dbdriver.TokenNotifierDriver] `group:"tokennotifier-drivers"`
93-
}) (*tokendb.Manager, *tokendb.NotifierManager) {
94-
dbConfig := dbconfig.NewConfig(in.ConfigProvider, "tokendb.persistence.type", "db.persistence.type")
95-
return tokendb.NewHolder(in.DBDrivers).NewManager(in.ConfigService, dbConfig),
96-
tokendb.NewNotifierHolder(in.NotifierDrivers).NewManager(in.ConfigService, dbConfig)
97-
}
98-
99-
// Unity
100-
101-
type DBDriverResult struct {
102-
dig.Out
103-
TTXDBDriver db.NamedDriver[dbdriver.TTXDBDriver] `group:"ttxdb-drivers"`
104-
TokenDBDriver db.NamedDriver[dbdriver.TokenDBDriver] `group:"tokendb-drivers"`
105-
TokenNotifierDriver db.NamedDriver[dbdriver.TokenNotifierDriver] `group:"tokennotifier-drivers"`
106-
TokenLockDBDriver db.NamedDriver[dbdriver.TokenLockDBDriver] `group:"tokenlockdb-drivers"`
107-
AuditDBDriver db.NamedDriver[dbdriver.AuditDBDriver] `group:"auditdb-drivers"`
108-
IdentityDBDriver db.NamedDriver[dbdriver.IdentityDBDriver] `group:"identitydb-drivers"`
109-
}
110-
111-
func NewDBDrivers() DBDriverResult {
112-
ttxDBDriver, tokenDBDriver, tokenNotifierDriver, tokenLockDBDriver, auditDBDriver, identityDBDriver := unity.NewDBDrivers()
113-
return DBDriverResult{
114-
TTXDBDriver: ttxDBDriver,
115-
TokenDBDriver: tokenDBDriver,
116-
TokenNotifierDriver: tokenNotifierDriver,
117-
TokenLockDBDriver: tokenLockDBDriver,
118-
AuditDBDriver: auditDBDriver,
119-
IdentityDBDriver: identityDBDriver,
120-
}
121-
}
122-
123-
// Token SDK
124-
12526
func newTokenDriverService(in struct {
12627
dig.In
12728
Drivers []core.NamedFactory[driver.Driver] `group:"token-drivers"`

token/sdk/dig/sdk.go

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,17 @@ import (
3030
"github.com/hyperledger-labs/fabric-token-sdk/token/sdk/tms"
3131
"github.com/hyperledger-labs/fabric-token-sdk/token/sdk/vault"
3232
"github.com/hyperledger-labs/fabric-token-sdk/token/services/auditdb"
33-
auditdriver "github.com/hyperledger-labs/fabric-token-sdk/token/services/auditdb/db/sql"
3433
"github.com/hyperledger-labs/fabric-token-sdk/token/services/auditor"
3534
_ "github.com/hyperledger-labs/fabric-token-sdk/token/services/certifier/dummy"
3635
config2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/config"
36+
db2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/db"
3737
common2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/db/common"
38+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/db/sql/driver/memory"
39+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/db/sql/driver/sql"
40+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/db/sql/driver/unity"
3841
identity2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity"
3942
kvs2 "github.com/hyperledger-labs/fabric-token-sdk/token/services/identity/storage/kvs"
4043
"github.com/hyperledger-labs/fabric-token-sdk/token/services/identitydb"
41-
identitydriver "github.com/hyperledger-labs/fabric-token-sdk/token/services/identitydb/db/sql"
4244
"github.com/hyperledger-labs/fabric-token-sdk/token/services/logging"
4345
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network"
4446
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network/common"
@@ -47,11 +49,10 @@ import (
4749
"github.com/hyperledger-labs/fabric-token-sdk/token/services/selector/sherdlock"
4850
selector "github.com/hyperledger-labs/fabric-token-sdk/token/services/selector/simple"
4951
"github.com/hyperledger-labs/fabric-token-sdk/token/services/tokendb"
50-
tokenlockdriver "github.com/hyperledger-labs/fabric-token-sdk/token/services/tokenlockdb/db/sql"
52+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/tokenlockdb"
5153
"github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens"
5254
"github.com/hyperledger-labs/fabric-token-sdk/token/services/ttx"
5355
"github.com/hyperledger-labs/fabric-token-sdk/token/services/ttxdb"
54-
ttxdriver "github.com/hyperledger-labs/fabric-token-sdk/token/services/ttxdb/db/sql"
5556
"github.com/pkg/errors"
5657
"go.opentelemetry.io/otel/trace"
5758
"go.uber.org/dig"
@@ -130,14 +131,28 @@ func (p *SDK) Install() error {
130131
new(common2.TokenManagementServiceProvider),
131132
),
132133
),
133-
p.Container().Provide(NewTTXDBManager),
134+
p.Container().Provide(func(dh *db2.DriverHolder) *ttxdb.Manager {
135+
return ttxdb.NewManager(dh, "ttxdb.persistence", "db.persistence")
136+
}),
134137
p.Container().Provide(digutils.Identity[*ttxdb.Manager](), dig.As(new(ttx.DBProvider), new(network2.TTXDBProvider))),
135-
p.Container().Provide(NewTokenManagers),
138+
p.Container().Provide(func(dh *db2.DriverHolder) *tokendb.Manager {
139+
return tokendb.NewManager(dh, "tokendb.persistence", "db.persistence")
140+
}),
141+
p.Container().Provide(func(dh *db2.DriverHolder) *tokendb.NotifierManager {
142+
return tokendb.NewNotifierManager(dh, "tokendb.persistence", "db.persistence")
143+
}),
136144
p.Container().Provide(digutils.Identity[*tokendb.Manager](), dig.As(new(tokens.DBProvider))),
137-
p.Container().Provide(NewAuditDBManager),
145+
p.Container().Provide(NewDriverHolder),
146+
p.Container().Provide(func(dh *db2.DriverHolder) *auditdb.Manager {
147+
return auditdb.NewManager(dh, "auditdb.persistence", "db.persistence")
148+
}),
138149
p.Container().Provide(digutils.Identity[*auditdb.Manager](), dig.As(new(auditor.AuditDBProvider))),
139-
p.Container().Provide(NewIdentityDBManager),
140-
p.Container().Provide(NewTokenLockDBManager),
150+
p.Container().Provide(func(dh *db2.DriverHolder) *identitydb.Manager {
151+
return identitydb.NewManager(dh, "identitydb.persistence", "db.persistence")
152+
}),
153+
p.Container().Provide(func(dh *db2.DriverHolder) *tokenlockdb.Manager {
154+
return tokenlockdb.NewManager(dh, "tokenlockdb.persistence", "db.persistence")
155+
}),
141156
p.Container().Provide(digutils.Identity[*kvs.KVS](), dig.As(new(kvs2.KVS))),
142157
p.Container().Provide(identity.NewDBStorageProvider),
143158
p.Container().Provide(digutils.Identity[*identity.DBStorageProvider](), dig.As(new(identity2.StorageProvider))),
@@ -155,12 +170,9 @@ func (p *SDK) Install() error {
155170
p.Container().Provide(func(tracerProvider trace.TracerProvider) *tracing.TracerProvider {
156171
return tracing.NewTracerProvider(tracerProvider)
157172
}),
158-
p.Container().Provide(tokenlockdriver.NewDriver, dig.Group("tokenlockdb-drivers")),
159-
p.Container().Provide(auditdriver.NewDriver, dig.Group("auditdb-drivers")),
160-
p.Container().Provide(NewTokenDrivers),
161-
p.Container().Provide(ttxdriver.NewDriver, dig.Group("ttxdb-drivers")),
162-
p.Container().Provide(identitydriver.NewDriver, dig.Group("identitydb-drivers")),
163-
p.Container().Provide(NewDBDrivers),
173+
p.Container().Provide(unity.NewUnityDriver, dig.Group("token-db-drivers")),
174+
p.Container().Provide(sql.NewDriver, dig.Group("token-db-drivers")),
175+
p.Container().Provide(memory.NewDriver, dig.Group("token-db-drivers")),
164176
p.Container().Provide(func(dbManager *tokendb.Manager, notifierManager *tokendb.NotifierManager, metricsProvider metrics.Provider) sherdlock.FetcherProvider {
165177
return sherdlock.NewFetcherProvider(dbManager, notifierManager, metricsProvider, sherdlock.Mixed)
166178
}),
@@ -233,7 +245,7 @@ func (p *SDK) Start(ctx context.Context) error {
233245
)
234246
}
235247

236-
func connectNetworks(configService *config2.Service, networkProvider *network.Provider, tmsProvider *token.ManagementServiceProvider) error {
248+
func connectNetworks(configService *config2.Service, networkProvider *network.Provider, _ *token.ManagementServiceProvider) error {
237249
configurations, err := configService.Configurations()
238250
if err != nil {
239251
return err

token/services/auditdb/db.go

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,15 @@ type tokenRequest interface {
3030
PublicParamsHash() token.PPHash
3131
}
3232

33-
type (
34-
Holder = db.DriverHolder[*DB, driver.AuditTransactionDB, driver.AuditDBDriver]
35-
Manager = db.Manager[*DB, driver.AuditTransactionDB, driver.AuditDBDriver]
36-
)
33+
type Manager = db.Manager[*DB]
3734

3835
var (
3936
managerType = reflect.TypeOf((*Manager)(nil))
4037
logger = logging.MustGetLogger("token-sdk.auditdb")
4138
)
4239

43-
func NewHolder(drivers []db.NamedDriver[driver.AuditDBDriver]) *Holder {
44-
return db.NewDriverHolder[*DB, driver.AuditTransactionDB, driver.AuditDBDriver](newDB, drivers...)
40+
func NewManager(dh *db.DriverHolder, keys ...string) *Manager {
41+
return db.MappedManager[driver.AuditTransactionDB, *DB](dh.NewAuditTransactionManager(keys...), newDB)
4542
}
4643

4744
func GetByTMSId(sp token.ServiceProvider, tmsID token.TMSID) (*DB, error) {
@@ -146,13 +143,13 @@ type DB struct {
146143
pendingTXs []string
147144
}
148145

149-
func newDB(p driver.AuditTransactionDB) *DB {
146+
func newDB(p driver.AuditTransactionDB) (*DB, error) {
150147
return &DB{
151148
StatusSupport: common.NewStatusSupport(),
152149
db: p,
153150
eIDsLocks: sync.Map{},
154151
pendingTXs: make([]string, 0, 10000),
155-
}
152+
}, nil
156153
}
157154

158155
// Append appends send and receive movements, and transaction records corresponding to the passed token request

token/services/auditdb/db/memory/memory.go

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

token/services/auditdb/db/sql/driver.go

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

token/services/certifier/driver.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,7 @@ package certifier
77

88
import (
99
"github.com/hyperledger-labs/fabric-token-sdk/token/services/certifier/driver"
10-
"github.com/hyperledger-labs/fabric-token-sdk/token/services/drivers"
10+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/utils/drivers"
1111
)
1212

13-
var holder = drivers.NewHolder[driver.Driver]()
14-
15-
func Register(name string, driver driver.Driver) { holder.Register(name, driver) }
16-
17-
func Drivers() []string { return holder.DriverNames() }
13+
var holder = drivers.NewHolder[string, driver.Driver]()

token/services/db/driver/driver.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
Copyright IBM Corp. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package driver
8+
9+
import (
10+
"github.com/hyperledger-labs/fabric-smart-client/platform/common/driver"
11+
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/sql/common"
12+
driver2 "github.com/hyperledger-labs/fabric-token-sdk/token/driver"
13+
)
14+
15+
type NamedDriver = driver.NamedDriver[Driver]
16+
17+
type Config interface {
18+
// ID identities the TMS this configuration refers to.
19+
ID() driver2.TMSID
20+
// IsSet checks to see if the key has been set in any of the data locations
21+
IsSet(key string) bool
22+
// UnmarshalKey takes a single key and unmarshals it into a struct.
23+
// The key must be relative to the TMS this configuration refers to.
24+
UnmarshalKey(key string, rawVal interface{}) error
25+
// GetString returns the value associated with the key as a string
26+
GetString(key string) string
27+
// GetBool returns the value associated with the key as a bool
28+
GetBool(key string) bool
29+
// TranslatePath translates the passed path relative to the config path
30+
TranslatePath(path string) string
31+
}
32+
33+
type Driver interface {
34+
NewTokenLock(opts common.Opts) (TokenLockDB, error)
35+
36+
NewWallet(opts common.Opts) (WalletDB, error)
37+
38+
NewIdentity(opts common.Opts) (IdentityDB, error)
39+
40+
NewToken(opts common.Opts) (TokenDB, error)
41+
42+
NewTokenNotifier(opts common.Opts) (TokenNotifier, error)
43+
44+
NewAuditTransaction(opts common.Opts) (AuditTransactionDB, error)
45+
46+
NewOwnerTransaction(opts common.Opts) (TokenTransactionDB, error)
47+
}

0 commit comments

Comments
 (0)