Having Issue with tini not reaping zombies

When I am exec-ing the mysqld inside entrypoint.sh the zombie process occurs.  Without exec-ing I always get an extra process that is shell as immediate child of tini and mysqld as the child of that shell. Am I doing something wrong ?
Dockerfile
COPY entrypoint.sh /
ENTRYPOINT ["tini", "-g", "--"]
EXPOSE 3306

CMD ["/entrypoint.sh"]

entrypoint.sh
#!/bin/sh
set -ex
mkfifo /tmp/mysqld.init
echo 'CREATE DATABASE IF NOT EXISTS test;' > /tmp/mysqld.init &
exec mysqld --init-file="/tmp/mysqld.init"

top
PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
   6     1 mysql    S     383m  19%   0   0% mysqld --init-file=/tmp/mysqld.init
  41     0 root     R     1532   0%   0   0% top
   1     0 root     S      764   0%   1   0% tini -g -- /entrypoint.sh
   8     6 root     Z        0   0%   1   0% [entrypoint.sh]

I also tried tini as subreaper. Something like below inside entrypoint.sh, but tini itself become zombie. Without a control operator & it works fine.
tini -s -vvv -- sleep 60 &
And here is the output I get.
[TRACE tini (7)] Registered as child subreaper
[INFO  tini (7)] Spawned child process 'sleep' with pid '8'
....................................................
 This should let us see the process hierarchy and make it easier to understand where things went off the rails.

@krallin After some trial and error this exec tini -g -- "$@" --init-file="/tmp/mysqld.init" solved my issue. But yet I am confused why the above doesn't work. I ran top after I created a container. e.g docker-compose exec mariadb top

Dockerfile
FROM fabric8/java-centos-openjdk8-jdk

ENV TINI_VERSION=0.18.0
RUN curl -fSL -o /tmp/tini https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini && \
    chmod +x /tmp/tini

COPY docker-entrypoint.sh connector-deploy.sh heartbeat.sh Scratch.class /
ENTRYPOINT ["/tmp/tini", "-vvv", "-g", "-w", "--", "/docker-entrypoint.sh"]
CMD ["start"]

docker-entrypoint.sh
#!/bin/bash
set -e
case $1 in
    start)
        ./connector-deploy.sh &
        ./heartbeat.sh &
        exec java Scratch;;
esac
exec "$@"

heartbeat.sh (Run ps auxwww --forest each 10 seconds)
#!/bin/bash
while true; do
    ps auxwww --forest
    sleep 10
done

connector-deploy.sh (Dies after 10 seconds to become a zombie)
#!/bin/bash

echo "$0: We have started"
while true; do
    sleep 10
    break
done
echo "$0: We are going to become a zombie"

Scratch.java (Simulates a long running task by printing every 20 seconds)
import java.time.Duration;
class Scratch {
  public static void main(String[] args) throws InterruptedException {
    while (true) {
      System.out.println("JAVA: ALIVE");
      Thread.sleep(Duration.ofSeconds(20).toMillis());
    }
  }
}

The output once I build and run the image.
~/tmp/tini-report $ docker run -it --rm foo
[INFO  tini (1)] Spawned child process '/docker-entrypoint.sh' with pid '6'
./connector-deploy.sh: We have started
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
jboss        1  0.0  0.0   4368   648 pts/0    Ss   08:07   0:00 /tmp/tini -vvv -g -w -- /docker-entrypoint.sh start
jboss        6  0.0  0.0  11692  2636 pts/0    D+   08:07   0:00 /bin/bash /docker-entrypoint.sh start
jboss        7  0.0  0.0  11696  2504 pts/0    S+   08:07   0:00  \_ /bin/bash ./connector-deploy.sh
jboss        9  0.0  0.0   4372   648 pts/0    S+   08:07   0:00  |   \_ sleep 10
jboss        8  0.0  0.0  11692  2588 pts/0    S+   08:07   0:00  \_ /bin/bash ./heartbeat.sh
jboss       10  0.0  0.0  51748  3548 pts/0    R+   08:07   0:00      \_ ps auxwww --forest
JAVA: ALIVE
[TRACE tini (1)] No child to reap
...
 If you go into the container and pkill heartbeat.sh then the same thing happens. ie. heartbeat.sh becomes a zombie and tini collects the orphaned sleep running under heartbeat.sh.

As far as I understand it, your problem is in trying to run more than one thing. Tini can only reap processes that have no parent (ie are re-parented to tini via being pid 1 or --subreaper). In both examples here, the zombie processes have a parent. Let me try going through this java example since it has ps output to back my conclusions.

tini starts with a single child /bin/bash /docker-entrypoint.sh as pid 6
pid 6 creates two children (pids 7 and 8)
while 7 and 8 are starting/sleeping, pid 6 replaces itself with a java process via exec and is still pid 6
pids 7 and 8 still have a parent and so are not re-parented to tini
the java process, pid 6, is now the parent of the two shell scripts and is responsible for doing a wait on them when it is sent the SIGCHLD

Tini can't possibly reap these as written since the parent still exists. You could possibly write the "zombie" scripts to do fork and exec in order to divorce themselves from their parent (ie like a classic daemon), but there might be a race if you leave in the &. I would really suggest to moving to something that will actually monitor the other processes like a full init system or a "sidecar" container (https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/).

@yosifkit I did eventually end up implementing a proper daemon in bash and in that case tini does reap the process since it gets reparented to tini when doing the double fork.

but there might be a race if you leave in the &

Could you elaborate on the quoted part? What kind of race?

I was just thinking that it might still be possible to get a zombie:

say the entrypoint is pid 6
it spawns your new daemon script to run in the background (heartbeat.sh & as pid 7)

heartbeat.sh hasn't yet done its own fork + exec

maybe it just hasn't been given processor time
or that it has a bunch of setup before it does the fork/exec
many reasons since it is now being run in parallel to the entrypoint and thus order between them is not guaranteed

pid 6 execs to java or whatever
pid 7 forks to create pid 8 and pid 7 exits
pid 7 is still a child of pid 6 and is unreaped

If you want to ensure that it has completed its fork and exec, just run the script without backgrounding it with &.

Further to this, we are also experiencing zombie issues..... and we've jet to identify a repeatable trigger.
What I can tell you is we're running Jupyter notebooks in a K8 cluster, using KubeSpawner - and the effect is we have a pod that won't terminate, thus the user cannot start a new instance for a later class (or homework)
At a process-level, a happy container looks something like:
 43338<PHONE_NUMBER>36  43338 ?            -1 Sl       0   0:00  \_ containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/bed33e403b4bf0bdd536698df1721b5ee8a7b2bce4f0c934f168a1264cc1530f -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runti
106036<PHONE_NUMBER>54 106054 ?            -1 Ss    1000   0:00  |   \_ tini -g -- /usr/local/bin/docker-entrypoint.sh jupyter-notebook --ip=<IP_ADDRESS> --port=8888 --NotebookApp.base_url=/user/user_a/ --NotebookApp.token=Xgfcf0fDQfGfM3utR2VFrw --NotebookApp.default_url=/tree --NotebookApp.trust_xheaders=True --NotebookApp.disable_check_xsrf=T
106054<PHONE_NUMBER>74 106054 ?            -1 Sl    1000   0:05  |       \_ /opt/conda/bin/python /opt/conda/bin/jupyter-notebook --ip=<IP_ADDRESS> --port=8888 --NotebookApp.base_url=/user/1_s1985869/ --NotebookApp.token=Xgfcf0fDQfGfM3utR2VFrw --NotebookApp.default_url=/tree --NotebookApp.trust_xheaders=True --NotebookApp.disable_check_xsrf=True
106074<PHONE_NUMBER>88 106188 ?            -1 Ssl   1000   0:01  |           \_ /opt/conda/bin/python -m ipykernel_launcher -f /home/jovyan/.local/share/jupyter/runtime/kernel-baa4d67d-2ab9-4321-8265-0cb79e911de2.json
106074   8775   8775   8775 ?            -1 Ssl   1000   0:00  |           \_ /opt/conda/bin/python -m ipykernel_launcher -f /home/jovyan/.local/share/jupyter/runtime/kernel-c363be05-417c-4a74-a2c6-e2e1d6d2b87e.json

however my broken container looks like:
 98917  90147  90147  98917 ?            -1 Sl       0   0:00  \_ containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/81cb907d22fe090012823091ba27aee2a0fe8b1339b8170db6db89501a038520 -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc
 90147  90164  90164  90164 ?            -1 Ss    1000   0:00  |   \_ [tini]
 90164  90182  90182  90164 ?            -1 Rl    1000  25:21  |       \_ /opt/conda/bin/python /opt/conda/bin/jupyter-notebook --ip=<IP_ADDRESS> --port=8888 --NotebookApp.base_url=/user/user_b/ --NotebookApp.token=2cVgcb-8QOGFjpDN8VqTCA --NotebookApp.default_url=/tree --NotebookApp.trust_xheaders=True --NotebookApp.disable_check_xsrf=True
 90182  90818  90818  90818 ?            -1 Rsl   1000  42:58  |           \_ /opt/conda/bin/python -m ipykernel_launcher -f /home/jovyan/.local/share/jupyter/runtime/kernel-e13ed0b6-bd44-43d2-873b-962ff2f8b297.json
 90182  90920  90920  90920 ?            -1 Rsl   1000  44:41  |           \_ /opt/conda/bin/python -m ipykernel_launcher -f /home/jovyan/.local/share/jupyter/runtime/kernel-a83a7ee8-ab57-4a74-92a7-c183b31cd5a5.json

