Skip to content

Commit 18059a8

Browse files
committed
refactor: modularize messaging persistence
- make each messaging submodule define its own persistence interface and SQLite implementation reference - separate migration tables for messaging submodules - move migrations from protocol to relevant messaging submodules closes: #6792
1 parent 770ce11 commit 18059a8

File tree

83 files changed

+2823
-2579
lines changed

Some content is hidden

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

83 files changed

+2823
-2579
lines changed

appdatabase/database.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func (a DbInitializer) Initialize(path, password string, kdfIterationsNumber int
4444
}
4545

4646
func doMigration(db *sql.DB) error {
47-
lastMigration, migrationTableExists, err := sqlite.GetLastMigrationVersion(db)
47+
lastMigration, migrationTableExists, err := sqlite.GetLastMigrationVersion(db, sqlite.StatusMigrationTableName())
4848
if err != nil {
4949
return err
5050
}

cmd/push-notification-server/main.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,8 @@ func main() {
122122

123123
messaging, err := messaging.NewCore(
124124
messaging.CoreParams{
125-
Identity: privateKey,
126-
DB: db,
127-
Persistence: protocol.NewMessagingPersistence(db),
128-
NodeKey: nil,
125+
Identity: privateKey,
126+
NodeKey: nil,
129127
WakuConfig: params.WakuV2Config{
130128
Enabled: true,
131129
Host: "0.0.0.0",
@@ -144,6 +142,7 @@ func main() {
144142
TimeSource: timesource.DefaultService(),
145143
},
146144
messaging.WithLogger(logger.Named("messaging")),
145+
messaging.WithSQLitePersistence(db),
147146
)
148147
if err != nil {
149148
os.Exit(exitCodeCreateMessengerFailed)

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ require (
5252
github.com/status-im/doubleratchet v3.0.0+incompatible
5353
github.com/status-im/markdown v0.0.0-20250825083641-55c1df9bc05d
5454
github.com/status-im/migrate/v4 v4.6.2-status.3
55-
github.com/status-im/mvds v0.0.27-0.20241031073756-b192c603a75d
55+
github.com/status-im/mvds v0.0.27-0.20251022120125-7bdc695d49c4
5656
github.com/status-im/zxcvbn-go v0.0.0-20220311183720-5e8676676857
5757
github.com/stretchr/testify v1.10.0
5858
github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect
@@ -83,6 +83,7 @@ require (
8383
github.com/btcsuite/btcd/btcutil v1.1.6
8484
github.com/cenkalti/backoff/v4 v4.2.1
8585
github.com/getsentry/sentry-go v0.29.1
86+
github.com/golang-migrate/migrate/v4 v4.15.2
8687
github.com/gorilla/sessions v1.2.1
8788
github.com/gorilla/websocket v1.5.3
8889
github.com/ipfs/go-log/v2 v2.5.1
@@ -182,7 +183,6 @@ require (
182183
github.com/gofrs/flock v0.12.1 // indirect
183184
github.com/gogo/protobuf v1.3.2 // indirect
184185
github.com/golang-jwt/jwt/v4 v4.5.2 // indirect
185-
github.com/golang-migrate/migrate/v4 v4.15.2 // indirect
186186
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
187187
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
188188
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2104,8 +2104,8 @@ github.com/status-im/markdown v0.0.0-20250825083641-55c1df9bc05d h1:0jQiaymp0t7X
21042104
github.com/status-im/markdown v0.0.0-20250825083641-55c1df9bc05d/go.mod h1:i31M0FhtYMUeAzWqJafla0Q4+LCGJyorLRCH3EorAWQ=
21052105
github.com/status-im/migrate/v4 v4.6.2-status.3 h1:Khwjb59NzniloUr5i9s9AtkEyqBbQFt1lkoAu66sAu0=
21062106
github.com/status-im/migrate/v4 v4.6.2-status.3/go.mod h1:c/kc90n47GZu/58nnz1OMLTf7uE4Da4gZP5qmU+A/v8=
2107-
github.com/status-im/mvds v0.0.27-0.20241031073756-b192c603a75d h1:+eBm+aBGFgXsJi6wDdEo6ASLd78kPN3vcKtnXQXn240=
2108-
github.com/status-im/mvds v0.0.27-0.20241031073756-b192c603a75d/go.mod h1:2fiAx0q9XYIPKYRq2B1oiO9zZESy/n4D32gWw6lMDsE=
2107+
github.com/status-im/mvds v0.0.27-0.20251022120125-7bdc695d49c4 h1:NrTkZgbgEu7hOJ2Ku4P1yj9boRzdpMs7OlZREBy6MyE=
2108+
github.com/status-im/mvds v0.0.27-0.20251022120125-7bdc695d49c4/go.mod h1:2fiAx0q9XYIPKYRq2B1oiO9zZESy/n4D32gWw6lMDsE=
21092109
github.com/status-im/notify v1.0.2-status/go.mod h1:gF3zSOrafR9DQEWSE8TjfI9NkooDxbyT4UgRGKZA0lc=
21102110
github.com/status-im/zxcvbn-go v0.0.0-20220311183720-5e8676676857 h1:sPkzT7Z7uLmejOsBRlZ0kwDWpqjpHJsp834o5nbhqho=
21112111
github.com/status-im/zxcvbn-go v0.0.0-20220311183720-5e8676676857/go.mod h1:lq9I5ROto5tcua65GmCE6SIW7VE0ucdEBs1fn4z7uWU=

messaging/adapters/persistence.go

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

messaging/api.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"github.com/ethereum/go-ethereum/p2p/enode"
1717

1818
"github.com/status-im/status-go/connection"
19+
cryptotypes "github.com/status-im/status-go/crypto/types"
1920
ethtypes "github.com/status-im/status-go/eth-node/types"
2021
"github.com/status-im/status-go/messaging/adapters"
2122
"github.com/status-im/status-go/messaging/common"
@@ -127,7 +128,11 @@ func (a *API) HandleSharedSecrets(secrets []*types.SharedSecret) error {
127128
}
128129

129130
func (a *API) JoinPublicChat(chatID string) (*types.ChatFilter, error) {
130-
return a.core.sender.JoinPublic(chatID)
131+
f, err := a.core.sender.JoinPublic(chatID)
132+
if err != nil {
133+
return nil, err
134+
}
135+
return adapters.FromTransportFilter(f), nil
131136
}
132137

133138
func (a *API) JoinPrivateChat(publicKey *ecdsa.PublicKey) (*types.ChatFilter, error) {
@@ -195,7 +200,7 @@ func (a *API) GetCurrentKeyForGroup(groupID []byte) (*encryption.HashRatchetKeyC
195200
}
196201

197202
func (a *API) SaveHashRatchetMessage(groupID []byte, keyID []byte, m *types.ReceivedMessage) error {
198-
return a.core.persistence.SaveHashRatchetMessage(groupID, keyID, m)
203+
return a.core.sender.SaveHashRatchetMessage(groupID, keyID, m)
199204
}
200205

201206
func (a *API) SendPubsubTopicKey(ctx context.Context, rawMessage *types.RawMessage) ([]byte, error) {
@@ -468,6 +473,10 @@ func (a *API) Metrics() string {
468473
return a.core.metrics()
469474
}
470475

476+
func (a *API) MarkAsConfirmed(dataSyncID []byte, atLeastOne bool) (messageID cryptotypes.HexBytes, err error) {
477+
return a.core.sender.MarkAsConfirmed(dataSyncID, atLeastOne)
478+
}
479+
471480
func ToContentTopic(s string) []byte {
472481
return transport.ToTopic(s)
473482
}

messaging/common/message_segmentation.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -165,20 +165,20 @@ func (s *MessageSender) handleSegmentationLayer(message *types.Message) error {
165165
zap.Uint32("ParitySegmentIndex", segmentMessage.ParitySegmentIndex),
166166
zap.Uint32("ParitySegmentsCount", segmentMessage.ParitySegmentsCount))
167167

168-
alreadyCompleted, err := s.persistence.IsMessageAlreadyCompleted(segmentMessage.EntireMessageHash)
168+
alreadyCompleted, err := s.segmentationPersistence.IsMessageAlreadyCompleted(segmentMessage.EntireMessageHash)
169169
if err != nil {
170170
return err
171171
}
172172
if alreadyCompleted {
173173
return ErrMessageSegmentsAlreadyCompleted
174174
}
175175

176-
err = s.persistence.SaveMessageSegment(segmentMessage, message.TransportLayer.SigPubKey, time.Now().Unix())
176+
err = s.segmentationPersistence.SaveMessageSegment(segmentMessage, message.TransportLayer.SigPubKey, time.Now().Unix())
177177
if err != nil {
178178
return err
179179
}
180180

181-
segments, err := s.persistence.GetMessageSegments(segmentMessage.EntireMessageHash, message.TransportLayer.SigPubKey)
181+
segments, err := s.segmentationPersistence.GetMessageSegments(segmentMessage.EntireMessageHash, message.TransportLayer.SigPubKey)
182182
if err != nil {
183183
return err
184184
}
@@ -258,7 +258,7 @@ func (s *MessageSender) handleSegmentationLayer(message *types.Message) error {
258258
return ErrMessageSegmentsHashMismatch
259259
}
260260

261-
err = s.persistence.CompleteMessageSegments(segmentMessage.EntireMessageHash, message.TransportLayer.SigPubKey, time.Now().Unix())
261+
err = s.segmentationPersistence.CompleteMessageSegments(segmentMessage.EntireMessageHash, message.TransportLayer.SigPubKey, time.Now().Unix())
262262
if err != nil {
263263
return err
264264
}
@@ -271,12 +271,12 @@ func (s *MessageSender) handleSegmentationLayer(message *types.Message) error {
271271
func (s *MessageSender) CleanupSegments() error {
272272
monthAgo := time.Now().AddDate(0, -1, 0).Unix()
273273

274-
err := s.persistence.RemoveMessageSegmentsOlderThan(monthAgo)
274+
err := s.segmentationPersistence.RemoveMessageSegmentsOlderThan(monthAgo)
275275
if err != nil {
276276
return err
277277
}
278278

279-
err = s.persistence.RemoveMessageSegmentsCompletedOlderThan(monthAgo)
279+
err = s.segmentationPersistence.RemoveMessageSegmentsCompletedOlderThan(monthAgo)
280280
if err != nil {
281281
return err
282282
}

messaging/common/message_segmentation_test.go

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@ import (
66
"testing"
77

88
"github.com/golang/protobuf/proto"
9+
bindata "github.com/status-im/migrate/v4/source/go_bindata"
910
"github.com/stretchr/testify/suite"
1011
"go.uber.org/zap"
1112

12-
"github.com/status-im/status-go/appdatabase"
1313
"github.com/status-im/status-go/crypto"
14+
"github.com/status-im/status-go/messaging/layers/segmentation"
15+
segmentationmigrations "github.com/status-im/status-go/messaging/layers/segmentation/migrations"
1416
"github.com/status-im/status-go/messaging/types"
1517
wakutypes "github.com/status-im/status-go/messaging/waku/types"
1618
"github.com/status-im/status-go/protocol/protobuf"
17-
"github.com/status-im/status-go/protocol/sqlite"
1819
"github.com/status-im/status-go/t/helpers"
1920
)
2021

@@ -41,18 +42,22 @@ func (s *MessageSegmentationSuite) SetupTest() {
4142
identity, err := crypto.GenerateKey()
4243
s.Require().NoError(err)
4344

44-
database, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
45-
s.Require().NoError(err)
46-
err = sqlite.Migrate(database)
45+
s.logger, err = zap.NewDevelopment()
4746
s.Require().NoError(err)
4847

49-
s.logger, err = zap.NewDevelopment()
48+
db, err := helpers.SetupTestMemorySQLDB(helpers.NewTestDBInitializer([]*bindata.AssetSource{
49+
{
50+
Names: segmentationmigrations.AssetNames(),
51+
AssetFunc: segmentationmigrations.Asset,
52+
},
53+
}))
5054
s.Require().NoError(err)
5155

5256
s.sender, err = NewMessageSender(
5357
identity,
54-
database,
55-
NewStubPersistence(),
58+
nil,
59+
nil,
60+
segmentation.NewSQLitePersistence(db),
5661
nil,
5762
nil,
5863
s.logger,

0 commit comments

Comments
 (0)