Bläddra i källkod

Flush stdout/err in Dockerfile-workers before replacing the current process (#14195)

Also update `subprocess.check_output` to the slightly newer `subprocess.run`.

Signed-off-by: Jason Little <realtyem@gmail.com>
tags/v1.70.0rc1
realtyem 1 år sedan
committed by GitHub
förälder
incheckning
6c5082f3e0
Ingen känd nyckel hittad för denna signaturen i databasen GPG-nyckel ID: 4AEE18F83AFDEB23
3 ändrade filer med 22 tillägg och 17 borttagningar
  1. +1
    -0
      changelog.d/14195.docker
  2. +8
    -12
      docker/configure_workers_and_start.py
  3. +13
    -5
      docker/start.py

+ 1
- 0
changelog.d/14195.docker Visa fil

@@ -0,0 +1 @@
Fix pre-startup logging being lost when using the `Dockerfile-workers` image.

+ 8
- 12
docker/configure_workers_and_start.py Visa fil

@@ -230,24 +230,19 @@ upstream {upstream_worker_type} {{

# Utility functions
def log(txt: str) -> None:
"""Log something to the stdout.

Args:
txt: The text to log.
"""
print(txt)


def error(txt: str) -> NoReturn:
"""Log something and exit with an error code.

Args:
txt: The text to log in error.
"""
log(txt)
print(txt, file=sys.stderr)
sys.exit(2)


def flush_buffers() -> None:
sys.stdout.flush()
sys.stderr.flush()


def convert(src: str, dst: str, **template_vars: object) -> None:
"""Generate a file from a template

@@ -328,7 +323,7 @@ def generate_base_homeserver_config() -> None:
# start.py already does this for us, so just call that.
# note that this script is copied in in the official, monolith dockerfile
os.environ["SYNAPSE_HTTP_PORT"] = str(MAIN_PROCESS_HTTP_LISTENER_PORT)
subprocess.check_output(["/usr/local/bin/python", "/start.py", "migrate_config"])
subprocess.run(["/usr/local/bin/python", "/start.py", "migrate_config"], check=True)


def generate_worker_files(
@@ -642,6 +637,7 @@ def main(args: List[str], environ: MutableMapping[str, str]) -> None:
# Start supervisord, which will start Synapse, all of the configured worker
# processes, redis, nginx etc. according to the config we created above.
log("Starting supervisord")
flush_buffers()
os.execle(
"/usr/local/bin/supervisord",
"supervisord",


+ 13
- 5
docker/start.py Visa fil

@@ -13,14 +13,19 @@ import jinja2

# Utility functions
def log(txt: str) -> None:
print(txt, file=sys.stderr)
print(txt)


def error(txt: str) -> NoReturn:
log(txt)
print(txt, file=sys.stderr)
sys.exit(2)


def flush_buffers() -> None:
sys.stdout.flush()
sys.stderr.flush()


def convert(src: str, dst: str, environ: Mapping[str, object]) -> None:
"""Generate a file from a template

@@ -131,10 +136,10 @@ def generate_config_from_template(

if ownership is not None:
log(f"Setting ownership on /data to {ownership}")
subprocess.check_output(["chown", "-R", ownership, "/data"])
subprocess.run(["chown", "-R", ownership, "/data"], check=True)
args = ["gosu", ownership] + args

subprocess.check_output(args)
subprocess.run(args, check=True)


def run_generate_config(environ: Mapping[str, str], ownership: Optional[str]) -> None:
@@ -158,7 +163,7 @@ def run_generate_config(environ: Mapping[str, str], ownership: Optional[str]) ->
if ownership is not None:
# make sure that synapse has perms to write to the data dir.
log(f"Setting ownership on {data_dir} to {ownership}")
subprocess.check_output(["chown", ownership, data_dir])
subprocess.run(["chown", ownership, data_dir], check=True)

# create a suitable log config from our template
log_config_file = "%s/%s.log.config" % (config_dir, server_name)
@@ -185,6 +190,7 @@ def run_generate_config(environ: Mapping[str, str], ownership: Optional[str]) ->
"--open-private-ports",
]
# log("running %s" % (args, ))
flush_buffers()
os.execv(sys.executable, args)


@@ -267,8 +273,10 @@ running with 'migrate_config'. See the README for more details.
args = [sys.executable] + args
if ownership is not None:
args = ["gosu", ownership] + args
flush_buffers()
os.execve("/usr/sbin/gosu", args, environ)
else:
flush_buffers()
os.execve(sys.executable, args, environ)




Laddar…
Avbryt
Spara