The [tini] is clearly the zombie process here.

The only solution we've found, so far, is to actually reboot the machine (which needs a cordon & wait process because, well... users)
Do you have any suggestions where we can look?
(we're running

Centos7: Linux my_host 3.10.0-1062.1.1.el7.x86_64 #1 SMP Fri Sep 13 22:55:44 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
docker:  Docker version 19.03.3, build a872fc2f86
Jupyter notebooks based on the May 2019 images : jupyter/r-notebook:abdb27a6dfbb

if that helps)

@perllaghu To help with debugging, can you please:

Share the output of running the same ps command within your container's namespace
Run tini with -vvv and provide its output

Thanks!

Share the output of running the same ps command within your container's namespace
This, I can do the next time I have a stalled image

Run tini with -vvv and provide its output
Let me talk to my DevOps people - they may balk at the extra logging (hope not)

I think -vv might do it if this is too much logging — I’d like to
understand why Tini even exited here (and why your container hasn’t been
torn down as a result).
On Fri, 18 Oct 2019 at 10:01, Ian Stuart<EMAIL_ADDRESS>wrote:

Share the output of running the same ps command within your
container's namespace
This, I can do the next time I have a stalled image

Run tini with -vvv and provide its output
Let me talk to my DevOps people - they may balk at the extra logging
(hope not)

—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/krallin/tini/issues/130?email_source=notifications&email_token=AANIHVXMQQDT2RXVAPIQMBTQPF3PLA5CNFSM4GRPV2Q2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBTOL6I#issuecomment-543614457,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AANIHVUZ6LJJXAX3EW4W4ETQPF3PLANCNFSM4GRPV2QQ
.

