summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlinxin <[email protected]>2023-10-25 10:06:01 +0800
committerlinxin <[email protected]>2023-10-25 10:06:01 +0800
commitbf5c4749ca49abce7049b29671582d76893ce7f1 (patch)
treee9479cacffe160378390117ef68e054c6f74d6c7
parent47f94e07b9cdf06ef3498622dc5ae33320f85444 (diff)
🐞 fix: TSG-17492
开启记录完整coredump后,写入的coredump的大小超过了80%剩余磁盘空间的限制
-rw-r--r--coredump-handler/coredump-handler.go24
-rw-r--r--coredump-handler/coredump-handler_test.go5
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)
}