feat(admin): 运行时策略 - 配置对象存储策略与默认并发
This commit is contained in:
@@ -324,6 +324,7 @@ func (s *Service) openResourceRange(userID string, resource *model.Resource, ran
|
||||
setting.Provider = firstNonEmpty(resource.Provider, setting.Provider)
|
||||
setting.Endpoint = firstNonEmpty(resource.Endpoint, setting.Endpoint)
|
||||
setting.Bucket = firstNonEmpty(resource.Bucket, setting.Bucket)
|
||||
setting = s.storageSettingWithRuntimePolicy(setting)
|
||||
stream, err := getOriginOSSObjectRange(setting, resource.ObjectKey, normalizeSingleByteRange(rangeHeader))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -445,7 +446,7 @@ func (s *Service) storeResourceObject(resource *model.Resource, fileName string,
|
||||
if settingErr != nil {
|
||||
return "", settingErr
|
||||
}
|
||||
etag, err := putOSSObject(setting, resource.ObjectKey, resource.MimeType, resource.Size, body)
|
||||
etag, err := putOSSObject(s.storageSettingWithRuntimePolicy(setting), resource.ObjectKey, resource.MimeType, resource.Size, body)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
@@ -1,14 +1,33 @@
|
||||
package app
|
||||
|
||||
import "infinite-canvas/backend/internal/storage"
|
||||
import (
|
||||
"time"
|
||||
|
||||
"infinite-canvas/backend/internal/storage"
|
||||
)
|
||||
|
||||
type ossSettingValue = storage.Settings
|
||||
type ossProviderCredentials = storage.Credentials
|
||||
type ossObjectStream = storage.ObjectStream
|
||||
|
||||
func (s *Service) storageSettingWithRuntimePolicy(setting ossSettingValue) ossSettingValue {
|
||||
setting = normalizeOSSSetting(setting)
|
||||
policy, err := s.RuntimePolicy()
|
||||
if err != nil {
|
||||
return setting
|
||||
}
|
||||
setting.Runtime = storage.RuntimePolicy{
|
||||
TransferTimeout: time.Duration(policy.Storage.TransferTimeoutSeconds) * time.Second,
|
||||
AccessURLTTL: time.Duration(policy.Storage.AccessURLTTLSeconds) * time.Second,
|
||||
ProviderAccessURLTTL: time.Duration(policy.Storage.ProviderAccessURLTTLSeconds) * time.Second,
|
||||
MaxBufferedUploadSize: policy.Storage.NonSeekableBufferMB * 1024 * 1024,
|
||||
ErrorBodyLimit: policy.Storage.ErrorBodyKB * 1024,
|
||||
}
|
||||
return normalizeOSSSetting(setting)
|
||||
}
|
||||
|
||||
var (
|
||||
putOSSObject = storage.PutOSSObject
|
||||
putAliyunOSSObject = storage.PutAliyunOSSObject
|
||||
getOSSObjectRange = storage.GetOSSObjectRange
|
||||
getAliyunOSSObjectRange = storage.GetAliyunOSSObjectRange
|
||||
signedOSSObjectURL = storage.SignedOSSObjectURL
|
||||
|
||||
@@ -81,7 +81,7 @@ func (s *Service) testOSSSetting(scope string, ownerID string, actorID string, r
|
||||
}()
|
||||
|
||||
testKey := path.Join(value.PathPrefix, ".yingce-tests", scope, newID())
|
||||
if err := verifyOSSConnection(value, testKey); err != nil {
|
||||
if err := verifyOSSConnection(s.storageSettingWithRuntimePolicy(value), testKey); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
||||
@@ -281,7 +281,7 @@ func (s *Service) storeTaskMediaObject(resource *model.Resource, _ string, body
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return putOSSObject(setting, resource.ObjectKey, resource.MimeType, resource.Size, body)
|
||||
return putOSSObject(s.storageSettingWithRuntimePolicy(setting), resource.ObjectKey, resource.MimeType, resource.Size, body)
|
||||
}
|
||||
|
||||
// Cleanup is best effort only after durable completion. Expired leftovers are
|
||||
|
||||
Reference in New Issue
Block a user