@krallin - here you go....
(I reckon I've got a <0.1% error-rate - which is good)
Installing /srv/src/nbgrader/nbgrader/nbextensions/create_assignment -> create_assignment
Making directory: /opt/conda/share/jupyter/nbextensions/create_assignment/
Copying: /srv/src/nbgrader/nbgrader/nbextensions/create_assignment/create_assignment.css -> /opt/conda/share/jupyter/nbextensions/create_assignment/create_assignment.css
Copying: /srv/src/nbgrader/nbgrader/nbextensions/create_assignment/main.js -> /opt/conda/share/jupyter/nbextensions/create_assignment/main.js
- Validating: OK
Installing /srv/src/nbgrader/nbgrader/nbextensions/formgrader -> formgrader
Making directory: /opt/conda/share/jupyter/nbextensions/formgrader/
Copying: /srv/src/nbgrader/nbgrader/nbextensions/formgrader/main.js -> /opt/conda/share/jupyter/nbextensions/formgrader/main.js
- Validating: OK
Installing /srv/src/nbgrader/nbgrader/nbextensions/validate_assignment -> validate_assignment
Making directory: /opt/conda/share/jupyter/nbextensions/validate_assignment/
Copying: /srv/src/nbgrader/nbgrader/nbextensions/validate_assignment/main.js -> /opt/conda/share/jupyter/nbextensions/validate_assignment/main.js
- Validating: OK
Installing /srv/src/nbgrader/nbgrader/nbextensions/assignment_list -> assignment_list
Making directory: /opt/conda/share/jupyter/nbextensions/assignment_list/
Copying: /srv/src/nbgrader/nbgrader/nbextensions/assignment_list/assignment_list.css -> /opt/conda/share/jupyter/nbextensions/assignment_list/assignment_list.css
Copying: /srv/src/nbgrader/nbgrader/nbextensions/assignment_list/assignment_list.js -> /opt/conda/share/jupyter/nbextensions/assignment_list/assignment_list.js
Copying: /srv/src/nbgrader/nbgrader/nbextensions/assignment_list/main.js -> /opt/conda/share/jupyter/nbextensions/assignment_list/main.js
- Validating: OK
    To initialize this nbextension in the browser every time the notebook (or other app) loads:

          jupyter nbextension enable nbgrader --py --sys-prefix

Enabling tree extension validate_assignment/main...
      - Validating: OK
Enabling: nbgrader.server_extensions.validate_assignment
- Writing config: /opt/conda/etc/jupyter
    - Validating...
      nbgrader.server_extensions.validate_assignment  OK
Enabling tree extension assignment_list/main...
      - Validating: OK
Enabling: nbgrader.server_extensions.assignment_list
- Writing config: /opt/conda/etc/jupyter
    - Validating...
      nbgrader.server_extensions.assignment_list  OK
Disabling notebook extension create_assignment/main...
      - Validating: OK
Disabling tree extension formgrader/main...
      - Validating: OK
Disabling: nbgrader.server_extensions.formgrader
- Writing config: /opt/conda/etc/jupyter
[I 18:24:06.131 NotebookApp] JupyterLab extension loaded from /opt/conda/lib/python3.7/site-packages/jupyterlab
[I 18:24:06.131 NotebookApp] JupyterLab application directory is /opt/conda/share/jupyter/lab
[I 18:24:06.600 NotebookApp] Loading the assignment_list nbgrader serverextension
[I 18:24:06.603 NotebookApp] Loading the validate_assignment nbgrader serverextension
[I 18:24:06.603 NotebookApp] Serving notebooks from local directory: /home/jovyan
[I 18:24:06.603 NotebookApp] The Jupyter Notebook is running at:
[I 18:24:06.603 NotebookApp] http://jupyter-1-5fmyUser:8888/user/1_myUser/?token=...
[I 18:24:06.603 NotebookApp]  or http://<IP_ADDRESS>:8888/user/1_myUser/?token=...
[I 18:24:06.603 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[I 18:24:08.187 NotebookApp] 302 GET /user/1_myUser/ (<IP_ADDRESS>) 0.78ms
[I 18:24:10.616 NotebookApp] 302 GET /user/1_myUser?token=ZUVG4JvJRm6SSu-duIV_rw (<IP_ADDRESS>) 0.68ms
[E 18:24:10.701 NotebookApp] Could not open static file ''
[W 18:24:10.840 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 7.71ms referer=https://noteable.edina.ac.uk/user/1_myUser/tree?token=ZUVG4JvJRm6SSu-duIV_rw
[W 18:24:10.910 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.34ms referer=https://noteable.edina.ac.uk/user/1_myUser/tree?token=ZUVG4JvJRm6SSu-duIV_rw
[I 18:24:17.548 NotebookApp] Creating new notebook in
[W 18:24:18.172 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.32ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Untitled3.ipynb?kernel_name=python3
[W 18:24:18.272 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 3.13ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Untitled3.ipynb?kernel_name=python3
[I 18:24:20.459 NotebookApp] Kernel started: ed8b3a2b-5f15-4007-b988-da23f2f8b75e
[INFO  tini (1)] Spawned child process '/usr/local/bin/docker-entrypoint.sh' with pid '6'
[TRACE tini (1)] No child to reap
<< repeat 95 tiomes >>
[TRACE tini (1)] No child to reap
[I 18:26:20.865 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 399 times >>
[TRACE tini (1)] No child to reap
[I 18:33:57.878 NotebookApp] 302 GET /user/1_myUser/ (<IP_ADDRESS>) 0.59ms
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 18:34:27.092 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 18:36:21.069 NotebookApp] Saving file at /Untitled3.ipynb
[W 18:36:46.003 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.17ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%204(1)(1).ipynb
[W 18:36:46.125 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.23ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%204(1)(1).ipynb
[I 18:36:50.409 NotebookApp] Kernel started: 68b808cf-8adb-46f1-b36d-86c272e8687e
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 18:38:51.010 NotebookApp] Saving file at /Workshop 4(1)(1).ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 18:40:20.914 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 18:42:20.507 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 18:44:20.456 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 18:46:20.836 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 18:48:20.561 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 18:50:20.598 NotebookApp] Saving file at /Untitled3.ipynb
[W 18:51:00.156 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.11ms referer=https://noteable.edina.ac.uk/user/1_myUser/edit/mytextfile.txt
[W 18:51:00.364 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.59ms referer=https://noteable.edina.ac.uk/user/1_myUser/edit/mytextfile.txt
[W 18:51:41.809 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.18ms referer=https://noteable.edina.ac.uk/user/1_myUser/edit/mytextfile.txt
[W 18:51:41.939 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.33ms referer=https://noteable.edina.ac.uk/user/1_myUser/edit/mytextfile.txt
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 18:52:21.155 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 18:54:20.942 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 479 times >>
[TRACE tini (1)] No child to reap
[W 19:03:27.429 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.13ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%203.ipynb
[W 19:03:27.679 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.23ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%203.ipynb
[I 19:03:33.161 NotebookApp] Kernel started: 1a484c34-2f9d-4fe7-b675-26a16fd1c9e3
[TRACE tini (1)] No child to reap
<< repeat 138 times >>
[TRACE tini (1)] No child to reap
[I 19:07:36.625 NotebookApp] Saving file at /Workshop 3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 238 times >>
[TRACE tini (1)] No child to reap
[I 19:10:21.600 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 238 times >>
[TRACE tini (1)] No child to reap
[I 19:14:20.944 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 19:17:33.508 NotebookApp] Saving file at /Workshop 3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 981 times >>
[TRACE tini (1)] No child to reap
[W 19:34:41.629 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.61ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%201.ipynb
[W 19:34:41.817 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.36ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%201.ipynb
[I 19:34:44.119 NotebookApp] Kernel started: edbc753d-9258-4c04-8e27-510961cbf39d
[I 19:34:50.671 NotebookApp] Starting buffering for edbc753d-9258-4c04-8e27-510961cbf39d:af1e0ba7d4194840bb4923ca1d1fb89f
[I 19:34:50.884 NotebookApp] Saving file at /Workshop 4(1)(1).ipynb
[W 19:34:54.236 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.10ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%202.ipynb
[W 19:34:54.328 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.28ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%202.ipynb
[I 19:35:01.992 NotebookApp] Kernel started: 7603eb6d-75fb-4326-ac4f-14fe08961914
[I 19:35:22.068 NotebookApp] Starting buffering for 7603eb6d-75fb-4326-ac4f-14fe08961914:c52fce4c124b466faefa5aafd3ce2a61
[W 19:35:24.764 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.32ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%203.ipynb
[W 19:35:24.842 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.08ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%203.ipynb
[I 19:36:03.698 NotebookApp] Starting buffering for 68b808cf-8adb-46f1-b36d-86c272e8687e:46b36756fef649548f77d02fdb68de9c
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 19:36:20.629 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 19:38:20.942 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 19:40:20.496 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 19:42:20.497 NotebookApp] Saving file at /Untitled3.ipynb
[W 19:42:27.985 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.71ms referer=https://noteable.edina.ac.uk/user/1_myUser/edit/data.txt
[W 19:42:41.039 NotebookApp] delete /data.txt
[W 19:42:50.968 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.04ms referer=https://noteable.edina.ac.uk/user/1_myUser/edit/data.txt
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 19:44:20.934 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 579 times >>
[TRACE tini (1)] No child to reap
[I 19:54:20.507 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 358 times >>
[TRACE tini (1)] No child to reap
[I 20:00:20.498 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 238 times >>
[TRACE tini (1)] No child to reap
[W 20:03:49.985 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.62ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%204(1)(1).ipynb
[W 20:03:50.111 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.36ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%204(1)(1).ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 20:05:53.500 NotebookApp] Saving file at /Workshop 4(1)(1).ipynb
[I 20:06:20.498 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 20:08:20.543 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 20:10:20.558 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 20:12:20.854 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeast 358 times >>
[TRACE tini (1)] No child to reap
[I 20:18:20.915 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 20:20:20.938 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
[TRACE tini (1)] No child to reap
<< repeat 238 times >>
[TRACE tini (1)] No child to reap
[I 20:24:07.481 NotebookApp] Starting buffering for 1a484c34-2f9d-4fe7-b675-26a16fd1c9e3:d68fe8348db5471cb677b7e4204a3649
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 20:26:20.500 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 20:28:20.584 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 20:30:20.556 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 20:32:20.872 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 20:34:20.598 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 20:36:20.901 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 20:38:21.012 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 238 times >>
[TRACE tini (1)] No child to reap
[I 20:42:20.626 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 20:44:20.956 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 400 times >>
[TRACE tini (1)] No child to reap

(this is basically a jupyter/r-notebook:1386e2046833 docker notebook, with a bunch of python libraries installed)

It doesn’t look like Tini has exited here — has it? Do you have the ps
output corresponding to this log?
On Tue, 22 Oct 2019 at 09:29, Ian Stuart<EMAIL_ADDRESS>wrote:

@krallin https://github.com/krallin - here you go....
(I reckon I've got a <0.1% error-rate - which is good)
Installing /srv/src/nbgrader/nbgrader/nbextensions/create_assignment -> create_assignment
Making directory: /opt/conda/share/jupyter/nbextensions/create_assignment/
Copying: /srv/src/nbgrader/nbgrader/nbextensions/create_assignment/create_assignment.css -> /opt/conda/share/jupyter/nbextensions/create_assignment/create_assignment.css
Copying: /srv/src/nbgrader/nbgrader/nbextensions/create_assignment/main.js -> /opt/conda/share/jupyter/nbextensions/create_assignment/main.js

Validating: �[32mOK�[0m

Installing /srv/src/nbgrader/nbgrader/nbextensions/formgrader -> formgrader
Making directory: /opt/conda/share/jupyter/nbextensions/formgrader/
Copying: /srv/src/nbgrader/nbgrader/nbextensions/formgrader/main.js -> /opt/conda/share/jupyter/nbextensions/formgrader/main.js

Validating: �[32mOK�[0m

Installing /srv/src/nbgrader/nbgrader/nbextensions/validate_assignment -> validate_assignment
Making directory: /opt/conda/share/jupyter/nbextensions/validate_assignment/
Copying: /srv/src/nbgrader/nbgrader/nbextensions/validate_assignment/main.js -> /opt/conda/share/jupyter/nbextensions/validate_assignment/main.js

Validating: �[32mOK�[0m

Installing /srv/src/nbgrader/nbgrader/nbextensions/assignment_list -> assignment_list
Making directory: /opt/conda/share/jupyter/nbextensions/assignment_list/
Copying: /srv/src/nbgrader/nbgrader/nbextensions/assignment_list/assignment_list.css -> /opt/conda/share/jupyter/nbextensions/assignment_list/assignment_list.css
Copying: /srv/src/nbgrader/nbgrader/nbextensions/assignment_list/assignment_list.js -> /opt/conda/share/jupyter/nbextensions/assignment_list/assignment_list.js
Copying: /srv/src/nbgrader/nbgrader/nbextensions/assignment_list/main.js -> /opt/conda/share/jupyter/nbextensions/assignment_list/main.js

Validating: �[32mOK�[0m
To initialize this nbextension in the browser every time the notebook (or other app) loads:
    jupyter nbextension enable nbgrader --py --sys-prefix

Enabling tree extension validate_assignment/main...
  - Validating: �[32mOK�[0m

Enabling: nbgrader.server_extensions.validate_assignment

Writing config: /opt/conda/etc/jupyter

Validating...
nbgrader.server_extensions.validate_assignment  �[32mOK�[0m

Enabling tree extension assignment_list/main...
  - Validating: �[32mOK�[0m

Enabling: nbgrader.server_extensions.assignment_list

Writing config: /opt/conda/etc/jupyter

Validating...
nbgrader.server_extensions.assignment_list  �[32mOK�[0m

Disabling notebook extension create_assignment/main...
  - Validating: �[32mOK�[0m

Disabling tree extension formgrader/main...
  - Validating: �[32mOK�[0m

Disabling: nbgrader.server_extensions.formgrader

Writing config: /opt/conda/etc/jupyter

[I 18:24:06.131 NotebookApp] JupyterLab extension loaded from /opt/conda/lib/python3.7/site-packages/jupyterlab
[I 18:24:06.131 NotebookApp] JupyterLab application directory is /opt/conda/share/jupyter/lab
[I 18:24:06.600 NotebookApp] Loading the assignment_list nbgrader serverextension
[I 18:24:06.603 NotebookApp] Loading the validate_assignment nbgrader serverextension
[I 18:24:06.603 NotebookApp] Serving notebooks from local directory: /home/jovyan
[I 18:24:06.603 NotebookApp] The Jupyter Notebook is running at:
[I 18:24:06.603 NotebookApp] http://jupyter-1-5fmyUser:8888/user/1_myUser/?token=...
[I 18:24:06.603 NotebookApp]  or http://<IP_ADDRESS>:8888/user/1_myUser/?token=...
[I 18:24:06.603 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[I 18:24:08.187 NotebookApp] 302 GET /user/1_myUser/ (<IP_ADDRESS>) 0.78ms
[I 18:24:10.616 NotebookApp] 302 GET /user/1_myUser?token=ZUVG4JvJRm6SSu-duIV_rw (<IP_ADDRESS>) 0.68ms
[E 18:24:10.701 NotebookApp] Could not open static file ''
[W 18:24:10.840 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 7.71ms referer=https://noteable.edina.ac.uk/user/1_myUser/tree?token=ZUVG4JvJRm6SSu-duIV_rw
[W 18:24:10.910 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.34ms referer=https://noteable.edina.ac.uk/user/1_myUser/tree?token=ZUVG4JvJRm6SSu-duIV_rw
[I 18:24:17.548 NotebookApp] Creating new notebook in
[W 18:24:18.172 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.32ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Untitled3.ipynb?kernel_name=python3
[W 18:24:18.272 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 3.13ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Untitled3.ipynb?kernel_name=python3
[I 18:24:20.459 NotebookApp] Kernel started: ed8b3a2b-5f15-4007-b988-da23f2f8b75e
[INFO  tini (1)] Spawned child process '/usr/local/bin/docker-entrypoint.sh' with pid '6'
[TRACE tini (1)] No child to reap
<< repeat 95 tiomes >>
[TRACE tini (1)] No child to reap
[I 18:26:20.865 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 399 times >>
[TRACE tini (1)] No child to reap
[I 18:33:57.878 NotebookApp] 302 GET /user/1_myUser/ (<IP_ADDRESS>) 0.59ms
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 18:34:27.092 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 18:36:21.069 NotebookApp] Saving file at /Untitled3.ipynb
[W 18:36:46.003 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.17ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%204(1)(1).ipynb
[W 18:36:46.125 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.23ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%204(1)(1).ipynb
[I 18:36:50.409 NotebookApp] Kernel started: 68b808cf-8adb-46f1-b36d-86c272e8687e
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 18:38:51.010 NotebookApp] Saving file at /Workshop 4(1)(1).ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 18:40:20.914 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 18:42:20.507 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 18:44:20.456 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 18:46:20.836 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 18:48:20.561 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 18:50:20.598 NotebookApp] Saving file at /Untitled3.ipynb
[W 18:51:00.156 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.11ms referer=https://noteable.edina.ac.uk/user/1_myUser/edit/mytextfile.txt
[W 18:51:00.364 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.59ms referer=https://noteable.edina.ac.uk/user/1_myUser/edit/mytextfile.txt
[W 18:51:41.809 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.18ms referer=https://noteable.edina.ac.uk/user/1_myUser/edit/mytextfile.txt
[W 18:51:41.939 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.33ms referer=https://noteable.edina.ac.uk/user/1_myUser/edit/mytextfile.txt
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 18:52:21.155 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 18:54:20.942 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 479 times >>
[TRACE tini (1)] No child to reap
[W 19:03:27.429 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.13ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%203.ipynb
[W 19:03:27.679 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.23ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%203.ipynb
[I 19:03:33.161 NotebookApp] Kernel started: 1a484c34-2f9d-4fe7-b675-26a16fd1c9e3
[TRACE tini (1)] No child to reap
<< repeat 138 times >>
[TRACE tini (1)] No child to reap
[I 19:07:36.625 NotebookApp] Saving file at /Workshop 3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 238 times >>
[TRACE tini (1)] No child to reap
[I 19:10:21.600 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 238 times >>
[TRACE tini (1)] No child to reap
[I 19:14:20.944 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 19:17:33.508 NotebookApp] Saving file at /Workshop 3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 981 times >>
[TRACE tini (1)] No child to reap
[W 19:34:41.629 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.61ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%201.ipynb
[W 19:34:41.817 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.36ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%201.ipynb
[I 19:34:44.119 NotebookApp] Kernel started: edbc753d-9258-4c04-8e27-510961cbf39d
[I 19:34:50.671 NotebookApp] Starting buffering for edbc753d-9258-4c04-8e27-510961cbf39d:af1e0ba7d4194840bb4923ca1d1fb89f
[I 19:34:50.884 NotebookApp] Saving file at /Workshop 4(1)(1).ipynb
[W 19:34:54.236 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.10ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%202.ipynb
[W 19:34:54.328 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.28ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%202.ipynb
[I 19:35:01.992 NotebookApp] Kernel started: 7603eb6d-75fb-4326-ac4f-14fe08961914
[I 19:35:22.068 NotebookApp] Starting buffering for 7603eb6d-75fb-4326-ac4f-14fe08961914:c52fce4c124b466faefa5aafd3ce2a61
[W 19:35:24.764 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.32ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%203.ipynb
[W 19:35:24.842 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.08ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%203.ipynb
[I 19:36:03.698 NotebookApp] Starting buffering for 68b808cf-8adb-46f1-b36d-86c272e8687e:46b36756fef649548f77d02fdb68de9c
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 19:36:20.629 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 19:38:20.942 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 19:40:20.496 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 19:42:20.497 NotebookApp] Saving file at /Untitled3.ipynb
[W 19:42:27.985 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.71ms referer=https://noteable.edina.ac.uk/user/1_myUser/edit/data.txt
[W 19:42:41.039 NotebookApp] delete /data.txt
[W 19:42:50.968 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.04ms referer=https://noteable.edina.ac.uk/user/1_myUser/edit/data.txt
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 19:44:20.934 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 579 times >>
[TRACE tini (1)] No child to reap
[I 19:54:20.507 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 358 times >>
[TRACE tini (1)] No child to reap
[I 20:00:20.498 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 238 times >>
[TRACE tini (1)] No child to reap
[W 20:03:49.985 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.62ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%204(1)(1).ipynb
[W 20:03:50.111 NotebookApp] 404 GET /user/1_myUser/static/components/react/react-dom.production.min.js (<IP_ADDRESS>) 2.36ms referer=https://noteable.edina.ac.uk/user/1_myUser/notebooks/Workshop%204(1)(1).ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 20:05:53.500 NotebookApp] Saving file at /Workshop 4(1)(1).ipynb
[I 20:06:20.498 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 20:08:20.543 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 20:10:20.558 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 20:12:20.854 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeast 358 times >>
[TRACE tini (1)] No child to reap
[I 20:18:20.915 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 20:20:20.938 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
[TRACE tini (1)] No child to reap
<< repeat 238 times >>
[TRACE tini (1)] No child to reap
[I 20:24:07.481 NotebookApp] Starting buffering for 1a484c34-2f9d-4fe7-b675-26a16fd1c9e3:d68fe8348db5471cb677b7e4204a3649
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 20:26:20.500 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 20:28:20.584 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 20:30:20.556 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 20:32:20.872 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 20:34:20.598 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 20:36:20.901 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 118 times >>
[TRACE tini (1)] No child to reap
[I 20:38:21.012 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 238 times >>
[TRACE tini (1)] No child to reap
[I 20:42:20.626 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 117 times >>
[TRACE tini (1)] No child to reap
[I 20:44:20.956 NotebookApp] Saving file at /Untitled3.ipynb
[TRACE tini (1)] No child to reap
<< repeat 400 times >>
[TRACE tini (1)] No child to reap
(this is basically a jupyter/r-notebook:1386e2046833 docker notebook,
with a bunch of python libraries installed)
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/krallin/tini/issues/130?email_source=notifications&email_token=AANIHVUVFQDVE5FFKHLY37TQP22WBA5CNFSM4GRPV2Q2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEB457MI#issuecomment-544858033,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AANIHVW2SX5OXDXYLAP5TM3QP22WBANCNFSM4GRPV2QQ
.

Not now..... I'll get you one the next time we have a stalled image
(given this is <0.1% - hopefully it'll be a couple of days)

I acquired 2 over the weekend... both have essentially the same docker log file.
You asked for the output of the ps command. I've run ps axfj on both VMs, and they have the following sections for the relevant docker images (I've obfuscated the userID):
  PPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND
  8154  82824  82824   8154 ?            -1 Sl       0   0:10  \_ containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/0552936e0c33b1a7efca73b168cdb0c09e9f65413a2c356d682d10e256015446 -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc
 82824  82841  82841  82841 ?            -1 Rs    1000 21115459:07  |   \_ tini -g -vvv -- /usr/local/bin/docker-entrypoint.sh jupyter-notebook --ip=<IP_ADDRESS> --port=8888 --NotebookApp.base_url=/user/1_myUser/ --NotebookApp.token=hVC6ubvaRCG3p8rix0s_Xw --NotebookApp.default_url=/tree --NotebookApp.trust_xheaders=True --NotebookApp.disable_check_xsrf=True
 82841  82859  82859  82841 ?            -1 Rl    1000 884:47  |       \_ /opt/conda/bin/python /opt/conda/bin/jupyter-notebook --ip=<IP_ADDRESS> --port=8888 --NotebookApp.base_url=/user/1_myUser/ --NotebookApp.token=hVC6ubvaRCG3p8rix0s_Xw --NotebookApp.default_url=/tree --NotebookApp.trust_xheaders=True --NotebookApp.disable_check_xsrf=True
 82859  83914  83914  83914 ?            -1 Ssl   1000   0:06  |           \_ /opt/conda/bin/python -m ipykernel_launcher -f /home/jovyan/.local/share/jupyter/runtime/kernel-0083e685-e062-45e0-bb82-f0dd5e043289.json
 82859<PHONE_NUMBER>85 120385 ?            -1 Ssl   1000   0:08  |           \_ /opt/conda/bin/python -m ipykernel_launcher -f /home/jovyan/.local/share/jupyter/runtime/kernel-5c785b9d-31fd-4159-ac2c-d955e59a3e38.json
 82859<PHONE_NUMBER>27 129427 ?            -1 Rsl   1000 888:38  |           \_ /opt/conda/bin/python -m ipykernel_launcher -f /home/jovyan/.local/share/jupyter/runtime/kernel-1f9db86d-f3d1-42ec-b9aa-51edf51b90e7.json
 82859  14774  14774  14774 ?            -1 Ssl   1000   0:06  |           \_ /opt/conda/bin/python -m ipykernel_launcher -f /home/jovyan/.local/share/jupyter/runtime/kernel-73eb7d8c-ded5-43f0-8495-89ec6e1bb153.json

and
  PPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND
 39799<PHONE_NUMBER>77  39799 ?            -1 Sl       0   0:10  \_ containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/ee1e99006421fc886da45e2ed015c30bb4e8e338715e3bc3f6a7d80875916b39 -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc
120077<PHONE_NUMBER>97 120097 ?            -1 Rs    1000 21115368:56  |   \_ tini -g -vvv -- /usr/local/bin/docker-entrypoint.sh jupyter-notebook --ip=<IP_ADDRESS> --port=8888 --NotebookApp.base_url=/user/1_myUser/ --NotebookApp.token=MIwv2i_LRcO-P1XZd_vTBA --NotebookApp.default_url=/tree --NotebookApp.trust_xheaders=True --NotebookApp.disable_check_xsrf=True
120097<PHONE_NUMBER>17 120097 ?            -1 Rl    1000 791:42  |       \_ /opt/conda/bin/python /opt/conda/bin/jupyter-notebook --ip=<IP_ADDRESS> --port=8888 --NotebookApp.base_url=/user/1_myUser/ --NotebookApp.token=MIwv2i_LRcO-P1XZd_vTBA --NotebookApp.default_url=/tree --NotebookApp.trust_xheaders=True --NotebookApp.disable_check_xsrf=True
120117<PHONE_NUMBER>85 120285 ?            -1 Ssl   1000   0:07  |           \_ /opt/conda/bin/python -m ipykernel_launcher -f /home/jovyan/.local/share/jupyter/runtime/kernel-05424536-930c-4ebe-924e-e5ed28e6c754.json
120117<PHONE_NUMBER>46 120846 ?            -1 Rsl   1000 798:28  |           \_ /opt/conda/bin/python -m ipykernel_launcher -f /home/jovyan/.local/share/jupyter/runtime/kernel-2812103a-cf0d-409d-9dc0-172131c5167c.json

Lastly, and because this may be relevant - here's the POD information from the Rancher API for one of the images:
{
  "annotations": {
    "cni.projectcalico.org/podIP": "<IP_ADDRESS>/32",
    "container": "standard_notebook",
    "course_id": "BUST080392019-0SV1SEM1",
    "hub.jupyter.org/username": "1_myUser",
    "org": "the_university_of_edinburgh",
    "org_id": "1",
    "owner": "the_university_of_edinburgh",
    "owner_id": "2",
    "type": "naas",
    "user": "myUser",
    "username": "1_myUser"
  },
  "automountServiceAccountToken": false,
  "baseType": "pod",
  "containers": [
    {
      "command": [
        "jupyter-notebook",
        "--ip=<IP_ADDRESS>",
        "--port=8888",
        "--NotebookApp.base_url=/user/1_myUser/",
        "--NotebookApp.token=MIwv2i_LRcO-P1XZd_vTBA",
        "--NotebookApp.default_url=/tree",
        "--NotebookApp.trust_xheaders=True",
        "--NotebookApp.disable_check_xsrf=True"
      ],
      "environment": {
        "CPU_GUARANTEE": "0.05",
        "CPU_LIMIT": "1.0",
        "JPY_API_TOKEN": "14cf56c3e54544bc87b4ae1bc8b98bc2",
        "JUPYTERHUB_ACTIVITY_URL": "http://<IP_ADDRESS>:8081/hub/api/users/1_myUser/activity",
        "JUPYTERHUB_ADMIN_ACCESS": "1",
        "JUPYTERHUB_API_TOKEN": "14cf56c3e54544bc87b4ae1bc8b98bc2",
        "JUPYTERHUB_API_URL": "http://<IP_ADDRESS>:8081/hub/api",
        "JUPYTERHUB_BASE_URL": "/",
        "JUPYTERHUB_CLIENT_ID": "jupyterhub-user-1_myUser",
        "JUPYTERHUB_HOST": "",
        "JUPYTERHUB_OAUTH_CALLBACK_URL": "/user/1_myUser/oauth_callback",
        "JUPYTERHUB_SERVER_NAME": "",
        "JUPYTERHUB_SERVICE_PREFIX": "/user/1_myUser/",
        "JUPYTERHUB_USER": "1_myUser",
        "JUPYTER_IMAGE": "registry.gitlab.edina.ac.uk:1875/naas/docker_notebooks/standard-notebook:9428-master",
        "JUPYTER_IMAGE_SPEC": "registry.gitlab.edina.ac.uk:1875/naas/docker_notebooks/standard-notebook:9428-master",
        "MEM_GUARANTEE": "1073741824",
        "MEM_LIMIT": "4294967296",
        "NAAS_BASE_URL": "https://noteable.edina.ac.uk",
        "NAAS_COURSE_ID": "BUST080392019-0SV1SEM1",
        "NAAS_COURSE_TITLE": "Fundamentals of Programming for Business Applications (2019-2020)[SEM1]",
        "NAAS_JWT": "xxx",
        "NAAS_ROLE": "Learner"
      },
      "exitCode": null,
      "image": "registry.gitlab.edina.ac.uk:1875/naas/docker_notebooks/standard-notebook:9428-master",
      "imagePullPolicy": "IfNotPresent",
      "initContainer": false,
      "name": "notebook",
      "ports": [
        {
          "containerPort": 8888,
          "name": "notebook-port",
          "protocol": "TCP",
          "sourcePort": 0,
          "type": "/v3/project/schemas/containerPort"
        }
      ],
      "resources": {
        "limits": {
          "cpu": "1",
          "memory": "4294967296"
        },
        "requests": {
          "cpu": "50m",
          "memory": "1073741824"
        },
        "type": "/v3/project/schemas/resourceRequirements"
      },
      "restartCount": 0,
      "state": "running",
      "stdin": false,
      "stdinOnce": false,
      "terminationMessagePath": "/dev/termination-log",
      "terminationMessagePolicy": "File",
      "transitioning": "no",
      "transitioningMessage": "",
      "tty": false,
      "type": "/v3/project/schemas/container",
      "volumeMounts": [
        {
          "mountPath": "/home/jovyan",
          "name": "b95df8aa-c65a-4e7f-a241-5187976bc2da",
          "readOnly": false,
          "type": "/v3/project/schemas/volumeMount"
        }
      ]
    },
    {
      "capAdd": [
        "NET_ADMIN"
      ],
      "entrypoint": [
        "iptables",
        "-A",
        "OUTPUT",
        "-d",
        "<IP_ADDRESS>",
        "-j",
        "DROP"
      ],
      "exitCode": 0,
      "image": "jupyterhub/k8s-network-tools:0.8.2",
      "imagePullPolicy": "IfNotPresent",
      "initContainer": true,
      "name": "block-cloud-metadata",
      "privileged": true,
      "resources": {
        "type": "/v3/project/schemas/resourceRequirements"
      },
      "restartCount": 0,
      "state": "terminated",
      "stdin": false,
      "stdinOnce": false,
      "terminationMessagePath": "/dev/termination-log",
      "terminationMessagePolicy": "File",
      "transitioning": "no",
      "transitioningMessage": "Completed",
      "tty": false,
      "type": "/v3/project/schemas/container",
      "uid": 0
    }
  ],
  "created": "2019-10-26T12:47:47Z",
  "createdTS":<PHONE_NUMBER>000,
  "creatorId": null,
  "dnsPolicy": "ClusterFirst",
  "fsgid": 100,
  "hostIPC": false,
  "hostNetwork": false,
  "hostPID": false,
  "id": "default:jupyter-1-5fmyUser",
  "imagePullSecrets": [
    {
      "name": "gitlab-edina",
      "type": "/v3/project/schemas/localObjectReference"
    }
  ],
  "labels": {
    "component": "singleuser-server",
    "org": "the_university_of_edinburgh",
    "org_id": "1",
    "owner": "the_university_of_edinburgh",
    "owner_id": "2",
    "type": "naas",
    "username": "1_myUser"
  },
  "links": {
    "remove": "…/v3/project/c-mf7x9:project-l8pzf/pods/default:jupyter-1-5fmyUser",
    "self": "…/v3/project/c-mf7x9:project-l8pzf/pods/default:jupyter-1-5fmyUser",
    "update": "…/v3/project/c-mf7x9:project-l8pzf/pods/default:jupyter-1-5fmyUser",
    "yaml": "…/v3/project/c-mf7x9:project-l8pzf/pods/default:jupyter-1-5fmyUser/yaml"
  },
  "name": "jupyter-1-5fmyUser",
  "namespaceId": "default",
  "nodeId": "c-mf7x9:m-2326d2f782c3",
  "priority": 0,
  "projectId": "c-mf7x9:project-l8pzf",
  "removed": "2019-10-26T16:41:16Z",
  "removedTS":<PHONE_NUMBER>000,
  "restartPolicy": "OnFailure",
  "runAsGroup": 0,
  "schedulerName": "default-scheduler",
  "scheduling": {
    "node": {
      "nodeId": null,
      "preferred": [
        "hub.jupyter.org/node-purpose = user"
      ]
    },
    "tolerate": [
      {
        "effect": "NoSchedule",
        "key": "hub.jupyter.org/dedicated",
        "operator": "Equal",
        "type": "/v3/project/schemas/toleration",
        "value": "user"
      },
      {
        "effect": "NoSchedule",
        "key": "hub.jupyter.org_dedicated",
        "operator": "Equal",
        "type": "/v3/project/schemas/toleration",
        "value": "user"
      },
      {
        "effect": "NoExecute",
        "key": "node.kubernetes.io/not-ready",
        "operator": "Exists",
        "tolerationSeconds": 300,
        "type": "/v3/project/schemas/toleration"
      },
      {
        "effect": "NoExecute",
        "key": "node.kubernetes.io/unreachable",
        "operator": "Exists",
        "tolerationSeconds": 300,
        "type": "/v3/project/schemas/toleration"
      }
    ]
  },
  "serviceAccountName": "default",
  "state": "removing",
  "status": {
    "conditions": [
      {
        "lastProbeTime": null,
        "lastTransitionTime": "2019-10-26T12:47:49Z",
        "lastTransitionTimeTS":<PHONE_NUMBER>000,
        "status": "True",
        "type": "Initialized"
      },
      {
        "lastProbeTime": null,
        "lastTransitionTime": "2019-10-26T12:47:50Z",
        "lastTransitionTimeTS":<PHONE_NUMBER>000,
        "status": "True",
        "type": "Ready"
      },
      {
        "lastProbeTime": null,
        "lastTransitionTime": "2019-10-26T12:47:50Z",
        "lastTransitionTimeTS":<PHONE_NUMBER>000,
        "status": "True",
        "type": "ContainersReady"
      },
      {
        "lastProbeTime": null,
        "lastTransitionTime": "2019-10-26T12:47:47Z",
        "lastTransitionTimeTS":<PHONE_NUMBER>000,
        "status": "True",
        "type": "PodScheduled"
      }
    ],
    "containerStatuses": [
      {
        "containerID": "docker://ee1e99006421fc886da45e2ed015c30bb4e8e338715e3bc3f6a7d80875916b39",
        "image": "registry.gitlab.edina.ac.uk:1875/naas/docker_notebooks/standard-notebook:9428-master",
        "imageID": "docker-pullable://registry.gitlab.edina.ac.uk:1875/naas/docker_notebooks/standard-notebook@sha256:ce78c583e2424ec501ef2ea24f6f1449affef6857cd09e08967de4cd1dd63319",
        "lastState": {
          "type": "/v3/project/schemas/containerState"
        },
        "name": "notebook",
        "ready": true,
        "restartCount": 0,
        "state": {
          "running": {
            "startedAt": "2019-10-26T12:47:49Z",
            "startedAtTS":<PHONE_NUMBER>000,
            "type": "/v3/project/schemas/containerStateRunning"
          },
          "type": "/v3/project/schemas/containerState"
        },
        "type": "/v3/project/schemas/containerStatus"
      }
    ],
    "initContainerStatuses": [
      {
        "containerID": "docker://8fa9679c1f1f57825a240cd1928e7e7c7955b5f84ac49b296477cd3295d4b3cb",
        "image": "jupyterhub/k8s-network-tools:0.8.2",
        "imageID": "docker-pullable://jupyterhub/k8s-network-tools@sha256:5d553df705ec62f6daa18e8baa8097c5b023922dbd22070b6e5b57c1a5e705ce",
        "lastState": {
          "type": "/v3/project/schemas/containerState"
        },
        "name": "block-cloud-metadata",
        "ready": true,
        "restartCount": 0,
        "state": {
          "terminated": {
            "containerID": "docker://8fa9679c1f1f57825a240cd1928e7e7c7955b5f84ac49b296477cd3295d4b3cb",
            "exitCode": 0,
            "finishedAt": "2019-10-26T12:47:48Z",
            "finishedAtTS":<PHONE_NUMBER>000,
            "reason": "Completed",
            "signal": 0,
            "startedAt": "2019-10-26T12:47:48Z",
            "startedAtTS":<PHONE_NUMBER>000,
            "type": "/v3/project/schemas/containerStateTerminated"
          },
          "type": "/v3/project/schemas/containerState"
        },
        "type": "/v3/project/schemas/containerStatus"
      }
    ],
    "nodeIp": "<IP_ADDRESS>",
    "phase": "Running",
    "podIp": "<IP_ADDRESS>",
    "qosClass": "Burstable",
    "startTime": "2019-10-26T12:47:47Z",
    "startTimeTS":<PHONE_NUMBER>000,
    "type": "/v3/project/schemas/podStatus"
  },
  "terminationGracePeriodSeconds": 30,
  "transitioning": "yes",
  "transitioningMessage": "",
  "type": "pod",
  "uid": 1000,
  "uuid": "d01670d3-f7ee-11e9-b002-00505681593b",
  "volumes": [
    {
      "hostPath": {
        "kind": "",
        "path": "/path/to/home/dir"
      },
      "name": "b95df8aa-c65a-4e7f-a241-5187976bc2da",
      "type": "/v3/project/schemas/volume"
    }
  ],
  "workloadId": null
}

We updated out platform to more recent docker_stack base images (Ubuntu Bionic, Jupyterhub 1.0.9, and Jupyter notebook 6.0.0) in early November - and all has been fine since.
I can only assume there was an issue between those two, which was resolved when we upgraded those components.
From 3 or 4 a week to none in 3 weeks - this is a definite win!!
I'm happy to close this issue


Breaks the drf docs pages

AttributeError: 'CustomerViewSet' object has no attribute 'role_id'
UserWarning: <class 'customers.views.CustomerViewSet'> is not compatible with schema generation
"{} is not compatible with schema generation".format(view.class)

#6 fixes this.


Secondary pages marked as root pages in parsed CSS table

In the experimental_parsed_css.2022_07_01_* tables, home and secondary pages are included and both are marked with is_root_page set to true.
Secondary pages should have this field set to false.

Overwriting the existing tables with BQ DML
UPDATE
  `httparchive.experimental_parsed_css.2022_07_01_mobile`
SET
  is_root_page = FALSE
WHERE
  page NOT IN (SELECT url AS page FROM `httparchive.summary_pages.2022_07_01_mobile`)

Also need to fix the data pipeline to use the correct is_root_page value.


Validate Tiltfile

Validate content with folks that know more about Tiltfile and IDE Plugin
Is the tiltfile generation correct? Does it result in a working integration for live reload and debug?

It works


nethack windowtype:curses option doesn't work

Despite being linked with ncurses, the nethack formula fails when the windowtype:curses option is given and says the only available option is tty.

I'm not familiar with nethack, but it looks like windowtype:curses option is only available on 3.4.3 with custom patch. Homebrew currently ships vanilla 3.6.0.
There are some threads mentioning the lack of (enhanced) curses interface on 3.6.0:
https://pyra-handheld.com/boards/threads/nethack-3-6-0-pandora-specific-controls-hacky-build.77187/#post-1371933
https://nethackwiki.com/wiki/Forum:A_bit_disappointed_with_3.6.0,_anyone%3F

I think tomyun's right, and windowtype:curses was a custom mod for 3.4.3. As noted in one of those comment threads, the vanilla tty interface is also implemented with curses, which explains the linkage to ncurses.
There is a separate nethack4 formula, which is a fork of NetHack 3.4.3 and looks like it supports a curses-style interface. You could give that a try.
Closing this as expected upstream behavior.


OCPBUGS-4574: Machines with invalid zones stuck in no phase

This PR solves issue from this JIRA ticket.
If we create a new machine set with an invalid zone (that doesn't exist), we get a new machine, that is stuck in no phase, zone, region and machine type. If we find a machine with invalid zone, we want to put it in phase Failed.
Once we delete this machine set in in valid zone, we want this new machine to be deleted as well. We check for an invalid machine configuration and also check the phase in this case.

/jira refresh

/jira refresh

/jira refresh

@JoelSpeed, This new commit makes sure we don't leave any instances with invalid configs behind on GCP.
We check if a machine has a node assigned to it. If so, we know that this machine in fact exists and then we have to make sure to treat it properly. I tested this behavior by editing zone for a worker that was originally in zone us-central-1a and placed it into us-central-1d. First of all, if we find this invalid config for such machine, we Fail it. If we try to delete such machine, we are prompted by the logs, that we need to first make sure that this machine has valid configuration. Once we repair this configuration, we can successfully delete this machine.

This new commit is mostly code structure changes. Logic stays the same as the last commit.
In this one, we made sure to check providerID instead of NodeRef of a machine. We unfortunately have to Fail the already existing machines ourselves, because worker machines don't Fail automatically as masters do.
Also had to move call for function unregisterInstanceFromControlPlaneInstanceGroup after we get to know if a machine is actually valid or not. If the machine is valid, we can continue as usual.

because worker machines don't Fail automatically as masters do.

The masters fail automatically but the workers don't? There should be no difference

because worker machines don't Fail automatically as masters do.

The masters fail automatically but the workers don't? There should be no difference

Yes. That's what I encountered multiple times.

Any idea why? That's not behaviour I would expect to see

Any idea why? That's not behaviour I would expect to see

I think I do. I worked it really badly last time.
If you have a running instance of master/worker machine and you edit the zone to some invalid zone. Both of the machines should be changed to "Failed". But if we create a new machine set with an invalid zone, a new worker machine, for example, gets created but is not failed by the controller.
Here we see that machine is Failed and won't get reconciled: https://github.com/openshift/machine-api-provider-gcp/blob/main/vendor/github.com/openshift/machine-api-operator/pkg/controller/machine/controller.go#L290-L293
Here we return an error, because the zone does not exist: https://github.com/openshift/machine-api-provider-gcp/blob/6148d6fb262205787f70cd2d2eea686c8288b3d2/pkg/cloud/gcp/actuators/machine/reconciler.go#L509-L511
providerID is nil and also Phase is nil, but since we return an error, we go to this block of code: https://github.com/openshift/machine-api-provider-gcp/blob/main/vendor/github.com/openshift/machine-api-operator/pkg/controller/machine/controller.go#L296-L310
But as we can see a little bit below, there is a piece of code that updates the Phase of the machine here: https://github.com/openshift/machine-api-provider-gcp/blob/main/vendor/github.com/openshift/machine-api-operator/pkg/controller/machine/controller.go#L350-L362
We never get to execute this, because of the err from function r.actuator.Exists(ctx, m).

I understand the flow you're talking through, but I still don't get why there's a difference between worker and master machines, they should be identical really as far as Machine API is concerned

I understand the flow you're talking through, but I still don't get why there's a difference between worker and master machines, they should be identical really as far as Machine API is concerned

Yes, that is right. I thought I expressed that in my last comment.

Yes, that is right. I thought I expressed that in my last comment.

Ok I think I've got it, we used to have some logic in this PR that singled out control plane instances I think, we still have something there for instance groups, but that's existing code that's moved, got ya!

Yes, that is right. I thought I expressed that in my last comment.

Ok I think I've got it, we used to have some logic in this PR that singled out control plane instances I think, we still have something there for instance groups, but that's existing code that's moved, got ya!

Yes, exactly. I think with this version, every possible case of behavior is covered. I have also tested it on a GCP cluster and everything runs as expected.

Every additional question resolved via Slack with @JoelSpeed.

Tested these changes on a GCP cluster, also checked the GCP dashboard that we don't leave any machines behind. Everything seems to be working just fine!

Changes look good, are there any unit tests or anything we can look to extend to cover the changes in functionality?

Changes look good, are there any unit tests or anything we can look to extend to cover the changes in functionality?

Added 2 test cases. I can't do any test cases with actuator.Exists(ctx, machine), because there are no Events there.
So just these 2 are added. I think that it is enough for the basic functionality.

/approve
/lgtm


Is there anything that prevents struct Pid from implementing Sync?

That was my bad, I forgot a move in a closure.


Can we share the process of creating a Group that is compatible with PIM?

The document "Assign eligibility for a privileged access group (preview) in Privileged Identity Management" does not explain that in order to use groups in PIM, you need to:

Create a group using the option "Azure AD roles can be assigned to the group"
Open the newly created group and then under activity / Privileged access (Preview), you need to click "Enable Privileged Access"

It would be great to make sure that the process of creating a group that is PIM listed here.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: f4da66b2-36f2-753f-4170-bcbf51824033
Version Independent ID: c9e72e4f-effc-37f0-f418-c92af00f0523
Content: Assign eligible owners and members for privileged access groups - Azure Active Directory
Content Source: articles/active-directory/privileged-identity-management/groups-assign-member-owner.md
Service: active-directory
Sub-service: pim
GitHub Login: @curtand
Microsoft Alias: curtand

@NoorKhaldi Thanks for your feedback! I've assigned this issue to the author who will investigate and update as appropriate.

#reassign:@amsliu

@NoorKhaldi Thanks for providing feedback that helps improve our documentation. We are currently updating all the end-user content and we will address your issue as part of this process. We are now closing the issue. #please-close


Allow modifiers to take precedence over other rules

Use Case: Responsive Left Nav
Given a nav list on the left side
And a media query to set the nav width to '0px' on small devices
When the 'expanded' prop is set to true
Then the 'expanded' modifier should set the width to '250px'
This 'expanded' prop would be set on the nav list when a menu trigger is activated

This can be handled by simply moving the responsibility for layout to a parent components that contains both the trigger and the target elements, so I'll close this.


SE-0025: Parsing and basic completion for 'fileprivate'.

This patch makes fileprivate an alias for Swift 2 private. This allows us to migrate code to fileprivate without waiting for the full implementation.
Based on #3000, which I'll be breaking apart and implementing to get things off of @CodaFi's plate.
Next steps:

Update the corelibs and package manager to use fileprivate where appropriate.
Rename "private" to "fileprivate" inside the compiler and diagnostics.
Implement the new private, add tests.

Before merging this pull request to apple/swift repository:

[ ] Test pull request on Swift continuous integration.

Triggering Swift CI
The swift-ci is triggered by writing a comment on this PR addressed to the GitHub user @swift-ci. Different tests will run depending on the specific comment that you use. The currently available comments are:
Smoke Testing
    Platform     | Comment
    ------------ | -------------
    All supported platforms     | @swift-ci Please smoke test
    All supported platforms     | @swift-ci Please smoke test and merge
    OS X platform               | @swift-ci Please smoke test OS X platform
    Linux platform              | @swift-ci Please smoke test Linux platform

Validation Testing
    Platform     | Comment
    ------------ | -------------
    All supported platforms     | @swift-ci Please test
    All supported platforms     | @swift-ci Please test and merge
    OS X platform               | @swift-ci Please test OS X platform
    OS X platform               | @swift-ci Please benchmark
    Linux platform              | @swift-ci Please test Linux platform

Lint Testing
    Language     | Comment
    ------------ | -------------
    Python       | @swift-ci Please Python lint

Note: Only members of the Apple organization can trigger swift-ci.

@swift-ci Please test


save time series data

Question from Brian Stock: What's the best way to get these data into R/WHAM? I looked but couldn't see if/where you save the processed time-series for each stock. Are those available?
Answer: We currently don't have the time series saved in the repo.  The time series are built in the stock.rmd but not saved.
Solution: I think a couple of lines in the generictemplate.rmd saving the stock-specific time series as .csv into the stock_files folder would solve his question of availability. We could point people to the folder where they can download all the time series data on the stock of interest.

Sept assessment stocks now include csv files for time series linked in the ECSA report.


How to remove ScopeLock before deletition

I created a file-share using the CLI and then tried to delete it using
az storage share-rm delete --resource-group GROUP --storage-account ACCOUNT --name NAME --yes

I got an error:
(ScopeLocked) The scope '...' cannot perform delete operation because following scope(s) are locked: '...'. Please remove the lock and try again.
Code: ScopeLocked

IMHO The documentation of share-rm should mention this and maybe other potential error messages and how to handle them.
At least there should be a way to find the meaning of ScopeLocked but the search returns nothing.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 87de814a-84c0-2ac6-982c-d8415b0d7571
Version Independent ID: c18ab402-f70c-774e-a48a-c2c03695b9d5
Content: az storage share-rm
Content Source: latest/docs-ref-autogen/storage/share-rm.yml
Service: storage
GitHub Login: @rloutlaw
Microsoft Alias: routlaw

storage


Upgrade frontends in a Chef Backend HA cluster

Signed-off-by: Sean Horn<EMAIL_ADDRESS>Description
Provide steps to upgrade frontends in a Chef Backend HA cluster
Issues Resolved
No docs currently available to specifically upgrade Chef Backend HA frontends
Check List

[X] All commits have been signed-off for the Developer Certificate of Origin. See https://github.com/chef/chef/blob/main/CONTRIBUTING.md#developer-certification-of-origin-dco

No, the actual procedure is listed at https://docs.chef.io/server/install_server_ha/#upgrading-chef-infra-server-on-the-frontend-machines


feat: add searchable select (bits-ui)

[x] Add bits-ui
[x] Refactor existing models select to use <Combobox>
[x] Refactor <Field> to use <Label>
[x] Refactor <FieldSelect> to use <Combobox>
[ ] Maybe should have refactored <FieldSelect> to <Select>
[x] DRY style helpers
[x] Update tests
[x] QA mobile UI

:tada: This PR is included in version 0.12.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


 We run at low block-time (1sec) and with AURA. Otherwise our spec is pretty standard. We currently depend on the polkadot-v0.9.13 branch.
We have been performing some simulated high-latency network tests and run into serious issues with the network reputation system. With low blocktime, and high network latency it is quite common to encounter forks and chain reorgs. In such cases our finality gadget occasionally requires importing some blocks which are out of the main branch, using the NetworkService::set_sync_fork_request call. This is completely analogous to GRANDPA, which also uses this call to fetch unknown blocks that are encountered during voting rounds.
The issue is that these calls make the nodes ban each other, here is how it looks like in logs:
2022-02-03 13:44:55.010 DEBUG tokio-runtime-worker peerset: Report 12D3KooWP3nEfSdusNZrAH7aZnwLkKizt1cmS5dR6LaM3vwEkLic: -2147483648 to -2147483648. Reason: Same block request multiple times, Disconnecting
After that happens, the nodes stop talking to each other, and unsuprisingly the finalization stalls, because there are not enough nodes to achieve consensus.
Internally we don't even call NetworkService::set_sync_fork_request multiple times on the same block. The ban is a result of some internal retries in the sync protocol. As a result, honest nodes ban each other (there are typically a lots of these bans happening).
Is there a way for us to get around this issue without making changes to the sync protocol?

Looks like an issue indeed. For starters, duplicate block request should not result in immediate ban, but in more gradual reputation decrease.
As for why this is happening in the first place, is there a test that demonstrate the issue?

For our node the kind of scenarios in which bad things related to the reputation system happen always start with high network latency or high cpu load, they cause a considerable number of forks to pop up (this is still normal and expected, due to our small blocktime) and then this triggers fork requests between nodes and then banning at the network layer shuts down the consensus for good.
We don't have a proper infrastructure to test it for a substrate node with grandpa, but instead we managed to replicate this in a localhost node with simulated network delay. This works both for our node and for substrate node as well.
The rough steps to reproduce with a substrate node (credit goes to @Yithis ) would be as follows:

Run 4 nodes (2 is probably enough, but we tested 4) Alice, Bob, Charlie, Dave
./target/release/substrate --base-path /tmp/alice --chain local --alice --port 30333 --ws-port 9945 --rpc-port 9933 --telemetry-url "wss://telemetry.polkadot.io/submit/ 0" --validator  -lsync=trace  -lpeerset=trace 2> alice.log

the same for bob, charlie and dave.
2. Impose artificial network delay on localhost
sudo tc qdisc add dev lo root netem delay 3000ms
This delays all packets by 3s (again, arbitrary choice here, 1s likely works well too).
(NOTE: to turn this delay off later use sudo tc qdisc del dev lo root netem delay 3000ms)
3. Wait a few minutes. You should see 2022-03-09 19:41:09.070 DEBUG tokio-runtime-worker peerset: Report 12D3KooWFs33a38TemeyGHrUZsK7Y6qjTgRt9AyRV3ouD1W3MiG6: -2147483648 to -2147483243. Reason: Same block request multiple times, Disconnecting or something similar in the logs which causes a ban.

I've been looking into this recently, as our network (Creditcoin) has been affected. So far I've identified three causes of duplicate requests, in decreasing order of prevalence/impact:
Ancestor search after disconnects
When a node has a spotty connection (though it can happen whenever there are disconnects), the following series of events can occur:

Node connects to peer
Node performs ancestor search, requesting some set of blocks in the process
Node disconnects from peer before sync is complete
Node reconnects
Node starts ancestor search from scratch, and happens to request a block that's in the set we requested in 2
Node gets banned because of the duplicate request, peer disconnects

If the node reconnects again, the set of blocks that we've already requested has likely grown so the chance we perform a duplicate request increases with each new sync attempt. The same issue occurs in the reverse direction, where the peer also makes duplicate requests over multiple ancestry searches, and then we ban the peer. This leads to a vicious cycle of banning that prevents the node from re-syncing with the chain.
I'm unsure of the best way forward here. Any thoughts @bkchr?
Ancestor binary search bug
The binary search part of ancestor search currently can search the same block twice. Fixed in #11067.
Bug in the sync code
Best explained by the following failing test case:
 #[test]
fn dont_duplicate_requests() {
	let mut bc = BlockCollection::new();
	assert!(is_empty(&bc));
	let peer = PeerId::random();

	let blocks = generate_blocks(10);

	// count = 5, peer_best = 50, common = 39, max_parallel = 0, max_ahead = 200
	assert_eq!(bc.needed_blocks(peer.clone(), 5, 50, 39, 0, 200), Some(40..45));

	// got a response on the request for `40..45`
	bc.clear_peer_download(&peer);
	bc.insert(40, blocks[..5].to_vec(), peer.clone());

	// our "node" started on a fork, with its current best = 47, which is > common && <
	// peer_best. on startup in `reset_sync_start_point` we set our `best_queued_number` to our
	// current best. when we receive the response for the first set of blocks, we
	// `drain_blocks(best_queued_number+1)`, which removes the just inserted blocks from the
	// collection
	let drained = bc.drain(48);
	assert_eq!(
		drained,
		blocks[..5]
			.iter()
			.map(|b| BlockData { block: b.clone(), origin: Some(peer.clone()) })
			.collect::<Vec<_>>()
	);

	// this fails because we've just deleted `40..45` from the collection, so here we return
	// `Some(40..45)` again, leading to a duplicate block request
	assert_eq!(bc.needed_blocks(peer.clone(), 5, 50, 39, 0, 200), Some(45..50));
}

The question in my eyes is whether the bug is setting best_queued_number to our best, or removing the blocks from the collection in drain. I lean towards the former, but I'm still thinking it through.

Thank you for looking into this :)

Ancestor search after disconnects When a node has a spotty connection (though it can happen whenever there are disconnects), the following series of events can occur:
1. Node connects to peer

2. Node performs ancestor search, requesting some set of blocks in the process

3. Node disconnects from peer before sync is complete

4. Node reconnects

5. Node starts ancestor search from scratch, and happens to request a block that's in the set we requested in 2

6. Node gets banned because of the duplicate request, peer disconnects

If the node reconnects again, the set of blocks that we've already requested has likely grown so the chance we perform a duplicate request increases with each new sync attempt. The same issue occurs in the reverse direction, where the peer also makes duplicate requests over multiple ancestry searches, and then we ban the peer. This leads to a vicious cycle of banning that prevents the node from re-syncing with the chain.

I think we could do 2 things. Either we remove seen requests from a peer when a peer disconnected or we just allow duplicated requests for small requests as we have here with the ancestor request. So, if the other side only requests the header | justification we allow it.


pull request for e2e test at 12/13/2016 22:26:04

:white_check_mark: Validation status: passed
For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


Approximate float comparison

Hello,
I'm using your module with numeric data, and so I added simple floating number comparison.
Unfortunately I couldn't figure out a good way to make the tolerance configurable via options parameter of diff, perhaps you've got an idea?

You should be able to access the options via self.options (e.g. self.options['tolerate_numeric_delta']) -check out the implementation of DiffText` for some examples. It should "just work" for both global and node-specific matching options.
I also don't think it's worth it to have a separate diff class just for floats - this is probably a useful feature for any numeric comparisons - feel free to modify DiffNumbers directly.
Hope that helps.


MWB: Frequent disconnect from 2nd machine

Microsoft PowerToys version
0.73.0
Installation method
GitHub
Running as admin
Yes
Area(s) with issue?
Mouse Without Borders
Steps to reproduce
Every time I return to my desk I have to refresh connections to get to the 2nd machine. Hot key combination does not work, have to open the interface and click refresh before it re-connects and starts working again.
✔ Expected Behavior
Should remain connected at all times.
❌ Actual Behavior
Disconnection from 2nd machine, having to manually re-connect multiple times per day.
Other Software
No response

can't say never used it again in months, cause as it was not reliable at all
switched back to the old dedicated MWB, not a single time the other machines were not reachable, additionally features are not restricted and work as intedend eg clipboard sharing in contrast to the integrated version


Docker support

Could add a with-docker example project and perhaps a --with-docker option to create-ponder that autogenerates a Dockerfile

This might be a pretty light lift I can do sometime

@roninjin10 would appreciate help! not a huge docker user myself.

Started a pr here https://github.com/0xOlias/ponder/pull/184

Closed in https://github.com/0xOlias/ponder/pull/293


Working with baobab and web workers

The current document doesn't mention about using baobab in a multi-threaded environment, does that mean I am not supposed to call baobab from another web worker directly?
Baobab's API seems to be very parallel-friendly, so I'm considering wrapping baobab in a dedicated web worker and proxy the web workers API (postMessage/addEventListener pairs) to baobab's APIs.
I don't know if that's necessary. Thanks for any recommendation.

I don't see reasons why Baobab should not work in a web worker context. Wrapping the API to web workers' one should work. However, I do not clearly understand what you are trying to achieve here. Do you need a centralized tree in the main thread and have workers at cursor level? Are you trying to handle a tree from a worker? Are you trying to split a tree?

In my case, I'm just putting a baobab tree in main thread, attaching listeners to other web workers and applying event-sourcing pattern to change the baobab.
I created this issue because the ideas of immutable data and multi-threading are kinda close, so I was wondering if there's a supposed/better way to use Baobab with web workers, like the wonderful integration it already has with React.js.
Thanks for your reply and the excellent work. My issue is solved.

It should definitely work in this case as long as you don't pass something else than raw data from the main thread to the worker. Don't hesitate to link any code you would write concerning this issue here as I think other people may be interested by your particular use case.

The solution is still quite immature and is in a young personal project, in case anyone searched here I'm posting it anyway.
https://github.com/pinyin/sourcelayers
Codes related to baobab and web workers are under directory /webapp/framework.

Thanks for sharing @pinyin. This looks like an interesting use case. What's the purpose of the app?

@Yomguithereal Glad you are interested. Hopefully this project would be a modern clone of OpenGrok, a web app for browsing source codes. The original solution lacks some functions I need (e.g. taking notes / browsing history ..) and is written in JSP, so I decided to write my own version.
I'm still learning webdev, any advices are welcomed.


Integrate __sycl_usm_array_interface__ inside numba_dppy

Our goal is to have zero copy data movement, if an array conforms to _sycl_usm_array_interface__. We have three paths of code dispatching to the GPU:

@njit

[ ] Evaluate any incoming argument to see if it implements _sycl_usm_array_interface__. If yes, zero copy to numpy_usm_shared. If no, create a numpy_usm_shared array and copy that data.
[ ] Check at lowering whether we have an instance of numpy_usm_shared and act accordingly. If the point above is implemented this will always be true. (proposed implementation PR).

@dppy.kernel

[x] Evaluate any incoming argument to see if it implements _sycl_usm_array_interface__. If yes, zero copy to numpy_usm_shared. If no, create a numpy_usm_shared array and copy that data.

Third party library calls (e.g. dpnp)

[x] Evaluate any incoming argument to see if it implements _sycl_usm_array_interface__. If yes, zero copy to numpy_usm_shared. If no, create a numpy_usm_shared array and copy that data. This check should happen in the pass proposed at PR.

Implemnetation for @dppy.kernel is completed through this PR: https://github.com/IntelPython/numba-dppy/pull/629

njit decorator (dpjit) will only support dpnp.ndarray and not any generic array object with __sycl_usm_array_interface__. Kernels already properly support __sycl_usm_array_interface__.


[5.8][Concurrency] Add include of unistd.h to TaskGroup.cpp

Description: This fixes compilation in the SWIFT_CONCURRENCY_TASK_TO_THREAD_MODEL, which was not caught in CI because CI does not verify this configuration. We fixed this on main here: https://github.com/apple/swift/pull/63265/ and should have the same fix on 5.8 to avoid a surprise in case we'd want to use this mode in 5.8.
Risk: Low
Review by: @DougGregor @drexin
Testing: CI testing
Original PR: https://github.com/apple/swift/pull/63265
Radar: rdar://104758975 rdar://104198044

@swift-ci please test

Hold off on merging this. This is causing some other issues and I am working on a fix.

@swift-ci please test

This branch now includes @drexin's complete fix for this, so it can be merged.
Thank you @drexin for the help here!

Resolves rdar://104198044


Mouse disappeared as soon as I start running model loading

Hi,
I'm using a Mac here. My mouse disappeared immediately after I start running model loading (in chp. 3), and the window is all black. I haven't changed any code. Can anyone help me with that ? Thanks !

Huh? Was this solved?