|
4 | 4 | package utils |
5 | 5 |
|
6 | 6 | import ( |
7 | | - "bytes" |
8 | 7 | "errors" |
9 | 8 | "fmt" |
| 9 | + "io" |
10 | 10 | "os" |
11 | 11 | "os/exec" |
12 | 12 | "strings" |
@@ -35,25 +35,39 @@ func (su *MounterOptsUtils) FuseMount(path string, comm string, args []string) e |
35 | 35 | klog.Infof("FuseMount params:\n\tpath: <%s>\n\tcommand: <%s>\n\targs: <%v>", path, comm, args) |
36 | 36 | cmd := command(comm, args...) |
37 | 37 |
|
38 | | - var outb, errb bytes.Buffer |
39 | | - cmd.Stdout = &outb |
40 | | - cmd.Stderr = &errb |
| 38 | + // Redirect stdout and stderr to avoid blocking pipes |
| 39 | + logFile, err := os.OpenFile("/var/log/rclone-manual.log", |
| 40 | + os.O_CREATE|os.O_RDWR|os.O_APPEND, 0644) |
| 41 | + if err != nil { |
| 42 | + return fmt.Errorf("FuseMount: failed to open log file: %v", err) |
| 43 | + } |
| 44 | + klog.Infof("FuseMount: rclone log file opened successfully for read & write. Log file: %s", "/var/log/rclone-manual.log") |
| 45 | + defer logFile.Close() |
| 46 | + |
| 47 | + cmd.Stdout = logFile |
| 48 | + cmd.Stderr = logFile |
41 | 49 |
|
42 | | - err := cmd.Start() |
| 50 | + err = cmd.Start() |
43 | 51 | if err != nil { |
44 | 52 | klog.Errorf("FuseMount: command start failed: <%s>\nargs: <%v>\nerror: <%v>", comm, args, err) |
45 | 53 | return fmt.Errorf("FuseMount: command start failed: <%s>\nerror: <%v>", comm, err) |
46 | 54 | } |
| 55 | + klog.Infof("command 'start' succeeded for '%s' mounter", comm) |
| 56 | + |
47 | 57 | err = cmd.Wait() |
48 | 58 | if err != nil { |
49 | 59 | if mounted, err1 := isMountpoint(path); err1 == nil && mounted { // check if bucket already got mounted |
50 | 60 | klog.Infof("bucket is already mounted using '%s' mounter", comm) |
51 | 61 | return nil |
52 | 62 | } |
53 | | - klog.Errorf("FuseMount: command wait failed: <%s>\nargs: <%v>\nerr: <%v>\nstderr: <%s>\nstdout: <%s>", comm, args, err, errb.String(), outb.String()) |
54 | | - return fmt.Errorf("'%s' mount failed: %v (stderr: %s)", comm, err, errb.String()) |
| 63 | + data, err := io.ReadAll(logFile) |
| 64 | + if err != nil { |
| 65 | + return fmt.Errorf("failed to read rclone log file content: %v", err) |
| 66 | + } |
| 67 | + klog.Errorf("FuseMount: command wait failed: <%s>\nargs: <%v>\nerr: <%v>\noutput: <%s>", comm, args, err, string(data)) |
| 68 | + return fmt.Errorf("'%s' mount failed: %v (output: %s)", comm, err, string(data)) |
55 | 69 | } |
56 | | - klog.Infof("mount command succeeded: mounter=%s, output=%s", comm, outb.String()) |
| 70 | + klog.Infof("mount command succeeded for '%s' mounter", comm) |
57 | 71 | if err := waitForMount(path, 10*time.Second); err != nil { |
58 | 72 | klog.Errorf("mount succeeded but waiting for mountpoint failed: %v", err) |
59 | 73 | return err |
|
0 commit comments