Documentation ¶
Index ¶
- Constants
- func GetGitalyProcessTempDir(parentDir string, processID int) string
- func NewLocator(conf Cfg) storage.Locator
- func PruneOldGitalyProcessDirectories(log log.FieldLogger, directory string) error
- func SetupRuntimeDirectory(cfg Cfg, processID int) (string, error)
- type Cfg
- func (cfg *Cfg) BinaryPath(binaryName string) string
- func (cfg *Cfg) InternalSocketDir() string
- func (cfg *Cfg) InternalSocketPath() string
- func (cfg *Cfg) Storage(storageName string) (Storage, bool)
- func (cfg *Cfg) StoragePath(storageName string) (string, bool)
- func (cfg *Cfg) Validate() error
- func (cfg *Cfg) ValidateV2() error
- type Concurrency
- type DailyJob
- type Git
- type GitConfig
- type Gitlab
- type GitlabShell
- type HTTPSettings
- type Hooks
- type Logging
- type PackObjectsLimiting
- type RateLimiting
- type Sentry
- type Storage
- type StreamCacheConfig
- type TLS
Constants ¶
const ( // GitalyDataPrefix is the top-level directory we use to store system // (non-user) data. We need to be careful that this path does not clash // with any directory name that could be provided by a user. The '+' // character is not allowed in GitLab namespaces or repositories. GitalyDataPrefix = "+gitaly" )
Variables ¶
This section is empty.
Functions ¶
func GetGitalyProcessTempDir ¶
GetGitalyProcessTempDir constructs a temporary directory name for the current gitaly process. This way, we can clean up old temporary directories by inspecting the pid attached to the folder.
func NewLocator ¶
NewLocator returns locator based on the provided configuration struct. As it creates a shallow copy of the provided struct changes made into provided struct may affect result of methods implemented by it.
func PruneOldGitalyProcessDirectories ¶
func PruneOldGitalyProcessDirectories(log log.FieldLogger, directory string) error
PruneOldGitalyProcessDirectories removes leftover temporary directories that belonged to processes that no longer exist. Directories are expected to be in the form gitaly-<pid>. The removals are logged prior to being executed. Unexpected directory entries are logged but not removed.
func SetupRuntimeDirectory ¶
SetupRuntimeDirectory creates a new runtime directory. Runtime directory contains internal runtime data generated by Gitaly such as the internal sockets. If cfg.RuntimeDir is set, it's used as the parent directory for the runtime directory. Runtime directory owner process can be identified by the suffix process ID suffixed in the directory name. If a directory already exists for this process' ID, it's removed and recreated. If cfg.RuntimeDir is not set, a temporary directory is used instead. A directory is created for the internal socket as well since it is expected to be present in the runtime directory. SetupRuntimeDirectory returns the absolute path to the created runtime directory.
Types ¶
type Cfg ¶
type Cfg struct { // ConfigCommand specifies the path to an executable that Gitaly will run after loading the // initial configuration from disk. The executable is expected to write JSON-formatted // configuration to its standard output that we will then deserialize and merge back into // the initially-loaded configuration again. This is an easy mechanism to generate parts of // the configuration at runtime, like for example secrets. ConfigCommand string `toml:"config_command,omitempty" json:"config_command"` SocketPath string `toml:"socket_path,omitempty" json:"socket_path" split_words:"true"` ListenAddr string `toml:"listen_addr,omitempty" json:"listen_addr" split_words:"true"` TLSListenAddr string `toml:"tls_listen_addr,omitempty" json:"tls_listen_addr" split_words:"true"` PrometheusListenAddr string `toml:"prometheus_listen_addr,omitempty" json:"prometheus_listen_addr" split_words:"true"` BinDir string `toml:"bin_dir,omitempty" json:"bin_dir"` RuntimeDir string `toml:"runtime_dir,omitempty" json:"runtime_dir"` Git Git `toml:"git,omitempty" json:"git" envconfig:"git"` Storages []Storage `toml:"storage,omitempty" json:"storage" envconfig:"storage"` Logging Logging `toml:"logging,omitempty" json:"logging" envconfig:"logging"` Prometheus prometheus.Config `toml:"prometheus,omitempty" json:"prometheus"` Auth auth.Config `toml:"auth,omitempty" json:"auth"` TLS TLS `toml:"tls,omitempty" json:"tls"` Gitlab Gitlab `toml:"gitlab,omitempty" json:"gitlab"` GitlabShell GitlabShell `toml:"gitlab-shell,omitempty" json:"gitlab-shell"` Hooks Hooks `toml:"hooks,omitempty" json:"hooks"` Concurrency []Concurrency `toml:"concurrency,omitempty" json:"concurrency"` RateLimiting []RateLimiting `toml:"rate_limiting,omitempty" json:"rate_limiting"` GracefulRestartTimeout duration.Duration `toml:"graceful_restart_timeout,omitempty" json:"graceful_restart_timeout"` DailyMaintenance DailyJob `toml:"daily_maintenance,omitempty" json:"daily_maintenance"` Cgroups cgroups.Config `toml:"cgroups,omitempty" json:"cgroups"` PackObjectsCache StreamCacheConfig `toml:"pack_objects_cache,omitempty" json:"pack_objects_cache"` PackObjectsLimiting PackObjectsLimiting `toml:"pack_objects_limiting,omitempty" json:"pack_objects_limiting"` }
Cfg is a container for all config derived from config.toml.
func Load ¶
Load initializes the Config variable from file and the environment. Environment variables take precedence over the file.
func (*Cfg) BinaryPath ¶
BinaryPath returns the path to a given binary. BinaryPath does not do any validation, it simply joins the binaryName with the correct base directory depending on whether the binary is a packed binary or not.
func (*Cfg) InternalSocketDir ¶
InternalSocketDir returns the location of the internal socket directory.
func (*Cfg) InternalSocketPath ¶
InternalSocketPath is the path to the internal Gitaly socket.
func (*Cfg) StoragePath ¶
StoragePath looks up the base path for storageName. The second boolean return value indicates if anything was found.
func (*Cfg) ValidateV2 ¶
ValidateV2 is a new validation method that is a replacement for the existing Validate. It exists as a demonstration of the new validation implementation based on the usage of the cfgerror package.
type Concurrency ¶
type Concurrency struct { // RPC is the name of the RPC to set concurrency limits for RPC string `toml:"rpc" json:"rpc"` // MaxPerRepo is the maximum number of concurrent calls for a given repository MaxPerRepo int `toml:"max_per_repo" json:"max_per_repo"` // MaxQueueSize is the maximum number of requests in the queue waiting to be picked up // after which subsequent requests will return with an error. MaxQueueSize int `toml:"max_queue_size" json:"max_queue_size"` // MaxQueueWait is the maximum time a request can remain in the concurrency queue // waiting to be picked up by Gitaly MaxQueueWait duration.Duration `toml:"max_queue_wait" json:"max_queue_wait"` }
Concurrency allows endpoints to be limited to a maximum concurrency per repo. Requests that come in after the maximum number of concurrent requests are in progress will wait in a queue that is bounded by MaxQueueSize.
type DailyJob ¶
type DailyJob struct { Hour uint `toml:"start_hour,omitempty" json:"start_hour"` Minute uint `toml:"start_minute,omitempty" json:"start_minute"` Duration duration.Duration `toml:"duration,omitempty" json:"duration"` Storages []string `toml:"storages,omitempty" json:"storages"` // Disabled will completely disable a daily job, even in cases where a // default schedule is implied Disabled bool `toml:"disabled,omitempty" json:"disabled"` }
DailyJob enables a daily task to be scheduled for specific storages
type Git ¶
type Git struct { UseBundledBinaries bool `toml:"use_bundled_binaries,omitempty" json:"use_bundled_binaries"` BinPath string `toml:"bin_path,omitempty" json:"bin_path"` CatfileCacheSize int `toml:"catfile_cache_size,omitempty" json:"catfile_cache_size"` Config []GitConfig `toml:"config,omitempty" json:"config"` SigningKey string `toml:"signing_key,omitempty" json:"signing_key"` }
Git contains the settings for the Git executable
type GitConfig ¶
type GitConfig struct { // Key is the key of the config entry, e.g. `core.gc`. Key string `toml:"key,omitempty" json:"key"` // Value is the value of the config entry, e.g. `false`. Value string `toml:"value,omitempty" json:"value"` }
GitConfig contains a key-value pair which is to be passed to git as configuration.
func (GitConfig) GlobalArgs ¶
GlobalArgs generates a git `-c <key>=<value>` flag. Returns an error if `Validate()` fails to validate the config key.
type Gitlab ¶
type Gitlab struct { URL string `toml:"url,omitempty" json:"url"` RelativeURLRoot string `toml:"relative_url_root,omitempty" json:"relative_url_root"` // For UNIX sockets only HTTPSettings HTTPSettings `toml:"http-settings,omitempty" json:"http_settings"` SecretFile string `toml:"secret_file,omitempty" json:"secret_file"` }
Gitlab contains settings required to connect to the Gitlab api
type GitlabShell ¶
type GitlabShell struct {
Dir string `toml:"dir" json:"dir"`
}
GitlabShell contains the settings required for executing `gitlab-shell`
func (GitlabShell) Validate ¶
func (gs GitlabShell) Validate() error
Validate runs validation on all fields and compose all found errors.
type HTTPSettings ¶
type HTTPSettings struct { ReadTimeout uint64 `toml:"read_timeout,omitempty" json:"read_timeout"` User string `toml:"user,omitempty" json:"user"` Password string `toml:"password,omitempty" json:"password"` CAFile string `toml:"ca_file,omitempty" json:"ca_file"` CAPath string `toml:"ca_path,omitempty" json:"ca_path"` }
HTTPSettings contains configuration settings used to setup HTTP transport and basic HTTP authorization.
func (HTTPSettings) Validate ¶
func (ss HTTPSettings) Validate() error
Validate runs validation on all fields and compose all found errors.
type Hooks ¶
type Hooks struct {
CustomHooksDir string `toml:"custom_hooks_dir,omitempty" json:"custom_hooks_dir"`
}
Hooks contains the settings required for hooks
type Logging ¶
type Logging struct { internallog.Config Sentry }
Logging contains the logging configuration for Gitaly
type PackObjectsLimiting ¶
type PackObjectsLimiting struct { // MaxConcurrency is the maximum number of concurrent pack objects processes // for a given key. MaxConcurrency int `toml:"max_concurrency,omitempty" json:"max_concurrency,omitempty"` // MaxQueueWait is the maximum time a request can remain in the concurrency queue // waiting to be picked up by Gitaly. MaxQueueWait duration.Duration `toml:"max_queue_wait,omitempty" json:"max_queue_wait,omitempty"` // MaxQueueLength is the maximum length of the request queue MaxQueueLength int `toml:"max_queue_length,omitempty" json:"max_queue_length,omitempty"` }
PackObjectsLimiting allows the concurrency of pack objects processes to be limited Requests that come in after the maximum number of concurrent pack objects processes have been reached will wait.
func (PackObjectsLimiting) Validate ¶
func (pol PackObjectsLimiting) Validate() error
Validate runs validation on all fields and compose all found errors.
type RateLimiting ¶
type RateLimiting struct { // RPC is the full name of the RPC including the service name RPC string `toml:"rpc" json:"rpc"` // Interval sets the interval with which the token bucket will // be refilled to what is configured in Burst. Interval duration.Duration `toml:"interval" json:"interval"` // Burst sets the capacity of the token bucket (see above). Burst int `toml:"burst" json:"burst"` }
RateLimiting allows endpoints to be limited to a maximum request rate per second. The rate limiter uses a concept of a "token bucket". In order to serve a request, a token is retrieved from the token bucket. The size of the token bucket is configured through the Burst value, while the rate at which the token bucket is refilled per second is configured through the RequestsPerSecond value.
type Sentry ¶
Sentry is a sentry.Config. We redefine this type to a different name so we can embed both structs into Logging
type StreamCacheConfig ¶
type StreamCacheConfig struct { Enabled bool `toml:"enabled" json:"enabled"` // Default: false Dir string `toml:"dir" json:"dir"` // Default: <FIRST STORAGE PATH>/+gitaly/PackObjectsCache MaxAge duration.Duration `toml:"max_age" json:"max_age"` // Default: 5m MinOccurrences int `toml:"min_occurrences" json:"min_occurrences"` }
StreamCacheConfig contains settings for a streamcache instance.
func (StreamCacheConfig) Validate ¶
func (scc StreamCacheConfig) Validate() error
Validate runs validation on all fields and compose all found errors.