From bf5c4749ca49abce7049b29671582d76893ce7f1 Mon Sep 17 00:00:00 2001 From: linxin Date: Wed, 25 Oct 2023 10:06:01 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20fix:=20TSG-17492=20=E5=BC=80?= =?UTF-8?q?=E5=90=AF=E8=AE=B0=E5=BD=95=E5=AE=8C=E6=95=B4coredump=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E5=86=99=E5=85=A5=E7=9A=84coredump=E7=9A=84=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F=E8=B6=85=E8=BF=87=E4=BA=8680%=E5=89=A9=E4=BD=99?= =?UTF-8?q?=E7=A3=81=E7=9B=98=E7=A9=BA=E9=97=B4=E7=9A=84=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- coredump-handler/coredump-handler.go | 24 +++++++++++++++++++++-- coredump-handler/coredump-handler_test.go | 5 ++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/coredump-handler/coredump-handler.go b/coredump-handler/coredump-handler.go index c4c57a9..55c5fab 100644 --- a/coredump-handler/coredump-handler.go +++ b/coredump-handler/coredump-handler.go @@ -160,7 +160,7 @@ func writeCoreConfig(config types.Coredump_config) error { } // write coredump to file -func writeCoreDumpToFile(config types.Coredump_config) error { +func writeCoreDumpToFile(config types.Coredump_config, pipe_config types.Pipeconfig) error { filename := fmt.Sprintf("%s_%s_%d.coredump", config.Initial_ns_pid, config.Process_ns_pid, config.Timestamp) file, err := os.Create(filename) if err != nil { @@ -168,6 +168,7 @@ func writeCoreDumpToFile(config types.Coredump_config) error { } defer file.Close() buf := make([]byte, 1024*1024) + nums := 0 for { n, err := os.Stdin.Read(buf) if err != nil && err != io.EOF { @@ -180,6 +181,25 @@ func writeCoreDumpToFile(config types.Coredump_config) error { if err != nil { return err } + nums += 1 + if nums >= 10 { + flag, err := isDiskSufficient(pipe_config) + if err != nil { + journal.Print(journal.PriErr, "Can't judge disk's space is sufficient or not. "+err.Error()) + return err + } + if !flag { + journal.Print(journal.PriErr, "Disk space exceeds limit after write coredump!") + err := os.RemoveAll(pipe_config.Storage) + if err != nil { + journal.Print(journal.PriErr, err.Error()) + return err + } + journal.Print(journal.PriInfo, err.Error()) + return err + } + nums = 0 + } } return nil } @@ -337,7 +357,7 @@ func main() { //write coredump file if !pipe_config.Compress { if pipe_config.Storage_type == 1 { - err = writeCoreDumpToFile(coredump_config) + err = writeCoreDumpToFile(coredump_config, pipe_config) if err != nil { journal.Print(journal.PriErr, err.Error()) } diff --git a/coredump-handler/coredump-handler_test.go b/coredump-handler/coredump-handler_test.go index aad83ec..70dea3d 100644 --- a/coredump-handler/coredump-handler_test.go +++ b/coredump-handler/coredump-handler_test.go @@ -97,6 +97,9 @@ func TestWriteCoreDumpToFile(t *testing.T) { Corepipe_config_path: "/tmp/config.yaml", Timestamp: 12345678, } + pipe_config := types.Pipeconfig{ + Storage: "/tmp", + } cmd := exec.Command("echo", "test") cmdReader, err := cmd.StdoutPipe() if err != nil { @@ -112,7 +115,7 @@ func TestWriteCoreDumpToFile(t *testing.T) { if err != nil { t.Errorf("WriteCoreDumpToFile() error = %v", err) } - err = writeCoreDumpToFile(config) + err = writeCoreDumpToFile(config, pipe_config) if err != nil { t.Errorf("WriteCoreDumpToFile() error = %v", err) }