Skip to content

Conversation

@droberts195
Copy link

In normal operation native controllers are not expected to write
anything to stdout or stderr. However, if due to an error or
something unexpected with the environment a native controller
does write something to stdout or stderr then it will block if
nothing is reading that output. (On Linux both glibc and ld.so.1
can write errors to stderr in certain situations.)

This change makes the stdout and stderr of native controllers
reuse the same stdout and stderr as the Elasticsearch JVM (which
are by default redirected to es.stdout.log and es.stderr.log) so
that if something unexpected is written to native controller
output then:

  1. The native controller process does not block, waiting for
    something to read the output
  2. We can see what the output was, making it easier to debug
    obscure environmental problems

Relates #56366

In normal operation native controllers are not expected to write
anything to stdout or stderr.  However, if due to an error or
something unexpected with the environment a native controller
does write something to stdout or stderr then it will block if
nothing is reading that output.

This change makes the stdout and stderr of native controllers
reuse the same stdout and stderr as the Elasticsearch JVM (which
are by default redirected to es.stdout.log and es.stderr.log) so
that if something unexpected is written to native controller
output then:

1. The native controller process does not block, waiting for
   something to read the output
2. We can see what the output was, making it easier to debug
   obscure environmental problems

Relates elastic#56366
@elasticmachine
Copy link
Collaborator

Pinging @elastic/es-core-infra (:Core/Infra/Core)

@elasticmachine elasticmachine added the Team:Core/Infra Meta label for core/infra team label May 10, 2020
@droberts195 droberts195 merged commit 842e94a into elastic:master May 13, 2020
@droberts195 droberts195 deleted the inherit_stderr_stdout_on_controller_spawn branch May 13, 2020 07:54
droberts195 pushed a commit to droberts195/elasticsearch that referenced this pull request May 13, 2020
In normal operation native controllers are not expected to write
anything to stdout or stderr.  However, if due to an error or
something unexpected with the environment a native controller
does write something to stdout or stderr then it will block if
nothing is reading that output.

This change makes the stdout and stderr of native controllers
reuse the same stdout and stderr as the Elasticsearch JVM (which
are by default redirected to es.stdout.log and es.stderr.log) so
that if something unexpected is written to native controller
output then:

1. The native controller process does not block, waiting for
   something to read the output
2. We can see what the output was, making it easier to debug
   obscure environmental problems

Backport of elastic#56491
droberts195 pushed a commit to droberts195/elasticsearch that referenced this pull request May 13, 2020
In normal operation native controllers are not expected to write
anything to stdout or stderr.  However, if due to an error or
something unexpected with the environment a native controller
does write something to stdout or stderr then it will block if
nothing is reading that output.

This change makes the stdout and stderr of native controllers
reuse the same stdout and stderr as the Elasticsearch JVM (which
are by default redirected to es.stdout.log and es.stderr.log) so
that if something unexpected is written to native controller
output then:

1. The native controller process does not block, waiting for
   something to read the output
2. We can see what the output was, making it easier to debug
   obscure environmental problems

Backport of elastic#56491
droberts195 pushed a commit to droberts195/elasticsearch that referenced this pull request May 13, 2020
In normal operation native controllers are not expected to write
anything to stdout or stderr.  However, if due to an error or
something unexpected with the environment a native controller
does write something to stdout or stderr then it will block if
nothing is reading that output.

This change makes the stdout and stderr of native controllers
reuse the same stdout and stderr as the Elasticsearch JVM (which
are by default redirected to es.stdout.log and es.stderr.log) so
that if something unexpected is written to native controller
output then:

1. The native controller process does not block, waiting for
   something to read the output
2. We can see what the output was, making it easier to debug
   obscure environmental problems

Backport of elastic#56491
droberts195 pushed a commit that referenced this pull request May 13, 2020
In normal operation native controllers are not expected to write
anything to stdout or stderr.  However, if due to an error or
something unexpected with the environment a native controller
does write something to stdout or stderr then it will block if
nothing is reading that output.

This change makes the stdout and stderr of native controllers
reuse the same stdout and stderr as the Elasticsearch JVM (which
are by default redirected to es.stdout.log and es.stderr.log) so
that if something unexpected is written to native controller
output then:

1. The native controller process does not block, waiting for
   something to read the output
2. We can see what the output was, making it easier to debug
   obscure environmental problems

