- commit
- 28603ad
- parent
- 59c9f21
- author
- Eric Bower
- date
- 2025-06-29 08:59:23 -0400 EDT
fix(pgs): fs adapter make sure files are closed properly
1 files changed,
+33,
-11
+33,
-11
1@@ -102,8 +102,10 @@ func (s *StorageFS) DeleteBucket(bucket Bucket) error {
2
3 func (s *StorageFS) GetObject(bucket Bucket, fpath string) (utils.ReadAndReaderAtCloser, *ObjectInfo, error) {
4 objInfo := &ObjectInfo{
5+ Size: 0,
6 LastModified: time.Time{},
7 Metadata: make(http.Header),
8+ ETag: "",
9 }
10
11 dat, err := os.Open(filepath.Join(bucket.Path, fpath))
12@@ -113,6 +115,7 @@ func (s *StorageFS) GetObject(bucket Bucket, fpath string) (utils.ReadAndReaderA
13
14 info, err := dat.Stat()
15 if err != nil {
16+ _ = dat.Close()
17 return nil, objInfo, err
18 }
19
20@@ -122,16 +125,18 @@ func (s *StorageFS) GetObject(bucket Bucket, fpath string) (utils.ReadAndReaderA
21 // calculate etag
22 h := md5.New()
23 if _, err := io.Copy(h, dat); err != nil {
24+ _ = dat.Close()
25 return nil, objInfo, err
26 }
27 md5Sum := h.Sum(nil)
28 etag = hex.EncodeToString(md5Sum)
29- }
30
31- // reset os.File reader
32- _, err = dat.Seek(0, io.SeekStart)
33- if err != nil {
34- return nil, objInfo, err
35+ // reset os.File reader
36+ _, err = dat.Seek(0, io.SeekStart)
37+ if err != nil {
38+ _ = dat.Close()
39+ return nil, objInfo, err
40+ }
41 }
42
43 objInfo.ETag = etag
44@@ -151,17 +156,15 @@ func (s *StorageFS) PutObject(bucket Bucket, fpath string, contents io.Reader, e
45 if err != nil {
46 return "", 0, err
47 }
48+ defer func() {
49+ _ = f.Close()
50+ }()
51
52 size, err := io.Copy(f, contents)
53 if err != nil {
54 return "", 0, err
55 }
56
57- err = f.Close()
58- if err != nil {
59- return "", 0, err
60- }
61-
62 if entry.Mtime > 0 {
63 uTime := time.Unix(entry.Mtime, 0)
64 _ = os.Chtimes(loc, uTime, uTime)
65@@ -183,9 +186,28 @@ func (s *StorageFS) DeleteObject(bucket Bucket, fpath string) error {
66 // traverse up the folder tree and remove all empty folders
67 dir := filepath.Dir(loc)
68 for dir != "" {
69+ f, err := os.Open(dir)
70+ if err != nil {
71+ s.Logger.Info("open dir", "dir", dir, "err", err)
72+ break
73+ }
74+ defer func() {
75+ _ = f.Close()
76+ }()
77+
78+ // https://stackoverflow.com/a/30708914
79+ contents, err := f.Readdirnames(-1)
80+ if err != nil {
81+ s.Logger.Info("read dir", "dir", dir, "err", err)
82+ break
83+ }
84+ if len(contents) > 0 {
85+ break
86+ }
87+
88 err = os.Remove(dir)
89 if err != nil {
90- s.Logger.Info("removing dir", "dir", dir, "err", err)
91+ s.Logger.Info("remove dir", "dir", dir, "err", err)
92 break
93 }
94 fp := strings.Split(dir, "/")