deprecate 'on-failure' use 'on_failure' instead

This commit is contained in:
Berger Eugene 2022-11-01 00:07:29 +02:00
parent d9a3f6b983
commit 45fceb3abf
16 changed files with 167 additions and 123 deletions

View File

@ -10,7 +10,7 @@ Process Compose is a simple and flexible scheduler and orchestrator to manage no
- Processes execution (in parallel or/and serially)
- Processes dependencies and startup order
- Defining recovery policies (restart `on-failure`, `always`, `no`). Manual recovery
- Defining recovery policies (restart `on_failure`, `always`, `no`). Manual recovery
- Processes arguments `bash` or `zsh` style (or define your own shell)
- Per process and global environment variables
- Per process or global (single file) logs
@ -360,7 +360,7 @@ In order to insure that the process is restarted (and not transitioned to comple
```yaml
process2:
availability:
restart: on-failure # other options: "always", "no" (default)
restart: on_failure # other options: "exit_on_failure", "always", "no" (default)
backoff_seconds: 2 # default: 1
max_restarts: 5 # default: 0 (unlimited)
```

View File

@ -34,7 +34,7 @@ processes:
cleanser:
command: "python3 data_cleanser.py --path /path/to/A/data --path /path/to/B/data"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
environment:
- 'OUTPUT_DIR=/path/to/cleansed/data'
@ -47,9 +47,9 @@ processes:
db_feeder:
command: "python3 feed_db.py --source /path/to/cleansed/data"
availability:
restart: on-failure
restart: on_failure
depends_on:
db_awaiter:
db_awaiter:
condition: process_completed_successfully
environment:
- 'DB_CONNECTION_STRING=MYDB://${DB_USER}:${DB_PASSWORD}@localhost:27017'
@ -64,9 +64,9 @@ processes:
availability:
restart: "no"
depends_on:
database:
database:
condition: process_started
# database should be always running
# It uses an external script for spinning up the DB (or maybe it just hides a docker command...)
# Its log is saved to a sepparate file since this DB is too chatty
@ -77,4 +77,4 @@ processes:
log_location: "/path/to/db.log"
environment:
- 'DB_SPECIFIC_VAR1=VAL1'
- 'DB_SPECIFIC_VAR2=VAL2'
- 'DB_SPECIFIC_VAR2=VAL2'

View File

@ -3,69 +3,67 @@ processes:
process1:
command: "echo process1"
depends_on:
process2:
process2:
condition: process_completed_successfully
process2:
command: "echo process2"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process3:
process3:
condition: process_completed_successfully
process3:
command: "echo process3"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process4:
process4:
condition: process_completed_successfully
process4:
command: "echo process4"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process5:
process5:
condition: process_completed_successfully
process5:
command: "echo process5"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process6:
process6:
condition: process_completed_successfully
process6:
command: "echo process6"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process7:
process7:
condition: process_completed_successfully
process8:
process8:
condition: process_completed_successfully
process7:
command: "echo process7"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process8:
process8:
condition: process_completed_successfully
process8:
command: "echo process8"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
environment:
- 'ABC=222'

View File

@ -3,69 +3,69 @@ processes:
process1:
command: "echo process1"
depends_on:
process2:
process2:
condition: process_completed_successfully
process2:
command: "echo process2"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process3:
process3:
condition: process_completed_successfully
process3:
command: "echo process3"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process4:
process4:
condition: process_completed_successfully
process4:
command: "echo process4"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process5:
process5:
condition: process_completed_successfully
process5:
command: "echo process5"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process6:
process6:
condition: process_completed_successfully
process7:
process7:
condition: process_completed_successfully
process6:
command: "echo process6"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process8:
process8:
condition: process_completed_successfully
process7:
command: "echo process7"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process8:
process8:
condition: process_completed_successfully
process8:
command: "echo process8"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
environment:
- 'ABC=222'

View File

@ -10,7 +10,7 @@ processes:
process2:
command: "echo process2"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process3:
condition: process_completed_successfully
@ -24,7 +24,7 @@ processes:
process4:
command: "echo process4"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process5:
condition: process_completed
@ -32,7 +32,7 @@ processes:
process5:
command: "echo 'process5 error' >&2 && exit 1"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 1
max_restarts: 1
depends_on:
@ -52,7 +52,7 @@ processes:
process7:
command: "echo process7"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process8:
condition: process_completed_successfully
@ -60,7 +60,7 @@ processes:
process8:
command: "echo process8"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2

View File

@ -3,67 +3,67 @@ processes:
process1:
command: "echo process1"
depends_on:
process2:
process2:
condition: process_completed_successfully
process2:
command: "echo process2"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process3:
process3:
condition: process_completed_successfully
process3:
command: "echo process3"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process4:
process4:
condition: process_completed_successfully
process4:
command: "echo process4"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process5:
process5:
condition: process_completed_successfully
process5:
command: "echo process5"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process6:
process6:
condition: process_completed_successfully
process6:
command: "echo process6"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process7:
process7:
condition: process_completed_successfully
process7:
command: "echo process7"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process8:
process8:
condition: process_completed_successfully
process8:
command: "echo process8"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
environment:
- 'ABC=222'

View File

@ -3,68 +3,68 @@ processes:
process2:
command: "echo process2"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process1:
process1:
condition: process_completed_successfully
process1:
command: "echo process1"
availability:
restart: "on-failure"
restart: "on_failure"
process4:
command: "echo process4"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process1:
process1:
condition: process_completed_successfully
process3:
command: "echo process3"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process1:
process1:
condition: process_completed_successfully
process6:
command: "echo process6"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process1:
process1:
condition: process_completed_successfully
process5:
command: "echo process5"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process1:
process1:
condition: process_completed_successfully
process8:
command: "echo process8"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process1:
process1:
condition: process_completed_successfully
process7:
command: "echo process7"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process1:
process1:
condition: process_completed_successfully
environment:
- 'ABC=222'

View File

@ -3,59 +3,59 @@ processes:
process2:
command: "echo process2"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process1:
process1:
condition: process_completed_successfully
process1:
command: "echo process1"
availability:
restart: "on-failure"
restart: "on_failure"
process4:
command: "echo process4"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process3:
process3:
condition: process_completed_successfully
process3:
command: "echo process3"
availability:
restart: "on-failure"
restart: "on_failure"
process6:
command: "echo process6"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process5:
process5:
condition: process_completed_successfully
process5:
command: "echo process5"
availability:
restart: "on-failure"
restart: "on_failure"
process8:
command: "echo process8"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process7:
process7:
condition: process_completed_successfully
process7:
command: "echo process7"
availability:
restart: "on-failure"
restart: "on_failure"
environment:
- 'ABC=222'

View File

@ -3,22 +3,22 @@ processes:
process2:
command: "echo process2"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process1:
process1:
condition: process_completed_successfully
process3:
condition: process_completed_successfully
process4:
condition: process_completed_successfully
process5:
condition: process_completed_successfully
process6:
condition: process_completed_successfully
process7:
condition: process_completed_successfully
process8:
process3:
condition: process_completed_successfully
process4:
condition: process_completed_successfully
process5:
condition: process_completed_successfully
process6:
condition: process_completed_successfully
process7:
condition: process_completed_successfully
process8:
condition: process_completed_successfully
process1:
@ -45,7 +45,7 @@ processes:
process7:
command: "echo process7"
environment:
- 'ABC=222'

View File

@ -10,7 +10,7 @@ processes:
process2:
command: "echo 'process2 is removing the log'"
availability:
restart: "on-failure"
restart: "on_failure"
# max_restarts: 3
depends_on:
process3:
@ -25,7 +25,7 @@ processes:
process4:
command: "echo process4"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process5:
condition: process_completed_successfully
@ -33,7 +33,7 @@ processes:
process5:
command: "python3 -c 'print(str(4+5))'"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 1
# max_restarts: 3
depends_on:
@ -43,7 +43,7 @@ processes:
process6:
command: "echo process6"
availability:
restart: "on-failure"
restart: "on_failure"
log_location: ./pc.proc6.log-test.log
depends_on:
process7:
@ -52,7 +52,7 @@ processes:
process7:
command: "echo process7"
availability:
restart: "on-failure"
restart: "on_failure"
depends_on:
process8:
condition: process_completed_successfully
@ -60,7 +60,7 @@ processes:
process8:
command: "echo process8"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
environment:

View File

@ -7,7 +7,7 @@ processes:
process1:
command: "powershell.exe ./test_loop.ps1 ${PROC4}"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process2:
@ -23,7 +23,7 @@ processes:
command: "powershell.exe ./test_loop.ps1 process2"
log_location: ./pc.proc2.log
availability:
restart: "on-failure"
restart: "on_failure"
# depends_on:
# process3:
# condition: process_completed_successfully
@ -35,7 +35,7 @@ processes:
process3:
command: "powershell.exe ./test_loop.ps1 process3"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
process4:
@ -44,7 +44,7 @@ processes:
process4:
command: "powershell.exe ./test_loop.ps1 process4"
# availability:
# restart: on-failure
# restart: on_failure
environment:
- 'ABC=2221'
- 'EXIT_CODE=1'

View File

@ -8,7 +8,7 @@ processes:
process1:
command: "./test_loop.bash ${PROC4}"
availability:
restart: "on-failure"
restart: "on_failure"
backoff_seconds: 2
depends_on:
_process2:
@ -62,7 +62,7 @@ processes:
process4:
command: "./test_loop.bash process4"
# availability:
# restart: on-failure
# restart: on_failure
environment:
- 'ABC=2221'
- 'EXIT_CODE=4'
@ -78,7 +78,7 @@ processes:
nginx:
command: "docker run -d --rm -p80:80 --name nginx_test nginx"
# availability:
# restart: on-failure
# restart: on_failure
is_daemon: true
shutdown:
command: "docker stop nginx_test"

View File

@ -65,9 +65,11 @@ func (p ProcessConfig) GetDependencies() []string {
}
const (
RestartPolicyAlways = "always"
RestartPolicyOnFailure = "on-failure"
RestartPolicyNo = "no"
RestartPolicyAlways = "always"
RestartPolicyOnFailureDeprecated = "on-failure"
RestartPolicyOnFailure = "on_failure"
RestartPolicyExitOnFailure = "exit_on_failure"
RestartPolicyNo = "no"
)
const (

30
src/app/deprecation.go Normal file
View File

@ -0,0 +1,30 @@
package app
import (
"github.com/rs/zerolog/log"
"os"
"time"
)
const (
month = time.Hour * 24 * 30
)
type DeprecationParams struct {
StartTime time.Time
}
func deprecationHandler(start, proc, deprecated, new, scope string) {
startTime, _ := time.Parse("2006-01-02", start)
if time.Now().Before(startTime.Add(month)) {
//month not passed since start
log.Warn().Msgf("Process %s uses deprecated %s '%s' please change to '%s'", proc, scope, deprecated, new)
} else if time.Now().Before(startTime.Add(2 * month)) {
//2 months not passed
log.Error().Msgf("Process %s uses deprecated %s '%s' please change to '%s'", proc, scope, deprecated, new)
time.Sleep(5 * time.Second)
} else {
log.Error().Msgf("Process %s uses deprecated %s '%s' please change to '%s' exiting...", proc, scope, deprecated, new)
os.Exit(1)
}
}

View File

@ -156,7 +156,12 @@ func (p *Process) isRestartable() bool {
return false
}
if exitCode != 0 && p.procConf.RestartPolicy.Restart == RestartPolicyOnFailure {
if exitCode != 0 && p.procConf.RestartPolicy.Restart == RestartPolicyExitOnFailure {
return false
}
if exitCode != 0 && (p.procConf.RestartPolicy.Restart == RestartPolicyOnFailureDeprecated ||
p.procConf.RestartPolicy.Restart == RestartPolicyOnFailure) {
if p.procConf.RestartPolicy.MaxRestarts == 0 {
return true
}

View File

@ -25,6 +25,7 @@ var PROJ *Project
func (p *Project) init() {
p.initProcessStates()
p.initProcessLogs()
p.deprecationCheck()
}
func (p *Project) Run() {
@ -125,6 +126,14 @@ func (p *Project) initProcessLogs() {
}
}
func (p *Project) deprecationCheck() {
for key, proc := range p.Processes {
if proc.RestartPolicy.Restart == RestartPolicyOnFailureDeprecated {
deprecationHandler("2022-10-30", key, RestartPolicyOnFailureDeprecated, RestartPolicyOnFailure, "restart policy")
}
}
}
func (p *Project) GetProcessState(name string) *ProcessState {
if procState, ok := p.processStates[name]; ok {
proc := p.getRunningProcess(name)