git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorvasary.daniel <TFS\vasary.daniel>
Fri, 10 Sep 2021 15:41:39 +0000 (15:41 +0000)
committervasary.daniel <TFS\vasary.daniel>
Fri, 10 Sep 2021 15:41:39 +0000 (15:41 +0000)
12 files changed:
server/-product/production/HIRTV/jobs/executors.xml
server/-product/production/HIRTV/jobs/schedules.json
server/-product/production/HIRTV/jobs/steps/CancelableStep.java [new file with mode: 0644]
server/-product/production/HIRTV/jobs/steps/TestForkCancelableStep.java [new file with mode: 0644]
server/-product/production/HIRTV/jobs/templates/cancelable.xml
server/-product/production/HIRTV/jobs/templates/test-fork-cancelable.xml [new file with mode: 0644]
server/user.jobengine.executors/src/user/jobengine/server/steps/CancelableStep.java
server/user.jobengine.executors/src/user/jobengine/server/steps/TestForkCancelableStep.java
server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngineConfiguration.java
server/user.jobengine.osgi.server/src/user/jobengine/server/JobStepExecutor.java
server/user.mediacube.gui/pages/metadatadetails.zul
server/user.mediacube.gui/resources/i3-label_hu.properties

index 8cd7c04ccf6f996232f856601db93978136cbc0c..22c80c64f49f2cdccfbed49e3a6e0394713d2f93 100644 (file)
@@ -1,19 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <executors>\r
+       <executor className="TestForkCancelableStep.java" maxConcurrent="1" />\r
+       <executor className="CancelableStep.java" maxConcurrent="50" />\r
+       <executor className="CopyForArchiveNEXIOMaterialsStep.java" maxConcurrent="1" />\r
+       <executor className="DeleteNEXIOMaterialsStep.java" maxConcurrent="1" />\r
+\r
        <executor className="user.jobengine.server.steps.ArchiveListBuilderStep" maxConcurrent="1" />\r
        <executor className="user.jobengine.server.steps.ArchiveMaterialSubmitStep" maxConcurrent="1" />\r
        <executor className="user.jobengine.server.steps.BatchRetrieveForkStep" maxConcurrent="10" />\r
-       <executor className="user.jobengine.server.steps.CancelableStep" maxConcurrent="1" />\r
        <executor className="user.jobengine.server.steps.CheckLOWRESIntegrity" maxConcurrent="1" />\r
        <executor className="user.jobengine.server.steps.CheckMORPHEUSMissingMaterialsStep" maxConcurrent="1" />\r
        <executor className="user.jobengine.server.steps.CheckTRAFFICMissingMaterialsStep" maxConcurrent="1" />\r
        <executor className="user.jobengine.server.steps.CleanupMountedLocationStep" maxConcurrent="10" />\r
        <executor className="user.jobengine.server.steps.ProjectCleanupMountedLocationStep" maxConcurrent="1" />\r
-       <executor className="user.jobengine.server.steps.CopyForArchiveNEXIOMaterialsStep" maxConcurrent="1" />\r
        <executor className="user.jobengine.server.steps.CopyForArchiveNEXIORecordingsStep" maxConcurrent="1" />\r
        <executor className="user.jobengine.server.steps.CreateArchiveItemStep" maxConcurrent="1" />\r
        <executor className="user.jobengine.server.steps.CreateMissingLowresStep" maxConcurrent="1" />\r
-       <executor className="user.jobengine.server.steps.DeleteNEXIOMaterialsStep" maxConcurrent="1" />\r
        <executor className="user.jobengine.server.steps.DetectMissingLengthStep" maxConcurrent="1" />\r
        <executor className="user.jobengine.server.steps.DeleteFileStep" maxConcurrent="100" />\r
        <executor className="user.jobengine.server.steps.DownloadRecordingFromNexioStep" maxConcurrent="1" />\r
@@ -31,7 +33,7 @@
        <executor className="user.jobengine.server.steps.TranscodeFFAStranStep" maxConcurrent="2" />\r
        <executor className="user.jobengine.server.steps.TranscodeSELENIOStep" maxConcurrent="2" />\r
        <executor className="user.jobengine.server.steps.TSMBackupStep" maxConcurrent="1" />\r
-       <executor className="user.jobengine.server.steps.TSMExtendedRetrieveStep" maxConcurrent="1"  />\r
+       <executor className="user.jobengine.server.steps.TSMExtendedRetrieveStep" maxConcurrent="2"  />\r
        <executor className="user.jobengine.server.steps.TSMRestoreStep" maxConcurrent="1" />\r
        <executor className="user.jobengine.server.steps.TSMSystemRestoreStep" maxConcurrent="1" />\r
        <executor className="user.jobengine.server.steps.TSMRetrieveMissingMaterialStep" maxConcurrent="1" />\r
