History | Log In     View a printable version of the current page.  
Issue Details (XML | Word | Printable)

Key: JS-215
Type: Sub-task Sub-task
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Andreas Püschel
Reporter: Andreas Liebert
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Job Scheduler
enhancements for Job Scheduler parameters (JS-214)

add include element to params

Created: 08 January 2008 13:49   Updated: 26 August 2008 10:31
Component/s: Job Scheduler Binaries
Affects Version/s: None
Fix Version/s: None

Original Estimate: 1 day Remaining Estimate: 1 day Time Spent: Unknown


 Description  « Hide
Enable reading parameters from other xml files, e.g.:
<params>
  <include file="my_params.xml"/>
</params>

Content of file my_params.xml:
<params>
  <param name="foo" value="bar"/>
  <param name="myParam" value="1"/>
</params>

Aditionally, parameters can be read from non-standard XML-Files by configuring an XPath expressions which points to the root of the param elements:
<params>
  <include file="other_params.xml" node="/root/jobschedulerparams[@system="dev"]/params"/>
</params>

Content of file other_params.xml:
<root>
  <jobschedulerparams system="dev">
    <params>
      <param name="foo" value="bar"/>
      <param name="myParam" value="1"/>
    </params>
  </jobschedulerparams>
  <jobschedulerparams system="prod">
    <params>
      <param name="foo" value="foo"/>
      <param name="myParam" value="2"/>
    </params>
  </jobschedulerparams>
</root>

 All   Comments   Work Log   Change History      Sort Order:
Joacim Zschimmer - 09 January 2008 12:34
<include> wird beim Laden der XML-Datei ausgewertet.
Ein Fehler dabei, also wenn die Datei nicht lesbar ist oder XPath-Ausdruck kein <params> liefert wirken wie ein XML-Fehler.

Für relative Dateinamen gilt das Arbeitsverzeichnis.

Joacim Zschimmer - 13 January 2008 18:15
Das Attribut node steht im Singular, der XPath-Ausdruck kann aber mehrere Elemente <params> liefern. Die sollen alle nacheinander eingelesen werden?
Obwohl das Attribut für den XPath-Ausdruck node heißt, werden nur Elemente akzeptiert.

Andreas Püschel - 15 January 2008 08:44
ich denke es wäre besser, wenn wir nicht
<params><param name="" value=".."/></params
adressieren, sondern der XPath-Ausdruck direkt die Parameter <param name=".." value=".."/> als Node List liefert.

Das ist aus meiner Sicht dann eindeutig und die Parameter können je nach Ausprägung des XPath Ausdrucks aus unterschiedlichen Knoten stammen. Was hälst du davon?

Andreas Liebert - 25 January 2008 10:42 - edited
Aus dem Telefonat vom 25.1.:

- Der XPath-Ausdruck soll eine Nodelist von <param>-Elementen (nicht <params>) zurückgeben
- In einem Hot Folder bezieht sich der Pfad für include relativ auf den Pfad der aktuellen XML Datei. Soll ein Pfad relativ zum Scheduler Installationsverzeichnis angegeben werden, so kann ${SCHEDULER_HOME} verwendet werden. Die Änderung bezieht sich auf alle include Elemente (also auch in description und holidays)

Joacim Zschimmer - 02 February 2008 11:08
Alle <include>, außer in <script>?

Joacim Zschimmer - 02 February 2008 11:10
Das Basisverzeichnis ist also abhängig davon, woher die XML-Datei kommt. Ist das nicht kompliziert?

Andreas Püschel - 04 February 2008 08:02
<include> bei <script> ist hier ebenso gemeint, d.h. soll relativ zum Pfad der aktuellen XML-Datei aufgelöst werden. Warum meinst du, sollte es bei <script> nicht angewendet werden?

Diese Änderung ist inkompatibel zur bisherigen Verwendung von <include> in scheduler.xml, daher die Unterscheidung, ob mit oder ohne hot folders gearbeitet wird, sonst funktionieren vorhandene Konfigurationen nicht mehr.

