経緯

  • インポート機能利用時、configs をインポートした時はサーバーを再起動したい

経緯を受けての思考プロセス

  • node プロセスを child_process external_link を使って自ら複製しよう!
    • → なんか違う
    • → 「自ら process.exit() する」に留め、再起動するかどうかはプロセスを管理する側(e.g. pm2, systemd, k8s...)に任せるべきではないか?

発展

やりたいことを一旦まとめる

  • GROWI 本体機能として、graceful shutdown を実装する
    • 最低限、MongoDB, ES, socket.io の connection は close する
    • Express の状態管理をどうするかが課題
  • 自らプロセス終了する時に、上記を利用する
    • 終了後、docker-compose (dockerize) や k8s から再起動されることを期待する
  • docker-compose や k8s からプロセス終了を促される場合(signal を受け取った場合)も上記を利用する

出てきた懸念

PID=1 問題

Express の connection ってどうするのがいいんだろう?

k8s 対応

  • k8s で扱う以上は、liveness/readiness Prove での挙動ももうちょっと考慮しないといけないんじゃないか
    • 自前で実装した healthcheck API external_link の挙動は、今は完全に Express のライフサイクルと一致しているがそれでいいのか?
    • GROWI としての healthcheck API の実装(挙動)はそのままでよくて、terminas や lightship のインターフェースを通して使う、というのがベターかもしれない
      • route は今使っているものを踏襲できるだろうか?