WIP DEBUG

This commit is contained in:
Quentin 2021-11-19 20:35:38 +01:00
parent 0ee29e31dd
commit 514731cf4b
Signed by: quentin
GPG key ID: A98E9B769E4FF428
3 changed files with 42 additions and 24 deletions

View file

@ -73,6 +73,7 @@ func (f *S3File) loadObject() error {
} }
func (f *S3File) Read(p []byte) (n int, err error) { func (f *S3File) Read(p []byte) (n int, err error) {
log.Printf("s3 Read\n")
//if f.Stat() & OBJECT == 0 { /* @FIXME Ideally we would check against OBJECT but we need a non OPAQUE_KEY */ //if f.Stat() & OBJECT == 0 { /* @FIXME Ideally we would check against OBJECT but we need a non OPAQUE_KEY */
// return 0, os.ErrInvalid // return 0, os.ErrInvalid
//} //}
@ -84,6 +85,7 @@ func (f *S3File) Read(p []byte) (n int, err error) {
} }
func (f *S3File) ReadAt(p []byte, off int64) (n int, err error) { func (f *S3File) ReadAt(p []byte, off int64) (n int, err error) {
log.Printf("s3 ReadAt %v\n", off)
if err := f.loadObject(); err != nil { if err := f.loadObject(); err != nil {
return 0, err return 0, err
} }
@ -194,30 +196,43 @@ func (f *S3File) readDirRoot(count int) ([]fs.FileInfo, error) {
} }
func (f *S3File) readDirChild(count int) ([]fs.FileInfo, error) { func (f *S3File) readDirChild(count int) ([]fs.FileInfo, error) {
prefix := f.Path.Key var err error
if len(prefix) > 0 && prefix[len(prefix)-1:] != "/" { if f.entries == nil {
prefix = prefix + "/" prefix := f.Path.Key
if len(prefix) > 0 && prefix[len(prefix)-1:] != "/" {
prefix = prefix + "/"
}
objs_info := f.fs.mc.ListObjects(f.fs.ctx, f.Path.Bucket, minio.ListObjectsOptions{
Prefix: prefix,
Recursive: false,
})
f.entries = make([]fs.FileInfo, 0)
for object := range objs_info {
if object.Err != nil {
return nil, object.Err
}
//log.Println("Stat from GarageFile.readDirChild()", path.Join("/", f.path.bucket, object.Key))
nf, err := NewS3StatFromObjectInfo(f.fs, f.Path.Bucket, object)
if err != nil {
return nil, err
}
f.entries = append(f.entries, nf)
}
}
beg := f.pos
end := int64(len(f.entries))
if count > 0 {
end = min(beg + int64(count), end)
}
f.pos = end
if end - beg == 0 {
err = io.EOF
} }
objs_info := f.fs.mc.ListObjects(f.fs.ctx, f.Path.Bucket, minio.ListObjectsOptions{ return f.entries[beg:end], err
Prefix: prefix,
Recursive: false,
})
entries := make([]fs.FileInfo, 0)
for object := range objs_info {
if object.Err != nil {
return nil, object.Err
}
//log.Println("Stat from GarageFile.readDirChild()", path.Join("/", f.path.bucket, object.Key))
nf, err := NewS3StatFromObjectInfo(f.fs, f.Path.Bucket, object)
if err != nil {
return nil, err
}
entries = append(entries, nf)
}
return entries, nil
} }
func (f *S3File) Stat() (fs.FileInfo, error) { func (f *S3File) Stat() (fs.FileInfo, error) {

View file

@ -1,6 +1,7 @@
package s3 package s3
import ( import (
"log"
"errors" "errors"
"io/fs" "io/fs"
"path" "path"
@ -104,6 +105,7 @@ func (s *S3Stat) Name() string {
} }
func (s *S3Stat) Size() int64 { func (s *S3Stat) Size() int64 {
log.Println("stat size: ", s.obj.Size)
return s.obj.Size return s.obj.Size
} }

View file

@ -183,7 +183,7 @@ func handlePacket(s *Server, p orderedRequest) error {
case *sshFxpStatPacket: case *sshFxpStatPacket:
log.Println("pkt: stat: ", p.Path) log.Println("pkt: stat: ", p.Path)
// stat the requested file // stat the requested file
info, err := os.Stat(toLocalPath(p.Path)) info, err := s.fs.Stat(s.ctx, p.Path)
rpkt = &sshFxpStatResponse{ rpkt = &sshFxpStatResponse{
ID: p.ID, ID: p.ID,
info: info, info: info,
@ -286,13 +286,14 @@ func handlePacket(s *Server, p orderedRequest) error {
}).respond(s) }).respond(s)
} }
case *sshFxpReadPacket: case *sshFxpReadPacket:
log.Println("pkt: read handle: ", p.Handle)
var err error = EBADF var err error = EBADF
f, ok := s.getHandle(p.Handle) f, ok := s.getHandle(p.Handle)
log.Println("pkt: read handle: ", p.Handle, f.Path.Path)
if ok { if ok {
err = nil err = nil
data := p.getDataSlice(s.pktMgr.alloc, orderID) data := p.getDataSlice(s.pktMgr.alloc, orderID)
n, _err := f.ReadAt(data, int64(p.Offset)) n, _err := f.ReadAt(data, int64(p.Offset))
log.Println("DEBUG: ", n, _err, p.Offset)
if _err != nil && (_err != io.EOF || n == 0) { if _err != nil && (_err != io.EOF || n == 0) {
err = _err err = _err
} }