[#1668] writecache: Use object size to check free space
All checks were successful
DCO action / DCO (pull_request) Successful in 1m7s
Pre-commit hooks / Pre-commit (pull_request) Successful in 1m30s
Build / Build Components (pull_request) Successful in 1m56s
Vulncheck / Vulncheck (pull_request) Successful in 1m47s
Tests and linters / Run gofumpt (pull_request) Successful in 3m16s
Tests and linters / Lint (pull_request) Successful in 3m49s
Tests and linters / Staticcheck (pull_request) Successful in 3m49s
Tests and linters / Tests (pull_request) Successful in 3m59s
Tests and linters / gopls check (pull_request) Successful in 4m9s
Tests and linters / Tests with -race (pull_request) Successful in 4m40s
Pre-commit hooks / Pre-commit (push) Successful in 1m17s
Vulncheck / Vulncheck (push) Successful in 1m24s
Build / Build Components (push) Successful in 1m57s
Tests and linters / Run gofumpt (push) Successful in 2m37s
Tests and linters / Tests (push) Successful in 3m1s
Tests and linters / Staticcheck (push) Successful in 3m7s
Tests and linters / Lint (push) Successful in 3m11s
Tests and linters / gopls check (push) Successful in 3m14s
Tests and linters / Tests with -race (push) Successful in 3m25s
OCI image / Build container images (push) Successful in 4m54s
All checks were successful
DCO action / DCO (pull_request) Successful in 1m7s
Pre-commit hooks / Pre-commit (pull_request) Successful in 1m30s
Build / Build Components (pull_request) Successful in 1m56s
Vulncheck / Vulncheck (pull_request) Successful in 1m47s
Tests and linters / Run gofumpt (pull_request) Successful in 3m16s
Tests and linters / Lint (pull_request) Successful in 3m49s
Tests and linters / Staticcheck (pull_request) Successful in 3m49s
Tests and linters / Tests (pull_request) Successful in 3m59s
Tests and linters / gopls check (pull_request) Successful in 4m9s
Tests and linters / Tests with -race (pull_request) Successful in 4m40s
Pre-commit hooks / Pre-commit (push) Successful in 1m17s
Vulncheck / Vulncheck (push) Successful in 1m24s
Build / Build Components (push) Successful in 1m57s
Tests and linters / Run gofumpt (push) Successful in 2m37s
Tests and linters / Tests (push) Successful in 3m1s
Tests and linters / Staticcheck (push) Successful in 3m7s
Tests and linters / Lint (push) Successful in 3m11s
Tests and linters / gopls check (push) Successful in 3m14s
Tests and linters / Tests with -race (push) Successful in 3m25s
OCI image / Build container images (push) Successful in 4m54s
Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
parent
bd61f7bf0a
commit
8643e0abc5
2 changed files with 10 additions and 5 deletions
|
@ -2,6 +2,7 @@ package writecache
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
|
||||||
|
@ -59,7 +60,15 @@ func (c *cache) Put(ctx context.Context, prm common.PutPrm) (common.PutRes, erro
|
||||||
|
|
||||||
// putBig writes object to FSTree and pushes it to the flush workers queue.
|
// putBig writes object to FSTree and pushes it to the flush workers queue.
|
||||||
func (c *cache) putBig(ctx context.Context, prm common.PutPrm) error {
|
func (c *cache) putBig(ctx context.Context, prm common.PutPrm) error {
|
||||||
if !c.hasEnoughSpaceFS() {
|
if prm.RawData == nil { // foolproof: RawData should be marshalled by shard.
|
||||||
|
data, err := prm.Object.Marshal()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot marshal object: %w", err)
|
||||||
|
}
|
||||||
|
prm.RawData = data
|
||||||
|
}
|
||||||
|
size := uint64(len(prm.RawData))
|
||||||
|
if !c.hasEnoughSpace(size) {
|
||||||
return ErrOutOfSpace
|
return ErrOutOfSpace
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,10 +7,6 @@ func (c *cache) estimateCacheSize() (uint64, uint64) {
|
||||||
return count, size
|
return count, size
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *cache) hasEnoughSpaceFS() bool {
|
|
||||||
return c.hasEnoughSpace(c.maxObjectSize)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *cache) hasEnoughSpace(objectSize uint64) bool {
|
func (c *cache) hasEnoughSpace(objectSize uint64) bool {
|
||||||
count, size := c.estimateCacheSize()
|
count, size := c.estimateCacheSize()
|
||||||
if c.maxCacheCount > 0 && count+1 > c.maxCacheCount {
|
if c.maxCacheCount > 0 && count+1 > c.maxCacheCount {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue