@@ -326,7 +326,7 @@ func (db *DB) Close(ctx context.Context) (err error) {
326
326
327
327
// init initializes the connection to the database.
328
328
// Skipped if already initialized or if the database file does not exist.
329
- func (db * DB ) init () (err error ) {
329
+ func (db * DB ) init (ctx context. Context ) (err error ) {
330
330
// Exit if already initialized.
331
331
if db .db != nil {
332
332
return nil
@@ -382,7 +382,7 @@ func (db *DB) init() (err error) {
382
382
}
383
383
384
384
// Disable autocheckpoint for litestream's connection.
385
- if _ , err := db .db .ExecContext (db . ctx , `PRAGMA wal_autocheckpoint = 0;` ); err != nil {
385
+ if _ , err := db .db .ExecContext (ctx , `PRAGMA wal_autocheckpoint = 0;` ); err != nil {
386
386
return fmt .Errorf ("disable autocheckpoint: %w" , err )
387
387
}
388
388
@@ -400,7 +400,7 @@ func (db *DB) init() (err error) {
400
400
401
401
// Start a long-running read transaction to prevent other transactions
402
402
// from checkpointing.
403
- if err := db .acquireReadLock (); err != nil {
403
+ if err := db .acquireReadLock (ctx ); err != nil {
404
404
return fmt .Errorf ("acquire read lock: %w" , err )
405
405
}
406
406
@@ -479,7 +479,7 @@ func (db *DB) verifyHeadersMatch() error {
479
479
*/
480
480
481
481
// acquireReadLock begins a read transaction on the database to prevent checkpointing.
482
- func (db * DB ) acquireReadLock () error {
482
+ func (db * DB ) acquireReadLock (ctx context. Context ) error {
483
483
if db .rtx != nil {
484
484
return nil
485
485
}
@@ -491,7 +491,7 @@ func (db *DB) acquireReadLock() error {
491
491
}
492
492
493
493
// Execute read query to obtain read lock.
494
- if _ , err := tx .ExecContext (db . ctx , `SELECT COUNT(1) FROM _litestream_seq;` ); err != nil {
494
+ if _ , err := tx .ExecContext (ctx , `SELECT COUNT(1) FROM _litestream_seq;` ); err != nil {
495
495
_ = tx .Rollback ()
496
496
return err
497
497
}
@@ -520,7 +520,7 @@ func (db *DB) Sync(ctx context.Context) (err error) {
520
520
defer db .mu .Unlock ()
521
521
522
522
// Initialize database, if necessary. Exit if no DB exists.
523
- if err := db .init (); err != nil {
523
+ if err := db .init (ctx ); err != nil {
524
524
return err
525
525
} else if db .db == nil {
526
526
db .Logger .Debug ("sync: no database found" )
@@ -1017,7 +1017,7 @@ func (db *DB) checkpoint(ctx context.Context, mode string) error {
1017
1017
1018
1018
// Execute checkpoint and immediately issue a write to the WAL to ensure
1019
1019
// a new page is written.
1020
- if err := db .execCheckpoint (mode ); err != nil {
1020
+ if err := db .execCheckpoint (ctx , mode ); err != nil {
1021
1021
return err
1022
1022
} else if _ , err = db .db .Exec (`INSERT INTO _litestream_seq (id, seq) VALUES (1, 1) ON CONFLICT (id) DO UPDATE SET seq = seq + 1` ); err != nil {
1023
1023
return err
@@ -1057,7 +1057,7 @@ func (db *DB) checkpoint(ctx context.Context, mode string) error {
1057
1057
return nil
1058
1058
}
1059
1059
1060
- func (db * DB ) execCheckpoint (mode string ) (err error ) {
1060
+ func (db * DB ) execCheckpoint (ctx context. Context , mode string ) (err error ) {
1061
1061
// Ignore if there is no underlying database.
1062
1062
if db .db == nil {
1063
1063
return nil
@@ -1079,7 +1079,7 @@ func (db *DB) execCheckpoint(mode string) (err error) {
1079
1079
if err := db .releaseReadLock (); err != nil {
1080
1080
return fmt .Errorf ("release read lock: %w" , err )
1081
1081
}
1082
- defer func () { _ = db .acquireReadLock () }()
1082
+ defer func () { _ = db .acquireReadLock (ctx ) }()
1083
1083
1084
1084
// A non-forced checkpoint is issued as "PASSIVE". This will only checkpoint
1085
1085
// if there are not pending transactions. A forced checkpoint ("RESTART")
@@ -1096,8 +1096,8 @@ func (db *DB) execCheckpoint(mode string) (err error) {
1096
1096
db .Logger .Debug ("checkpoint" , "mode" , mode , "result" , fmt .Sprintf ("%d,%d,%d" , row [0 ], row [1 ], row [2 ]))
1097
1097
1098
1098
// Reacquire the read lock immediately after the checkpoint.
1099
- if err := db .acquireReadLock (); err != nil {
1100
- return fmt .Errorf ("release read lock: %w" , err )
1099
+ if err := db .acquireReadLock (ctx ); err != nil {
1100
+ return fmt .Errorf ("reacquire read lock: %w" , err )
1101
1101
}
1102
1102
1103
1103
return nil
@@ -1412,7 +1412,7 @@ func (db *DB) CRC64(ctx context.Context) (uint64, ltx.Pos, error) {
1412
1412
db .mu .Lock ()
1413
1413
defer db .mu .Unlock ()
1414
1414
1415
- if err := db .init (); err != nil {
1415
+ if err := db .init (ctx ); err != nil {
1416
1416
return 0 , ltx.Pos {}, err
1417
1417
} else if db .db == nil {
1418
1418
return 0 , ltx.Pos {}, os .ErrNotExist
0 commit comments