[#1319] blobstor: Compress big objects in a streaming fashion

Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
Evgenii Stratonikov 2022-04-28 13:19:03 +03:00 committed by LeL
parent 1219ff89d4
commit 3c39e6df11
2 changed files with 35 additions and 6 deletions

View file

@ -194,6 +194,23 @@ func (t *FSTree) Put(addr *addressSDK.Address, data []byte) error {
return os.WriteFile(p, data, t.Permissions)
}
// PutStream puts executes handler on a file opened for write.
func (t *FSTree) PutStream(addr *addressSDK.Address, handler func(*os.File) error) error {
p := t.treePath(addr)
if err := util.MkdirAllX(filepath.Dir(p), t.Permissions); err != nil {
return err
}
f, err := os.OpenFile(p, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, t.Permissions)
if err != nil {
return err
}
defer f.Close()
return handler(f)
}
// Get returns object from storage by address.
func (t *FSTree) Get(addr *addressSDK.Address) ([]byte, error) {
p := t.treePath(addr)