BTW: Wäre hier nicht die Verwendung einer weiteren Environment-Variablen $SCHEDULER_LIVE angeraten, die den Namen des Live Folders liefert? Der Job Scheduler müsste diese Variable analog zu $SCHEDULER_HOME substituieren.

Joacim Zschimmer - 04 February 2008 08:13
<script> war nicht aufgeführt. Und wirkt auch anders, denn es wird vom remote Scheduler interpretiert. Dort gibt es aber das Konfigurationsverzeichnis nicht. Sollen wir doch wieder <include> vom lokalen Rechner interpretieren lassen (erscheint mir gut)?


SCHEDULER_LIVE wäre die erste Umgebungsvariable, die der Scheduler setzen würde. Wir könnten das neue <params> unter <config> bei der Ersetzung mitverwenden (wobei hier unklar ist, ob vor oder nach Ausführung des Scheduler-Skripts, das Parameter ändern kann.)

Oder wir führen spezielle Scheduler-Variablen ein, und so hast Du es wohl gemeint. SCHEDULER_LIVE wäre dann eine interne, vordefinierte Variable. Übrigenes müsste sie konsequenterweise SCHEDULER_CONFIGURATION_DIRECTORY heißen, wenn wir bei den Namensregeln bleiben.

Ansonst ist SCHEDULER_LIVE bei euch nicht immer ${SCHEDULER_HOME}/live? Ist das eine eigene Variable wert?


Andreas Liebert - 04 February 2008 16:43 - edited
Ich denke auch, include sollte vom lokalen Scheduler interpretiert werden. Der remote Scheduler ist ja eher ein Slave oder Agent und hat keine Konfigurationsdateien.
Etwas anderes ist es, wenn der remote Scheduler ein auf der remote Machine liegendes Script ausführen soll. Dann würde man dafür jedoch nicht include verwenden, sondern den Scriptaufruf in das <script> Element schreiben.

Den SCHEDULER_LIVE Absatz verstehe ich nicht. $SCHEDULER_LIVE ist doch gar nicht die erste Umgebungsvariable, es gibt doch $SCHEDULER_HOME.

Da configuration_directory einstellbar ist, sollte man nicht davon ausgehen, dass es immer ${SCHEDULER_HOME}/config/live ist. Wir liefern das zwar so aus, es gibt jedoch auch Situationen, in denen wir die Verzeichnisstruktur zerpflücken.

Joacim Zschimmer - 21 February 2008 09:52
Ich fasse JS-215 und JS-240 zusammen:


A) <script><include>

<include> in <script> wird nicht mehr am remote Scheduler interpretiert, sondern immer lokal. Die inkludierten Dateien werden lokal gelesen.



B) Neu einzubauen: <include live_file="pfad">

1) Für <include> in diesen Elementen:
       <job><script>
       <job><params>
       <job><description>
       <config><holidays>
       <job><run_time><holidays>

2) pfad ist relativ zum Pfadnamen der Datei, die den <include> enthält (der Scheduler wird diese Information durchreichen).

3) Wenn <include> nicht aus einer Datei eines Konfigurationsverzeichnisses kommt (also per TCP oder scheduler.xml), wird als Basisverzeichnis das Konfigurationsverzeichnis ("live/") angenommen.

4) pfad kann sich nur im Verzeichnisbaum der Konfiguration (entweder live/ oder cache/) bewegen. ".." ist soweit erlaubt.

5) "/" ist das Wurzelverzeichnis der Konfiguration.



C) Überwachung von <include live_file=".."> in <job><params>

Ändert sich die inkludierte Datei, wirkt das wie eine Änderung der Konfigurationsdatei des Jobs, die daraufhin neu eingelesen wird.



D) <params><include>

<params> wird um einen <include> erweitert.
Mit dem neuen Attribute node= wird ein X-Path-Ausdruck angegeben, der die <param>-Elemente adressiert.

Joacim Zschimmer - 26 February 2008 16:07
<config include_path="..."> akzeptiert jetzt Umgebungsvariablen.