Come fermare un errore IOException usando pur utilizzando una combinazione di Jython, pyro e formica?

StackOverflow https://stackoverflow.com/questions/2679520

  •  30-09-2019
  •  | 
  •  

Domanda

Così il meraviglioso basso su questo doozie di un problema:

versione corta: Stiamo costruendo un sistema di distribuzione per questo articolo di software che stiamo utilizzando. Fondamentalmente prendiamo fuori accumulo artefatto, conservarla in un server FTP, che passa a più client che eseguono gli script per rattoppare i loro server.

Versione lunga:

1 server di distribuzione

più server del cliente

Software: Jython 2.5.1, formica 1.8.0, Pyro 3.10

Il server di distribuzione dispone di un server FTP e un client PYRO esecuzione su di esso. Ogni server cliente ha un server PRYO esecuzione su di esso.

Quando il client PYRO viene detto di avviare la procedura di patch poi si legge una lista macchina che contiene un elenco di tutti i server del cliente. Poi si collega a ciascuno dei server PYRO uno per uno ed eseguire la procedura di patch. La procedura è: getPatch (ottiene l'ultima patch per quel server), stopServer (arresta il software che possono o maynot accederà ciò che deve essere patchato), applicare la patch, StartServer. Ognuno dei processi chiama uno script ANT che passa con alcuni nomi delle cartelle e altri config passa intorno. La parte divertente accade quando si va ad applicare la patch. Vedi sotto per log degli errori. Ho dovuto togliere i nomi delle cartelle a causa di motivi di NDA.

Questo è dove si fa interessante. Esecuzione di ogni sezione della procedura singolarmente. cioè esecuzione getPatch, stopServer, ecc uno alla volta manualmente. Questo bug non accade. Fisicamente goign alla macchina e l'esecuzione dei processi che non accada. Solo quando chiamiamo tutti e 4 i processi uno dopo l'altro. Essa si verifica durante la fase di ApplyPatch quando un ANT sostituire script si chiama su più file. Pensiamo che potrebbe avere qualcosa a che fare con la JVM tenuta in mano il file per una frazione di secondo o 2. Tuttavia questo è destinato ad essere stato rattoppato in base alle note di bug in formica.

Così, in breve:

server di distribuzione ==> jython ==> Pyro connessione ==> client server ==> jython ==> ant lo script

Registro errori:

<*snip>\ant\deploy.xml:12: IOException in <*snip>\bin\startGs.sh - java.io.IOException:Failed to delete <*snip>\bin\rep4698373081723114968.tmp while trying to rename it.
    at org.apache.tools.ant.taskdefs.Replace.processFile(Replace.java:709)
    at org.apache.tools.ant.taskdefs.Replace.execute(Replace.java:548)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:398)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:390)
    at org.apache.tools.ant.Target.performTasks(Target.java:411)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1360)
    at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1212)
    at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:441)
    at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:302)
    at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:221)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:390)
    at org.apache.tools.ant.Target.performTasks(Target.java:411)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1360)
    at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1212)
    at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:441)
    at org.apache.tools.ant.Extaskdefs.SubAnt.execute(SubAnt.java:302)
    at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:221)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:398)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
    at net.sf.antcontrib.logic.IfTask.execute(IfTask.java:197)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.TaskAdapter.execute(TaskAdapter.java:154)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:390)
    at org.apache.tools.ant.Target.performTasks(Target.java:411)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1360)
    at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1212)
    at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:441)
    at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:302)
    at org.apache.tools.ant.taskdefs.SubAnt.execute(SubAnt.java:221)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)

è a org.apache.tools.ant.Task.perform (Task.java:348)         a org.apache.tools.ant.taskdefs.MacroInstance.execute (MacroInstance.java:398)         a org.apache.tools.ant.UnknownElement.execute (UnknownElement.java:291)         a sun.reflect.NativeMethodAccessorImpl.invoke0 (metodo natale)         a sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39)         a sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)         a java.lang.reflect.Method.invoke (Method.java:597)         a org.apache.tools.ant.dispatch.DispatchUtils.execute (DispatchUtils.java:106)         a org.apache.tools.ant.Task.perform (Task.java:348)         a org.apache.tools.ant.taskdefs.Sequential.execute (Sequential.java:68)         a org.apache.tools.ant.UnknownElement.execute (UnknownElement.java:291)         a sun.reflect.NativeMethodAccessorImpl.invoke0 (metodo natale)         a sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39)         a sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)         a java.lang.reflect.Method.invoke (Method.java:597)         a org.apache.tools.ant.dispatch.DispatchUtils.execute (DispatchUtils.java:106)         a org.apache.tools.ant.Task.perform (Task.java:348)         a org.apache.tools.ant.taskdefs.MacroInstance.execute (MacroInstance.java:398)         a sun.reflect.NativeMethodAccessorImpl.invoke0 (metodo natale)         a sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39)         a sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)         a java.lang.reflect.Method.invoke (Method.java:597)         a org.apache.tools.ant.dispatch.DispatchUtils.execute (DispatchUtils.java:106)         a org.apache.tools.ant.Task.perform (Task.java:348)         a org.apache.tools.ant.taskdefs.Parallel $ TaskRunnable.run (Parallel.java:433)         a java.lang.Thread.run (Thread.java:619) Causato da: java.io.IOException: Impossibile eliminare <* snip> \ bin \ rep4698373081723114968.tmp durante il tentativo di rinominarlo.         a org.apache.tools.ant.util.FileUtils.rename (FileUtils.java:1248)         a org.apache.tools.ant.taskdefs.Replace.processFile (Replace.java:702)         ... più 125

Qualsiasi aiuto sarebbe apprezzato.

È stato utile?

Soluzione

Sembra che sia l'FTP che è il problema. E 'mantenendo un blocco tramite jython sulle singole cartelle. Così, quando viene introdotto un nuovo file si blocca in uno stato di non-cancellabile. È comunque possibile modificare il file vale a dire eseguire uno script sostituirlo su di esso. tuttavia, non è possibile eliminarlo. Andando a lavoro su una diversa implementazione del ftp. vale a dire l'uso java / di Jython versione piuttosto che ant.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top