Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions api.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,12 @@ type Options struct {
AutoSync bool
// At what segment size it will rollover to a new segment. Defaults to 1MB.
Rollover int64
// CheckAndRecover check the head segment for integrity. If it fails in write mode will recover the data.
CheckAndRecover bool
// Check the head segment for integrity, before opening it for reading/writing.
Check bool
// Recover any good prefix from the head segment, before opening it for reading/writing. If the whole
// segment is readable and passing the integrity checks, Recover is a noop. If both Check and Recover are set,
// Open will directly try to recover the segment in read-write mode.
Recover bool
// Upgrade specifies how to upgrade the versions
Version VersionOptions
}
Expand Down
10 changes: 8 additions & 2 deletions log.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ func Open(dir string, opts Options) (result Log, err error) {
rdr := reopenReader(segment.New(dir, 0, opts.AutoSync), params, opts.Version.NewSegmentsVersion, ix)
l.readers = []*reader{rdr}
case opts.Readonly:
if opts.CheckAndRecover {
if opts.Check || opts.Recover {
head := segments[len(segments)-1]
if err := head.Check(params); err != nil {
return nil, fmt.Errorf("open check: %w", err)
Expand All @@ -101,11 +101,17 @@ func Open(dir string, opts Options) (result Log, err error) {
l.writer = w
l.readers = []*reader{w.reader}
default:
if opts.CheckAndRecover {
switch {
case opts.Recover:
head := segments[len(segments)-1]
if err := head.Recover(params); err != nil {
return nil, fmt.Errorf("open recover: %w", err)
}
case opts.Check:
head := segments[len(segments)-1]
if err := head.Check(params); err != nil {
return nil, fmt.Errorf("open check: %w", err)
}
}

if opts.Version.EagerVersionMigrate {
Expand Down
8 changes: 4 additions & 4 deletions log_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1524,10 +1524,10 @@ func TestConcurrent(t *testing.T) {
func testConcurrentPubsubRecent(t *testing.T) {
defer os.RemoveAll("test_pubsub")
s, err := Open("test_pubsub", Options{
CreateDirs: true,
AutoSync: true,
CheckAndRecover: true,
Rollover: 1024 * 64,
CreateDirs: true,
AutoSync: true,
Check: true,
Rollover: 1024 * 64,
})
require.NoError(t, err)
defer s.Close()
Expand Down
Loading