index 825fd64e3d16514be34cc81f01ce8a0be4a8a041..f6428f7e633eebedce62ce9f6617b8e6623bb36a 100644 (file)
@@ -1,21 +1,56 @@
 {\r
-  "joblist": [{\r
-      "active": true,\r
-      "cronexpression": "0/2 * * * * ?",\r
-      "template": "cancelable.xml"\r
-    },\r
-       {\r
-      "active": true,\r
-      "executeimmediate": true,\r
-         "name" : "OCTOPUS adatok szinkronizálása",\r
-      "template": "sync-octopus.xml",\r
-      "cronexpression": "0/30 * * * * ?",\r
-      "parameters": [\r
-       {"name": "includeArchived", "value": false, "type": "java.lang.Boolean"},\r
-       {"name": "address", "value": "http://10.10.1.11/api/v1", "type": "java.lang.String"},\r
-       {"name": "user", "value": "mam", "type": "java.lang.String"},\r
-       {"name": "pwd", "value": "napocska", "type": "java.lang.String"}\r
-      ]\r
-       }       \r
-  ]\r
-}
\ No newline at end of file
+       "joblist": [\r
+               {\r
+                       "active": false,\r
+                       "cronexpression": "0/2 * * * * ?",\r
+                       "template": "cancelable.xml",\r
+                       "parameters": [\r
+                               {\r
+                                       "name": "param",\r
+                                       "value": 100,\r
+                                       "type": "java.lang.Integer"\r
+                               }\r
+                       ]\r
+               },\r
+               {\r
+                       "active": false,\r
+                       "template": "test-fork-cancelable.xml",\r
+                       "parameters": [\r
+                               {\r
+                                       "name": "count",\r
+                                       "value": 2,\r
+                                       "type": "java.lang.Integer"\r
+                               }\r
+                       ]\r
+               },\r
+               {\r
+                       "active": true,\r
+                       "executeimmediate": true,\r
+                       "name": "OCTOPUS adatok szinkronizálása",\r
+                       "template": "sync-octopus.xml",\r
+                       "cronexpression": "0/30 * * * * ?",\r
+                       "parameters": [\r
+                               {\r
+                                       "name": "includeArchived",\r
+                                       "value": false,\r
+                                       "type": "java.lang.Boolean"\r
+                               },\r
+                               {\r
+                                       "name": "address",\r
+                                       "value": "http://10.10.1.11/api/v1",\r
+                                       "type": "java.lang.String"\r
+                               },\r
+                               {\r
+                                       "name": "user",\r
+                                       "value": "mam",\r
+                                       "type": "java.lang.String"\r
+                               },\r
+                               {\r
+                                       "name": "pwd",\r
+                                       "value": "napocska",\r
+                                       "type": "java.lang.String"\r
+                               }\r
+                       ]\r
+               }\r
+       ]\r
+}\r
diff --git a/server/-product/production/HIRTV/jobs/steps/CancelableStep.java b/server/-product/production/HIRTV/jobs/steps/CancelableStep.java
new file mode 100644 (file)
index 0000000..3368e44
--- /dev/null
@@ -0,0 +1,22 @@
+package user.jobengine.server.steps;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+public class CancelableStep extends JobStep {\r
+       private static final Logger logger = LogManager.getLogger();\r
+\r
+       @StepEntry\r
+       public Object[] execute(int param) throws Exception {\r
+               logger.info(getMarker(), "Executing with param {}", param);\r
+               for (int i = 0; i < 10; i++) {\r
+                       if (getJobRuntime().isWaitingCancel())\r
+                               break;\r
+                       Thread.sleep(1000);\r
+                       int progress = (i + 1) * 100 / 10;\r
+                       setProgress(progress);\r
+               }\r
+               return null;\r
+       }\r
+\r
+}\r
diff --git a/server/-product/production/HIRTV/jobs/steps/TestForkCancelableStep.java b/server/-product/production/HIRTV/jobs/steps/TestForkCancelableStep.java
new file mode 100644 (file)
index 0000000..8083d94
--- /dev/null
@@ -0,0 +1,41 @@
+package user.jobengine.server.steps;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.IJob;\r
+import user.commons.JobStatus;\r
+import user.commons.ListUtils;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class TestForkCancelableStep extends JobStep {\r
+       private static final String CHILD_TEMPLATE = "cancelable.xml";\r
+       private static final Logger logger = LogManager.getLogger();\r
+\r
+       @StepEntry\r
+       public Object[] execute(int count) throws Exception {\r
+               getJobRuntime().forkPrepare();\r
+               for (int i = 0; i < count; i++) {\r
+                       if (getJobRuntime().isWaitingCancel())\r
+                               break;\r
+                       IJobRuntime runtime = getEngine().submit(getJobRuntime(), e -> {\r
+                               IJobRuntime r = (IJobRuntime) e.getSource();\r
+\r
+                               if (r.isDisableRetry())\r
+                                       return;\r
+\r
+                               if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED)) {\r
+                                       long id = ((IJob) e.getSource()).getId();\r
+                                       logger.info("Cleanup occured because status is {} {}", e.getStatus(), id);\r
+                               }\r
+\r
+                       }, CHILD_TEMPLATE, "JOB " + i, 0, IJobEngine.DEFAULT_OWNER, ListUtils.asMap("param", i));\r
+\r
+                       runtime.setRelated("TEST" + runtime.getId());\r
+               }\r
+\r
+               getJobRuntime().forkWaitComplete();\r
+               return null;\r
+       }\r
+}\r
index 4f3b9f86c4a76ea743e6c112594a200d414d1e9b..89b393f217355552438549f1c6ab04f13b47f884 100644 (file)
@@ -1,6 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
-<jobtemplate multiInstance="false" useSessionLog="true">\r
+<jobtemplate multiInstance="true" useSessionLog="true">\r
+       <declarations>\r
+               <parameters>\r
+                       <parameter name="param" type="java.lang.Integer" />\r
+               </parameters>\r
+       </declarations>\r
        <commands>\r
