Documentation ¶
Index ¶
- Variables
- func ContextWithExplicitFeatureFlags(ctx context.Context) context.Context
- func ContextWithFeatureFlag(ctx context.Context, flag FeatureFlag, enabled bool) context.Context
- func FromContext(ctx context.Context) map[FeatureFlag]bool
- func IncomingCtxWithFeatureFlag(ctx context.Context, flag FeatureFlag, enabled bool) context.Context
- func OutgoingCtxWithFeatureFlag(ctx context.Context, flag FeatureFlag, enabled bool) context.Context
- type FeatureFlag
Constants ¶
This section is empty.
Variables ¶
var AutocrlfConfig = NewFeatureFlag( "autocrlf_false", "v16.11.0", "https://gitlab.com/gitlab-org/gitaly/-/issues/4425", false, )
AutocrlfConfig changes the default global git configuration of autocrlf from `input` to `false`. This results in Gitaly being completely agnostic of line endings.
var BundleURI = NewFeatureFlag( "bundle_uri", "v16.6.0", "https://gitlab.com/gitlab-org/gitaly/-/issues/5656", false, )
BundleURI enables the use of git's bundle URI feature
var ( // EnableAllFeatureFlagsEnvVar will cause Gitaly to treat all feature flags as // enabled in case its value is set to `true`. Only used for testing purposes. EnableAllFeatureFlagsEnvVar = "GITALY_TESTING_ENABLE_ALL_FEATURE_FLAGS" )
var GPGSigning = NewFeatureFlag( "gpg_signing", "v16.2.0", "https://gitlab.com/gitlab-org/gitaly/-/issues/5361", false, )
GPGSigning enables the use of Git v2.41.
var GitV244 = NewFeatureFlag( "git_v244", "v16.11.0", "https://gitlab.com/gitlab-org/gitaly/-/issues/5906", false, )
GitV244 enables the use of Git v2.44
var LogGitTraces = NewFeatureFlag( "log_git_traces", "v16.9.0", "https://gitlab.com/gitlab-org/gitaly/-/issues/5700", false, )
LogGitTraces enables the collection of distributed traces via the git trace 2 API
var MailmapOptions = NewFeatureFlag( "mailmap_options", "v16.2.0", "https://gitlab.com/gitlab-org/gitaly/-/issues/5394", true, )
MailmapOptions enables the use of mailmap feature in GitLab
var ReturnStructuredErrorsInUserRevert = NewFeatureFlag( "return_structured_errors_in_revert", "v16.11.0", "https://gitlab.com/gitlab-org/gitaly/-/issues/5752", false, )
ReturnStructuredErrorsInUserRevert enables return structured errors in UserRevert. Modify the RPC UserRevert to return structured errors instead of inline errors. Modify the handling of the following four errors: 'Conflict', 'Changes Already Applied', 'Branch diverged', and 'CustomHookError'. Returns the corresponding structured error.
var UseResizableSemaphoreInConcurrencyLimiter = NewFeatureFlag( "use_resizable_semaphore_in_concurrency_limiter", "v16.5.0", "https://gitlab.com/gitlab-org/gitaly/-/issues/5581", true, )
UseResizableSemaphoreInConcurrencyLimiter enables the usage of limiter.resizableSemaphore in limiter.ConcurrencyLimiter. After the flag is enabled, the resizable semaphore implementation will be used, but with a static limit. There shouldn't be any changes in terms of functionality and resource usage.
var UseResizableSemaphoreLifoStrategy = NewFeatureFlag( "use_resizable_semaphore_lifo_strategy", "v16.10", "https://gitlab.com/gitlab-org/gitaly/-/issues/5396", false, )
UseResizableSemaphoreLifoStrategy enables the switching of queue mechanisms between FIFO and LIFO queues controlling how requests are queued up.
var UseUnifiedGetTreeEntries = NewFeatureFlag( "use_unified_get_tree_entries", "v16.10.0", "https://gitlab.com/gitlab-org/gitaly/-/issues/5829", false, )
UseUnifiedGetTreeEntries enables the use of the new unified code paths for the `GetTreeEntries` RPC. When this flag is enabled, the RPC will call the `sendTreeEntriesUnified()` function which has the following differences to the previous `sendTreeEntries()` function:
- repo.ReadTree() is used in both the recursive and non-recursive case. `catfile.TreeEntries` is no longer used.
- Structured errors returned for invalid or non-existent revisions and paths are slightly tweaked to be more semantically correct.
- An error is returned if the provided path is not treeish. Previously this simply resulted in an empty result set.
Functions ¶
func ContextWithExplicitFeatureFlags ¶
ContextWithExplicitFeatureFlags marks the context such that all feature flags which are checked must have been explicitly set in that context. If a feature flag wasn't set to an explicit value, then checking this feature flag will panic. This is not for use in production systems, but is intended for tests to verify that we test each feature flag properly.
func ContextWithFeatureFlag ¶
ContextWithFeatureFlag sets the feature flag in both the incoming and outgoing context.
func FromContext ¶
func FromContext(ctx context.Context) map[FeatureFlag]bool
FromContext returns the set of all feature flags defined in the context. This returns both feature flags that are currently defined by Gitaly, but may also return some that aren't defined by us in case they match the feature flag prefix but don't have a definition. This function also returns the state of the feature flag *as defined in the context*. This value may be overridden.
func IncomingCtxWithFeatureFlag ¶
func IncomingCtxWithFeatureFlag(ctx context.Context, flag FeatureFlag, enabled bool) context.Context
IncomingCtxWithFeatureFlag sets the feature flag for an incoming context. This is NOT meant for use in clients that transfer the context across process boundaries.
func OutgoingCtxWithFeatureFlag ¶
func OutgoingCtxWithFeatureFlag(ctx context.Context, flag FeatureFlag, enabled bool) context.Context
OutgoingCtxWithFeatureFlag sets the feature flag for an outgoing context.
Types ¶
type FeatureFlag ¶
type FeatureFlag struct { // Name is the name of the feature flag. Name string `json:"name"` // OnByDefault is the default value if the feature flag is not explicitly set in // the incoming context. OnByDefault bool `json:"on_by_default"` }
FeatureFlag gates the implementation of new or changed functionality.
func DefinedFlags ¶
func DefinedFlags() []FeatureFlag
DefinedFlags returns the set of feature flags that have been explicitly defined.
func FromMetadataKey ¶
func FromMetadataKey(metadataKey string) (FeatureFlag, error)
FromMetadataKey parses the given gRPC metadata key into a Gitaly feature flag and performs the necessary conversions. Returns an error in case the metadata does not refer to a feature flag.
This function tries to look up the default value via our set of flag definitions. In case the flag definition is unknown to Gitaly it assumes a default value of `false`.
func NewFeatureFlag ¶
func NewFeatureFlag(name, version, rolloutIssueURL string, onByDefault bool) FeatureFlag
NewFeatureFlag creates a new feature flag and adds it to the array of all existing feature flags. The name must be of the format `some_feature_flag`. Accepts a version and rollout issue URL as input that are not used for anything but only for the sake of linking to the feature flag rollout issue in the Gitaly project.
func (FeatureFlag) FormatWithValue ¶
func (ff FeatureFlag) FormatWithValue(enabled bool) string
FormatWithValue converts the feature flag into a string with the given state. Note that this function uses the feature flag name and not the raw metadata key as used in gRPC metadata.
func (FeatureFlag) IsDisabled ¶
func (ff FeatureFlag) IsDisabled(ctx context.Context) bool
IsDisabled determines whether the feature flag is disabled in the incoming context.
func (FeatureFlag) IsEnabled ¶
func (ff FeatureFlag) IsEnabled(ctx context.Context) bool
IsEnabled checks if the feature flag is enabled for the passed context. Only returns true if the metadata for the feature flag is set to "true"
func (FeatureFlag) MetadataKey ¶
func (ff FeatureFlag) MetadataKey() string
MetadataKey returns the key of the feature flag as it is present in the metadata map.
Source Files ¶
- context.go
- featureflag.go
- ff_autocrlf_config.go
- ff_bundle_uri.go
- ff_git_v244.go
- ff_gitaly_gpg_signing.go
- ff_log_git_traces.go
- ff_mailmap_options.go
- ff_return_structed_errors_in_revert.go
- ff_use_resizable_semaphore_in_concurrency_limiter.go
- ff_use_resizable_semaphore_lifo_strategy.go
- ff_use_unified_get_tree_entries.go