Skip to content

Commit 67881ae

Browse files
authored
Skip initing disabled storages (#21985)
If `Attachment` or `Packages` are disabled, we don't have to init the storages for them.
1 parent 7020c4a commit 67881ae

File tree

3 files changed

+108
-26
lines changed

3 files changed

+108
-26
lines changed

Diff for: modules/storage/helper.go

+32
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
package storage
55

66
import (
7+
"fmt"
8+
"io"
9+
"net/url"
10+
"os"
711
"reflect"
812

913
"code.gitea.io/gitea/modules/json"
@@ -61,3 +65,31 @@ func toConfig(exemplar, cfg interface{}) (interface{}, error) {
6165
}
6266
return newVal.Elem().Interface(), nil
6367
}
68+
69+
var uninitializedStorage = discardStorage("uninitialized storage")
70+
71+
type discardStorage string
72+
73+
func (s discardStorage) Open(_ string) (Object, error) {
74+
return nil, fmt.Errorf("%s", s)
75+
}
76+
77+
func (s discardStorage) Save(_ string, _ io.Reader, _ int64) (int64, error) {
78+
return 0, fmt.Errorf("%s", s)
79+
}
80+
81+
func (s discardStorage) Stat(_ string) (os.FileInfo, error) {
82+
return nil, fmt.Errorf("%s", s)
83+
}
84+
85+
func (s discardStorage) Delete(_ string) error {
86+
return fmt.Errorf("%s", s)
87+
}
88+
89+
func (s discardStorage) URL(_, _ string) (*url.URL, error) {
90+
return nil, fmt.Errorf("%s", s)
91+
}
92+
93+
func (s discardStorage) IterateObjects(_ func(string, Object) error) error {
94+
return fmt.Errorf("%s", s)
95+
}

Diff for: modules/storage/helper_test.go

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Copyright 2022 The Gitea Authors. All rights reserved.
2+
// SPDX-License-Identifier: MIT
3+
4+
package storage
5+
6+
import (
7+
"bytes"
8+
"testing"
9+
10+
"github.com/stretchr/testify/assert"
11+
)
12+
13+
func Test_discardStorage(t *testing.T) {
14+
tests := []discardStorage{
15+
uninitializedStorage,
16+
discardStorage("empty"),
17+
}
18+
for _, tt := range tests {
19+
t.Run(string(tt), func(t *testing.T) {
20+
{
21+
got, err := tt.Open("path")
22+
assert.Nil(t, got)
23+
assert.Error(t, err, string(tt))
24+
}
25+
{
26+
got, err := tt.Save("path", bytes.NewReader([]byte{0}), 1)
27+
assert.Equal(t, int64(0), got)
28+
assert.Error(t, err, string(tt))
29+
}
30+
{
31+
got, err := tt.Stat("path")
32+
assert.Nil(t, got)
33+
assert.Error(t, err, string(tt))
34+
}
35+
{
36+
err := tt.Delete("path")
37+
assert.Error(t, err, string(tt))
38+
}
39+
{
40+
got, err := tt.URL("path", "name")
41+
assert.Nil(t, got)
42+
assert.Errorf(t, err, string(tt))
43+
}
44+
{
45+
err := tt.IterateObjects(func(_ string, _ Object) error { return nil })
46+
assert.Error(t, err, string(tt))
47+
}
48+
})
49+
}
50+
}

Diff for: modules/storage/storage.go

+26-26
Original file line numberDiff line numberDiff line change
@@ -110,46 +110,38 @@ func SaveFrom(objStorage ObjectStorage, p string, callback func(w io.Writer) err
110110

111111
var (
112112
// Attachments represents attachments storage
113-
Attachments ObjectStorage
113+
Attachments ObjectStorage = uninitializedStorage
114114

115115
// LFS represents lfs storage
116-
LFS ObjectStorage
116+
LFS ObjectStorage = uninitializedStorage
117117

118118
// Avatars represents user avatars storage
119-
Avatars ObjectStorage
119+
Avatars ObjectStorage = uninitializedStorage
120120
// RepoAvatars represents repository avatars storage
121-
RepoAvatars ObjectStorage
121+
RepoAvatars ObjectStorage = uninitializedStorage
122122

123123
// RepoArchives represents repository archives storage
124-
RepoArchives ObjectStorage
124+
RepoArchives ObjectStorage = uninitializedStorage
125125

126126
// Packages represents packages storage
127-
Packages ObjectStorage
127+
Packages ObjectStorage = uninitializedStorage
128128
)
129129

130130
// Init init the stoarge
131131
func Init() error {
132-
if err := initAttachments(); err != nil {
133-
return err
134-
}
135-
136-
if err := initAvatars(); err != nil {
137-
return err
138-
}
139-
140-
if err := initRepoAvatars(); err != nil {
141-
return err
142-
}
143-
144-
if err := initLFS(); err != nil {
145-
return err
146-
}
147-
148-
if err := initRepoArchives(); err != nil {
149-
return err
132+
for _, f := range []func() error{
133+
initAttachments,
134+
initAvatars,
135+
initRepoAvatars,
136+
initLFS,
137+
initRepoArchives,
138+
initPackages,
139+
} {
140+
if err := f(); err != nil {
141+
return err
142+
}
150143
}
151-
152-
return initPackages()
144+
return nil
153145
}
154146

155147
// NewStorage takes a storage type and some config and returns an ObjectStorage or an error
@@ -172,6 +164,10 @@ func initAvatars() (err error) {
172164
}
173165

174166
func initAttachments() (err error) {
167+
if !setting.Attachment.Enabled {
168+
Attachments = discardStorage("Attachment isn't enabled")
169+
return nil
170+
}
175171
log.Info("Initialising Attachment storage with type: %s", setting.Attachment.Storage.Type)
176172
Attachments, err = NewStorage(setting.Attachment.Storage.Type, &setting.Attachment.Storage)
177173
return err
@@ -196,6 +192,10 @@ func initRepoArchives() (err error) {
196192
}
197193

198194
func initPackages() (err error) {
195+
if !setting.Packages.Enabled {
196+
Packages = discardStorage("Packages isn't enabled")
197+
return nil
198+
}
199199
log.Info("Initialising Packages storage with type: %s", setting.Packages.Storage.Type)
200200
Packages, err = NewStorage(setting.Packages.Storage.Type, &setting.Packages.Storage)
201201
return err

0 commit comments

Comments
 (0)