git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Fri, 24 Apr 2020 15:17:10 +0000 (15:17 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Fri, 24 Apr 2020 15:17:10 +0000 (15:17 +0000)
server/user.jobengine.executors/config/config.xml
server/user.jobengine.executors/src/user/jobengine/server/steps/CancelableStep.java
server/user.jobengine.osgi.server/pages/joblist.zul
server/user.jobengine.osgi.server/src/user/jobengine/server/IJobRuntime.java
server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java
server/user.jobengine.osgi.server/src/user/jobengine/server/JobRuntime.java
server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/SchedulerService.java
server/user.jobengine.osgi.server/src/user/jobengine/server/steps/JobStep.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/JobListModel.java
server/user.jobengine.osgi.server/test/user/jobengine/server/JobRuntimeTest.java

index a5ebba02b55f9b491011251c95c313026d4cde41..892d9f3c58b4446fd9daf1ce5db4e2fb43781618 100644 (file)
@@ -3,6 +3,7 @@
        <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="10"/>\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
index 3b5f9ec1c7faa3f3c53fed2a0efd84d68acbb5a4..334efe75c20ad8e7a7337106e4661548a47b173b 100644 (file)
@@ -1,20 +1,18 @@
 package user.jobengine.server.steps;\r
 \r
 import user.jobengine.server.IJobRuntime;\r
-import user.jobengine.server.steps.JobStep;\r
-import user.jobengine.server.steps.StepEntry;\r
 \r
 public class CancelableStep extends JobStep {\r
        int count = 10;\r
-       \r
+\r
        @StepEntry\r
        public Object[] execute(IJobRuntime jobRuntime) {\r
                try {\r
                        for (int i = 0; i < count; i++) {\r
-                               if (!canContinue())\r
+                               if (jobRuntime.isWaitingCancel() || jobRuntime.isWaitingSuspend())\r
                                        break;\r
-                               Thread.sleep(100);\r
-                               jobRuntime.incrementProgress((i + 1)*count);\r
+                               Thread.sleep(1000);\r
+                               jobRuntime.incrementProgress((i + 1) * count);\r
                        }\r
                } catch (Exception e) {\r
                        e.printStackTrace();\r
index f1b1b7efe3cbc886e5a828cbe47d9e17a5e68c07..1640677cf861fd0b043ceec79500d3be40b8c225 100644 (file)
        <custom-attributes org.zkoss.zul.listbox.initRodSize="50" />\r
        <custom-attributes org.zkoss.zul.listbox.preloadSize="50" />\r
 \r
-       <div id="scdiv" width="100%" height="100%" apply="org.zkoss.bind.BindComposer" viewModel="@id('jlm') @init('user.jobengine.zk.model.JobListModel')">\r
+       <div id="scdiv" width="100%" height="100%" viewModel="@id('jlm') @init('user.jobengine.zk.model.JobListModel')">\r
                <timer id="timer" delay="500" repeats="true" onTimer="@command('uiTick')" />\r
 \r
                <toolbar>\r
                        <spinner constraint="no empty,min 1 max 50" value="@bind(jlm.newPriority)" width="60px" disabled="@load(jlm.updatePriorityDisabled)" />\r
                        <toolbarbutton label="Repriorizálás" iconSclass="z-icon-asterisk" onClick="@command('changeJobsPriority')" disabled="@load(jlm.updatePriorityDisabled)" autodisable="self"/>\r
+                       <toolbarbutton label="Feladat leállítása" iconSclass="z-icon-times-circle" onClick="@command('cancelJobs')" autodisable="self"/>\r
                        <separator orient="vertical"/>\r
                        <toolbarbutton label="Futtatás" iconSclass="z-icon-play" onClick="@command('executeJob')" autodisable="self"/>\r
                        <toolbarbutton label="Összes letiltása" iconSclass="z-icon-ban" mode="toggle" checked="@bind(jlm.allExecutionDisabled)" autodisable="self"/>\r
index 2f03f88cde56028d757662f72dd437c9bd1179d5..5f2f6c930637010216eaee4cfe1999f99d601a42 100644 (file)
@@ -66,7 +66,11 @@ public interface IJobRuntime extends IJob {
 \r
        boolean isService();\r
 \r
-       boolean isWaiting();\r
+       boolean isWaitingCancel();\r
+\r
+       boolean isWaitingExecutor();\r
+\r
+       boolean isWaitingSuspend();\r
 \r
        Object popFromStack();\r
 \r
index de6b25d9bea0c8ea6f014e5fb1a1cc9921cbf9bb..f10f73c6efd86854c874d6d628986e9fb3167fa6 100644 (file)
@@ -410,8 +410,9 @@ public class JobEngine implements IJobEngine {
 
        @Override
        public IJobRuntime getJobById(long jobId) {
-               if (!submittedJobs.containsKey(jobId))
-                       throw new NullPointerException("job");
+               if (!submittedJobs.containsKey(jobId)) {
+                       logger.warn("Job not exists anymore {}. Possible canceled already.", jobId);
+               }
                return submittedJobs.get(jobId);
        }
 
@@ -615,6 +616,9 @@ public class JobEngine implements IJobEngine {
        public void processJobStepCompletedMessage(IJobMessage message) {
                // TODO cancel nem megy, valszeg itt van gubasz
                IJobRuntime jobRuntime = getJobById(message.getJobId());
+               if (jobRuntime == null) {
+                       //a cancel hamarabb megjott?
+               }
                JobStepCompletedMessage m = (JobStepCompletedMessage) message;
                putOutputsToStack(jobRuntime, m.getOutputs());
                statusMachine.processAction(JobAction.DONE, jobRuntime);
index 0643b8554ec04da3c536a0918bb6e0d01159045c..ad4ff47d468ec3a62701dc4c759dc4a777961954 100644 (file)
@@ -436,8 +436,18 @@ public class JobRuntime extends Job implements IJobRuntime {
        }
 
        @Override
-       public boolean isWaiting() {
-               return ((getStatus().getValue() & 0x0100) == 0x0100);
+       public boolean isWaitingExecutor() {
+               return getStatus() == JobStatus.WAIT_EXECUTOR;
+       }
+
+       @Override
+       public boolean isWaitingCancel() {
+               return getStatus() == JobStatus.WAIT_CANCEL;
+       }
+
+       @Override
+       public boolean isWaitingSuspend() {
+               return getStatus() == JobStatus.WAIT_SUSPEND;
        }
 
        @Override
index 5caa0c5be3c6cb650a8932300bd0b313a0913311..180db6af8c617c55ed143ccb5218b0eaef542899 100644 (file)
@@ -67,7 +67,11 @@ public class SchedulerService {
                String name = jobJSON.getString("name");\r
                String template = jobJSON.getString("template");\r
                sj.setJobId(String.format("%s.%s", template, name));\r
-               sj.setJobName(name);\r
+               if (StringUtils.isEmpty(name))\r
+                       sj.setJobName(template);\r
+               else\r
+                       sj.setJobName(name);\r
+\r
                sj.setTemplateName(template);\r
                sj.setCronExpressions(NoSQLUtils.asString(jobJSON, "cronexpression"));\r
                sj.setExecuteOnStartup(NoSQLUtils.asBool(jobJSON, "executeimmediate"));\r
index bfc816309d5f6b79130b4bca605f1b648f14443c..e15a63bfb1fb55a3e892016c5cc9a68aa24e0752 100644 (file)
@@ -38,7 +38,7 @@ public class JobStep implements IJobStep {
 \r
        @Override\r
        public boolean canContinue() {\r
-               return !jobRuntime.isWaiting();\r
+               return !jobRuntime.isWaitingExecutor();\r
        }\r
 \r
        protected <T> T check(T value, String name) {\r
index e13ca2f6448c461ebef7e0ded4d7751276165130..39e0b629bf75a9d5211b4aa1f6567c00aaa849ec 100644 (file)
@@ -28,6 +28,7 @@ import user.jobengine.server.IJobEngine;
 import user.jobengine.server.IJobRuntime;\r
 import user.jobengine.server.JobChangedEvent;\r
 import user.jobengine.server.JobEngine;\r
+import user.jobengine.server.messages.CancelRequest;\r
 import user.jobengine.zk.util.SessionUtil;\r
 \r
 public class JobListModel extends AsyncBaseModel implements IJobChangedListener {\r
@@ -41,6 +42,15 @@ public class JobListModel extends AsyncBaseModel implements IJobChangedListener
        private boolean scheduledExecutionDisabled;\r
        private Collection<BasicDBObject> selectedJobs;\r
 \r
+       @Command\r
+       public void cancelJobs() {\r
+               if (this.jobList.getSelection() != null) {\r
+                       for (IJobRuntime job : this.jobList.getSelection()) {\r
+                               jobEngine.sendMessage(new CancelRequest(job.getId()));\r
+                       }\r
+               }\r
+       }\r
+\r
        @Command\r
        public void changeJobsPriority() {\r
                if (this.jobList.getSelection() != null) {\r
index 47cf236a8a7f9c8f671157297ec21da63a8319f7..b0de9df770ab758c0dfba51768c20e9f85dbcb69 100644 (file)
@@ -213,31 +213,31 @@ public class JobRuntimeTest {
                // Fixture
                sut.setStatus(JobStatus.RUNABLE);
                // Exercise, Verify
-               assertFalse(sut.isWaiting());
+               assertFalse(sut.isWaitingExecutor());
                // Fixture
                sut.setStatus(JobStatus.SUSPENDED);
                // Exercise, Verify
-               assertFalse(sut.isWaiting());
+               assertFalse(sut.isWaitingExecutor());
                // Fixture
                sut.setStatus(JobStatus.EXECUTING);
                // Exercise, Verify
-               assertFalse(sut.isWaiting());
+               assertFalse(sut.isWaitingExecutor());
                // Fixture
                sut.setStatus(JobStatus.FINISHED);
                // Exercise, Verify
-               assertFalse(sut.isWaiting());
+               assertFalse(sut.isWaitingExecutor());
                // Fixture
                sut.setStatus(JobStatus.WAIT_EXECUTOR);
                // Exercise, Verify
-               assertTrue(sut.isWaiting());
+               assertTrue(sut.isWaitingExecutor());
                // Fixture
                sut.setStatus(JobStatus.WAIT_SUSPEND);
                // Exercise, Verify
-               assertTrue(sut.isWaiting());
+               assertTrue(sut.isWaitingExecutor());
                // Fixture
                sut.setStatus(JobStatus.WAIT_USERMESSAGE);
                // Exercise, Verify
-               assertTrue(sut.isWaiting());
+               assertTrue(sut.isWaitingExecutor());
        }
 
        @Test(expected = IllegalStateException.class)