-               <calljobstep id="step1" type="user.jobengine.server.steps.CancelableStep" weight="1" />\r
+               <calljobstep id="step1" type="CancelableStep.java" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="param" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
        </commands>\r
 </jobtemplate>
\ No newline at end of file
diff --git a/server/-product/production/HIRTV/jobs/templates/test-fork-cancelable.xml b/server/-product/production/HIRTV/jobs/templates/test-fork-cancelable.xml
new file mode 100644 (file)
index 0000000..be028de
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<jobtemplate multiInstance="true" useSessionLog="false">\r
+       <declarations>\r
+               <parameters>\r
+                       <parameter name="count" type="java.lang.Integer" />\r
+               </parameters>\r
+       </declarations>\r
+       <commands>\r
+               <calljobstep type="TestForkCancelableStep.java" weight="1" >\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="count" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
+       </commands>\r
+</jobtemplate>
\ No newline at end of file
index 164e552c073b956427b1340dfa36df10fa55a1c2..b830e155e7c31bc86bad79eaef8443f8f0785072 100644 (file)
@@ -7,13 +7,12 @@ public class CancelableStep extends JobStep {
        private static final Logger logger = LogManager.getLogger();\r
 \r
        @StepEntry\r
-       public Object[] execute() throws Exception {\r
-               logger.info(getMarker(), "Executing");\r
+       public Object[] execute(int param) throws Exception {\r
+               logger.info(getMarker(), "Executing with param {}", param);\r
                for (int i = 0; i < 10; i++) {\r
-                       logger.info(getMarker(), "Executing {}", i);\r
                        if (getJobRuntime().isWaitingCancel())\r
                                break;\r
-                       Thread.sleep(1000);\r
+                       Thread.sleep(10);\r
                        int progress = (i + 1) * 100 / 10;\r
                        setProgress(progress);\r
                }\r
index 358e8827bdc41e037f138f7ef37c00c0785caba0..8083d94f28e58ddee48dc38c65346d8575659956 100644 (file)
@@ -12,29 +12,30 @@ import user.jobengine.server.IJobRuntime;
 public class TestForkCancelableStep extends JobStep {\r
        private static final String CHILD_TEMPLATE = "cancelable.xml";\r
        private static final Logger logger = LogManager.getLogger();\r
-       int count = 5;\r
 \r
        @StepEntry\r
-       public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
-               jobRuntime.forkPrepare();\r
+       public Object[] execute(int count) throws Exception {\r
+               getJobRuntime().forkPrepare();\r
                for (int i = 0; i < count; i++) {\r
                        if (getJobRuntime().isWaitingCancel())\r
                                break;\r
-                       //jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, ListUtils.asMap("itemID", i));\r
-                       //                              IJobRuntime runtime = jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, "JOB " + i, ListUtils.asMap("param", i));\r
                        IJobRuntime runtime = getEngine().submit(getJobRuntime(), e -> {\r
                                IJobRuntime r = (IJobRuntime) e.getSource();\r
+\r
                                if (r.isDisableRetry())\r
                                        return;\r
-                               if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED))\r
-                                       logger.info("Cleanup occured because status is {} {}", e.getStatus(), ((IJob) e.getSource()).getId());\r
+\r
+                               if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED)) {\r
+                                       long id = ((IJob) e.getSource()).getId();\r
+                                       logger.info("Cleanup occured because status is {} {}", e.getStatus(), id);\r
+                               }\r
+\r
                        }, CHILD_TEMPLATE, "JOB " + i, 0, IJobEngine.DEFAULT_OWNER, ListUtils.asMap("param", i));\r
 \r
                        runtime.setRelated("TEST" + runtime.getId());\r
                }\r
 \r
-               jobRuntime.forkWaitComplete();\r
-               logger.info("Done");\r
+               getJobRuntime().forkWaitComplete();\r
                return null;\r
        }\r
 }\r
