Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Another batch of cleanups in otlp exporter #1357

Merged
merged 13 commits into from
Nov 24, 2020

Conversation

krnowak
Copy link
Member

@krnowak krnowak commented Nov 20, 2020

This PR is best reviewed commit by commit instead of going through all of them lumped together. The PR basically consists of the cleanups and fixes in otlp exporter I have made while working on #1121 and #1122.

@codecov
Copy link

codecov bot commented Nov 20, 2020

Codecov Report

Merging #1357 (2368f43) into master (e081978) will increase coverage by 0.0%.
The diff coverage is 81.3%.

Impacted file tree graph

@@          Coverage Diff           @@
##           master   #1357   +/-   ##
======================================
  Coverage    77.4%   77.5%           
======================================
  Files         124     124           
  Lines        6104    6128   +24     
======================================
+ Hits         4730    4754   +24     
+ Misses       1125    1123    -2     
- Partials      249     251    +2     
Impacted Files Coverage Δ
exporters/otlp/otlp.go 83.5% <79.0%> (+6.4%) ⬆️
exporters/otlp/connection.go 83.4% <82.5%> (-11.4%) ⬇️

krnowak and others added 4 commits November 23, 2020 19:48
If we will need to maintain more than one connection in future, this
splitting off will come in handy.

Co-authored-by: Stefan Prisca <stefan.prisca@gmail.com>
There is another channel that serves as a one-time signal, where
channel's data type does not matter.
This is to make clear that the lock is guarding only the connection
since it can be changed by multiple goroutines, and other members are
either atomic or read-only.
The stop channel was rather useless on the exporter side - the primary
reason for existence of this channel is to stop a background
reconnecting goroutine. Since the goroutine lives entirely within
grpcConnection object, move the stop channel here. Also expose a
function to unify the stop channel with the context cancellation, so
exporter can use it without knowing anything about stop channels.

Also make export functions a bit more consistent.
exporters/otlp/connection.go Outdated Show resolved Hide resolved
exporters/otlp/connection.go Show resolved Hide resolved
exporters/otlp/connection.go Outdated Show resolved Hide resolved
exporters/otlp/connection.go Show resolved Hide resolved
It's possible that both disconnected channel and stop channel will be
triggered around the same time, so the goroutine is as likely to start
reconnecting as to return from the goroutine. Make sure we return if
the stop channel is closed.
Set clients to nil on connection error, so we don't try to send the
data over a bad connection, but return a "no client" error
immediately.
It's rather risky to call a callback coming from outside within a
critical section. Move it out.
Connecting to the collector may also take its time, so it can be
useful in some cases to pass a context with a deadline. Currently we
just pass a background context, so this commit does not really change
any behavior. The follow-up commits will make a use of it, though.
It makes it possible to limit the time spent on connecting to the
collector.
Dialling to grpc service ignored the closing of the stop channel, but
this can be easily changed.
That way we can make sure that there won't be a window between closing
a connection and waiting for the background goroutine to return, where
the new connection could be established.
This member is never nil, unless the Exporter is created like
&Exporter{}, which is not a thing we support anyway.
@krnowak
Copy link
Member Author

krnowak commented Nov 24, 2020

Updated.

exporters/otlp/connection.go Show resolved Hide resolved
@MrAlias MrAlias merged commit 5a728db into open-telemetry:master Nov 24, 2020
@krnowak krnowak deleted the otlp-exporter-2 branch November 24, 2020 20:34
AzfaarQureshi pushed a commit to open-o11y/opentelemetry-go that referenced this pull request Dec 3, 2020
* Move connection logic into grpcConnection object

If we will need to maintain more than one connection in future, this
splitting off will come in handy.

Co-authored-by: Stefan Prisca <stefan.prisca@gmail.com>

* Make another channel a signal channel

There is another channel that serves as a one-time signal, where
channel's data type does not matter.

* Reorder and document connection members

This is to make clear that the lock is guarding only the connection
since it can be changed by multiple goroutines, and other members are
either atomic or read-only.

* Move stop signal into connection

The stop channel was rather useless on the exporter side - the primary
reason for existence of this channel is to stop a background
reconnecting goroutine. Since the goroutine lives entirely within
grpcConnection object, move the stop channel here. Also expose a
function to unify the stop channel with the context cancellation, so
exporter can use it without knowing anything about stop channels.

Also make export functions a bit more consistent.

* Do not run reconnection routine when being stopped too

It's possible that both disconnected channel and stop channel will be
triggered around the same time, so the goroutine is as likely to start
reconnecting as to return from the goroutine. Make sure we return if
the stop channel is closed.

* Nil clients on connection error

Set clients to nil on connection error, so we don't try to send the
data over a bad connection, but return a "no client" error
immediately.

* Do not call new connection handler within critical section

It's rather risky to call a callback coming from outside within a
critical section. Move it out.

* Add context parameter to connection routines

Connecting to the collector may also take its time, so it can be
useful in some cases to pass a context with a deadline. Currently we
just pass a background context, so this commit does not really change
any behavior. The follow-up commits will make a use of it, though.

* Add context parameter to NewExporter and Start

It makes it possible to limit the time spent on connecting to the
collector.

* Stop connecting on shutdown

Dialling to grpc service ignored the closing of the stop channel, but
this can be easily changed.

* Close connection after background is shut down

That way we can make sure that there won't be a window between closing
a connection and waiting for the background goroutine to return, where
the new connection could be established.

* Remove unnecessary nil check

This member is never nil, unless the Exporter is created like
&Exporter{}, which is not a thing we support anyway.

* Update changelog

Co-authored-by: Stefan Prisca <stefan.prisca@gmail.com>
@MrAlias MrAlias mentioned this pull request Dec 11, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants