Skip to content

Commit 8530753

Browse files
committed
complete persistence implementation
1 parent 65141eb commit 8530753

File tree

15 files changed

+773
-578
lines changed

15 files changed

+773
-578
lines changed

pkg/coordinator/coordinator.go

Lines changed: 40 additions & 543 deletions
Large diffs are not rendered by default.

pkg/coordinator/db/test_runs.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package db
22

33
import (
4+
"fmt"
5+
"strings"
6+
47
"github.com/jmoiron/sqlx"
58
)
69

@@ -72,3 +75,40 @@ func (db *Database) GetTestRunByRunID(runID int) (*TestRun, error) {
7275

7376
return &run, nil
7477
}
78+
79+
// GetTestRunRange returns a range of test runs.
80+
func (db *Database) GetTestRunRange(testID string, firstRunID, limit int) ([]*TestRun, error) {
81+
var runs []*TestRun
82+
83+
var sql strings.Builder
84+
85+
fmt.Fprint(&sql, `SELECT * FROM test_runs `)
86+
87+
args := []any{}
88+
whereGlue := "WHERE"
89+
90+
if testID != "" {
91+
fmt.Fprintf(&sql, `%v test_id = $%v `, whereGlue, len(args)+1)
92+
args = append(args, testID)
93+
whereGlue = "AND"
94+
}
95+
96+
if firstRunID > 0 {
97+
fmt.Fprintf(&sql, `%v run_id <= $%v `, whereGlue, len(args)+1)
98+
args = append(args, firstRunID)
99+
}
100+
101+
fmt.Fprintf(&sql, `ORDER BY run_id DESC `)
102+
103+
if limit > 0 {
104+
fmt.Fprintf(&sql, ` LIMIT $%v`, len(args)+1)
105+
args = append(args, limit)
106+
}
107+
108+
err := db.reader.Select(&runs, sql.String(), args...)
109+
if err != nil {
110+
return nil, err
111+
}
112+
113+
return runs, nil
114+
}

pkg/coordinator/test/dbtest.go

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package test
22

33
import (
44
"fmt"
5+
"sync"
56
"time"
67

78
"github.com/ethpandaops/assertoor/pkg/coordinator/db"
@@ -15,9 +16,11 @@ import (
1516
type dbTest struct {
1617
database *db.Database
1718

18-
runID int
19-
testRun *db.TestRun
20-
taskIndex []*db.TaskStateIndex
19+
runID int
20+
testRun *db.TestRun
21+
22+
taskIndexMtx sync.Mutex
23+
taskIndex []*db.TaskStateIndex
2124
}
2225

2326
func LoadTestFromDB(database *db.Database, runID int) (types.Test, error) {
@@ -27,19 +30,21 @@ func LoadTestFromDB(database *db.Database, runID int) (types.Test, error) {
2730
return nil, err
2831
}
2932

30-
taskIndex, err := database.GetTaskStateIndex(runID)
31-
if err != nil {
32-
return nil, err
33-
}
34-
3533
return &dbTest{
36-
database: database,
37-
runID: runID,
38-
testRun: testRun,
39-
taskIndex: taskIndex,
34+
database: database,
35+
runID: runID,
36+
testRun: testRun,
4037
}, nil
4138
}
4239

40+
func WrapDBTestRun(database *db.Database, test *db.TestRun) types.Test {
41+
return &dbTest{
42+
database: database,
43+
runID: test.RunID,
44+
testRun: test,
45+
}
46+
}
47+
4348
func (dbt *dbTest) RunID() uint64 {
4449
return uint64(dbt.runID)
4550
}
@@ -75,10 +80,29 @@ func (dbt *dbTest) GetTaskScheduler() types.TaskScheduler {
7580
func (dbt *dbTest) AbortTest(_ bool) {}
7681

7782
func (dbt *dbTest) GetTaskCount() int {
83+
dbt.loadTaskIndex()
7884
return len(dbt.taskIndex)
7985
}
8086

87+
func (dbt *dbTest) loadTaskIndex() {
88+
dbt.taskIndexMtx.Lock()
89+
defer dbt.taskIndexMtx.Unlock()
90+
91+
if dbt.taskIndex != nil {
92+
return
93+
}
94+
95+
taskIndex, err := dbt.database.GetTaskStateIndex(dbt.runID)
96+
if err != nil {
97+
return
98+
}
99+
100+
dbt.taskIndex = taskIndex
101+
}
102+
81103
func (dbt *dbTest) GetAllTasks() []types.TaskIndex {
104+
dbt.loadTaskIndex()
105+
82106
taskIDs := make([]types.TaskIndex, 0)
83107

84108
for _, task := range dbt.taskIndex {
@@ -93,6 +117,8 @@ func (dbt *dbTest) GetAllTasks() []types.TaskIndex {
93117
}
94118

95119
func (dbt *dbTest) GetRootTasks() []types.TaskIndex {
120+
dbt.loadTaskIndex()
121+
96122
taskIDs := make([]types.TaskIndex, 0)
97123

98124
for _, task := range dbt.taskIndex {
@@ -111,6 +137,8 @@ func (dbt *dbTest) GetRootTasks() []types.TaskIndex {
111137
}
112138

113139
func (dbt *dbTest) GetAllCleanupTasks() []types.TaskIndex {
140+
dbt.loadTaskIndex()
141+
114142
taskIDs := make([]types.TaskIndex, 0)
115143

116144
for _, task := range dbt.taskIndex {
@@ -125,6 +153,8 @@ func (dbt *dbTest) GetAllCleanupTasks() []types.TaskIndex {
125153
}
126154

127155
func (dbt *dbTest) GetRootCleanupTasks() []types.TaskIndex {
156+
dbt.loadTaskIndex()
157+
128158
taskIDs := make([]types.TaskIndex, 0)
129159

130160
for _, task := range dbt.taskIndex {

0 commit comments

Comments
 (0)