Skip to content

Commit 2ed418c

Browse files
authored
Merge pull request #18574 from lucasrod16/18571-ensure-consistent-permissions-for-broken-WAL-files
Ensure consistent file permissions on broken WAL files
2 parents 4b8655e + d12bb7e commit 2ed418c

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

server/storage/wal/repair.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func Repair(lg *zap.Logger, dirpath string) bool {
6767

6868
case errors.Is(err, io.ErrUnexpectedEOF):
6969
brokenName := f.Name() + ".broken"
70-
bf, bferr := os.Create(brokenName)
70+
bf, bferr := os.OpenFile(brokenName, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, fileutil.PrivateFileMode)
7171
if bferr != nil {
7272
lg.Warn("failed to create backup file", zap.String("path", brokenName), zap.Error(bferr))
7373
return false

server/storage/wal/repair_test.go

+10
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ import (
1818
"fmt"
1919
"io"
2020
"os"
21+
"path/filepath"
2122
"testing"
2223

2324
"github.com/stretchr/testify/assert"
2425
"github.com/stretchr/testify/require"
2526
"go.uber.org/zap/zaptest"
2627

28+
"go.etcd.io/etcd/client/pkg/v3/fileutil"
2729
"go.etcd.io/etcd/server/v3/storage/wal/walpb"
2830
"go.etcd.io/raft/v3/raftpb"
2931
)
@@ -77,6 +79,14 @@ func testRepair(t *testing.T, ents [][]raftpb.Entry, corrupt corruptFunc, expect
7779
// repair the wal
7880
require.True(t, Repair(lg, p), "'Repair' returned 'false', want 'true'")
7981

82+
// verify the broken wal has correct permissions
83+
bf := filepath.Join(p, filepath.Base(w.tail().Name())+".broken")
84+
fi, err := os.Stat(bf)
85+
require.NoError(t, err)
86+
expectedPerms := fmt.Sprintf("%o", os.FileMode(fileutil.PrivateFileMode))
87+
actualPerms := fmt.Sprintf("%o", fi.Mode().Perm())
88+
require.Equal(t, expectedPerms, actualPerms, "unexpected file permissions on .broken wal")
89+
8090
// read it back
8191
w, err = Open(lg, p, walpb.Snapshot{})
8292
require.NoError(t, err)

0 commit comments

Comments
 (0)