Skip to content

Commit

Permalink
remove file.Sync usage
Browse files Browse the repository at this point in the history
Signed-off-by: Maksym Trofimenko <[email protected]>
  • Loading branch information
Maksym Trofimenko committed Feb 6, 2025
1 parent fb1a57e commit b6c99ac
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 46 deletions.
63 changes: 36 additions & 27 deletions src/pkg/reg/adapter/storage/drivers/sftp/driver.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package sftp

import (
"bytes"
"context"
"errors"
"fmt"
storagedriver "github.com/docker/distribution/registry/storage/driver"
"github.com/docker/distribution/registry/storage/driver/base"
Expand Down Expand Up @@ -51,45 +49,60 @@ type Driver struct {
driver *driver
}

func (d *driver) GetContent(ctx context.Context, path string) ([]byte, error) {
rc, err := d.Reader(ctx, path, 0)
func (d *driver) GetContent(ctx context.Context, p string) ([]byte, error) {

var err error
session, cl, err := d.getSFTP()
if err != nil {
return nil, fmt.Errorf("reader %s sftp session failed: %v", p, err)
}

defer cl()
file, err := session.Open(d.addBasePath(p))

var pathNotFoundError storagedriver.PathNotFoundError
if errors.As(err, &pathNotFoundError) {
// return error as it is to be asserted properly
return nil, err
if err != nil {
if os.IsNotExist(err) {
return nil, storagedriver.PathNotFoundError{Path: p, DriverName: DriverName}
}
return nil, fmt.Errorf("get content %s error: %v", path, err)
}

defer rc.Close()
return io.ReadAll(rc)
defer file.Close()

data, err := io.ReadAll(file)

if err != nil {
if os.IsNotExist(err) {
return nil, storagedriver.PathNotFoundError{Path: p, DriverName: DriverName}
}
}
return data, err
}

func (d *driver) PutContent(ctx context.Context, p string, contents []byte) error {
writer, err := d.Writer(ctx, p, false)

session, cl, err := d.getSFTP()
if err != nil {
return fmt.Errorf("put content %s error: %v", p, err)
return fmt.Errorf("putcontent %s get sftp session failed: %v", p, err)
}

defer writer.Close()
defer cl()
p = d.addBasePath(p)

_, err = io.Copy(writer, bytes.NewReader(contents))
if err != nil {
_ = writer.Cancel()
return fmt.Errorf("put content %s error: %v", p, err)
dir := path.Dir(p)
if err = session.MkdirAll(dir); err != nil {
return fmt.Errorf("putcontent: unable to create directory %s: %v", dir, err)
}

err = writer.Commit()
file, err := session.Create(p)
if err != nil {
return fmt.Errorf("put content %s error: %v", p, err)
return fmt.Errorf("putcontent: file create %s error: %v", p, err)
}
return nil

_, err = file.Write(contents)
return err
}

func (d *driver) Reader(_ context.Context, p string, offset int64) (io.ReadCloser, error) {
fmt.Println("Reader", p, offset)

var err error
session, cl, err := d.getSFTP()
Expand Down Expand Up @@ -126,8 +139,6 @@ func (d *driver) Reader(_ context.Context, p string, offset int64) (io.ReadClose

func (d *driver) Writer(_ context.Context, p string, append bool) (storagedriver.FileWriter, error) {

fmt.Println("Writer", p, append)

session, cl, err := d.getSFTP()
if err != nil {
return nil, fmt.Errorf("writer %s get sftp session failed: %v", p, err)
Expand All @@ -142,7 +153,7 @@ func (d *driver) Writer(_ context.Context, p string, append bool) (storagedriver
return nil, fmt.Errorf("unable to create directory %s: %v", dir, err)
}

file, err := session.OpenFile(p, os.O_WRONLY|os.O_CREATE|os.O_APPEND)
file, err := session.Create(p)
if err != nil {
cl()
return nil, fmt.Errorf("file create %s error: %v", p, err)
Expand All @@ -152,8 +163,6 @@ func (d *driver) Writer(_ context.Context, p string, append bool) (storagedriver

if append {
offset, err = file.Seek(0, io.SeekEnd)
} else {
err = file.Truncate(0)
}
if err != nil {
cl()
Expand Down
21 changes: 2 additions & 19 deletions src/pkg/reg/adapter/storage/drivers/sftp/filewriter.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package sftp

import (
"bufio"
"fmt"
storagedriver "github.com/docker/distribution/registry/storage/driver"
"github.com/pkg/sftp"
Expand All @@ -12,7 +11,6 @@ var _ storagedriver.FileWriter = &fileWriter{}
type fileWriter struct {
file *sftp.File
size int64
bw *bufio.Writer
closed bool
committed bool
cancelled bool
Expand All @@ -23,7 +21,6 @@ func newFileWriter(file *sftp.File, size int64, closer func()) *fileWriter {
return &fileWriter{
file: file,
size: size,
bw: bufio.NewWriter(file),
closer: closer,
}
}
Expand All @@ -36,7 +33,8 @@ func (fw *fileWriter) Write(p []byte) (int, error) {
} else if fw.cancelled {
return 0, fmt.Errorf("already cancelled")
}
n, err := fw.bw.Write(p)

n, err := fw.file.Write(p)
fw.size += int64(n)
return n, err
}
Expand All @@ -58,15 +56,6 @@ func (fw *fileWriter) Close() error {
fw.closed = true
}()

// closing anyway even if followed errored

if err := fw.bw.Flush(); err != nil {
return err
}
if err := fw.file.Sync(); err != nil {
return err
}

return fw.file.Close()
}

Expand All @@ -87,12 +76,6 @@ func (fw *fileWriter) Commit() error {
} else if fw.cancelled {
return fmt.Errorf("already cancelled")
}
if err := fw.bw.Flush(); err != nil {
return err
}
if err := fw.file.Sync(); err != nil {
return err
}
fw.committed = true
return nil
}

0 comments on commit b6c99ac

Please sign in to comment.