Skip to content

Latest commit

 

History

History
41 lines (36 loc) · 1.67 KB

TODO.md

File metadata and controls

41 lines (36 loc) · 1.67 KB

DONE

  • process: .destroy
  • state_machine: fix listen fiber leak
  • add uptime
  • refactor rpc call2
  • use mutex to ensure started/exited ordering
  • remove unneeded processes first
  • job: support env ..with %<process_num>02d
  • config overrides
  • reload(dir)....(sv rr) will reread config from current dir
  • server: implement shutdown(parallel stop with channel synchro)
  • make command strings with arguments work
  • refactor state_machine to process_fsm
  • application logs are not routed through sv
  • add stop/start commands
  • fail process.start on first spawn error and change process state to FATAL
  • add linear backoff (when a RUNNING process exits...it will restarted 'startretries' times with linear backoff)
  • port to crystal 0.25.0

PENDING

  • write tests
  • take abstract socket lock when running rr/start/stop commands
  • implement forced-shutdown

figure out how nginx/apache does log writes with 32k buffer....with or without locks?

MAYBE

  • implement fd/socket passing
  • state_machine: refactor to use state transitions
  • add logger
  • show/log spawn errors
  • autorestart: true(done), false(done), unexpected(not implemented)

UNLIKELY

  • size based logrotate(needs shared fds for similar processes to account for log size)

DESIGN ISSUES

  • race condition in STARTED/EXITED will cause infinite start retries (in a very unlikely case where startsecs ~= num secs for which process runs before exiting) due to the following state transitions STARTING -> EXITED -> STARTING -> RUNNING(event started) -> EXITED -> RUNNING
  • Process.kill can kill the wrong process (race condition in kill/wait)