Skip to content
This repository was archived by the owner on Mar 28, 2023. It is now read-only.

Commit cd5c520

Browse files
committed
Extract db.MessagesStore.MarkAsResolved(repo.OrderMessage)
1 parent 62a6a88 commit cd5c520

File tree

5 files changed

+103
-6
lines changed

5 files changed

+103
-6
lines changed

core/inbound_message_scanner.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,13 +120,12 @@ func (scanner *inboundMessageScanner) PerformTask() {
120120
// Dispatch handler
121121
_, err = handler(*i, &msg.Msg, nil)
122122
if err != nil {
123-
log.Debugf("%d handle message error from %s: %s", m.MessageType, m.PeerID, err)
123+
log.Errorf("%d handle message error from %s: %s", m.MessageType, m.PeerID, err)
124124
continue
125125
}
126-
err = scanner.datastore.Messages().Put(m.MessageID, m.OrderID, pb.Message_MessageType(m.MessageType),
127-
m.PeerID, *msg, "", 0, m.PeerPubkey)
126+
err = scanner.datastore.Messages().MarkAsResolved(m)
128127
if err != nil {
129-
log.Errorf("err putting message : %v", err)
128+
log.Errorf("marking message resolved: %s", err)
130129
}
131130
}
132131
}

repo/datastore.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,4 +446,8 @@ type MessageStore interface {
446446

447447
// GetAllErrored returns the all messages with error
448448
GetAllErrored() ([]OrderMessage, error)
449+
450+
// MarkAsResolved sets the message as resolved and will no longer return
451+
// with GetAllErrored
452+
MarkAsResolved(OrderMessage) error
449453
}

repo/db/messages.go

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ func (o *MessagesDB) GetAllErrored() ([]repo.OrderMessage, error) {
8989
o.lock.Lock()
9090
defer o.lock.Unlock()
9191

92-
stmt := "select messageID, orderID, message_type, message, peerID, err, pubkey from messages where err!=? "
92+
stmt := `select messageID, orderID, message_type, message, peerID, err, pubkey from messages where err != ""`
9393
var ret []repo.OrderMessage
94-
rows, err := o.db.Query(stmt, "")
94+
rows, err := o.db.Query(stmt)
9595
if err != nil {
9696
return ret, err
9797
}
@@ -117,3 +117,24 @@ func (o *MessagesDB) GetAllErrored() ([]repo.OrderMessage, error) {
117117
}
118118
return ret, nil
119119
}
120+
121+
// MarkAsResolved sets a provided message as resolved
122+
func (o *MessagesDB) MarkAsResolved(m repo.OrderMessage) error {
123+
var (
124+
stmt = `update messages set err = "" where messageID == ?`
125+
msg = new(repo.Message)
126+
)
127+
128+
if len(m.Message) > 0 {
129+
err := msg.UnmarshalJSON(m.Message)
130+
if err != nil {
131+
log.Errorf("failed extracting message (%+v): %s", m, err.Error())
132+
return err
133+
}
134+
}
135+
_, err := o.db.Exec(stmt, m.MessageID)
136+
if err != nil {
137+
return fmt.Errorf("marking msg (%s) as resolved: %s", m.MessageID, err.Error())
138+
}
139+
return nil
140+
}

repo/db/messages_test.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/OpenBazaar/openbazaar-go/repo"
1313
"github.com/OpenBazaar/openbazaar-go/repo/db"
1414
"github.com/OpenBazaar/openbazaar-go/schema"
15+
"github.com/OpenBazaar/openbazaar-go/test/factory"
1516
)
1617

1718
func buildNewMessageStore() (repo.MessageStore, func(), error) {
@@ -72,3 +73,58 @@ func TestMessageDB_Put(t *testing.T) {
7273
t.Error("incorrect peerID")
7374
}
7475
}
76+
77+
func TestMessageDB_MarkAsResolved(t *testing.T) {
78+
var (
79+
messagesdb, teardown, err = buildNewMessageStore()
80+
orderID = "orderID1"
81+
unexpectedOrderID = "unexpectedOrderID2"
82+
msg = factory.NewMessageWithOrderPayload()
83+
peerID = "QmSomepeerid"
84+
recErr = "error message"
85+
)
86+
if err != nil {
87+
t.Fatal(err)
88+
}
89+
defer teardown()
90+
91+
err = messagesdb.Put(fmt.Sprintf("%s-%d", orderID, msg.Msg.MessageType), orderID, msg.Msg.MessageType, peerID, msg, recErr, 0, nil)
92+
if err != nil {
93+
t.Fatal(err)
94+
}
95+
96+
err = messagesdb.Put(fmt.Sprintf("%s-%d", unexpectedOrderID, msg.Msg.MessageType), unexpectedOrderID, msg.Msg.MessageType, peerID, msg, "", 0, nil)
97+
if err != nil {
98+
t.Fatal(err)
99+
}
100+
101+
erroredMsgs, err := messagesdb.GetAllErrored()
102+
if err != nil {
103+
t.Fatal(err)
104+
}
105+
106+
if len(erroredMsgs) != 1 {
107+
t.Errorf("expected one error message, but found (%d)", len(erroredMsgs))
108+
}
109+
110+
actual := erroredMsgs[0]
111+
if actual.PeerID != peerID {
112+
t.Errorf("expected peerID (%s), but found (%s)", peerID, actual.PeerID)
113+
}
114+
if actual.OrderID != orderID {
115+
t.Errorf("expected orderID (%s), but found (%s)", orderID, actual.OrderID)
116+
}
117+
118+
if err := messagesdb.MarkAsResolved(actual); err != nil {
119+
t.Fatal(err)
120+
}
121+
122+
erroredMsgs, err = messagesdb.GetAllErrored()
123+
if err != nil {
124+
t.Fatal(err)
125+
}
126+
127+
if len(erroredMsgs) != 0 {
128+
t.Errorf("expected no error messages, but found (%d)", len(erroredMsgs))
129+
}
130+
}

test/factory/message.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package factory
2+
3+
import (
4+
"github.com/OpenBazaar/openbazaar-go/pb"
5+
"github.com/OpenBazaar/openbazaar-go/repo"
6+
"github.com/golang/protobuf/ptypes/any"
7+
)
8+
9+
func NewMessageWithOrderPayload() repo.Message {
10+
payload := []byte("test payload")
11+
return repo.Message{
12+
Msg: pb.Message{
13+
MessageType: pb.Message_ORDER,
14+
Payload: &any.Any{Value: payload},
15+
},
16+
}
17+
}

0 commit comments

Comments
 (0)