Backport of #56491

Co-authored-by: Elastic Machine <[email protected]>
droberts195 pushed a commit that referenced this pull request May 13, 2020
In normal operation native controllers are not expected to write
anything to stdout or stderr.  However, if due to an error or
something unexpected with the environment a native controller
does write something to stdout or stderr then it will block if
nothing is reading that output.

This change makes the stdout and stderr of native controllers
reuse the same stdout and stderr as the Elasticsearch JVM (which
are by default redirected to es.stdout.log and es.stderr.log) so
that if something unexpected is written to native controller
output then:

1. The native controller process does not block, waiting for
   something to read the output
2. We can see what the output was, making it easier to debug
   obscure environmental problems

Backport of #56491

Co-authored-by: Elastic Machine <[email protected]>
droberts195 pushed a commit that referenced this pull request May 14, 2020
In normal operation native controllers are not expected to write
anything to stdout or stderr.  However, if due to an error or
something unexpected with the environment a native controller
does write something to stdout or stderr then it will block if
nothing is reading that output.

This change makes the stdout and stderr of native controllers
reuse the same stdout and stderr as the Elasticsearch JVM (which
are by default redirected to es.stdout.log and es.stderr.log) so
that if something unexpected is written to native controller
output then:

1. The native controller process does not block, waiting for
   something to read the output
2. We can see what the output was, making it easier to debug
   obscure environmental problems

Backport of #56491
droberts195 pushed a commit that referenced this pull request May 14, 2020
In normal operation native controllers are not expected to write
anything to stdout or stderr.  However, if due to an error or
something unexpected with the environment a native controller
does write something to stdout or stderr then it will block if
nothing is reading that output.

This change makes the stdout and stderr of native controllers
reuse the same stdout and stderr as the Elasticsearch JVM (which
are by default redirected to es.stdout.log and es.stderr.log) so
that if something unexpected is written to native controller
output then:

1. The native controller process does not block, waiting for
   something to read the output
2. We can see what the output was, making it easier to debug
   obscure environmental problems

Backport of #56491
droberts195 pushed a commit to droberts195/ml-cpp that referenced this pull request Jun 11, 2020
This change fixes two related issues with named pipe connection
when the controller process first starts up:

1. If the ES JVM dies before the controller connects its logging
   named pipe then since elastic/elasticsearch#56491 the resulting
   errors from the controller process will be seen in the ES
   stderr file.  There is a change to the logging to make it
   clearer that the controller didn't fail, but exited due to
   the ES JVM disappearing.
2. Interrupted system calls while connecting the named pipes
   could cause the pipes to unnecessarily fail to connect.  There
   is a change to retry the calls on getting an EINTR error unless
   the interrupt was caused by the functionality of controller
   that kills off the connection attempts if the ES JVM dies (i.e.
   the scenario described in point 1).

Relates elastic#564
Relates elastic/elasticsearch#57969
droberts195 pushed a commit to elastic/ml-cpp that referenced this pull request Jun 17, 2020
This change fixes two related issues with named pipe connection
when the controller process first starts up:

1. If the ES JVM dies before the controller connects its logging
   named pipe then since elastic/elasticsearch#56491 the resulting
   errors from the controller process will be seen in the ES
   stderr file.  There is a change to the logging to make it
   clearer that the controller didn't fail, but exited due to
   the ES JVM disappearing.
2. Interrupted system calls while connecting the named pipes
   could cause the pipes to unnecessarily fail to connect.  There
   is a change to retry the calls on getting an EINTR error unless
   the interrupt was caused by the functionality of controller
   that kills off the connection attempts if the ES JVM dies (i.e.
   the scenario described in point 1).

Relates #564
Relates elastic/elasticsearch#57969
droberts195 pushed a commit to droberts195/ml-cpp that referenced this pull request Jun 17, 2020
This change fixes two related issues with named pipe connection
when the controller process first starts up:

1. If the ES JVM dies before the controller connects its logging
   named pipe then since elastic/elasticsearch#56491 the resulting
   errors from the controller process will be seen in the ES
   stderr file.  There is a change to the logging to make it
   clearer that the controller didn't fail, but exited due to
   the ES JVM disappearing.
2. Interrupted system calls while connecting the named pipes
   could cause the pipes to unnecessarily fail to connect.  There
   is a change to retry the calls on getting an EINTR error unless
   the interrupt was caused by the functionality of controller
   that kills off the connection attempts if the ES JVM dies (i.e.
   the scenario described in point 1).

