fix: upload err log (#236)
diff --git a/plugins/core/pprof.go b/plugins/core/pprof.go
index 8c83689..08f7058 100644
--- a/plugins/core/pprof.go
+++ b/plugins/core/pprof.go
@@ -136,7 +136,7 @@
}
// sample data to file
- pprofFileName := filepath.Join(c.taskID, ".pprof")
+ pprofFileName := c.taskID + ".pprof"
pprofFilePath := filepath.Join(c.pprofFilePath, pprofFileName)
if err := os.MkdirAll(filepath.Dir(pprofFilePath), os.ModePerm); err != nil {
return nil, err
diff --git a/plugins/core/reporter/pprof_manager.go b/plugins/core/reporter/pprof_manager.go
index e3d5d9d..34c6a9c 100644
--- a/plugins/core/reporter/pprof_manager.go
+++ b/plugins/core/reporter/pprof_manager.go
@@ -143,7 +143,9 @@
// direct sampling of Heap, Allocs, Goroutine, Thread
writer, err := command.StartTask()
if err != nil {
- r.logger.Errorf("start %s pprof task error %v \n", command.GetTaskID(), err)
+ err = fmt.Errorf("start %s pprof task error %v", command.GetTaskID(), err)
+ r.ReportPprofError(command.GetTaskID(), err)
+ r.logger.Errorf(err.Error())
return
}
command.StopTask(writer)
@@ -151,7 +153,9 @@
// The CPU, Block and Mutex sampling lasts for a duration and then stops
writer, err := command.StartTask()
if err != nil {
- r.logger.Errorf("start %s pprof task error %v \n", command.GetTaskID(), err)
+ err = fmt.Errorf("start %s pprof task error %v", command.GetTaskID(), err)
+ r.ReportPprofError(command.GetTaskID(), err)
+ r.logger.Errorf(err.Error())
return
}
time.AfterFunc(command.GetDuration(), func() {
@@ -238,6 +242,29 @@
}
}
+func (r *PprofTaskManager) ReportPprofError(taskID string, err error) {
+ metaData := &pprofv10.PprofMetaData{
+ Service: r.entity.ServiceName,
+ ServiceInstance: r.entity.ServiceInstanceName,
+ TaskId: taskID,
+ Type: pprofv10.PprofProfilingStatus_PPROF_EXECUTION_TASK_ERROR,
+ ContentSize: 0,
+ }
+
+ pprofData := &pprofv10.PprofData{
+ Metadata: metaData,
+ Result: &pprofv10.PprofData_ErrorMessage{
+ ErrorMessage: err.Error(),
+ },
+ }
+
+ select {
+ case r.pprofSendCh <- pprofData:
+ default:
+ r.logger.Errorf("reach max pprof send buffer")
+ }
+}
+
func (r *PprofTaskManager) initPprofSendPipeline() {
go func() {
defer func() {
@@ -291,9 +318,11 @@
switch resp.Status {
case pprofv10.PprofProfilingStatus_PPROF_TERMINATED_BY_OVERSIZE:
r.logger.Errorf("pprof is too large to be received by the oap server")
+ r.closePprofStream(stream)
return
case pprofv10.PprofProfilingStatus_PPROF_EXECUTION_TASK_ERROR:
r.logger.Errorf("server rejected pprof upload due to execution task error")
+ r.closePprofStream(stream)
return
}