From 34e9c95d66dd931d844a431693d95fbf3d396729 Mon Sep 17 00:00:00 2001 From: Andrew Newdigate Date: Mon, 14 Aug 2017 15:25:27 +0100 Subject: [PATCH 1/4] Add spawn process times --- internal/git/catfile/catfile.go | 2 +- internal/helper/command.go | 33 ++++++++++++++++++---- internal/helper/repo.go | 2 +- internal/service/blob/get_blob.go | 2 +- internal/service/commit/commits_helper.go | 2 +- internal/service/commit/count_commits.go | 2 +- internal/service/commit/isancestor.go | 2 +- internal/service/commit/list_files.go | 2 +- internal/service/commit/raw_blame.go | 2 +- internal/service/diff/commit.go | 2 +- internal/service/ref/refname.go | 2 +- internal/service/ref/refs.go | 6 ++-- internal/service/smarthttp/inforefs.go | 2 +- internal/service/smarthttp/receive_pack.go | 2 +- internal/service/smarthttp/upload_pack.go | 2 +- internal/service/ssh/receive_pack.go | 2 +- internal/service/ssh/upload_pack.go | 2 +- 17 files changed, 46 insertions(+), 23 deletions(-) diff --git a/internal/git/catfile/catfile.go b/internal/git/catfile/catfile.go index 3020c07b7a1..ab30390ec9b 100644 --- a/internal/git/catfile/catfile.go +++ b/internal/git/catfile/catfile.go @@ -35,7 +35,7 @@ func CatFile(ctx context.Context, repoPath string, handler Handler) error { if err != nil { return grpc.Errorf(codes.Internal, "CatFile: cmd: %v", err) } - defer cmd.Kill() + defer cmd.Kill(ctx) defer stdinWriter.Close() defer stdinReader.Close() diff --git a/internal/helper/command.go b/internal/helper/command.go index 4d910725125..229d4ff5055 100644 --- a/internal/helper/command.go +++ b/internal/helper/command.go @@ -8,6 +8,7 @@ import ( "os/exec" "strings" "syscall" + "time" "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus" @@ -21,6 +22,7 @@ import ( type Command struct { io.Reader *exec.Cmd + startTime time.Time } // GitPath returns the path to the `git` binary. See `SetGitPath` for details @@ -39,8 +41,8 @@ func GitPath() string { // Kill cleans the subprocess group of the command. Callers should defer a call // to kill after they get the command from NewCommand -func (c *Command) Kill() { - CleanUpProcessGroup(c.Cmd) +func (c *Command) Kill(ctx context.Context) { + c.CleanUpProcessGroup(ctx) } // GitCommandReader creates a git Command with the given args @@ -55,7 +57,7 @@ func NewCommand(ctx context.Context, cmd *exec.Cmd, stdin io.Reader, stdout, std "args": cmd.Args, }).Info("spawn") - command := &Command{Cmd: cmd} + command := &Command{Cmd: cmd, startTime: time.Now()} // Explicitly set the environment for the command cmd.Env = []string{ @@ -108,7 +110,8 @@ func NewCommand(ctx context.Context, cmd *exec.Cmd, stdin io.Reader, stdout, std // CleanUpProcessGroup will send a SIGTERM signal to the process group // belonging to the `cmd` process -func CleanUpProcessGroup(cmd *exec.Cmd) { +func (c *Command) CleanUpProcessGroup(ctx context.Context) { + cmd := c.Cmd if cmd == nil { return } @@ -120,7 +123,27 @@ func CleanUpProcessGroup(cmd *exec.Cmd) { } // reap our child process - cmd.Wait() + err := cmd.Wait() + + exitCode := 0 + if err != nil { + if exitStatus, ok := ExitStatus(err); ok { + exitCode = exitStatus + } + } + + systemTime := cmd.ProcessState.SystemTime() + userTime := cmd.ProcessState.UserTime() + totalTime := time.Now().Sub(c.startTime) + + grpc_logrus.Extract(ctx).WithFields(log.Fields{ + "path": cmd.Path, + "args": cmd.Args, + "command.exitCode": exitCode, + "command.system_time_ms": systemTime.Seconds() * 1000, + "command.user_time_ms": userTime.Seconds() * 1000, + "command.total_time_ms": totalTime.Seconds() * 1000, + }).Info("spawn complete") } // ExitStatus will return the exit-code from an error diff --git a/internal/helper/repo.go b/internal/helper/repo.go index 33b51d9247a..6d126a32108 100644 --- a/internal/helper/repo.go +++ b/internal/helper/repo.go @@ -91,7 +91,7 @@ func IsValidRef(ctx context.Context, path, ref string) bool { if err != nil { return false } - defer cmd.Kill() + defer cmd.Kill(ctx) cmd.Stdout, cmd.Stderr, cmd.Stdin = nil, nil, nil return cmd.Wait() == nil diff --git a/internal/service/blob/get_blob.go b/internal/service/blob/get_blob.go index 82445f37e39..1ab7dd1112f 100644 --- a/internal/service/blob/get_blob.go +++ b/internal/service/blob/get_blob.go @@ -33,7 +33,7 @@ func (s *server) GetBlob(in *pb.GetBlobRequest, stream pb.BlobService_GetBlobSer if err != nil { return grpc.Errorf(codes.Internal, "GetBlob: cmd: %v", err) } - defer cmd.Kill() + defer cmd.Kill(stream.Context()) defer stdinWriter.Close() defer stdinReader.Close() diff --git a/internal/service/commit/commits_helper.go b/internal/service/commit/commits_helper.go index 38e711cbbc8..edcb15a7c54 100644 --- a/internal/service/commit/commits_helper.go +++ b/internal/service/commit/commits_helper.go @@ -68,7 +68,7 @@ func gitLog(ctx context.Context, sender lines.Sender, repo *pb.Repository, revis if err != nil { return err } - defer cmd.Kill() + defer cmd.Kill(ctx) split := lines.ScanWithDelimiter([]byte("\x00")) if err := lines.Send(cmd, sender, split); err != nil { diff --git a/internal/service/commit/count_commits.go b/internal/service/commit/count_commits.go index 91790ef85ac..23be1c0e476 100644 --- a/internal/service/commit/count_commits.go +++ b/internal/service/commit/count_commits.go @@ -43,7 +43,7 @@ func (s *server) CountCommits(ctx context.Context, in *pb.CountCommitsRequest) ( if err != nil { return nil, grpc.Errorf(codes.Internal, "CountCommits: cmd: %v", err) } - defer cmd.Kill() + defer cmd.Kill(ctx) var count int64 countStr, readAllErr := ioutil.ReadAll(cmd) diff --git a/internal/service/commit/isancestor.go b/internal/service/commit/isancestor.go index fac30d74d7f..f3c43ae54c1 100644 --- a/internal/service/commit/isancestor.go +++ b/internal/service/commit/isancestor.go @@ -44,7 +44,7 @@ func commitIsAncestorName(ctx context.Context, path, ancestorID, childID string) if err != nil { return false, grpc.Errorf(codes.Internal, err.Error()) } - defer cmd.Kill() + defer cmd.Kill(ctx) return cmd.Wait() == nil, nil } diff --git a/internal/service/commit/list_files.go b/internal/service/commit/list_files.go index c6559117ece..8de257a15db 100644 --- a/internal/service/commit/list_files.go +++ b/internal/service/commit/list_files.go @@ -38,7 +38,7 @@ func (s *server) ListFiles(in *pb.ListFilesRequest, stream pb.CommitService_List if err != nil { return grpc.Errorf(codes.Internal, err.Error()) } - defer cmd.Kill() + defer cmd.Kill(stream.Context()) scanner := lines.ScanWithDelimiter([]byte{'\x00'}) diff --git a/internal/service/commit/raw_blame.go b/internal/service/commit/raw_blame.go index 0ec329d9159..6b767fe0c5c 100644 --- a/internal/service/commit/raw_blame.go +++ b/internal/service/commit/raw_blame.go @@ -32,7 +32,7 @@ func (s *server) RawBlame(in *pb.RawBlameRequest, stream pb.CommitService_RawBla if err != nil { return grpc.Errorf(codes.Internal, "RawBlame: cmd: %v", err) } - defer cmd.Kill() + defer cmd.Kill(ctx) sw := streamio.NewWriter(func(p []byte) error { return stream.Send(&pb.RawBlameResponse{Data: p}) diff --git a/internal/service/diff/commit.go b/internal/service/diff/commit.go index 20f965478f1..5bd0d6e069a 100644 --- a/internal/service/diff/commit.go +++ b/internal/service/diff/commit.go @@ -218,7 +218,7 @@ func eachDiff(ctx context.Context, rpc string, cmdArgs []string, limits diff.Lim if err != nil { return grpc.Errorf(codes.Internal, "%s: cmd: %v", rpc, err) } - defer cmd.Kill() + defer cmd.Kill(ctx) diffParser := diff.NewDiffParser(cmd, limits) diff --git a/internal/service/ref/refname.go b/internal/service/ref/refname.go index c9a3df5f4f9..baec276f06b 100644 --- a/internal/service/ref/refname.go +++ b/internal/service/ref/refname.go @@ -45,7 +45,7 @@ func findRefName(ctx context.Context, path, commitID, prefix string) (string, er if err != nil { return "", err } - defer cmd.Kill() + defer cmd.Kill(ctx) scanner := bufio.NewScanner(cmd) scanner.Scan() diff --git a/internal/service/ref/refs.go b/internal/service/ref/refs.go index 949c042b4df..a82a6f98039 100644 --- a/internal/service/ref/refs.go +++ b/internal/service/ref/refs.go @@ -55,7 +55,7 @@ func findRefs(ctx context.Context, writer lines.Sender, repo *pb.Repository, pat if err != nil { return err } - defer cmd.Kill() + defer cmd.Kill(ctx) if err := lines.Send(cmd, writer, opts.splitter); err != nil { return err @@ -91,7 +91,7 @@ func _findBranchNames(ctx context.Context, repoPath string) ([][]byte, error) { if err != nil { return nil, err } - defer cmd.Kill() + defer cmd.Kill(ctx) scanner := bufio.NewScanner(cmd) for scanner.Scan() { @@ -115,7 +115,7 @@ func _headReference(ctx context.Context, repoPath string) ([]byte, error) { if err != nil { return nil, err } - defer cmd.Kill() + defer cmd.Kill(ctx) scanner := bufio.NewScanner(cmd) scanner.Scan() diff --git a/internal/service/smarthttp/inforefs.go b/internal/service/smarthttp/inforefs.go index 86492632745..16ff06c18b2 100644 --- a/internal/service/smarthttp/inforefs.go +++ b/internal/service/smarthttp/inforefs.go @@ -43,7 +43,7 @@ func handleInfoRefs(ctx context.Context, service string, repo *pb.Repository, w if err != nil { return grpc.Errorf(codes.Internal, "GetInfoRefs: cmd: %v", err) } - defer cmd.Kill() + defer cmd.Kill(ctx) if err := pktLine(w, fmt.Sprintf("# service=git-%s\n", service)); err != nil { return grpc.Errorf(codes.Internal, "GetInfoRefs: pktLine: %v", err) diff --git a/internal/service/smarthttp/receive_pack.go b/internal/service/smarthttp/receive_pack.go index 04d7470a359..8904a7aabfb 100644 --- a/internal/service/smarthttp/receive_pack.go +++ b/internal/service/smarthttp/receive_pack.go @@ -54,7 +54,7 @@ func (s *server) PostReceivePack(stream pb.SmartHTTPService_PostReceivePackServe if err != nil { return grpc.Errorf(codes.Unavailable, "PostReceivePack: cmd: %v", err) } - defer cmd.Kill() + defer cmd.Kill(stream.Context()) if err := cmd.Wait(); err != nil { return grpc.Errorf(codes.Unavailable, "PostReceivePack: cmd wait for %v: %v", cmd.Args, err) diff --git a/internal/service/smarthttp/upload_pack.go b/internal/service/smarthttp/upload_pack.go index 0690a8e05e7..dda573198a3 100644 --- a/internal/service/smarthttp/upload_pack.go +++ b/internal/service/smarthttp/upload_pack.go @@ -65,7 +65,7 @@ func (s *server) PostUploadPack(stream pb.SmartHTTPService_PostUploadPackServer) if err != nil { return grpc.Errorf(codes.Unavailable, "PostUploadPack: cmd: %v", err) } - defer cmd.Kill() + defer cmd.Kill(stream.Context()) if err := cmd.Wait(); err != nil { pw.Close() // ensure scanDeepen returns diff --git a/internal/service/ssh/receive_pack.go b/internal/service/ssh/receive_pack.go index f47e0c4ab1d..38565bb47df 100644 --- a/internal/service/ssh/receive_pack.go +++ b/internal/service/ssh/receive_pack.go @@ -58,7 +58,7 @@ func (s *server) SSHReceivePack(stream pb.SSHService_SSHReceivePackServer) error if err != nil { return grpc.Errorf(codes.Unavailable, "SSHReceivePack: cmd: %v", err) } - defer cmd.Kill() + defer cmd.Kill(stream.Context()) if err := cmd.Wait(); err != nil { if status, ok := helper.ExitStatus(err); ok { diff --git a/internal/service/ssh/upload_pack.go b/internal/service/ssh/upload_pack.go index 19549a2a421..09bb34f122c 100644 --- a/internal/service/ssh/upload_pack.go +++ b/internal/service/ssh/upload_pack.go @@ -52,7 +52,7 @@ func (s *server) SSHUploadPack(stream pb.SSHService_SSHUploadPackServer) error { if err != nil { return grpc.Errorf(codes.Unavailable, "SSHUploadPack: cmd: %v", err) } - defer cmd.Kill() + defer cmd.Kill(stream.Context()) if err := cmd.Wait(); err != nil { if status, ok := helper.ExitStatus(err); ok { -- GitLab From eb326b67685031bb962b08a8803e9719497c52a0 Mon Sep 17 00:00:00 2001 From: Andrew Newdigate Date: Mon, 14 Aug 2017 15:27:45 +0100 Subject: [PATCH 2/4] Change total time to real time --- internal/helper/command.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/helper/command.go b/internal/helper/command.go index 229d4ff5055..ffd1b5e1447 100644 --- a/internal/helper/command.go +++ b/internal/helper/command.go @@ -134,7 +134,7 @@ func (c *Command) CleanUpProcessGroup(ctx context.Context) { systemTime := cmd.ProcessState.SystemTime() userTime := cmd.ProcessState.UserTime() - totalTime := time.Now().Sub(c.startTime) + realTime := time.Now().Sub(c.startTime) grpc_logrus.Extract(ctx).WithFields(log.Fields{ "path": cmd.Path, @@ -142,7 +142,7 @@ func (c *Command) CleanUpProcessGroup(ctx context.Context) { "command.exitCode": exitCode, "command.system_time_ms": systemTime.Seconds() * 1000, "command.user_time_ms": userTime.Seconds() * 1000, - "command.total_time_ms": totalTime.Seconds() * 1000, + "command.real_time_ms": realTime.Seconds() * 1000, }).Info("spawn complete") } -- GitLab From dcf23b9d6e251b536c69ab7feb93c133f1b28be0 Mon Sep 17 00:00:00 2001 From: Andrew Newdigate Date: Mon, 14 Aug 2017 15:57:46 +0100 Subject: [PATCH 3/4] Add io stats --- internal/helper/command.go | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/internal/helper/command.go b/internal/helper/command.go index ffd1b5e1447..58e3c3dfdd1 100644 --- a/internal/helper/command.go +++ b/internal/helper/command.go @@ -132,18 +132,8 @@ func (c *Command) CleanUpProcessGroup(ctx context.Context) { } } - systemTime := cmd.ProcessState.SystemTime() - userTime := cmd.ProcessState.UserTime() - realTime := time.Now().Sub(c.startTime) + c.logProcessComplete(ctx, exitCode) - grpc_logrus.Extract(ctx).WithFields(log.Fields{ - "path": cmd.Path, - "args": cmd.Args, - "command.exitCode": exitCode, - "command.system_time_ms": systemTime.Seconds() * 1000, - "command.user_time_ms": userTime.Seconds() * 1000, - "command.real_time_ms": realTime.Seconds() * 1000, - }).Info("spawn complete") } // ExitStatus will return the exit-code from an error @@ -160,3 +150,29 @@ func ExitStatus(err error) (int, bool) { return waitStatus.ExitStatus(), true } + +func (c *Command) logProcessComplete(ctx context.Context, exitCode int) { + cmd := c.Cmd + + systemTime := cmd.ProcessState.SystemTime() + userTime := cmd.ProcessState.UserTime() + realTime := time.Now().Sub(c.startTime) + + entry := grpc_logrus.Extract(ctx).WithFields(log.Fields{ + "path": cmd.Path, + "args": cmd.Args, + "command.exitCode": exitCode, + "command.system_time_ms": systemTime.Seconds() * 1000, + "command.user_time_ms": userTime.Seconds() * 1000, + "command.real_time_ms": realTime.Seconds() * 1000, + }) + + if rusage, ok := cmd.ProcessState.SysUsage().(*syscall.Rusage); ok { + entry = entry.WithFields(log.Fields{ + "command.inblock": rusage.Inblock, + "command.oublock": rusage.Oublock, + }) + } + + entry.Info("spawn complete") +} -- GitLab From 2e060460852b4f7a1f545277710456c6300193c8 Mon Sep 17 00:00:00 2001 From: Andrew Newdigate Date: Mon, 14 Aug 2017 17:28:55 +0100 Subject: [PATCH 4/4] Merge `cmd.Kill` and `cmd.CleanUpProcessGroup` --- internal/git/catfile/catfile.go | 2 +- internal/helper/command.go | 6 ------ internal/helper/repo.go | 2 +- internal/service/blob/get_blob.go | 2 +- internal/service/commit/commits_helper.go | 2 +- internal/service/commit/count_commits.go | 2 +- internal/service/commit/isancestor.go | 2 +- internal/service/commit/list_files.go | 2 +- internal/service/commit/raw_blame.go | 2 +- internal/service/diff/commit.go | 2 +- internal/service/ref/refname.go | 2 +- internal/service/ref/refs.go | 6 +++--- internal/service/smarthttp/inforefs.go | 2 +- internal/service/smarthttp/receive_pack.go | 2 +- internal/service/smarthttp/upload_pack.go | 2 +- internal/service/ssh/receive_pack.go | 2 +- internal/service/ssh/upload_pack.go | 2 +- 17 files changed, 18 insertions(+), 24 deletions(-) diff --git a/internal/git/catfile/catfile.go b/internal/git/catfile/catfile.go index ab30390ec9b..ba0025b6e47 100644 --- a/internal/git/catfile/catfile.go +++ b/internal/git/catfile/catfile.go @@ -35,7 +35,7 @@ func CatFile(ctx context.Context, repoPath string, handler Handler) error { if err != nil { return grpc.Errorf(codes.Internal, "CatFile: cmd: %v", err) } - defer cmd.Kill(ctx) + defer cmd.CleanUpProcessGroup(ctx) defer stdinWriter.Close() defer stdinReader.Close() diff --git a/internal/helper/command.go b/internal/helper/command.go index ffd1b5e1447..4e826284fba 100644 --- a/internal/helper/command.go +++ b/internal/helper/command.go @@ -39,12 +39,6 @@ func GitPath() string { return config.Config.Git.BinPath } -// Kill cleans the subprocess group of the command. Callers should defer a call -// to kill after they get the command from NewCommand -func (c *Command) Kill(ctx context.Context) { - c.CleanUpProcessGroup(ctx) -} - // GitCommandReader creates a git Command with the given args func GitCommandReader(ctx context.Context, args ...string) (*Command, error) { return NewCommand(ctx, exec.Command(GitPath(), args...), nil, nil, nil) diff --git a/internal/helper/repo.go b/internal/helper/repo.go index 6d126a32108..232dffe67c8 100644 --- a/internal/helper/repo.go +++ b/internal/helper/repo.go @@ -91,7 +91,7 @@ func IsValidRef(ctx context.Context, path, ref string) bool { if err != nil { return false } - defer cmd.Kill(ctx) + defer cmd.CleanUpProcessGroup(ctx) cmd.Stdout, cmd.Stderr, cmd.Stdin = nil, nil, nil return cmd.Wait() == nil diff --git a/internal/service/blob/get_blob.go b/internal/service/blob/get_blob.go index 1ab7dd1112f..8969b58d84b 100644 --- a/internal/service/blob/get_blob.go +++ b/internal/service/blob/get_blob.go @@ -33,7 +33,7 @@ func (s *server) GetBlob(in *pb.GetBlobRequest, stream pb.BlobService_GetBlobSer if err != nil { return grpc.Errorf(codes.Internal, "GetBlob: cmd: %v", err) } - defer cmd.Kill(stream.Context()) + defer cmd.CleanUpProcessGroup(stream.Context()) defer stdinWriter.Close() defer stdinReader.Close() diff --git a/internal/service/commit/commits_helper.go b/internal/service/commit/commits_helper.go index edcb15a7c54..5cd24489c9e 100644 --- a/internal/service/commit/commits_helper.go +++ b/internal/service/commit/commits_helper.go @@ -68,7 +68,7 @@ func gitLog(ctx context.Context, sender lines.Sender, repo *pb.Repository, revis if err != nil { return err } - defer cmd.Kill(ctx) + defer cmd.CleanUpProcessGroup(ctx) split := lines.ScanWithDelimiter([]byte("\x00")) if err := lines.Send(cmd, sender, split); err != nil { diff --git a/internal/service/commit/count_commits.go b/internal/service/commit/count_commits.go index 23be1c0e476..266327996b3 100644 --- a/internal/service/commit/count_commits.go +++ b/internal/service/commit/count_commits.go @@ -43,7 +43,7 @@ func (s *server) CountCommits(ctx context.Context, in *pb.CountCommitsRequest) ( if err != nil { return nil, grpc.Errorf(codes.Internal, "CountCommits: cmd: %v", err) } - defer cmd.Kill(ctx) + defer cmd.CleanUpProcessGroup(ctx) var count int64 countStr, readAllErr := ioutil.ReadAll(cmd) diff --git a/internal/service/commit/isancestor.go b/internal/service/commit/isancestor.go index f3c43ae54c1..b2d84fd5aa3 100644 --- a/internal/service/commit/isancestor.go +++ b/internal/service/commit/isancestor.go @@ -44,7 +44,7 @@ func commitIsAncestorName(ctx context.Context, path, ancestorID, childID string) if err != nil { return false, grpc.Errorf(codes.Internal, err.Error()) } - defer cmd.Kill(ctx) + defer cmd.CleanUpProcessGroup(ctx) return cmd.Wait() == nil, nil } diff --git a/internal/service/commit/list_files.go b/internal/service/commit/list_files.go index 8de257a15db..b829bfef6d4 100644 --- a/internal/service/commit/list_files.go +++ b/internal/service/commit/list_files.go @@ -38,7 +38,7 @@ func (s *server) ListFiles(in *pb.ListFilesRequest, stream pb.CommitService_List if err != nil { return grpc.Errorf(codes.Internal, err.Error()) } - defer cmd.Kill(stream.Context()) + defer cmd.CleanUpProcessGroup(stream.Context()) scanner := lines.ScanWithDelimiter([]byte{'\x00'}) diff --git a/internal/service/commit/raw_blame.go b/internal/service/commit/raw_blame.go index 6b767fe0c5c..46927fe3470 100644 --- a/internal/service/commit/raw_blame.go +++ b/internal/service/commit/raw_blame.go @@ -32,7 +32,7 @@ func (s *server) RawBlame(in *pb.RawBlameRequest, stream pb.CommitService_RawBla if err != nil { return grpc.Errorf(codes.Internal, "RawBlame: cmd: %v", err) } - defer cmd.Kill(ctx) + defer cmd.CleanUpProcessGroup(ctx) sw := streamio.NewWriter(func(p []byte) error { return stream.Send(&pb.RawBlameResponse{Data: p}) diff --git a/internal/service/diff/commit.go b/internal/service/diff/commit.go index 5bd0d6e069a..205a79306de 100644 --- a/internal/service/diff/commit.go +++ b/internal/service/diff/commit.go @@ -218,7 +218,7 @@ func eachDiff(ctx context.Context, rpc string, cmdArgs []string, limits diff.Lim if err != nil { return grpc.Errorf(codes.Internal, "%s: cmd: %v", rpc, err) } - defer cmd.Kill(ctx) + defer cmd.CleanUpProcessGroup(ctx) diffParser := diff.NewDiffParser(cmd, limits) diff --git a/internal/service/ref/refname.go b/internal/service/ref/refname.go index baec276f06b..3c001231066 100644 --- a/internal/service/ref/refname.go +++ b/internal/service/ref/refname.go @@ -45,7 +45,7 @@ func findRefName(ctx context.Context, path, commitID, prefix string) (string, er if err != nil { return "", err } - defer cmd.Kill(ctx) + defer cmd.CleanUpProcessGroup(ctx) scanner := bufio.NewScanner(cmd) scanner.Scan() diff --git a/internal/service/ref/refs.go b/internal/service/ref/refs.go index a82a6f98039..2b84d4c2ece 100644 --- a/internal/service/ref/refs.go +++ b/internal/service/ref/refs.go @@ -55,7 +55,7 @@ func findRefs(ctx context.Context, writer lines.Sender, repo *pb.Repository, pat if err != nil { return err } - defer cmd.Kill(ctx) + defer cmd.CleanUpProcessGroup(ctx) if err := lines.Send(cmd, writer, opts.splitter); err != nil { return err @@ -91,7 +91,7 @@ func _findBranchNames(ctx context.Context, repoPath string) ([][]byte, error) { if err != nil { return nil, err } - defer cmd.Kill(ctx) + defer cmd.CleanUpProcessGroup(ctx) scanner := bufio.NewScanner(cmd) for scanner.Scan() { @@ -115,7 +115,7 @@ func _headReference(ctx context.Context, repoPath string) ([]byte, error) { if err != nil { return nil, err } - defer cmd.Kill(ctx) + defer cmd.CleanUpProcessGroup(ctx) scanner := bufio.NewScanner(cmd) scanner.Scan() diff --git a/internal/service/smarthttp/inforefs.go b/internal/service/smarthttp/inforefs.go index 16ff06c18b2..1a95218bdd3 100644 --- a/internal/service/smarthttp/inforefs.go +++ b/internal/service/smarthttp/inforefs.go @@ -43,7 +43,7 @@ func handleInfoRefs(ctx context.Context, service string, repo *pb.Repository, w if err != nil { return grpc.Errorf(codes.Internal, "GetInfoRefs: cmd: %v", err) } - defer cmd.Kill(ctx) + defer cmd.CleanUpProcessGroup(ctx) if err := pktLine(w, fmt.Sprintf("# service=git-%s\n", service)); err != nil { return grpc.Errorf(codes.Internal, "GetInfoRefs: pktLine: %v", err) diff --git a/internal/service/smarthttp/receive_pack.go b/internal/service/smarthttp/receive_pack.go index 8904a7aabfb..57cc70563b9 100644 --- a/internal/service/smarthttp/receive_pack.go +++ b/internal/service/smarthttp/receive_pack.go @@ -54,7 +54,7 @@ func (s *server) PostReceivePack(stream pb.SmartHTTPService_PostReceivePackServe if err != nil { return grpc.Errorf(codes.Unavailable, "PostReceivePack: cmd: %v", err) } - defer cmd.Kill(stream.Context()) + defer cmd.CleanUpProcessGroup(stream.Context()) if err := cmd.Wait(); err != nil { return grpc.Errorf(codes.Unavailable, "PostReceivePack: cmd wait for %v: %v", cmd.Args, err) diff --git a/internal/service/smarthttp/upload_pack.go b/internal/service/smarthttp/upload_pack.go index dda573198a3..549a0c24521 100644 --- a/internal/service/smarthttp/upload_pack.go +++ b/internal/service/smarthttp/upload_pack.go @@ -65,7 +65,7 @@ func (s *server) PostUploadPack(stream pb.SmartHTTPService_PostUploadPackServer) if err != nil { return grpc.Errorf(codes.Unavailable, "PostUploadPack: cmd: %v", err) } - defer cmd.Kill(stream.Context()) + defer cmd.CleanUpProcessGroup(stream.Context()) if err := cmd.Wait(); err != nil { pw.Close() // ensure scanDeepen returns diff --git a/internal/service/ssh/receive_pack.go b/internal/service/ssh/receive_pack.go index 38565bb47df..ba324b6b487 100644 --- a/internal/service/ssh/receive_pack.go +++ b/internal/service/ssh/receive_pack.go @@ -58,7 +58,7 @@ func (s *server) SSHReceivePack(stream pb.SSHService_SSHReceivePackServer) error if err != nil { return grpc.Errorf(codes.Unavailable, "SSHReceivePack: cmd: %v", err) } - defer cmd.Kill(stream.Context()) + defer cmd.CleanUpProcessGroup(stream.Context()) if err := cmd.Wait(); err != nil { if status, ok := helper.ExitStatus(err); ok { diff --git a/internal/service/ssh/upload_pack.go b/internal/service/ssh/upload_pack.go index 09bb34f122c..3a81c9155e4 100644 --- a/internal/service/ssh/upload_pack.go +++ b/internal/service/ssh/upload_pack.go @@ -52,7 +52,7 @@ func (s *server) SSHUploadPack(stream pb.SSHService_SSHUploadPackServer) error { if err != nil { return grpc.Errorf(codes.Unavailable, "SSHUploadPack: cmd: %v", err) } - defer cmd.Kill(stream.Context()) + defer cmd.CleanUpProcessGroup(stream.Context()) if err := cmd.Wait(); err != nil { if status, ok := helper.ExitStatus(err); ok { -- GitLab