Backport of elastic#1311
droberts195 pushed a commit to droberts195/ml-cpp that referenced this pull request Jun 17, 2020
This change fixes two related issues with named pipe connection
when the controller process first starts up:

1. If the ES JVM dies before the controller connects its logging
   named pipe then since elastic/elasticsearch#56491 the resulting
   errors from the controller process will be seen in the ES
   stderr file.  There is a change to the logging to make it
   clearer that the controller didn't fail, but exited due to
   the ES JVM disappearing.
2. Interrupted system calls while connecting the named pipes
   could cause the pipes to unnecessarily fail to connect.  There
   is a change to retry the calls on getting an EINTR error unless
   the interrupt was caused by the functionality of controller
   that kills off the connection attempts if the ES JVM dies (i.e.
   the scenario described in point 1).

Backport of elastic#1311
droberts195 pushed a commit to droberts195/ml-cpp that referenced this pull request Jun 17, 2020
This change fixes two related issues with named pipe connection
when the controller process first starts up:

1. If the ES JVM dies before the controller connects its logging
   named pipe then since elastic/elasticsearch#56491 the resulting
   errors from the controller process will be seen in the ES
   stderr file.  There is a change to the logging to make it
   clearer that the controller didn't fail, but exited due to
   the ES JVM disappearing.
2. Interrupted system calls while connecting the named pipes
   could cause the pipes to unnecessarily fail to connect.  There
   is a change to retry the calls on getting an EINTR error unless
   the interrupt was caused by the functionality of controller
   that kills off the connection attempts if the ES JVM dies (i.e.
   the scenario described in point 1).

Backport of elastic#1311
droberts195 pushed a commit to elastic/ml-cpp that referenced this pull request Jun 17, 2020
This change fixes two related issues with named pipe connection
when the controller process first starts up:

1. If the ES JVM dies before the controller connects its logging
   named pipe then since elastic/elasticsearch#56491 the resulting
   errors from the controller process will be seen in the ES
   stderr file.  There is a change to the logging to make it
   clearer that the controller didn't fail, but exited due to
   the ES JVM disappearing.
2. Interrupted system calls while connecting the named pipes
   could cause the pipes to unnecessarily fail to connect.  There
   is a change to retry the calls on getting an EINTR error unless
   the interrupt was caused by the functionality of controller
   that kills off the connection attempts if the ES JVM dies (i.e.
   the scenario described in point 1).

Backport of #1311
droberts195 pushed a commit to elastic/ml-cpp that referenced this pull request Jun 18, 2020
This change fixes two related issues with named pipe connection
when the controller process first starts up:

1. If the ES JVM dies before the controller connects its logging
   named pipe then since elastic/elasticsearch#56491 the resulting
   errors from the controller process will be seen in the ES
   stderr file.  There is a change to the logging to make it
   clearer that the controller didn't fail, but exited due to
   the ES JVM disappearing.
2. Interrupted system calls while connecting the named pipes
   could cause the pipes to unnecessarily fail to connect.  There
   is a change to retry the calls on getting an EINTR error unless
   the interrupt was caused by the functionality of controller
   that kills off the connection attempts if the ES JVM dies (i.e.
   the scenario described in point 1).

Backport of #1311
droberts195 pushed a commit to elastic/ml-cpp that referenced this pull request Jun 18, 2020
This change fixes two related issues with named pipe connection
when the controller process first starts up:

1. If the ES JVM dies before the controller connects its logging
   named pipe then since elastic/elasticsearch#56491 the resulting
   errors from the controller process will be seen in the ES
   stderr file.  There is a change to the logging to make it
   clearer that the controller didn't fail, but exited due to
   the ES JVM disappearing.
2. Interrupted system calls while connecting the named pipes
   could cause the pipes to unnecessarily fail to connect.  There
   is a change to retry the calls on getting an EINTR error unless
   the interrupt was caused by the functionality of controller
   that kills off the connection attempts if the ES JVM dies (i.e.
   the scenario described in point 1).

Backport of #1311
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

>bug :Core/Infra/Core Core issues without another label Team:Core/Infra Meta label for core/infra team v7.7.1 v7.8.0 v7.9.0 v8.0.0-alpha1

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants