mirror of
https://mau.dev/maunium/synapse.git
synced 2024-10-01 01:36:05 -04:00
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>
This commit is contained in:
parent
c3a4780080
commit
6c5082f3e0
1
changelog.d/14195.docker
Normal file
1
changelog.d/14195.docker
Normal file
@ -0,0 +1 @@
|
|||||||
|
Fix pre-startup logging being lost when using the `Dockerfile-workers` image.
|
@ -230,24 +230,19 @@ upstream {upstream_worker_type} {{
|
|||||||
|
|
||||||
# Utility functions
|
# Utility functions
|
||||||
def log(txt: str) -> None:
|
def log(txt: str) -> None:
|
||||||
"""Log something to the stdout.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
txt: The text to log.
|
|
||||||
"""
|
|
||||||
print(txt)
|
print(txt)
|
||||||
|
|
||||||
|
|
||||||
def error(txt: str) -> NoReturn:
|
def error(txt: str) -> NoReturn:
|
||||||
"""Log something and exit with an error code.
|
print(txt, file=sys.stderr)
|
||||||
|
|
||||||
Args:
|
|
||||||
txt: The text to log in error.
|
|
||||||
"""
|
|
||||||
log(txt)
|
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
|
|
||||||
|
def flush_buffers() -> None:
|
||||||
|
sys.stdout.flush()
|
||||||
|
sys.stderr.flush()
|
||||||
|
|
||||||
|
|
||||||
def convert(src: str, dst: str, **template_vars: object) -> None:
|
def convert(src: str, dst: str, **template_vars: object) -> None:
|
||||||
"""Generate a file from a template
|
"""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.
|
# start.py already does this for us, so just call that.
|
||||||
# note that this script is copied in in the official, monolith dockerfile
|
# note that this script is copied in in the official, monolith dockerfile
|
||||||
os.environ["SYNAPSE_HTTP_PORT"] = str(MAIN_PROCESS_HTTP_LISTENER_PORT)
|
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(
|
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
|
# Start supervisord, which will start Synapse, all of the configured worker
|
||||||
# processes, redis, nginx etc. according to the config we created above.
|
# processes, redis, nginx etc. according to the config we created above.
|
||||||
log("Starting supervisord")
|
log("Starting supervisord")
|
||||||
|
flush_buffers()
|
||||||
os.execle(
|
os.execle(
|
||||||
"/usr/local/bin/supervisord",
|
"/usr/local/bin/supervisord",
|
||||||
"supervisord",
|
"supervisord",
|
||||||
|
@ -13,14 +13,19 @@ import jinja2
|
|||||||
|
|
||||||
# Utility functions
|
# Utility functions
|
||||||
def log(txt: str) -> None:
|
def log(txt: str) -> None:
|
||||||
print(txt, file=sys.stderr)
|
print(txt)
|
||||||
|
|
||||||
|
|
||||||
def error(txt: str) -> NoReturn:
|
def error(txt: str) -> NoReturn:
|
||||||
log(txt)
|
print(txt, file=sys.stderr)
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
|
|
||||||
|
def flush_buffers() -> None:
|
||||||
|
sys.stdout.flush()
|
||||||
|
sys.stderr.flush()
|
||||||
|
|
||||||
|
|
||||||
def convert(src: str, dst: str, environ: Mapping[str, object]) -> None:
|
def convert(src: str, dst: str, environ: Mapping[str, object]) -> None:
|
||||||
"""Generate a file from a template
|
"""Generate a file from a template
|
||||||
|
|
||||||
@ -131,10 +136,10 @@ def generate_config_from_template(
|
|||||||
|
|
||||||
if ownership is not None:
|
if ownership is not None:
|
||||||
log(f"Setting ownership on /data to {ownership}")
|
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
|
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:
|
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:
|
if ownership is not None:
|
||||||
# make sure that synapse has perms to write to the data dir.
|
# make sure that synapse has perms to write to the data dir.
|
||||||
log(f"Setting ownership on {data_dir} to {ownership}")
|
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
|
# create a suitable log config from our template
|
||||||
log_config_file = "%s/%s.log.config" % (config_dir, server_name)
|
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",
|
"--open-private-ports",
|
||||||
]
|
]
|
||||||
# log("running %s" % (args, ))
|
# log("running %s" % (args, ))
|
||||||
|
flush_buffers()
|
||||||
os.execv(sys.executable, args)
|
os.execv(sys.executable, args)
|
||||||
|
|
||||||
|
|
||||||
@ -267,8 +273,10 @@ running with 'migrate_config'. See the README for more details.
|
|||||||
args = [sys.executable] + args
|
args = [sys.executable] + args
|
||||||
if ownership is not None:
|
if ownership is not None:
|
||||||
args = ["gosu", ownership] + args
|
args = ["gosu", ownership] + args
|
||||||
|
flush_buffers()
|
||||||
os.execve("/usr/sbin/gosu", args, environ)
|
os.execve("/usr/sbin/gosu", args, environ)
|
||||||
else:
|
else:
|
||||||
|
flush_buffers()
|
||||||
os.execve(sys.executable, args, environ)
|
os.execve(sys.executable, args, environ)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user