From 19ab371e8b67ca2619bb6b857104ce4d006bccda Mon Sep 17 00:00:00 2001 From: Chao Date: Sun, 23 May 2021 00:25:30 +0800 Subject: [PATCH 1/6] hook up start and shutdown functions in fileexporter --- exporter/fileexporter/factory.go | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/exporter/fileexporter/factory.go b/exporter/fileexporter/factory.go index 3ff16a986ab..9159b9065e9 100644 --- a/exporter/fileexporter/factory.go +++ b/exporter/fileexporter/factory.go @@ -52,7 +52,13 @@ func createTracesExporter( fe := exporters.GetOrAdd(cfg, func() component.Component { return &fileExporter{path: cfg.(*Config).Path} }) - return exporterhelper.NewTracesExporter(cfg, params.Logger, fe.Unwrap().(*fileExporter).ConsumeTraces) + return exporterhelper.NewTracesExporter( + cfg, + params.Logger, + fe.Unwrap().(*fileExporter).ConsumeTraces, + exporterhelper.WithStart(fe.Unwrap().(*fileExporter).Start), + exporterhelper.WithShutdown(fe.Unwrap().(*fileExporter).Shutdown), + ) } func createMetricsExporter( @@ -63,7 +69,13 @@ func createMetricsExporter( fe := exporters.GetOrAdd(cfg, func() component.Component { return &fileExporter{path: cfg.(*Config).Path} }) - return exporterhelper.NewMetricsExporter(cfg, params.Logger, fe.Unwrap().(*fileExporter).ConsumeMetrics) + return exporterhelper.NewMetricsExporter( + cfg, + params.Logger, + fe.Unwrap().(*fileExporter).ConsumeMetrics, + exporterhelper.WithStart(fe.Unwrap().(*fileExporter).Start), + exporterhelper.WithShutdown(fe.Unwrap().(*fileExporter).Shutdown), + ) } func createLogsExporter( @@ -74,7 +86,13 @@ func createLogsExporter( fe := exporters.GetOrAdd(cfg, func() component.Component { return &fileExporter{path: cfg.(*Config).Path} }) - return exporterhelper.NewLogsExporter(cfg, params.Logger, fe.Unwrap().(*fileExporter).ConsumeLogs) + return exporterhelper.NewLogsExporter( + cfg, + params.Logger, + fe.Unwrap().(*fileExporter).ConsumeLogs, + exporterhelper.WithStart(fe.Unwrap().(*fileExporter).Start), + exporterhelper.WithShutdown(fe.Unwrap().(*fileExporter).Shutdown), + ) } // This is the map of already created File exporters for particular configurations. From f296b1035c298e854941b982f49e831d9ee53101 Mon Sep 17 00:00:00 2001 From: Chao Date: Sun, 23 May 2021 16:12:34 +0800 Subject: [PATCH 2/6] fix tests --- service/defaultcomponents/default_exporters_test.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/service/defaultcomponents/default_exporters_test.go b/service/defaultcomponents/default_exporters_test.go index 403fef22722..b3fedaa0dc2 100644 --- a/service/defaultcomponents/default_exporters_test.go +++ b/service/defaultcomponents/default_exporters_test.go @@ -180,7 +180,6 @@ func verifyExporterLifecycle(t *testing.T, factory component.ExporterFactory, ge } for i := 0; i < 2; i++ { - var exps []component.Exporter for _, createFn := range createFns { exp, err := createFn(ctx, expCreateParams, cfg) if errors.Is(err, componenterror.ErrDataTypeIsNotSupported) { @@ -188,9 +187,6 @@ func verifyExporterLifecycle(t *testing.T, factory component.ExporterFactory, ge } require.NoError(t, err) require.NoError(t, exp.Start(ctx, host)) - exps = append(exps, exp) - } - for _, exp := range exps { assert.NoError(t, exp.Shutdown(ctx)) } } From 2f3a43900add155fedb34b203a12aef904432eac Mon Sep 17 00:00:00 2001 From: Chao Date: Sun, 23 May 2021 17:35:13 +0800 Subject: [PATCH 3/6] Revert "fix tests" This reverts commit f296b1035c298e854941b982f49e831d9ee53101. --- service/defaultcomponents/default_exporters_test.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/service/defaultcomponents/default_exporters_test.go b/service/defaultcomponents/default_exporters_test.go index b3fedaa0dc2..403fef22722 100644 --- a/service/defaultcomponents/default_exporters_test.go +++ b/service/defaultcomponents/default_exporters_test.go @@ -180,6 +180,7 @@ func verifyExporterLifecycle(t *testing.T, factory component.ExporterFactory, ge } for i := 0; i < 2; i++ { + var exps []component.Exporter for _, createFn := range createFns { exp, err := createFn(ctx, expCreateParams, cfg) if errors.Is(err, componenterror.ErrDataTypeIsNotSupported) { @@ -187,6 +188,9 @@ func verifyExporterLifecycle(t *testing.T, factory component.ExporterFactory, ge } require.NoError(t, err) require.NoError(t, exp.Start(ctx, host)) + exps = append(exps, exp) + } + for _, exp := range exps { assert.NoError(t, exp.Shutdown(ctx)) } } From 67b2e8fe2a92248acac89d6005f4861e60c8b2c6 Mon Sep 17 00:00:00 2001 From: Chao Date: Sun, 23 May 2021 18:05:39 +0800 Subject: [PATCH 4/6] check file closed --- exporter/fileexporter/file_exporter.go | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/exporter/fileexporter/file_exporter.go b/exporter/fileexporter/file_exporter.go index 80237b3e4b2..1a0e2baf032 100644 --- a/exporter/fileexporter/file_exporter.go +++ b/exporter/fileexporter/file_exporter.go @@ -35,9 +35,10 @@ var marshaler = &jsonpb.Marshaler{} // fileExporter is the implementation of file exporter that writes telemetry data to a file // in Protobuf-JSON format. type fileExporter struct { - path string - file io.WriteCloser - mutex sync.Mutex + path string + file io.WriteCloser + mutex sync.Mutex + isFileClosed bool } func (e *fileExporter) Capabilities() consumer.Capabilities { @@ -72,10 +73,21 @@ func exportMessageAsLine(e *fileExporter, message proto.Message) error { func (e *fileExporter) Start(context.Context, component.Host) error { var err error e.file, err = os.OpenFile(e.path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600) + if err == nil { + e.isFileClosed = false + } return err } // Shutdown stops the exporter and is invoked during shutdown. func (e *fileExporter) Shutdown(context.Context) error { - return e.file.Close() + if e.isFileClosed { + return nil + } + + err := e.file.Close() + if err == nil { + e.isFileClosed = true + } + return err } From 49e0ad21e94dd77155130fc695e4faf539a0955b Mon Sep 17 00:00:00 2001 From: Bogdan Drutu Date: Mon, 24 May 2021 15:25:25 -0700 Subject: [PATCH 5/6] Revert changes in exporter.go --- exporter/fileexporter/file_exporter.go | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/exporter/fileexporter/file_exporter.go b/exporter/fileexporter/file_exporter.go index 1a0e2baf032..80237b3e4b2 100644 --- a/exporter/fileexporter/file_exporter.go +++ b/exporter/fileexporter/file_exporter.go @@ -35,10 +35,9 @@ var marshaler = &jsonpb.Marshaler{} // fileExporter is the implementation of file exporter that writes telemetry data to a file // in Protobuf-JSON format. type fileExporter struct { - path string - file io.WriteCloser - mutex sync.Mutex - isFileClosed bool + path string + file io.WriteCloser + mutex sync.Mutex } func (e *fileExporter) Capabilities() consumer.Capabilities { @@ -73,21 +72,10 @@ func exportMessageAsLine(e *fileExporter, message proto.Message) error { func (e *fileExporter) Start(context.Context, component.Host) error { var err error e.file, err = os.OpenFile(e.path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600) - if err == nil { - e.isFileClosed = false - } return err } // Shutdown stops the exporter and is invoked during shutdown. func (e *fileExporter) Shutdown(context.Context) error { - if e.isFileClosed { - return nil - } - - err := e.file.Close() - if err == nil { - e.isFileClosed = true - } - return err + return e.file.Close() } From 382402f4e6ec0765f3dc7749fb7f014929112638 Mon Sep 17 00:00:00 2001 From: Bogdan Drutu Date: Mon, 24 May 2021 15:46:12 -0700 Subject: [PATCH 6/6] Update factory.go --- exporter/fileexporter/factory.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/exporter/fileexporter/factory.go b/exporter/fileexporter/factory.go index 9159b9065e9..0dcbb87d5d0 100644 --- a/exporter/fileexporter/factory.go +++ b/exporter/fileexporter/factory.go @@ -56,8 +56,8 @@ func createTracesExporter( cfg, params.Logger, fe.Unwrap().(*fileExporter).ConsumeTraces, - exporterhelper.WithStart(fe.Unwrap().(*fileExporter).Start), - exporterhelper.WithShutdown(fe.Unwrap().(*fileExporter).Shutdown), + exporterhelper.WithStart(fe.Start), + exporterhelper.WithShutdown(fe.Shutdown), ) } @@ -73,8 +73,8 @@ func createMetricsExporter( cfg, params.Logger, fe.Unwrap().(*fileExporter).ConsumeMetrics, - exporterhelper.WithStart(fe.Unwrap().(*fileExporter).Start), - exporterhelper.WithShutdown(fe.Unwrap().(*fileExporter).Shutdown), + exporterhelper.WithStart(fe.Start), + exporterhelper.WithShutdown(fe.Shutdown), ) } @@ -90,8 +90,8 @@ func createLogsExporter( cfg, params.Logger, fe.Unwrap().(*fileExporter).ConsumeLogs, - exporterhelper.WithStart(fe.Unwrap().(*fileExporter).Start), - exporterhelper.WithShutdown(fe.Unwrap().(*fileExporter).Shutdown), + exporterhelper.WithStart(fe.Start), + exporterhelper.WithShutdown(fe.Shutdown), ) }