diff --git a/CHANGELOG.md b/CHANGELOG.md index 97bef39..e5597fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,7 @@ This document outlines major changes between releases. - Use chi router instead of archived gorlilla/mux (#149) - Complete multipart upload doesn't unnecessary copy now. Thus, the total time of multipart upload was reduced by 2 times (#63) - Use gate key to form object owner (#175) +- Apply placement policies and copies if there is at least one valid value (#168) ### Removed - Drop `tree.service` param (now endpoints from `peers` section are used) (#133) diff --git a/api/handler/api.go b/api/handler/api.go index b042633..e6aea4a 100644 --- a/api/handler/api.go +++ b/api/handler/api.go @@ -57,13 +57,6 @@ type ( } ) -const ( - // DefaultPolicy is a default policy of placing containers in FrostFS if it's not set at the request. - DefaultPolicy = "REP 3" - // DefaultCopiesNumber is a default number of object copies that is enough to consider put successful if it's not set in config. - DefaultCopiesNumber uint32 = 0 -) - var _ api.Handler = (*handler)(nil) // New creates new api.Handler using given logger and client. diff --git a/cmd/s3-gw/app.go b/cmd/s3-gw/app.go index 2494a87..88c03fb 100644 --- a/cmd/s3-gw/app.go +++ b/cmd/s3-gw/app.go @@ -3,7 +3,6 @@ package main import ( "context" "encoding/hex" - "encoding/json" "fmt" "net/http" "os" @@ -166,14 +165,9 @@ func (a *App) initLayer(ctx context.Context) { } func newAppSettings(log *Logger, v *viper.Viper) *appSettings { - policies, err := newPlacementPolicy(log.logger, v) - if err != nil { - log.logger.Fatal(logs.FailedToCreateNewPolicyMapping, zap.Error(err)) - } - settings := &appSettings{ logLevel: log.lvl, - policies: policies, + policies: newPlacementPolicy(log.logger, v), xmlDecoder: xml.NewDecoderProvider(v.GetBool(cfgKludgeUseDefaultXMLNSForCompleteMultipartUpload)), maxClient: newMaxClients(v), } @@ -352,16 +346,10 @@ func getPools(ctx context.Context, logger *zap.Logger, cfg *viper.Viper) (*pool. return p, treePool, key } -func newPlacementPolicy(l *zap.Logger, v *viper.Viper) (*placementPolicy, error) { - policies := &placementPolicy{ - regionMap: make(map[string]netmap.PlacementPolicy), - defaultCopiesNumbers: []uint32{handler.DefaultCopiesNumber}, - } - - policies.updateCopiesNumbers(l, v) - policies.updateDefaultCopiesNumbers(l, v) - - return policies, policies.updatePolicy(v) +func newPlacementPolicy(l *zap.Logger, v *viper.Viper) *placementPolicy { + var policies placementPolicy + policies.update(l, v) + return &policies } func (p *placementPolicy) DefaultPlacementPolicy() netmap.PlacementPolicy { @@ -393,56 +381,18 @@ func (p *placementPolicy) DefaultCopiesNumbers() []uint32 { } func (p *placementPolicy) update(l *zap.Logger, v *viper.Viper) { - if err := p.updatePolicy(v); err != nil { - l.Warn(logs.PoliciesWontBeUpdated, zap.Error(err)) - } - - p.updateCopiesNumbers(l, v) - p.updateDefaultCopiesNumbers(l, v) -} - -func (p *placementPolicy) updatePolicy(v *viper.Viper) error { - defaultPlacementPolicy, err := fetchDefaultPolicy(v) - if err != nil { - return err - } - - regionMap, err := fetchRegionMappingPolicies(v) - if err != nil { - return err - } + defaultPolicy := fetchDefaultPolicy(l, v) + regionMap := fetchRegionMappingPolicies(l, v) + defaultCopies := fetchDefaultCopiesNumbers(l, v) + copiesNumbers := fetchCopiesNumbers(l, v) p.mu.Lock() - p.defaultPolicy = defaultPlacementPolicy + defer p.mu.Unlock() + + p.defaultPolicy = defaultPolicy p.regionMap = regionMap - p.mu.Unlock() - - return nil -} - -func (p *placementPolicy) updateCopiesNumbers(l *zap.Logger, v *viper.Viper) { - if newCopiesNumbers, err := fetchCopiesNumbers(l, v); err != nil { - l.Warn(logs.CopiesNumbersWontBeUpdated, zap.Error(err)) - } else { - p.mu.Lock() - p.copiesNumbers = newCopiesNumbers - p.mu.Unlock() - } -} - -func (p *placementPolicy) updateDefaultCopiesNumbers(l *zap.Logger, v *viper.Viper) { - configuredValues, err := fetchDefaultCopiesNumbers(v) - - if err == nil { - p.mu.Lock() - p.defaultCopiesNumbers = configuredValues - p.mu.Unlock() - l.Info(logs.DefaultCopiesNumbers, zap.Uint32s("vector", p.defaultCopiesNumbers)) - return - } - - l.Error(logs.CannotParseDefaultCopiesNumbers, zap.Error(err)) - l.Warn(logs.DefaultCopiesNumbersWontBeUpdated, zap.Uint32s("current value", p.DefaultCopiesNumbers())) + p.defaultCopiesNumbers = defaultCopies + p.copiesNumbers = copiesNumbers } func remove(list []string, element string) []string { @@ -729,26 +679,3 @@ func (a *App) initHandler() { a.log.Fatal(logs.CouldNotInitializeAPIHandler, zap.Error(err)) } } - -func readRegionMap(filePath string) (map[string]string, error) { - regionMap := make(map[string]string) - - if filePath == "" { - return regionMap, nil - } - - data, err := os.ReadFile(filePath) - if err != nil { - return nil, fmt.Errorf("coudln't read file '%s'", filePath) - } - - if err = json.Unmarshal(data, ®ionMap); err != nil { - return nil, fmt.Errorf("unmarshal policies: %w", err) - } - - if _, ok := regionMap[api.DefaultLocationConstraint]; ok { - return nil, fmt.Errorf("config overrides %s location constraint", api.DefaultLocationConstraint) - } - - return regionMap, nil -} diff --git a/cmd/s3-gw/app_settings.go b/cmd/s3-gw/app_settings.go index 7c93777..b6c3a2c 100644 --- a/cmd/s3-gw/app_settings.go +++ b/cmd/s3-gw/app_settings.go @@ -1,6 +1,7 @@ package main import ( + "encoding/json" "fmt" "os" "path" @@ -10,6 +11,7 @@ import ( "strings" "time" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/handler" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/notifications" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/resolver" @@ -31,11 +33,14 @@ const ( defaultShutdownTimeout = 15 * time.Second defaultPoolErrorThreshold uint32 = 100 + defaultPlacementPolicy = "REP 3" defaultMaxClientsCount = 100 defaultMaxClientsDeadline = time.Second * 30 ) +var defaultCopiesNumbers = []uint32{0} + const ( // Settings. // Logger. cfgLoggerLevel = "logger.level" @@ -225,18 +230,24 @@ func fetchMaxClientsDeadline(cfg *viper.Viper) time.Duration { return maxClientsDeadline } -func fetchDefaultPolicy(cfg *viper.Viper) (netmap.PlacementPolicy, error) { - defaultPolicyStr := handler.DefaultPolicy +func fetchDefaultPolicy(l *zap.Logger, cfg *viper.Viper) netmap.PlacementPolicy { + var policy netmap.PlacementPolicy + if cfg.IsSet(cfgPolicyDefault) { - defaultPolicyStr = cfg.GetString(cfgPolicyDefault) + policyStr := cfg.GetString(cfgPolicyDefault) + if err := policy.DecodeString(policyStr); err != nil { + l.Warn(logs.FailedToParseDefaultLocationConstraint, + zap.String("policy", policyStr), zap.String("default", defaultPlacementPolicy), zap.Error(err)) + } else { + return policy + } } - var defaultPlacementPolicy netmap.PlacementPolicy - if err := defaultPlacementPolicy.DecodeString(defaultPolicyStr); err != nil { - return netmap.PlacementPolicy{}, fmt.Errorf("parse default policy '%s': %w", defaultPolicyStr, err) + if err := policy.DecodeString(defaultPlacementPolicy); err != nil { + l.Fatal("failed to parse default 'default' location constraint", zap.String("policy", defaultPlacementPolicy)) } - return defaultPlacementPolicy, nil + return policy } func fetchNATSTimeout(cfg *viper.Viper, l *zap.Logger) time.Duration { @@ -300,14 +311,21 @@ func fetchDefaultMaxAge(cfg *viper.Viper, l *zap.Logger) int { return defaultMaxAge } -func fetchRegionMappingPolicies(cfg *viper.Viper) (map[string]netmap.PlacementPolicy, error) { - regionPolicyMap, err := readRegionMap(cfg.GetString(cfgPolicyRegionMapFile)) +func fetchRegionMappingPolicies(l *zap.Logger, cfg *viper.Viper) map[string]netmap.PlacementPolicy { + filepath := cfg.GetString(cfgPolicyRegionMapFile) + regionPolicyMap, err := readRegionMap(filepath) if err != nil { - return nil, fmt.Errorf("read region map file: %w", err) + l.Warn(logs.FailedToReadRegionMapFilePolicies, zap.String("file", filepath), zap.Error(err)) + return make(map[string]netmap.PlacementPolicy) } regionMap := make(map[string]netmap.PlacementPolicy, len(regionPolicyMap)) for region, policy := range regionPolicyMap { + if region == api.DefaultLocationConstraint { + l.Warn(logs.DefaultLocationConstraintCantBeOverriden, zap.String("policy", policy)) + continue + } + var pp netmap.PlacementPolicy if err = pp.DecodeString(policy); err == nil { regionMap[region] = pp @@ -319,29 +337,49 @@ func fetchRegionMappingPolicies(cfg *viper.Viper) (map[string]netmap.PlacementPo continue } - return nil, fmt.Errorf("parse region '%s' to policy mapping: %w", region, err) + l.Warn(logs.FailedToParseLocationConstraint, zap.String("region", region), zap.String("policy", policy)) + } + + return regionMap +} + +func readRegionMap(filePath string) (map[string]string, error) { + regionMap := make(map[string]string) + + if filePath == "" { + return regionMap, nil + } + + data, err := os.ReadFile(filePath) + if err != nil { + return nil, fmt.Errorf("coudln't read file '%s'", filePath) + } + + if err = json.Unmarshal(data, ®ionMap); err != nil { + return nil, fmt.Errorf("unmarshal policies: %w", err) } return regionMap, nil } -func fetchDefaultCopiesNumbers(v *viper.Viper) ([]uint32, error) { +func fetchDefaultCopiesNumbers(l *zap.Logger, v *viper.Viper) []uint32 { unparsed := v.GetStringSlice(cfgSetCopiesNumber) - var result []uint32 - + result := make([]uint32, len(unparsed)) for i := range unparsed { parsedValue, err := strconv.ParseUint(unparsed[i], 10, 32) if err != nil { - return nil, err + l.Warn(logs.FailedToParseDefaultCopiesNumbers, + zap.Strings("copies numbers", unparsed), zap.Uint32s("default", defaultCopiesNumbers), zap.Error(err)) + return defaultCopiesNumbers } - result = append(result, uint32(parsedValue)) + result[i] = uint32(parsedValue) } - return result, nil + return result } -func fetchCopiesNumbers(l *zap.Logger, v *viper.Viper) (map[string][]uint32, error) { - var copiesNums = make(map[string][]uint32) +func fetchCopiesNumbers(l *zap.Logger, v *viper.Viper) map[string][]uint32 { + copiesNums := make(map[string][]uint32) for i := 0; ; i++ { key := cfgCopiesNumbers + "." + strconv.Itoa(i) + "." constraint := v.GetString(key + "location_constraint") @@ -355,7 +393,9 @@ func fetchCopiesNumbers(l *zap.Logger, v *viper.Viper) (map[string][]uint32, err for j := range vector { parsedValue, err := strconv.ParseUint(vector[j], 10, 32) if err != nil { - return nil, err + l.Warn(logs.FailedToParseCopiesNumbers, zap.String("location", constraint), + zap.Strings("copies numbers", vector), zap.Error(err)) + continue } vector32[j] = uint32(parsedValue) } @@ -363,7 +403,7 @@ func fetchCopiesNumbers(l *zap.Logger, v *viper.Viper) (map[string][]uint32, err copiesNums[constraint] = vector32 l.Info(logs.ConstraintAdded, zap.String("location", constraint), zap.Strings("copies numbers", vector)) } - return copiesNums, nil + return copiesNums } func fetchPeers(l *zap.Logger, v *viper.Viper) []pool.NodeParam { diff --git a/internal/logs/logs.go b/internal/logs/logs.go index c85fb2e..46081aa 100644 --- a/internal/logs/logs.go +++ b/internal/logs/logs.go @@ -1,114 +1,114 @@ package logs const ( - RequestUnmatched = "request unmatched" // Error in ../../api/router.go - CheckContainer = "check container" // Info in ../../authmate/authmate.go - CreateContainer = "create container" // Info in ../../authmate/authmate.go - StoreBearerTokenIntoFrostFS = "store bearer token into FrostFS" // Info in ../../authmate/authmate.go - UpdateAccessCredObjectIntoFrostFS = "update access cred object into FrostFS" // Info in ../../authmate/authmate.go - MetricsAreDisabled = "metrics are disabled" // Warn in ../../metrics/app.go - FoundMoreThanOneUnversionedNode = "found more than one unversioned node" // Debug in ../../pkg/service/tree/tree.go - ServiceIsRunning = "service is running" // Info in ../../cmd/s3-gw/service.go - ServiceCouldntStartOnConfiguredPort = "service couldn't start on configured port" // Warn in ../../cmd/s3-gw/service.go - ServiceHasntStartedSinceItsDisabled = "service hasn't started since it's disabled" // Info in ../../cmd/s3-gw/service.go - ShuttingDownService = "shutting down service" // Info in ../../cmd/s3-gw/service.go - ContainerResolverWillBeDisabled = "container resolver will be disabled because of resolvers 'resolver_order' is empty" // Info in ../../cmd/s3-gw/app.go - FailedToInitializeTracing = "failed to initialize tracing" // Warn in ../../cmd/s3-gw/app.go - TracingConfigUpdated = "tracing config updated" // Info in ../../cmd/s3-gw/app.go - FailedToShutdownTracing = "failed to shutdown tracing" // Warn in ../../cmd/s3-gw/app.go - UsingCredentials = "using credentials" // Info in ../../cmd/s3-gw/app.go - PoliciesWontBeUpdated = "policies won't be updated" // Warn in ../../cmd/s3-gw/app.go - CopiesNumbersWontBeUpdated = "copies numbers won't be updated" // Warn in ../../cmd/s3-gw/app.go - DefaultCopiesNumbers = "default copies numbers" // Info in ../../cmd/s3-gw/app.go - CannotParseDefaultCopiesNumbers = "cannot parse default copies numbers" // Error in ../../cmd/s3-gw/app.go - DefaultCopiesNumbersWontBeUpdated = "default copies numbers won't be updated" // Warn in ../../cmd/s3-gw/app.go - ApplicationStarted = "application started" // Info in ../../cmd/s3-gw/app.go - ApplicationFinished = "application finished" // Info in ../../cmd/s3-gw/app.go - FetchDomainsPrepareToUseAPI = "fetch domains, prepare to use API" // Info in ../../cmd/s3-gw/app.go - StartingServer = "starting server" // Info in ../../cmd/s3-gw/app.go - StoppingServer = "stopping server" // Info in ../../cmd/s3-gw/app.go - SIGHUPConfigReloadStarted = "SIGHUP config reload started" // Info in ../../cmd/s3-gw/app.go - FailedToReloadConfigBecauseItsMissed = "failed to reload config because it's missed" // Warn in ../../cmd/s3-gw/app.go - FailedToReloadConfig = "failed to reload config" // Warn in ../../cmd/s3-gw/app.go - FailedToReloadResolvers = "failed to reload resolvers" // Warn in ../../cmd/s3-gw/app.go - FailedToReloadServerParameters = "failed to reload server parameters" // Warn in ../../cmd/s3-gw/app.go - SIGHUPConfigReloadCompleted = "SIGHUP config reload completed" // Info in ../../cmd/s3-gw/app.go - LogLevelWontBeUpdated = "log level won't be updated" // Warn in ../../cmd/s3-gw/app.go - FailedToAddServer = "failed to add server" // Warn in ../../cmd/s3-gw/app.go - AddServer = "add server" // Info in ../../cmd/s3-gw/app.go - ResolverNNSWontBeUsedSinceRPCEndpointIsntProvided = "resolver 'nns' won't be used since 'rpc_endpoint' isn't provided" // Warn in ../../cmd/s3-gw/app.go - InvalidLifetimeUsingDefaultValue = "invalid lifetime, using default value (in seconds)" // Error in ../../cmd/s3-gw/app_settings.go - InvalidCacheSizeUsingDefaultValue = "invalid cache size, using default value" // Error in ../../cmd/s3-gw/app_settings.go - ConstraintAdded = "constraint added" // Info in ../../cmd/s3-gw/app_settings.go - SkipEmptyAddress = "skip, empty address" // Warn in ../../cmd/s3-gw/app_settings.go - AddedStoragePeer = "added storage peer" // Info in ../../cmd/s3-gw/app_settings.go - PrepareConnectionPool = "prepare connection pool" // Debug in ../../cmd/s3-authmate/modules/utils.go - InvalidCacheEntryType = "invalid cache entry type" // Warn in ../../api/cache/* - InvalidCacheKeyType = "invalid cache key type" // Warn in ../../api/cache/objectslist.go - ObjectIsCopied = "object is copied" // Info in ../../api/handler/copy.go - CouldntSendNotification = "couldn't send notification: %w" // Error in ../../api/handler/* - FailedToSendTestEventBecauseNotificationsIsDisabled = "failed to send test event because notifications is disabled" // Warn in ../../api/handler/notifications.go - RequestFailed = "request failed" // Error in ../../api/handler/util.go - GetBucketInfo = "get bucket info" // Warn in ../../api/handler/cors.go - GetBucketCors = "get bucket cors" // Warn in ../../api/handler/cors.go - SomeACLNotFullyMapped = "some acl not fully mapped" // Warn in ../../api/handler/acl.go - CouldntDeleteObjects = "couldn't delete objects" // Error in ../../api/handler/delete.go - NotificatorIsDisabledS3WontProduceNotificationEvents = "notificator is disabled, s3 won't produce notification events" // Warn in ../../api/handler/api.go - CouldntGetBucketVersioning = "couldn't get bucket versioning" // Warn in ../../api/handler/put.go - BucketIsCreated = "bucket is created" // Info in ../../api/handler/put.go - CouldntDeleteNotificationConfigurationObject = "couldn't delete notification configuration object" // Error in ../../api/layer/notifications.go - CouldNotParseContainerObjectLockEnabledAttribute = "could not parse container object lock enabled attribute" // Error in ../../api/layer/container.go - CouldNotListUserContainers = "could not list user containers" // Error in ../../api/layer/container.go - CouldNotFetchContainerInfo = "could not fetch container info" // Error in ../../api/layer/container.go - MismatchedObjEncryptionInfo = "mismatched obj encryptionInfo" // Warn in ../../api/layer/multipart_upload.go - UploadPart = "upload part" // Debug in ../../api/layer/multipart_upload.go - CouldntDeleteOldPartObject = "couldn't delete old part object" // Error in ../../api/layer/multipart_upload.go - CouldNotPutCompletedObject = "could not put a completed object (multipart upload)" // Error in ../../api/layer/multipart_upload.go - CouldNotDeleteUploadPart = "could not delete upload part" // Warn in ../../api/layer/multipart_upload.go - CouldntDeletePart = "couldn't delete part" // Warn in ../../api/layer/multipart_upload.go - PartDetails = "part details" // Debug in ../../api/layer/multipart_upload.go - GetObject = "get object" // Debug in ../../api/layer/layer.go - ObjectAlreadyRemoved = "object already removed" // Debug in ../../api/layer/layer.go - ObjectNotFound = "object not found" // Debug in ../../api/layer/layer.go - ResolveBucket = "resolve bucket" // Info in ../../api/layer/layer.go - CouldntDeleteCorsObject = "couldn't delete cors object" // Error in ../../api/layer/cors.go - PutObject = "put object" // Debug in ../../api/layer/object.go - FailedToDiscardPutPayloadProbablyGoroutineLeaks = "failed to discard put payload, probably goroutine leaks" // Warn in ../../api/layer/object.go - FailedToSubmitTaskToPool = "failed to submit task to pool" // Warn in ../../api/layer/object.go - CouldNotFetchObjectMeta = "could not fetch object meta" // Warn in ../../api/layer/object.go - GetTreeNode = "get tree node" // Debug in ../../api/layer/tagging.go - CouldntPutBucketInfoIntoCache = "couldn't put bucket info into cache" // Warn in ../../api/layer/cache.go - CouldntAddObjectToCache = "couldn't add object to cache" // Warn in ../../api/layer/cache.go - CouldntCacheAccessControlOperation = "couldn't cache access control operation" // Warn in ../../api/layer/cache.go - CouldntPutObjAddressToNameCache = "couldn't put obj address to name cache" // Warn in ../../api/layer/cache.go - CouldntCacheListOfObjects = "couldn't cache list of objects" // Warn in ../../api/layer/cache.go - CouldntCacheTags = "couldn't cache tags" // Error in ../../api/layer/cache.go - CouldntCacheLockInfo = "couldn't cache lock info" // Error in ../../api/layer/cache.go - CouldntCacheBucketSettings = "couldn't cache bucket settings" // Warn in ../../api/layer/cache.go - CouldntCacheCors = "couldn't cache cors" // Warn in ../../api/layer/cache.go - CouldntCacheNotificationConfiguration = "couldn't cache notification configuration" // Warn in ../../api/layer/cache.go - RequestEnd = "request end" // Info in ../../api/middleware/response.go - CouldntReceiveAccessBoxForGateKeyRandomKeyWillBeUsed = "couldn't receive access box for gate key, random key will be used" // Debug in ../../api/middleware/auth.go - FailedToPassAuthentication = "failed to pass authentication" // Error in ../../api/middleware/auth.go - FailedToResolveCID = "failed to resolve CID" // Debug in ../../api/middleware/metrics.go - RequestStart = "request start" // Info in ../../api/middleware/reqinfo.go - CouldNotHandleMessage = "could not handle message" // Error in ../../api/notifications/controller.go - CouldNotACKMessage = "could not ACK message" // Error in ../../api/notifications/controller.go - CouldntMarshalAnEvent = "couldn't marshal an event" // Error in ../../api/notifications/controller.go - CouldntSendAnEventToTopic = "couldn't send an event to topic" // Error in ../../api/notifications/controller.go - InvalidDefaultMaxAge = "invalid defaultMaxAge" // Fatal in ../../cmd/s3-gw/app_settings.go - CantShutDownService = "can't shut down service" // Panic in ../../cmd/s3-gw/service.go - CouldntGenerateRandomKey = "couldn't generate random key" // Fatal in ../../cmd/s3-gw/app.go - FailedToEnableNotifications = "failed to enable notifications" // Fatal in ../../cmd/s3-gw/app.go - CouldntInitializeLayer = "couldn't initialize layer" // Fatal in ../../cmd/s3-gw/app.go - FailedToCreateNewPolicyMapping = "failed to create new policy mapping" // Fatal in ../../cmd/s3-gw/app.go - FailedToCreateResolver = "failed to create resolver" // Fatal in ../../cmd/s3-gw/app.go - CouldNotLoadFrostFSPrivateKey = "could not load FrostFS private key" // Fatal in ../../cmd/s3-gw/app.go - FailedToCreateConnectionPool = "failed to create connection pool" // Fatal in ../../cmd/s3-gw/app.go - FailedToDialConnectionPool = "failed to dial connection pool" // Fatal in ../../cmd/s3-gw/app.go - FailedToCreateTreePool = "failed to create tree pool" // Fatal in ../../cmd/s3-gw/app.go - FailedToDialTreePool = "failed to dial tree pool" // Fatal in ../../cmd/s3-gw/app.go - ListenAndServe = "listen and serve" // Fatal in ../../cmd/s3-gw/app.go - NoHealthyServers = "no healthy servers" // Fatal in ../../cmd/s3-gw/app.go - CouldNotInitializeAPIHandler = "could not initialize API handler" // Fatal in ../../cmd/s3-gw/app.go + RequestUnmatched = "request unmatched" // Error in ../../api/router.go + CheckContainer = "check container" // Info in ../../authmate/authmate.go + CreateContainer = "create container" // Info in ../../authmate/authmate.go + StoreBearerTokenIntoFrostFS = "store bearer token into FrostFS" // Info in ../../authmate/authmate.go + UpdateAccessCredObjectIntoFrostFS = "update access cred object into FrostFS" // Info in ../../authmate/authmate.go + MetricsAreDisabled = "metrics are disabled" // Warn in ../../metrics/app.go + FoundMoreThanOneUnversionedNode = "found more than one unversioned node" // Debug in ../../pkg/service/tree/tree.go + ServiceIsRunning = "service is running" // Info in ../../cmd/s3-gw/service.go + ServiceCouldntStartOnConfiguredPort = "service couldn't start on configured port" // Warn in ../../cmd/s3-gw/service.go + ServiceHasntStartedSinceItsDisabled = "service hasn't started since it's disabled" // Info in ../../cmd/s3-gw/service.go + ShuttingDownService = "shutting down service" // Info in ../../cmd/s3-gw/service.go + ContainerResolverWillBeDisabled = "container resolver will be disabled because of resolvers 'resolver_order' is empty" // Info in ../../cmd/s3-gw/app.go + FailedToInitializeTracing = "failed to initialize tracing" // Warn in ../../cmd/s3-gw/app.go + TracingConfigUpdated = "tracing config updated" // Info in ../../cmd/s3-gw/app.go + FailedToShutdownTracing = "failed to shutdown tracing" // Warn in ../../cmd/s3-gw/app.go + UsingCredentials = "using credentials" // Info in ../../cmd/s3-gw/app.go + ApplicationStarted = "application started" // Info in ../../cmd/s3-gw/app.go + ApplicationFinished = "application finished" // Info in ../../cmd/s3-gw/app.go + FetchDomainsPrepareToUseAPI = "fetch domains, prepare to use API" // Info in ../../cmd/s3-gw/app.go + StartingServer = "starting server" // Info in ../../cmd/s3-gw/app.go + StoppingServer = "stopping server" // Info in ../../cmd/s3-gw/app.go + SIGHUPConfigReloadStarted = "SIGHUP config reload started" // Info in ../../cmd/s3-gw/app.go + FailedToReloadConfigBecauseItsMissed = "failed to reload config because it's missed" // Warn in ../../cmd/s3-gw/app.go + FailedToReloadConfig = "failed to reload config" // Warn in ../../cmd/s3-gw/app.go + FailedToReloadResolvers = "failed to reload resolvers" // Warn in ../../cmd/s3-gw/app.go + FailedToReloadServerParameters = "failed to reload server parameters" // Warn in ../../cmd/s3-gw/app.go + SIGHUPConfigReloadCompleted = "SIGHUP config reload completed" // Info in ../../cmd/s3-gw/app.go + LogLevelWontBeUpdated = "log level won't be updated" // Warn in ../../cmd/s3-gw/app.go + FailedToAddServer = "failed to add server" // Warn in ../../cmd/s3-gw/app.go + AddServer = "add server" // Info in ../../cmd/s3-gw/app.go + ResolverNNSWontBeUsedSinceRPCEndpointIsntProvided = "resolver 'nns' won't be used since 'rpc_endpoint' isn't provided" // Warn in ../../cmd/s3-gw/app.go + InvalidLifetimeUsingDefaultValue = "invalid lifetime, using default value (in seconds)" // Error in ../../cmd/s3-gw/app_settings.go + InvalidCacheSizeUsingDefaultValue = "invalid cache size, using default value" // Error in ../../cmd/s3-gw/app_settings.go + FailedToParseDefaultLocationConstraint = "failed to parse 'default' location constraint, default one will be used" // Warn in cmd/s3-gw/app_settings.go + FailedToReadRegionMapFilePolicies = "failed to read region map file, policies will be empty" // Warn in cmd/s3-gw/app_settings.go + DefaultLocationConstraintCantBeOverriden = "'default' location constraint can't be overriden by custom policy, use 'placement_policy.default'" // Warn in cmd/s3-gw/app_settings.go + FailedToParseLocationConstraint = "failed to parse location constraint, it cannot be used" // Warn in cmd/s3-gw/app_settings.go + FailedToParseDefaultCopiesNumbers = "failed to parse 'default' copies numbers, default one will be used" // Warn in cmd/s3-gw/app_settings.go + FailedToParseCopiesNumbers = "failed to parse copies numbers, skip" // Warn in cmd/s3-gw/app_settings.go + ConstraintAdded = "constraint added" // Info in ../../cmd/s3-gw/app_settings.go + SkipEmptyAddress = "skip, empty address" // Warn in ../../cmd/s3-gw/app_settings.go + AddedStoragePeer = "added storage peer" // Info in ../../cmd/s3-gw/app_settings.go + PrepareConnectionPool = "prepare connection pool" // Debug in ../../cmd/s3-authmate/modules/utils.go + InvalidCacheEntryType = "invalid cache entry type" // Warn in ../../api/cache/* + InvalidCacheKeyType = "invalid cache key type" // Warn in ../../api/cache/objectslist.go + ObjectIsCopied = "object is copied" // Info in ../../api/handler/copy.go + CouldntSendNotification = "couldn't send notification: %w" // Error in ../../api/handler/* + FailedToSendTestEventBecauseNotificationsIsDisabled = "failed to send test event because notifications is disabled" // Warn in ../../api/handler/notifications.go + RequestFailed = "request failed" // Error in ../../api/handler/util.go + GetBucketInfo = "get bucket info" // Warn in ../../api/handler/cors.go + GetBucketCors = "get bucket cors" // Warn in ../../api/handler/cors.go + SomeACLNotFullyMapped = "some acl not fully mapped" // Warn in ../../api/handler/acl.go + CouldntDeleteObjects = "couldn't delete objects" // Error in ../../api/handler/delete.go + NotificatorIsDisabledS3WontProduceNotificationEvents = "notificator is disabled, s3 won't produce notification events" // Warn in ../../api/handler/api.go + CouldntGetBucketVersioning = "couldn't get bucket versioning" // Warn in ../../api/handler/put.go + BucketIsCreated = "bucket is created" // Info in ../../api/handler/put.go + CouldntDeleteNotificationConfigurationObject = "couldn't delete notification configuration object" // Error in ../../api/layer/notifications.go + CouldNotParseContainerObjectLockEnabledAttribute = "could not parse container object lock enabled attribute" // Error in ../../api/layer/container.go + CouldNotListUserContainers = "could not list user containers" // Error in ../../api/layer/container.go + CouldNotFetchContainerInfo = "could not fetch container info" // Error in ../../api/layer/container.go + MismatchedObjEncryptionInfo = "mismatched obj encryptionInfo" // Warn in ../../api/layer/multipart_upload.go + UploadPart = "upload part" // Debug in ../../api/layer/multipart_upload.go + CouldntDeleteOldPartObject = "couldn't delete old part object" // Error in ../../api/layer/multipart_upload.go + CouldNotPutCompletedObject = "could not put a completed object (multipart upload)" // Error in ../../api/layer/multipart_upload.go + CouldNotDeleteUploadPart = "could not delete upload part" // Warn in ../../api/layer/multipart_upload.go + CouldntDeletePart = "couldn't delete part" // Warn in ../../api/layer/multipart_upload.go + PartDetails = "part details" // Debug in ../../api/layer/multipart_upload.go + GetObject = "get object" // Debug in ../../api/layer/layer.go + ObjectAlreadyRemoved = "object already removed" // Debug in ../../api/layer/layer.go + ObjectNotFound = "object not found" // Debug in ../../api/layer/layer.go + ResolveBucket = "resolve bucket" // Info in ../../api/layer/layer.go + CouldntDeleteCorsObject = "couldn't delete cors object" // Error in ../../api/layer/cors.go + PutObject = "put object" // Debug in ../../api/layer/object.go + FailedToDiscardPutPayloadProbablyGoroutineLeaks = "failed to discard put payload, probably goroutine leaks" // Warn in ../../api/layer/object.go + FailedToSubmitTaskToPool = "failed to submit task to pool" // Warn in ../../api/layer/object.go + CouldNotFetchObjectMeta = "could not fetch object meta" // Warn in ../../api/layer/object.go + GetTreeNode = "get tree node" // Debug in ../../api/layer/tagging.go + CouldntPutBucketInfoIntoCache = "couldn't put bucket info into cache" // Warn in ../../api/layer/cache.go + CouldntAddObjectToCache = "couldn't add object to cache" // Warn in ../../api/layer/cache.go + CouldntCacheAccessControlOperation = "couldn't cache access control operation" // Warn in ../../api/layer/cache.go + CouldntPutObjAddressToNameCache = "couldn't put obj address to name cache" // Warn in ../../api/layer/cache.go + CouldntCacheListOfObjects = "couldn't cache list of objects" // Warn in ../../api/layer/cache.go + CouldntCacheTags = "couldn't cache tags" // Error in ../../api/layer/cache.go + CouldntCacheLockInfo = "couldn't cache lock info" // Error in ../../api/layer/cache.go + CouldntCacheBucketSettings = "couldn't cache bucket settings" // Warn in ../../api/layer/cache.go + CouldntCacheCors = "couldn't cache cors" // Warn in ../../api/layer/cache.go + CouldntCacheNotificationConfiguration = "couldn't cache notification configuration" // Warn in ../../api/layer/cache.go + RequestEnd = "request end" // Info in ../../api/middleware/response.go + CouldntReceiveAccessBoxForGateKeyRandomKeyWillBeUsed = "couldn't receive access box for gate key, random key will be used" // Debug in ../../api/middleware/auth.go + FailedToPassAuthentication = "failed to pass authentication" // Error in ../../api/middleware/auth.go + FailedToResolveCID = "failed to resolve CID" // Debug in ../../api/middleware/metrics.go + RequestStart = "request start" // Info in ../../api/middleware/reqinfo.go + CouldNotHandleMessage = "could not handle message" // Error in ../../api/notifications/controller.go + CouldNotACKMessage = "could not ACK message" // Error in ../../api/notifications/controller.go + CouldntMarshalAnEvent = "couldn't marshal an event" // Error in ../../api/notifications/controller.go + CouldntSendAnEventToTopic = "couldn't send an event to topic" // Error in ../../api/notifications/controller.go + InvalidDefaultMaxAge = "invalid defaultMaxAge" // Fatal in ../../cmd/s3-gw/app_settings.go + CantShutDownService = "can't shut down service" // Panic in ../../cmd/s3-gw/service.go + CouldntGenerateRandomKey = "couldn't generate random key" // Fatal in ../../cmd/s3-gw/app.go + FailedToEnableNotifications = "failed to enable notifications" // Fatal in ../../cmd/s3-gw/app.go + CouldntInitializeLayer = "couldn't initialize layer" // Fatal in ../../cmd/s3-gw/app.go + FailedToCreateResolver = "failed to create resolver" // Fatal in ../../cmd/s3-gw/app.go + CouldNotLoadFrostFSPrivateKey = "could not load FrostFS private key" // Fatal in ../../cmd/s3-gw/app.go + FailedToCreateConnectionPool = "failed to create connection pool" // Fatal in ../../cmd/s3-gw/app.go + FailedToDialConnectionPool = "failed to dial connection pool" // Fatal in ../../cmd/s3-gw/app.go + FailedToCreateTreePool = "failed to create tree pool" // Fatal in ../../cmd/s3-gw/app.go + FailedToDialTreePool = "failed to dial tree pool" // Fatal in ../../cmd/s3-gw/app.go + ListenAndServe = "listen and serve" // Fatal in ../../cmd/s3-gw/app.go + NoHealthyServers = "no healthy servers" // Fatal in ../../cmd/s3-gw/app.go + CouldNotInitializeAPIHandler = "could not initialize API handler" // Fatal in ../../cmd/s3-gw/app.go )