mirror of
https://github.com/vacp2p/mvds.git
synced 2026-01-08 19:48:03 -05:00
* protobuf * do not send ack when not required * remove from state if no ack required * different send modes * fix * updated * retransmit fix * updated * fixed * renamed to ephemeral * repeated * gen * resolution * cleanup * rough dependency code * todo * removed * only stores if ephemeral * started implementing the algo * simplified * updated * we never store ephemeral messages so we did not need * adds parents * new schema * tx to insert * err * removed old * fixed * changed log * test persistence of parents * removed * rename * ignoring * Update store/messagestore_sqlite.go Co-Authored-By: Adam Babik <adam@status.im> * Update node/node.go Co-Authored-By: Adam Babik <adam@status.im> * Update node/node.go Co-Authored-By: Adam Babik <adam@status.im> * Update node/node.go Co-Authored-By: Adam Babik <adam@status.im> * more fixes * Update store/messagestore_sqlite.go Co-Authored-By: Adam Babik <adam@status.im> * more fixes * using refs * Update node/node.go Co-Authored-By: Adam Babik <adam@status.im> * finished * Update store/messagestore_sqlite.go Co-Authored-By: Adam Babik <adam@status.im> * Update 1572372377_initial_schema.down.sql * desc + refactor * started refactoring resolution * Update README.md * rewrote resolve * mutex * todo * fixes * sql impl * added test * log * updates * updated * little bug * fix * added test * first changes from @adambabik * moved * fixed test, started eventual ones * fixed eventually test * mock install * consistent test * mock * fix lint * Update dependency/tracker_sqlite.go Co-Authored-By: Adam Babik <adam@status.im> * fix
72 lines
1.4 KiB
Go
72 lines
1.4 KiB
Go
package dependency
|
|
|
|
import (
|
|
"database/sql"
|
|
|
|
"github.com/vacp2p/mvds/state"
|
|
)
|
|
|
|
// Verify that Tracker interface is implemented.
|
|
var _ Tracker = (*sqliteTracker)(nil)
|
|
|
|
type sqliteTracker struct {
|
|
db *sql.DB
|
|
}
|
|
|
|
func NewPersistentTracker(db *sql.DB) *sqliteTracker {
|
|
return &sqliteTracker{db: db}
|
|
}
|
|
|
|
func (sd *sqliteTracker) Add(msg, dependency state.MessageID) error {
|
|
_, err := sd.db.Exec(`INSERT INTO mvds_dependencies (msg_id, dependency) VALUES (?, ?)`, msg[:], dependency[:])
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (sd *sqliteTracker) Dependants(id state.MessageID) ([]state.MessageID, error) {
|
|
rows, err := sd.db.Query(`SELECT msg_id FROM mvds_dependencies WHERE dependency = ?`, id[:])
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
var msgs []state.MessageID
|
|
|
|
for rows.Next() {
|
|
var msg []byte
|
|
err := rows.Scan(&msg)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
msgs = append(msgs, state.ToMessageID(msg))
|
|
}
|
|
|
|
return msgs, nil
|
|
}
|
|
|
|
func (sd *sqliteTracker) Resolve(msg state.MessageID, dependency state.MessageID) error {
|
|
_, err := sd.db.Exec(
|
|
`DELETE FROM mvds_dependencies WHERE msg_id = ? AND dependency = ?`,
|
|
msg[:],
|
|
dependency[:],
|
|
)
|
|
|
|
return err
|
|
}
|
|
|
|
func (sd *sqliteTracker) IsResolved(id state.MessageID) (bool, error) {
|
|
result := sd.db.QueryRow(`SELECT COUNT(*) FROM mvds_dependencies WHERE msg_id = ?`, id[:])
|
|
var num int64
|
|
err := result.Scan(&num)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
return num == 0, nil
|
|
}
|
|
|