backupds kvlog: Address review

This commit is contained in:
Łukasz Magiera 2021-03-10 13:58:02 +01:00
parent 2b380c96a5
commit 3f1054daf4
2 changed files with 29 additions and 27 deletions

View File

@ -6,6 +6,7 @@ import (
"sync"
"time"
"go.uber.org/multierr"
"golang.org/x/xerrors"
"github.com/ipfs/go-datastore"
@ -189,11 +190,10 @@ func (d *Datastore) CloseLog() error {
}
func (d *Datastore) Close() error {
if err := d.child.Close(); err != nil {
return xerrors.Errorf("closing child datastore: %w", err)
}
return d.CloseLog()
return multierr.Combine(
d.child.Close(),
d.CloseLog(),
)
}
func (d *Datastore) Batch() (datastore.Batch, error) {

View File

@ -65,32 +65,34 @@ func (d *Datastore) startLog(logdir string) error {
return xerrors.Errorf("writing new log head: %w", err)
}
go func() {
defer close(d.closed)
for {
select {
case ent := <-d.log:
if err := l.writeEntry(&ent); err != nil {
log.Errorw("failed to write log entry", "error", err)
// todo try to do something, maybe start a new log file (but not when we're out of disk space)
}
// todo: batch writes when multiple are pending; flush on a timer
if err := l.file.Sync(); err != nil {
log.Errorw("failed to sync log", "error", err)
}
case <-d.closing:
if err := l.Close(); err != nil {
log.Errorw("failed to close log", "error", err)
}
return
}
}
}()
go d.runLog(l)
return nil
}
func (d *Datastore) runLog(l *logfile) {
defer close(d.closed)
for {
select {
case ent := <-d.log:
if err := l.writeEntry(&ent); err != nil {
log.Errorw("failed to write log entry", "error", err)
// todo try to do something, maybe start a new log file (but not when we're out of disk space)
}
// todo: batch writes when multiple are pending; flush on a timer
if err := l.file.Sync(); err != nil {
log.Errorw("failed to sync log", "error", err)
}
case <-d.closing:
if err := l.Close(); err != nil {
log.Errorw("failed to close log", "error", err)
}
return
}
}
}
type logfile struct {
file *os.File
}