Job Scheduler

Order Jobs configured with <process> or <script type="shell"> don't set error_state

Details

  • Type: Bug Bug
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Fixed
  • Affects Version/s: 1.3.1
  • Fix Version/s: 1.3.2
  • Component/s: Job Scheduler Binaries
  • Description:
    Hide

    If a <process> Job is a state in a job chain, with next_state and error_state, orders passing this state will always be moved to the next_state.
    Even if the process exits with exit_code!=0, the order goes to the next_state.
    (A warning is logged for the non-zero exit_code, but only after the order has been set to the next_state)

    Show
    If a <process> Job is a state in a job chain, with next_state and error_state, orders passing this state will always be moved to the next_state. Even if the process exits with exit_code!=0, the order goes to the next_state. (A warning is logged for the non-zero exit_code, but only after the order has been set to the next_state)
  • Environment:
    Windows, Linux

Activity

Hide
Joacim Zschimmer added a comment - 23 July 2007 19:16

Das bemängelte Verhalten ist so vorgesehen.

Ein Auftrag, der durch einen Shell-Job geht, bekommt bislang immer den next_state, weil der Job ja kein spooler_process() mit return false kennt. Das können wir natürlich ändern. Bei einem exit_code ungleich 0 könnte der Auftrag in den error_state gehen. Dazu sollte der Job aber nicht gestoppt werden (stop_on_error="no" oder ignore_error="yes"). Gleiches bei einem Signal (unter Unix), also einem Abbruch, wenn der Job wegen ignore_signal nicht stoppt.

Wenn der Job stoppt (wegen der Defaults stop_on_error="yes", ignore_error="no" und ignore_signal="no"), sollte der Auftrag an Ort und Stelle, also in der Auftragswarteschlange des Jobs bleiben, so wie das auch für API-Jobs gilt. Nach Reparatur des Stopp-Grundes kann der Job erneut gestartet , und der Ausführungsschritt des Auftrags wiederholt werden. Dasselbe gilt für <delay_after_error>.

Das derzeitige Verhalten des Schedulers, den Auftrag in den next_state zu versetzen, bevor der Stopp des Jobs erkannt wird, ist nicht korrekt.

Also:

  • Kein Fehler (also auch exit_code=0): next_state
  • Unterdrückter Fehler, der also nicht zum Stopp führt: error_state
  • Job stoppt (oder <delay_after_error> wirkt): Auftrag bleibt in der Wartschlange

Ich denke, wir sollten es so machen. Es ist vielleicht nicht kompatibel, weshalb ich das gerne von euch bestätigt haben möchte. Sollen die Fehler vielleicht weiter differenziert, vor allem von exit_code != 0 unterschieden werden? Man könnte "gute Exit-Codes" einführen.

Grüße
Joacim Zschimmer

Show
Joacim Zschimmer added a comment - 23 July 2007 19:16 Das bemängelte Verhalten ist so vorgesehen. Ein Auftrag, der durch einen Shell-Job geht, bekommt bislang immer den next_state, weil der Job ja kein spooler_process() mit return false kennt. Das können wir natürlich ändern. Bei einem exit_code ungleich 0 könnte der Auftrag in den error_state gehen. Dazu sollte der Job aber nicht gestoppt werden (stop_on_error="no" oder ignore_error="yes"). Gleiches bei einem Signal (unter Unix), also einem Abbruch, wenn der Job wegen ignore_signal nicht stoppt. Wenn der Job stoppt (wegen der Defaults stop_on_error="yes", ignore_error="no" und ignore_signal="no"), sollte der Auftrag an Ort und Stelle, also in der Auftragswarteschlange des Jobs bleiben, so wie das auch für API-Jobs gilt. Nach Reparatur des Stopp-Grundes kann der Job erneut gestartet , und der Ausführungsschritt des Auftrags wiederholt werden. Dasselbe gilt für <delay_after_error>. Das derzeitige Verhalten des Schedulers, den Auftrag in den next_state zu versetzen, bevor der Stopp des Jobs erkannt wird, ist nicht korrekt. Also:
  • Kein Fehler (also auch exit_code=0): next_state
  • Unterdrückter Fehler, der also nicht zum Stopp führt: error_state
  • Job stoppt (oder <delay_after_error> wirkt): Auftrag bleibt in der Wartschlange
Ich denke, wir sollten es so machen. Es ist vielleicht nicht kompatibel, weshalb ich das gerne von euch bestätigt haben möchte. Sollen die Fehler vielleicht weiter differenziert, vor allem von exit_code != 0 unterschieden werden? Man könnte "gute Exit-Codes" einführen. Grüße Joacim Zschimmer
Hide
Uwe Risse added a comment - 24 July 2007 11:46

Bei order="no" muss ja nichts geändert werden.
Bei order="yes":
Man muss wohl unterscheiden zwischen "Fehler des Auftrags" und "Fehler des Jobs"
Stop_on_error bezieht sich auf Fehler des Jobs!
Ein Fehler des Jobs liegt bei einer Exception vor. Dann sollte auch gestoppt werden. Z.B. permission denied o.ä.
Bei einem Auftrags-Job und Exit-Code != 0 würde ich das als Fehler des Auftrags definieren. Also kein Stopp und Error-State.

Show
Uwe Risse added a comment - 24 July 2007 11:46 Bei order="no" muss ja nichts geändert werden. Bei order="yes": Man muss wohl unterscheiden zwischen "Fehler des Auftrags" und "Fehler des Jobs" Stop_on_error bezieht sich auf Fehler des Jobs! Ein Fehler des Jobs liegt bei einer Exception vor. Dann sollte auch gestoppt werden. Z.B. permission denied o.ä. Bei einem Auftrags-Job und Exit-Code != 0 würde ich das als Fehler des Auftrags definieren. Also kein Stopp und Error-State.
Hide
Joacim Zschimmer added a comment - 13 August 2007 12:02

Für API-Jobs gilt weiterhin, dass ein Task-Fehler den Auftrag an seiner Position lässt. Beim nächsten Start der Task wird dann der Auftrag wiederholt. Das ist für Nicht-API-Jobs nicht mehr möglich.

Show
Joacim Zschimmer added a comment - 13 August 2007 12:02 Für API-Jobs gilt weiterhin, dass ein Task-Fehler den Auftrag an seiner Position lässt. Beim nächsten Start der Task wird dann der Auftrag wiederholt. Das ist für Nicht-API-Jobs nicht mehr möglich.
Hide
Andreas Püschel added a comment - 12 September 2007 22:54

The error_state is now set correctly.

Show
Andreas Püschel added a comment - 12 September 2007 22:54 The error_state is now set correctly.

People

Dates

  • Created:
    17 July 2007 12:01
    Updated:
    21 November 2007 14:50
    Resolved:
    13 August 2007 12:02