index b3fe09767bc8380ab3e195ab7d59ebab3cab9a84..7f71708819958c1617308bd3115256781516ed97 100644 (file)
@@ -58,6 +58,7 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
        private final Map<String, BasicDBObject> schedules = new LinkedHashMap<String, BasicDBObject>();\r
        private URLClassLoader stepsClassLoader;\r
        private boolean resetStepClassLoader;\r
+       private GroovyClassLoader groovyClassLoader;\r
 \r
        public synchronized void bindSystemConfiguration(Object service) {\r
                if (service instanceof IConfiguration) {\r
@@ -89,6 +90,28 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
                return gcl;\r
        }\r
 \r
+       private GroovyClassLoader createGroovyClassLoader(URLClassLoader stepsClassLoader) throws FileNotFoundException {\r
+               String stepsDir = systemConfig.getConfig(DIR_STEPS);\r
+\r
+               Set<File> sharedFiles = getJavaFileList(Paths.get(stepsDir, "shared"), null);\r
+               Set<File> libFiles = getJavaFileList(Paths.get(stepsDir), null);\r
+               libFiles.addAll(sharedFiles);\r
+\r
+               GroovyClassLoader gcl = new GroovyClassLoader(stepsClassLoader) {\r
+\r
+                       @Override\r
+                       protected CompilationUnit createCompilationUnit(CompilerConfiguration config, CodeSource source) {\r
+                               CompilationUnit result = new CompilationUnit(config, source, this);\r
+                               libFiles.forEach(f -> result.addSource(f));\r
+                               //loadStepSources(result, Paths.get(stepsDir, "shared"));\r
+                               //loadStepSources(result, Paths.get(stepsDir));\r
+                               return result;\r
+                       }\r
+\r
+               };\r
+               return gcl;\r
+       }\r
+\r
        @SuppressWarnings("unchecked")\r
        @Override\r
        public IJobStep createJobStep(String stepUnitName) throws Exception {\r
@@ -96,23 +119,40 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
 \r
                boolean isGroovyClass = stepUnitName.toLowerCase().endsWith(".java")\r
                                || stepUnitName.toLowerCase().endsWith(".groovy");\r
-               logger.info("Looking for {} step classloader requirement", stepUnitName);\r
+               logger.info("Looking for {} step ClassLoader requirement", stepUnitName);\r
 \r
-               if (stepsClassLoader == null)\r
-                       stepsClassLoader = createParentClassLoader();\r
-               else {\r
-                       if (resetStepClassLoader) {\r
+               if (resetStepClassLoader) {\r
+                       logger.info("Processing ClassLoader reset");\r
+                       if (groovyClassLoader != null) {\r
+                               groovyClassLoader.close();\r
+                               groovyClassLoader = null;\r
+                       }\r
+\r
+                       if (stepsClassLoader != null) {\r
                                stepsClassLoader.close();\r
-                               stepsClassLoader = createParentClassLoader();\r
+                               stepsClassLoader = null;\r
                        }\r
+\r
+                       resetStepClassLoader = false;\r
+               }\r
+\r
+               if (stepsClassLoader == null) {\r
+                       logger.info("Creating parent ClassLoader");\r
+                       stepsClassLoader = createParentClassLoader();\r
+               }\r
+\r
+               if (groovyClassLoader == null) {\r
+                       logger.info("Creating Groovy ClassLoader");\r
+                       groovyClassLoader = createGroovyClassLoader(stepsClassLoader);\r
                }\r
 \r
                Class<IJobStep> stepClass = null;\r
 \r
                if (isGroovyClass) {\r
-                       logger.info("Creating GroovyClassLoader");\r
-                       GroovyClassLoader gcl = createGroovyClassLoader(stepsClassLoader, stepUnitName);\r
-                       stepClass = (Class<IJobStep>) loadClassFromSourceCode(gcl, stepUnitName);\r
+                       //kozos classloader hasznalata\r
+                       //GroovyClassLoader gcl = createGroovyClassLoader(stepsClassLoader, stepUnitName);\r
+\r
+                       stepClass = (Class<IJobStep>) loadClassFromSourceCode(groovyClassLoader, stepUnitName);\r
                } else\r
                        stepClass = (Class<IJobStep>) stepsClassLoader.loadClass(stepUnitName);\r
 \r
@@ -238,7 +278,7 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
 \r
                result = gcl.parseClass(path.toFile());\r
                if (result != null)\r
-                       logger.info("Successfully loaded {}", className);\r
+                       logger.info("Class for {} successfully loaded", className);\r
                return result;\r
        }\r
 \r
@@ -316,7 +356,7 @@ public class JobEngineConfiguration implements IJobEngineConfiguration {
                                        && file.getFileName().toString().endsWith(".java");\r
                        try (Stream<Path> stream = Files.list(path)) {\r
                                stream.filter(filter).forEach(p -> {\r
-                                       if (!excludeFileName.equals(p.getFileName().toString()))\r
+                                       if (excludeFileName != null && !excludeFileName.equals(p.getFileName().toString()))\r
                                                result.add(p.toFile());\r
 \r
                                });\r
index 4a6e602a89b8a46362509c0feb85b4d877cc46be..764472f21c650891e04b5db690bfca11e21d9df6 100644 (file)
@@ -1,6 +1,5 @@
 package user.jobengine.server;
 
-import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -12,7 +11,6 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import groovy.lang.GroovyClassLoader;
 import user.commons.JobStatus;
 import user.commons.cluster.ClusteredJob;
 import user.jobengine.server.messages.JobStepCompletedMessage;
@@ -145,21 +143,18 @@ public class JobStepExecutor implements IJobStepExecutor {
                                step = createStep();
                                outputs = step.run(jobEngine, jobRuntime, inputs);
                        } finally {
+
+                               /*
+                               //kozos loader hasznalata!
                                if (step != null) {
                                        ClassLoader cl = step.getClass().getClassLoader();
                                        if (cl instanceof GroovyClassLoader) {
-
+                               
                                                GroovyClassLoader stepClassLoader = (GroovyClassLoader) cl;
                                                stepClassLoader.close();
-
-                                               //                                              URLClassLoader stepParentClassLoader = (URLClassLoader) cl.getParent();
-                                               //                                              stepParentClassLoader.close();
-                                       } else if (cl instanceof URLClassLoader) {
-                                               //                                              URLClassLoader stepClassLoader = (URLClassLoader) cl;
-                                               //                                              stepClassLoader.close();
-
                                        }
                                }
+                               */
                        }
 
                        //TODO itt lekezelni a remote notification-t
@@ -288,7 +283,8 @@ public class JobStepExecutor implements IJobStepExecutor {
                boolean result = false;
                if (getMaxConcurrent() < workers.size()) {
                        workers.remove(worker);
-                       logger.info("Worker {} is retired, max {} current {}", getStepUnitName(), getMaxConcurrent(), workers.size());
+                       logger.info("Worker {} is retired, max {} current {}", getStepUnitName(), getMaxConcurrent(),
+                                       workers.size());
                        result = true;
                }
 
index 988ec810f489b800c9b4097b40a07c5222a75985..c855d6370b2adbc5db413581fadfa41badda681b 100644 (file)
@@ -3,6 +3,9 @@
        sizable="true" position="left,top" viewModel="@id('vm') @init('user.jobengine.zk.model.MetadataDetailsModel')" forward="onCancel=closeButton.onClick">\r
        \r
        <script>\r
+       \r
+               //AIzaSyDlKynTrgF_WcFy3b2R9116-WkHg8Y0O_k\r
+               //https://www.google.com/intl/en/chrome/demos/speech.html\r
                if ('webkitSpeechRecognition' in window) {\r
                        console.log('speech recognition API supported')\r
                } else {\r
index d550de0ee0f1fd754347c3d380699cf6d50e06cf..e04bb11d1dc3018c3405f4c2c76d1890e673e5bc 100644 (file)
@@ -1,4 +1,5 @@
-version=2.7.7\r
+version=2.7.8\r
+#!!!2.7.8 Classloader mechanizmus atalakitasa, metadata editor history\r
 #!!!2.7.7 Folyamat inditas dblclik tiltas\r
 #2.7.6 TSM Metadata provider, javitott GroovyClassLoader\r
 #2.7.5 ArchiveItem disableProxy, MediaFile disableProxy\r