This commit is contained in:
Ben Johnson
2021-01-18 15:46:52 -07:00
parent f31c22af62
commit 7fb98df240
15 changed files with 60 additions and 166 deletions

View File

@@ -570,10 +570,10 @@ func (r *Replica) snapshot(ctx context.Context, generation string, index int) er
if err != nil {
return err
} else if _, err := tx.ExecContext(ctx, `SELECT COUNT(1) FROM _litestream_seq;`); err != nil {
tx.Rollback()
_ = tx.Rollback()
return err
}
defer tx.Rollback()
defer func() { _ = tx.Rollback() }()
// Open database file handle.
f, err := os.Open(r.db.Path())
@@ -681,6 +681,7 @@ func (r *Replica) findBucketRegion(ctx context.Context, bucket string) (string,
return "us-east-1", nil
}
// Sync replays data from the shadow WAL and uploads it to S3.
func (r *Replica) Sync(ctx context.Context) (err error) {
// Clear last position if if an error occurs during sync.
defer func() {
@@ -1012,40 +1013,6 @@ func (r *Replica) deleteGenerationBefore(ctx context.Context, generation string,
return nil
}
type multiReadCloser struct {
readers []io.ReadCloser
}
func (mr *multiReadCloser) Read(p []byte) (n int, err error) {
for len(mr.readers) > 0 {
n, err = mr.readers[0].Read(p)
if err == io.EOF {
if e := mr.readers[0].Close(); e != nil {
return n, e
}
mr.readers[0] = nil
mr.readers = mr.readers[1:]
}
if n > 0 || err != io.EOF {
if err == io.EOF && len(mr.readers) > 0 {
err = nil
}
return
}
}
return 0, io.EOF
}
func (mr *multiReadCloser) Close() (err error) {
for _, r := range mr.readers {
if e := r.Close(); e != nil && err == nil {
err = e
}
}
return err
}
// S3 metrics.
var (
operationTotalCounterVec = promauto.NewCounterVec(prometheus.CounterOpts{