Skip to content

Commit 9d64c9f

Browse files
Removed pq dependencies
Signed-off-by: Alexandros Filios <alexandros.filios@ibm.com>
1 parent 0b5f3c9 commit 9d64c9f

File tree

10 files changed

+91
-100
lines changed

10 files changed

+91
-100
lines changed

go.mod

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ require (
3030
github.com/hyperledger/fabric-contract-api-go v1.2.2
3131
github.com/hyperledger/fabric-lib-go v1.1.2
3232
github.com/hyperledger/fabric-protos-go v0.3.3
33-
github.com/jackc/pgx/v5 v5.6.0
33+
github.com/jackc/pgx/v5 v5.7.1
34+
github.com/jackc/pgxlisten v0.0.0-20241106001234-1d6f6656415c
3435
github.com/jellydator/ttlcache/v2 v2.11.1
35-
github.com/lib/pq v1.10.9
3636
github.com/libp2p/go-libp2p v0.36.1
3737
github.com/libp2p/go-libp2p-kad-dht v0.25.2
3838
github.com/miekg/pkcs11 v1.1.1
@@ -190,8 +190,8 @@ require (
190190
github.com/ipfs/go-log/v2 v2.5.1 // indirect
191191
github.com/ipld/go-ipld-prime v0.21.0 // indirect
192192
github.com/jackc/pgpassfile v1.0.0 // indirect
193-
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
194-
github.com/jackc/puddle/v2 v2.2.1 // indirect
193+
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
194+
github.com/jackc/puddle/v2 v2.2.2 // indirect
195195
github.com/jackpal/go-nat-pmp v1.0.2 // indirect
196196
github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect
197197
github.com/jbenet/goprocess v0.1.4 // indirect
@@ -289,11 +289,11 @@ require (
289289
go.uber.org/mock v0.4.0 // indirect
290290
go.uber.org/multierr v1.11.0 // indirect
291291
golang.org/x/arch v0.8.0 // indirect
292-
golang.org/x/crypto v0.26.0 // indirect
292+
golang.org/x/crypto v0.28.0 // indirect
293293
golang.org/x/mod v0.20.0 // indirect
294294
golang.org/x/oauth2 v0.22.0 // indirect
295-
golang.org/x/sys v0.24.0 // indirect
296-
golang.org/x/text v0.17.0 // indirect
295+
golang.org/x/sys v0.26.0 // indirect
296+
golang.org/x/text v0.19.0 // indirect
297297
golang.org/x/time v0.5.0 // indirect
298298
golang.org/x/tools v0.24.0 // indirect
299299
gonum.org/v1/gonum v0.15.0 // indirect

go.sum

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1211,12 +1211,14 @@ github.com/ipld/go-ipld-prime v0.21.0 h1:n4JmcpOlPDIxBcY037SVfpd1G+Sj1nKZah0m6QH
12111211
github.com/ipld/go-ipld-prime v0.21.0/go.mod h1:3RLqy//ERg/y5oShXXdx5YIp50cFGOanyMctpPjsvxQ=
12121212
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
12131213
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
1214-
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
1215-
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
1216-
github.com/jackc/pgx/v5 v5.6.0 h1:SWJzexBzPL5jb0GEsrPMLIsi/3jOo7RHlzTjcAeDrPY=
1217-
github.com/jackc/pgx/v5 v5.6.0/go.mod h1:DNZ/vlrUnhWCoFGxHAG8U2ljioxukquj7utPDgtQdTw=
1218-
github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
1219-
github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
1214+
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo=
1215+
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
1216+
github.com/jackc/pgx/v5 v5.7.1 h1:x7SYsPBYDkHDksogeSmZZ5xzThcTgRz++I5E+ePFUcs=
1217+
github.com/jackc/pgx/v5 v5.7.1/go.mod h1:e7O26IywZZ+naJtWWos6i6fvWK+29etgITqrqHLfoZA=
1218+
github.com/jackc/pgxlisten v0.0.0-20241106001234-1d6f6656415c h1:bTgmg761ac9Ki27HoLx8IBvc+T+Qj6eptBpKahKIRT4=
1219+
github.com/jackc/pgxlisten v0.0.0-20241106001234-1d6f6656415c/go.mod h1:N4E1APLOYrbM11HH5kdqAjDa8RJWVwD3JqWpvH22h64=
1220+
github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo=
1221+
github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
12201222
github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
12211223
github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc=
12221224
github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA=
@@ -1298,8 +1300,6 @@ github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2
12981300
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
12991301
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
13001302
github.com/lib/pq v0.0.0-20180201184707-88edab080323/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
1301-
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
1302-
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
13031303
github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8=
13041304
github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg=
13051305
github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c=
@@ -1920,8 +1920,8 @@ golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw
19201920
golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE=
19211921
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
19221922
golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
1923-
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
1924-
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
1923+
golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw=
1924+
golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
19251925
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
19261926
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
19271927
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -2233,8 +2233,8 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
22332233
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
22342234
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
22352235
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
2236-
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
2237-
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
2236+
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
2237+
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
22382238
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
22392239
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
22402240
golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -2248,8 +2248,8 @@ golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
22482248
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
22492249
golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
22502250
golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
2251-
golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
2252-
golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
2251+
golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24=
2252+
golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M=
22532253
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
22542254
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
22552255
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -2268,8 +2268,8 @@ golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
22682268
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
22692269
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
22702270
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
2271-
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
2272-
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
2271+
golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
2272+
golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
22732273
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
22742274
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
22752275
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=

integration/nwo/fsc/node/node_template.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@ package main
1616
1717
import (
1818
fscnode "github.com/hyperledger-labs/fabric-smart-client/node"
19-
{{- if InstallPostgres }}
20-
_ "github.com/lib/pq"
21-
{{ end }}
2219
2320
{{ if InstallView }}viewregistry "github.com/hyperledger-labs/fabric-smart-client/platform/view"{{ end }}
2421
{{- range .Imports }}

platform/view/services/db/driver/sql/common/test_utils.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ import (
1111

1212
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/dbtest"
1313
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver"
14-
_ "github.com/lib/pq"
15-
_ "modernc.org/sqlite"
1614
)
1715

1816
type provider[V any] func(name string) (V, error)

platform/view/services/db/driver/sql/postgres/errormapper.go

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,29 @@ SPDX-License-Identifier: Apache-2.0
77
package postgres
88

99
import (
10+
errors2 "errors"
11+
1012
"github.com/hyperledger-labs/fabric-smart-client/pkg/utils/errors"
1113
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver"
12-
"github.com/lib/pq"
14+
"github.com/jackc/pgx/v5/pgconn"
1315
)
1416

1517
type errorMapper struct{}
1618

1719
func (m *errorMapper) WrapError(err error) error {
18-
if err, ok := err.(*pq.Error); ok {
19-
switch err.Code {
20-
case "23505":
21-
return errors.Wrapf(driver.UniqueKeyViolation, err.Error())
22-
case "40P01":
23-
return errors.Wrapf(driver.DeadlockDetected, err.Error())
24-
default:
25-
logger.Warnf("Unmapped postgres error with code [%s]", err.Code)
26-
}
20+
var pgErr *pgconn.PgError
21+
if !errors2.As(err, &pgErr) {
22+
logger.Warnf("Error of type [%T] not pgError", err)
23+
return err
24+
}
25+
26+
switch pgErr.Code {
27+
case "23505":
28+
return errors.Wrapf(driver.UniqueKeyViolation, err.Error())
29+
case "40P01":
30+
return errors.Wrapf(driver.DeadlockDetected, err.Error())
31+
default:
32+
logger.Warnf("Unmapped postgres error with code [%s]", pgErr)
33+
return pgErr
2734
}
28-
return err
2935
}

platform/view/services/db/driver/sql/postgres/notifier.go

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

99
import (
10+
"context"
1011
"database/sql"
1112
"fmt"
1213
"strconv"
@@ -18,7 +19,9 @@ import (
1819
"github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/collections"
1920
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver"
2021
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/sql/common"
21-
"github.com/lib/pq"
22+
"github.com/jackc/pgx/v5"
23+
"github.com/jackc/pgx/v5/pgconn"
24+
"github.com/jackc/pgxlisten"
2225
"github.com/pkg/errors"
2326
)
2427

@@ -28,10 +31,9 @@ type Notifier struct {
2831
table string
2932
notifyOperations []driver.Operation
3033
writeDB *sql.DB
31-
listener *pq.Listener
34+
listener *pgxlisten.Listener
3235
primaryKeys []driver.ColumnKey
33-
listeners []driver.TriggerCallback
34-
mutex sync.RWMutex
36+
once sync.Once
3537
}
3638

3739
var operationMap = map[string]driver.Operation{
@@ -41,54 +43,48 @@ var operationMap = map[string]driver.Operation{
4143
}
4244

4345
const (
44-
payloadConcatenator = "&"
45-
keySeparator = "_"
46-
minReconnectInterval = 10 * time.Second
47-
maxReconnectInterval = 1 * time.Minute
46+
payloadConcatenator = "&"
47+
keySeparator = "_"
48+
reconnectInterval = 10 * time.Second
4849
)
4950

5051
func NewNotifier(writeDB *sql.DB, table, dataSource string, notifyOperations []driver.Operation, primaryKeys ...driver.ColumnKey) *Notifier {
51-
d := &Notifier{
52+
return &Notifier{
5253
writeDB: writeDB,
5354
table: table,
5455
notifyOperations: notifyOperations,
55-
listener: pq.NewListener(dataSource, minReconnectInterval, maxReconnectInterval, func(event pq.ListenerEventType, err error) {
56-
switch event {
57-
case pq.ListenerEventConnected:
58-
logger.Infof("Listener connected")
59-
case pq.ListenerEventDisconnected:
60-
logger.Infof("Listener disconnected")
61-
default:
62-
logger.Warnf("Unexpected event: [%v]: %v", event, err)
63-
}
64-
}),
65-
listeners: []driver.TriggerCallback{},
56+
listener: &pgxlisten.Listener{
57+
Connect: func(ctx context.Context) (*pgx.Conn, error) { return pgx.Connect(ctx, dataSource) },
58+
LogError: func(ctx context.Context, err error) {
59+
logger.Errorf("error encountered in [%s]: %v", dataSource, err)
60+
},
61+
ReconnectDelay: reconnectInterval,
62+
},
6663
primaryKeys: primaryKeys,
6764
}
68-
go d.listenForEvents()
69-
return d
7065
}
7166

72-
func (db *Notifier) listenForEvents() {
73-
for event := range db.listener.Notify {
74-
if event == nil {
75-
logger.Warnf("nil event received on table [%s], investigate the possible cause", db.table)
76-
continue
77-
}
78-
logger.Debugf("new event received on table [%s]: %s", event.Channel, event.Extra)
79-
db.mutex.RLock()
80-
for _, cb := range db.listeners {
81-
if operation, payload, err := db.parsePayload(event.Extra); err != nil {
82-
logger.Warnf("Unexpected parsing error: %v", err)
83-
} else {
84-
cb(operation, payload)
67+
func (db *Notifier) Subscribe(callback driver.TriggerCallback) error {
68+
db.once.Do(func() {
69+
logger.Infof("First subscription for notifier of [%s]. Notifier starts listening...", db.table)
70+
go func() {
71+
if err := db.listener.Listen(context.TODO()); err != nil {
72+
logger.Errorf("Notifier listen for [%s] failed: %v", db.table, err)
8573
}
86-
}
87-
db.mutex.RUnlock()
88-
}
74+
}()
75+
})
76+
77+
db.listener.Handle(db.table, &notificationHandler{table: db.table, primaryKeys: db.primaryKeys, callback: callback})
78+
return nil
8979
}
9080

91-
func (db *Notifier) parsePayload(s string) (driver.Operation, map[driver.ColumnKey]string, error) {
81+
type notificationHandler struct {
82+
table string
83+
primaryKeys []driver.ColumnKey
84+
callback driver.TriggerCallback
85+
}
86+
87+
func (h *notificationHandler) parsePayload(s string) (driver.Operation, map[driver.ColumnKey]string, error) {
9288
items := strings.Split(s, payloadConcatenator)
9389
if len(items) != 2 {
9490
return driver.Unknown, nil, errors.Errorf("malformed payload: length %d instead of 2: %s", len(items), s)
@@ -97,34 +93,35 @@ func (db *Notifier) parsePayload(s string) (driver.Operation, map[driver.ColumnK
9793
if operation == driver.Unknown {
9894
return driver.Unknown, nil, errors.Errorf("malformed operation [%v]: %s", operation, s)
9995
}
100-
if len(values) != len(db.primaryKeys) {
101-
return driver.Unknown, nil, errors.Errorf("expected %d keys, but got %d: %s", len(db.primaryKeys), len(values), s)
96+
if len(values) != len(h.primaryKeys) {
97+
return driver.Unknown, nil, errors.Errorf("expected %d keys, but got %d: %s", len(h.primaryKeys), len(values), s)
10298
}
10399
payload := make(map[driver.ColumnKey]string)
104-
for i, key := range db.primaryKeys {
100+
for i, key := range h.primaryKeys {
105101
value := values[i]
106102
payload[key] = value
107103
}
108104
return operation, payload, nil
109105
}
110106

111-
func (db *Notifier) Subscribe(callback driver.TriggerCallback) error {
112-
db.mutex.Lock()
113-
defer db.mutex.Unlock()
114-
if len(db.listeners) == 0 {
115-
if err := db.listener.Listen(db.table); err != nil {
116-
return errors.Wrapf(err, "failed to listen for table %s", db.table)
117-
}
107+
func (h *notificationHandler) HandleNotification(_ context.Context, notification *pgconn.Notification, _ *pgx.Conn) error {
108+
if notification == nil || len(notification.Payload) == 0 {
109+
logger.Warnf("nil event received on table [%s], investigate the possible cause", h.table)
110+
return nil
111+
}
112+
logger.Debugf("new event received on table [%s]: %s", notification.Channel, notification.Payload)
113+
op, vals, err := h.parsePayload(notification.Payload)
114+
if err != nil {
115+
logger.Errorf("Failed parsing payload [%s]: %v", notification.Payload, err)
116+
return errors.Wrapf(err, "failed parsing payload [%s]", notification.Payload)
118117
}
119-
db.listeners = append(db.listeners, callback)
118+
h.callback(op, vals)
120119
return nil
121120
}
122121

123122
func (db *Notifier) UnsubscribeAll() error {
124-
db.mutex.Lock()
125-
defer db.mutex.Unlock()
126-
db.listeners = []driver.TriggerCallback{}
127-
return db.listener.Unlisten(db.table)
123+
logger.Infof("Unsubscribe called")
124+
return nil
128125
}
129126

130127
func (db *Notifier) GetSchema() string {

platform/view/services/db/driver/sql/postgres/persistence.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212

1313
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/flogging"
1414
_ "github.com/jackc/pgx/v5/stdlib"
15-
_ "github.com/lib/pq"
1615
)
1716

1817
var logger = flogging.MustGetLogger("view-sdk.db.postgres")

platform/view/services/db/driver/sql/postgres/sql_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ import (
1212

1313
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver"
1414
common2 "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/sql/common"
15-
_ "github.com/lib/pq"
16-
_ "modernc.org/sqlite"
1715
)
1816

1917
func TestPostgres(t *testing.T) {

platform/view/services/db/driver/sql/postgres/test_utils.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ import (
2727
"github.com/docker/go-connections/nat"
2828
"github.com/hashicorp/consul/sdk/freeport"
2929
"github.com/hyperledger-labs/fabric-smart-client/integration/nwo/common/docker"
30-
_ "github.com/lib/pq"
31-
_ "modernc.org/sqlite"
3230
)
3331

3432
type Logger interface {

platform/view/services/db/driver/sql/sqlite/sql_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@ import (
1111

1212
"github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver"
1313
common2 "github.com/hyperledger-labs/fabric-smart-client/platform/view/services/db/driver/sql/common"
14-
_ "github.com/lib/pq"
1514
"github.com/stretchr/testify/assert"
16-
_ "modernc.org/sqlite"
1715
)
1816

1917
func TestSqlite(t *testing.T) {

0 commit comments

Comments
 (0)