added sftp client implementation
This commit is contained in:
parent
ad41ddbe54
commit
ce73f0472c
175 changed files with 28135 additions and 13 deletions
11
pkg/fs/fs.go
11
pkg/fs/fs.go
|
|
@ -7,6 +7,7 @@ import (
|
|||
"cachefs/pkg/provider/parse"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
stdfs "io/fs"
|
||||
"net/http"
|
||||
"os"
|
||||
|
|
@ -36,11 +37,11 @@ func NewFS(quota int64, max int, src, dst, metadata string, log logr.Logger) (fs
|
|||
}
|
||||
srcfs, err := parse.FS(src)
|
||||
if err != nil {
|
||||
return
|
||||
return nil, fmt.Errorf("srcfs: %w", err)
|
||||
}
|
||||
dstfs, err := parse.FS(dst)
|
||||
if err != nil {
|
||||
return
|
||||
return nil, fmt.Errorf("dstfs: %w", err)
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
|
|
@ -57,11 +58,11 @@ func NewFS(quota int64, max int, src, dst, metadata string, log logr.Logger) (fs
|
|||
|
||||
fs.mh, err = NewMetadataHandler(ctx, fs, metadata, dst, log.WithName("metadata"))
|
||||
if err != nil {
|
||||
return
|
||||
return nil, fmt.Errorf("metadata: %w", err)
|
||||
}
|
||||
fs.q, err = NewQuota(fs.mh.Size(), quota, fs, log.WithName("quota"))
|
||||
if err != nil {
|
||||
return
|
||||
return nil, fmt.Errorf("quota: %w", err)
|
||||
}
|
||||
fs.ph = NewPreloadHandler(ctx, fs, max, log.WithName("preload"))
|
||||
fs.sc = NewStatCache(ctx)
|
||||
|
|
@ -235,5 +236,7 @@ func (fs *FS) CacheStatus(name string) int {
|
|||
|
||||
func (fs *FS) Close() {
|
||||
fs.cancel()
|
||||
fs.src.Close()
|
||||
fs.dst.Close()
|
||||
<-fs.done
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,6 +40,10 @@ func MetadataGenerator(file string, dst provider.FS) error {
|
|||
if !filepath.IsAbs(file) {
|
||||
return errors.New("metadata path is not absolute")
|
||||
}
|
||||
_, err := dst.Fstat(0)
|
||||
if err == provider.ErrFstat {
|
||||
return err
|
||||
}
|
||||
f, err := os.OpenFile(file, os.O_RDWR|os.O_CREATE, 0o640)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -99,7 +103,7 @@ func NewMetadataHandler(ctx context.Context, fs *FS, file, dst string, log logr.
|
|||
return
|
||||
}
|
||||
err = json.NewDecoder(mh.f).Decode(&mh.md)
|
||||
if err != nil && err == io.EOF {
|
||||
if err != nil && err != io.EOF {
|
||||
return
|
||||
}
|
||||
mh.enc = json.NewEncoder(mh.f)
|
||||
|
|
@ -281,8 +285,10 @@ func (mh *MetadataHandler) flush() {
|
|||
func (mh *MetadataHandler) close() {
|
||||
mh.mu.Lock()
|
||||
for _, md := range mh.md {
|
||||
md.f.Sync()
|
||||
md.f.Close()
|
||||
if md.f != nil {
|
||||
md.f.Sync()
|
||||
md.f.Close()
|
||||
}
|
||||
}
|
||||
mh.mu.Unlock()
|
||||
mh.flush()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue