Skip to content

Commit 25ba1d4

Browse files
committed
sqlite autovacuum and busy_timeout
1 parent 75cee6e commit 25ba1d4

File tree

5 files changed

+88
-19
lines changed

5 files changed

+88
-19
lines changed

cmd/crawler/api.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@ var (
2121
Usage: "API server for the crawler",
2222
Action: startAPI,
2323
Flags: []cli.Flag{
24-
&crawlerDBFlag,
2524
&apiDBFlag,
25+
&autovacuumFlag,
26+
&busyTimeoutFlag,
27+
&crawlerDBFlag,
2628
&dropNodesTimeFlag,
2729
},
2830
}
@@ -44,7 +46,14 @@ var (
4446
)
4547

4648
func startAPI(ctx *cli.Context) error {
47-
crawlerDB, err := sql.Open("sqlite", ctx.String(crawlerDBFlag.Name))
49+
autovacuum := ctx.String(autovacuumFlag.Name)
50+
busyTimeout := ctx.Uint64(busyTimeoutFlag.Name)
51+
52+
crawlerDB, err := openSQLiteDB(
53+
ctx.String(crawlerDBFlag.Name),
54+
autovacuum,
55+
busyTimeout,
56+
)
4857
if err != nil {
4958
return err
5059
}
@@ -54,7 +63,11 @@ func startAPI(ctx *cli.Context) error {
5463
if _, err := os.Stat(apiDBPath); os.IsNotExist(err) {
5564
shouldInit = true
5665
}
57-
nodeDB, err := sql.Open("sqlite", apiDBPath)
66+
nodeDB, err := openSQLiteDB(
67+
apiDBPath,
68+
autovacuum,
69+
busyTimeout,
70+
)
5871
if err != nil {
5972
return err
6073
}

cmd/crawler/crawlercmd.go

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,21 @@ var (
4242
Usage: "Crawl the ethereum network",
4343
Action: crawlNodes,
4444
Flags: []cli.Flag{
45-
utils.GoerliFlag,
46-
utils.SepoliaFlag,
47-
utils.NetworkIdFlag,
45+
&autovacuumFlag,
4846
&bootnodesFlag,
49-
&nodeURLFlag,
50-
&nodeFileFlag,
51-
&timeoutFlag,
47+
&busyTimeoutFlag,
5248
&crawlerDBFlag,
49+
&geoipdbFlag,
5350
&listenAddrFlag,
54-
&nodekeyFlag,
51+
&nodeFileFlag,
52+
&nodeURLFlag,
5553
&nodedbFlag,
56-
&geoipdbFlag,
54+
&nodekeyFlag,
55+
&timeoutFlag,
5756
&workersFlag,
57+
utils.GoerliFlag,
58+
utils.NetworkIdFlag,
59+
utils.SepoliaFlag,
5860
},
5961
}
6062
bootnodesFlag = cli.StringSliceFlag{
@@ -118,7 +120,13 @@ func crawlNodes(ctx *cli.Context) error {
118120
shouldInit = true
119121
}
120122
var err error
121-
if db, err = sql.Open("sqlite", name); err != nil {
123+
124+
db, err = openSQLiteDB(
125+
name,
126+
ctx.String(autovacuumFlag.Name),
127+
ctx.Uint64(busyTimeoutFlag.Name),
128+
)
129+
if err != nil {
122130
panic(err)
123131
}
124132
log.Info("Connected to db")

cmd/crawler/flags.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package main
2+
3+
import (
4+
"github.com/urfave/cli/v2"
5+
)
6+
7+
var (
8+
autovacuumFlag = cli.StringFlag{
9+
Name: "autovacuum",
10+
Usage: ("Sets the autovacuum value for the databases. Possible values: " +
11+
"NONE, FULL, or INCREMENTAL. " +
12+
"https://www.sqlite.org/pragma.html#pragma_auto_vacuum"),
13+
Value: "INCREMENTAL",
14+
}
15+
busyTimeoutFlag = cli.Uint64Flag{
16+
Name: "busy-timeout",
17+
Usage: ("Sets the busy_timeout value for the database in milliseconds. " +
18+
"https://www.sqlite.org/pragma.html#pragma_busy_timeout"),
19+
Value: 3000,
20+
}
21+
)

cmd/crawler/setup.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,18 +77,18 @@ var (
7777

7878
// Flags holds all command-line flags required for debugging.
7979
var Flags = []cli.Flag{
80-
&verbosityFlag,
81-
&vmoduleFlag,
82-
&logjsonFlag,
8380
&backtraceAtFlag,
81+
&blockprofilerateFlag,
82+
&cpuprofileFlag,
8483
&debugFlag,
85-
&pprofFlag,
84+
&logjsonFlag,
85+
&memprofilerateFlag,
8686
&pprofAddrFlag,
87+
&pprofFlag,
8788
&pprofPortFlag,
88-
&memprofilerateFlag,
89-
&blockprofilerateFlag,
90-
&cpuprofileFlag,
9189
&traceFlag,
90+
&verbosityFlag,
91+
&vmoduleFlag,
9292
}
9393

9494
var glogger *log.GlogHandler

cmd/crawler/utils.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package main
2+
3+
import (
4+
"database/sql"
5+
"fmt"
6+
)
7+
8+
func openSQLiteDB(
9+
name,
10+
autovacuum string,
11+
busyTimeout uint64,
12+
) (*sql.DB, error) {
13+
db, err := sql.Open("sqlite", name)
14+
if err != nil {
15+
return nil, fmt.Errorf("error opening database: %w", err)
16+
}
17+
_, err = db.Exec("PRAGMA auto_vacuum = " + autovacuum)
18+
if err != nil {
19+
return nil, fmt.Errorf("error setting auto_vacuum: %w", err)
20+
}
21+
_, err = db.Exec(fmt.Sprintf("PRAGMA busy_timeout = %d", busyTimeout))
22+
if err != nil {
23+
return nil, fmt.Errorf("error setting busy_timeout: %w", err)
24+
}
25+
26+
return db, nil
27+
}

0 commit comments

Comments
 (0)