Skip to content

Commit 5a68fdf

Browse files
authored
Merge pull request #4985 from butonic/drop-unneeded-locks
drop unneeded session locks
2 parents 2c0b4ea + 8c1b7f6 commit 5a68fdf

File tree

3 files changed

+10
-23
lines changed

3 files changed

+10
-23
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Bugfix: drop unneeded session locks
2+
3+
We no longer lock session metadada files, as they are already written atomically.
4+
5+
https://github.com/cs3org/reva/pull/4985

pkg/storage/utils/decomposedfs/upload/session.go

-14
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
"time"
2828

2929
"github.com/google/renameio/v2"
30-
"github.com/rogpeppe/go-internal/lockedfile"
3130
tusd "github.com/tus/tusd/v2/pkg/handler"
3231

3332
userpb "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
@@ -78,14 +77,6 @@ func (s *OcisSession) Purge(ctx context.Context) error {
7877
_, span := tracer.Start(ctx, "Purge")
7978
defer span.End()
8079
sessionPath := sessionPath(s.store.root, s.info.ID)
81-
f, err := lockedfile.OpenFile(sessionPath+".lock", os.O_RDWR|os.O_TRUNC|os.O_CREATE, 0600)
82-
if err != nil {
83-
return err
84-
}
85-
defer func() {
86-
f.Close()
87-
os.Remove(sessionPath + ".lock")
88-
}()
8980
if err := os.Remove(sessionPath); err != nil {
9081
return err
9182
}
@@ -121,11 +112,6 @@ func (s *OcisSession) Persist(ctx context.Context) error {
121112
if err != nil {
122113
return err
123114
}
124-
f, err := lockedfile.OpenFile(sessionPath+".lock", os.O_RDWR|os.O_TRUNC|os.O_CREATE, 0600)
125-
if err != nil {
126-
return err
127-
}
128-
defer f.Close()
129115
return renameio.WriteFile(sessionPath, d, 0600)
130116
}
131117

pkg/storage/utils/decomposedfs/upload/store.go

+5-9
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"regexp"
2929
"strconv"
3030
"strings"
31+
"syscall"
3132
"time"
3233

3334
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
@@ -132,24 +133,19 @@ func (store OcisStore) Get(ctx context.Context, id string) (*OcisSession, error)
132133
store: store,
133134
info: tusd.FileInfo{},
134135
}
135-
lock, err := lockedfile.Open(sessionPath + ".lock")
136+
data, err := os.ReadFile(sessionPath)
136137
if err != nil {
137-
if errors.Is(err, iofs.ErrNotExist) {
138-
// Interpret os.ErrNotExist as 404 Not Found
138+
// handle stale NFS file handles that can occur when the file is deleted betwenn the ATTR and FOPEN call of os.ReadFile
139+
if pathErr, ok := err.(*os.PathError); ok && pathErr.Err == syscall.ESTALE {
140+
appctx.GetLogger(ctx).Info().Str("session", id).Err(err).Msg("treating stale file handle as not found")
139141
err = tusd.ErrNotFound
140142
}
141-
return nil, err
142-
}
143-
defer lock.Close()
144-
data, err := os.ReadFile(sessionPath)
145-
if err != nil {
146143
if errors.Is(err, iofs.ErrNotExist) {
147144
// Interpret os.ErrNotExist as 404 Not Found
148145
err = tusd.ErrNotFound
149146
}
150147
return nil, err
151148
}
152-
lock.Close() // release lock asap
153149

154150
if err := json.Unmarshal(data, &session.info); err != nil {
155151
return nil, err

0 commit comments

Comments
 (0)