forked from TrueCloudLab/frostfs-node
[#970] fstree: Move file locking to the generic writer
It is not a part of FSTree itself, but rather a way to solve concurrent counter update on non-linux implementations. New linux implementations is pretty simple: link fails when the file exists, unlink fails when the file doesn't exist. Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
parent
fb74524ac7
commit
abd502215f
4 changed files with 37 additions and 25 deletions
|
@ -53,9 +53,7 @@ type FSTree struct {
|
|||
readOnly bool
|
||||
metrics Metrics
|
||||
|
||||
fileGuard keyLock
|
||||
fileCounter FileCounter
|
||||
fileCounterEnabled bool
|
||||
fileCounter FileCounter
|
||||
|
||||
writer writer
|
||||
}
|
||||
|
@ -88,14 +86,13 @@ func New(opts ...Option) *FSTree {
|
|||
Depth: 4,
|
||||
DirNameLen: DirNameLen,
|
||||
metrics: &noopMetrics{},
|
||||
fileGuard: &noopKeyLock{},
|
||||
fileCounter: &noopCounter{},
|
||||
log: &logger.Logger{Logger: zap.L()},
|
||||
}
|
||||
for i := range opts {
|
||||
opts[i](f)
|
||||
}
|
||||
f.writer = newGenericWriteData(f)
|
||||
f.writer = newGenericWriteData(f.fileCounter, f.Permissions, f.noSync)
|
||||
|
||||
return f
|
||||
}
|
||||
|
@ -444,7 +441,7 @@ func (t *FSTree) GetRange(ctx context.Context, prm common.GetRangePrm) (common.G
|
|||
// initFileCounter walks the file tree rooted at FSTree's root,
|
||||
// counts total items count, inits counter and returns number of stored objects.
|
||||
func (t *FSTree) initFileCounter() error {
|
||||
if !t.fileCounterEnabled {
|
||||
if !counterEnabled(t.fileCounter) {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue