Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <psteinhardt@gitlab.com>2022-05-19 12:07:07 +0300
committerPatrick Steinhardt <psteinhardt@gitlab.com>2022-05-19 12:07:07 +0300
commit02630a2c8dbd8b00c6f3aad2f3c3adb6777b394c (patch)
tree85fc13f3cb420e5b54abea1b6da793ce8ccb0bbe
parentb1e3d1fd40ac62e452daee9662dd8c1af9a66691 (diff)
parent00e44ba6dd47ba7e089468698fb0dfa643d51edb (diff)
Merge branch 'jc-cgroups-handle-nil-repository' into 'master'
cgroups: Handle nil repo See merge request gitlab-org/gitaly!4572
-rw-r--r--internal/cgroups/v1_linux.go10
-rw-r--r--internal/cgroups/v1_linux_test.go47
2 files changed, 44 insertions, 13 deletions
diff --git a/internal/cgroups/v1_linux.go b/internal/cgroups/v1_linux.go
index 49802bcb8..3e37c6205 100644
--- a/internal/cgroups/v1_linux.go
+++ b/internal/cgroups/v1_linux.go
@@ -103,9 +103,17 @@ func (cg *CGroupV1Manager) AddCommand(
cmd *command.Command,
repo repository.GitRepo,
) error {
+ var key string
+ if repo == nil {
+ key = strings.Join(cmd.Args(), "/")
+ } else {
+ key = repo.GetStorageName() + "/" + repo.GetRelativePath()
+ }
+
checksum := crc32.ChecksumIEEE(
- []byte(repo.GetStorageName() + "/" + repo.GetRelativePath()),
+ []byte(key),
)
+
groupID := uint(checksum) % cg.cfg.Repositories.Count
cgroupPath := cg.repoPath(int(groupID))
diff --git a/internal/cgroups/v1_linux_test.go b/internal/cgroups/v1_linux_test.go
index 347973374..03a498a11 100644
--- a/internal/cgroups/v1_linux_test.go
+++ b/internal/cgroups/v1_linux_test.go
@@ -69,7 +69,7 @@ func TestAddCommand(t *testing.T) {
}
config := defaultCgroupsConfig()
- config.Repositories.Count = 1
+ config.Repositories.Count = 10
config.Repositories.MemoryBytes = 1024
config.Repositories.CPUShares = 16
@@ -90,21 +90,44 @@ func TestAddCommand(t *testing.T) {
hierarchy: mock.hierarchy,
}
- require.NoError(t, v1Manager2.AddCommand(cmd2, repo))
+ t.Run("without a repository", func(t *testing.T) {
+ require.NoError(t, v1Manager2.AddCommand(cmd2, nil))
- checksum := crc32.ChecksumIEEE([]byte(strings.Join([]string{"default", "path/to/repo.git"}, "")))
- groupID := uint(checksum) % config.Repositories.Count
+ checksum := crc32.ChecksumIEEE([]byte(strings.Join(cmd2.Args(), "/")))
+ groupID := uint(checksum) % config.Repositories.Count
- for _, s := range mock.subsystems {
- path := filepath.Join(mock.root, string(s.Name()), "gitaly",
- fmt.Sprintf("gitaly-%d", os.Getpid()), fmt.Sprintf("repos-%d", groupID), "cgroup.procs")
- content := readCgroupFile(t, path)
+ for _, s := range mock.subsystems {
+ path := filepath.Join(mock.root, string(s.Name()), "gitaly",
+ fmt.Sprintf("gitaly-%d", os.Getpid()), fmt.Sprintf("repos-%d", groupID), "cgroup.procs")
+ content := readCgroupFile(t, path)
- pid, err := strconv.Atoi(string(content))
- require.NoError(t, err)
+ pid, err := strconv.Atoi(string(content))
+ require.NoError(t, err)
- require.Equal(t, cmd2.Pid(), pid)
- }
+ require.Equal(t, cmd2.Pid(), pid)
+ }
+ })
+
+ t.Run("with a repository", func(t *testing.T) {
+ require.NoError(t, v1Manager2.AddCommand(cmd2, repo))
+
+ checksum := crc32.ChecksumIEEE([]byte(strings.Join([]string{
+ "default",
+ "path/to/repo.git",
+ }, "/")))
+ groupID := uint(checksum) % config.Repositories.Count
+
+ for _, s := range mock.subsystems {
+ path := filepath.Join(mock.root, string(s.Name()), "gitaly",
+ fmt.Sprintf("gitaly-%d", os.Getpid()), fmt.Sprintf("repos-%d", groupID), "cgroup.procs")
+ content := readCgroupFile(t, path)
+
+ pid, err := strconv.Atoi(string(content))
+ require.NoError(t, err)
+
+ require.Equal(t, cmd2.Pid(), pid)
+ }
+ })
}
func TestCleanup(t *testing.T) {