From 40d7c666d30433fc92f7d247a89257daaac1d9df Mon Sep 17 00:00:00 2001 From: Björn Geiger Date: Tue, 13 Sep 2011 10:34:02 +0200 Subject: ClientJob nun auch in Shutdown --- .../ControllerWorker/ClientJob.java | 3 + .../ControllerWorker/Shutdown.java | 88 +++++++++++++--------- 2 files changed, 54 insertions(+), 37 deletions(-) (limited to 'gearman') diff --git a/gearman/controllerWorker/ControllerWorker/ClientJob.java b/gearman/controllerWorker/ControllerWorker/ClientJob.java index 021ab91..f9e4bbd 100755 --- a/gearman/controllerWorker/ControllerWorker/ClientJob.java +++ b/gearman/controllerWorker/ControllerWorker/ClientJob.java @@ -1,5 +1,7 @@ package ControllerWorker; +import java.util.HashMap; + import org.gearman.client.GearmanJob; public class ClientJob { @@ -9,6 +11,7 @@ public class ClientJob { public static int WHOJOB = 3; public static int PSJOB = 4; public static int RESTARTJOB = 5; + public static int SHUTDOWNJOB = 6; private int clientID; private int JobType; diff --git a/gearman/controllerWorker/ControllerWorker/Shutdown.java b/gearman/controllerWorker/ControllerWorker/Shutdown.java index 7b6816d..69fe5b0 100755 --- a/gearman/controllerWorker/ControllerWorker/Shutdown.java +++ b/gearman/controllerWorker/ControllerWorker/Shutdown.java @@ -31,16 +31,12 @@ public class Shutdown extends Thread { private Vector clients; private final int updateRate; private long waitTime; - //private Vector psWhitelist; + // private Vector psWhitelist; private Vector psBlacklist; private final GearmanJobServerConnection gearmanConnection; private GearmanClient gearmanClient; - private HashMap pingJobs; - private HashMap whoJobs; - private HashMap doShutdownJobs; - private HashMap pingShutdownJobs; - private HashMap psJobs; + private Vector jobs; private HashMap pingShutdownTime; private Boolean finished; private Boolean error; @@ -53,17 +49,13 @@ public class Shutdown extends Thread { this.clients = clients; this.updateRate = updateRate; // updates per second this.waitTime = waitTime * 1000; - //this.psWhitelist = psWhitelist; + // this.psWhitelist = psWhitelist; this.psBlacklist = psBlacklist; gearmanConnection = new GearmanNIOJobServerConnection( gearmanServerAddress, gearmanServerPort); gearmanClient = new GearmanClientImpl(); gearmanClient.addJobServer(gearmanConnection); - pingJobs = new HashMap(); - whoJobs = new HashMap(); - doShutdownJobs = new HashMap(); - pingShutdownJobs = new HashMap(); - psJobs = new HashMap(); + jobs = new Vector(); pingShutdownTime = new HashMap(); finished = false; error = false; @@ -218,12 +210,13 @@ public class Shutdown extends Thread { .getBytes(), "ping" + client.getId()); gearmanClient.submit(job); client.setState(ClientState.CHECK_PING_PROGRESS); - pingJobs.put(client.getId(), job); + addClientJob(client.getId(), ClientJob.PINGJOB, job); logger.info("ping " + client.getIp()); } private void checkPingProgress(Client client) throws Exception, IOException { - GearmanJob pingJob = pingJobs.get(client.getId()); + ClientJob job = getClientJob(client.getId(), ClientJob.PINGJOB); + GearmanJob pingJob = job.getGearmanJob(); if (pingJob != null) { GearmanJobStatus jobStatus = gearmanClient.getJobStatus(pingJob); @@ -243,12 +236,12 @@ public class Shutdown extends Thread { client.setState(ClientState.CLIENT_IS_ALIVE); // check // Users - pingJobs.remove(client.getId()); + removeClientJob(job); } else if (alive.equals("false")) { logger.info(client.getIp() + " not alive"); // not alive, go in successState client.setState(ClientState.SHUTDOWN_SUCCESS); - pingJobs.remove(client.getId()); + removeClientJob(job); } } else { logger.error(client.getIp() @@ -257,7 +250,7 @@ public class Shutdown extends Thread { .setError("Sending the ping message has been failed."); // sending the ping message has been failed client.setState(ClientState.SHUTDOWN_ERROR); - pingJobs.remove(client.getId()); + removeClientJob(job); } } } @@ -269,12 +262,13 @@ public class Shutdown extends Thread { .getBytes(), "who" + client.getId()); gearmanClient.submit(job); client.setState(ClientState.CHECK_WHO_PROGRESS); - whoJobs.put(client.getId(), job); + addClientJob(client.getId(), ClientJob.WHOJOB, job); logger.info("who " + client.getIp()); } private void checkWhoProgress(Client client) throws Exception, IOException { - GearmanJob whoJob = whoJobs.get(client.getId()); + ClientJob job = getClientJob(client.getId(), ClientJob.WHOJOB); + GearmanJob whoJob = job.getGearmanJob(); if (whoJob != null) { GearmanJobStatus jobStatus = gearmanClient.getJobStatus(whoJob); @@ -302,14 +296,14 @@ public class Shutdown extends Thread { // ----- // didn´t work in test-pool, check ps client.setState(ClientState.USER_IS_LOGGED_IN); - whoJobs.remove(client.getId()); + removeClientJob(job); } else { logger .info(client.getIp() + " a user is logged in"); // a user is logged in client.setState(ClientState.USER_IS_LOGGED_IN); - whoJobs.remove(client.getId()); + removeClientJob(job); } } else { logger.error(client.getIp() @@ -320,7 +314,7 @@ public class Shutdown extends Thread { * cannot check if a user is logged in, go in errorState */ client.setState(ClientState.SHUTDOWN_ERROR); - whoJobs.remove(client.getId()); + removeClientJob(job); } } } @@ -333,13 +327,14 @@ public class Shutdown extends Thread { .getBytes(), "doShutdown" + client.getId()); gearmanClient.submit(job); client.setState(ClientState.CHECK_SHUTDOWN_PROGRESS); - doShutdownJobs.put(client.getId(), job); + addClientJob(client.getId(), ClientJob.SHUTDOWNJOB, job); logger.info("doShutdown " + client.getIp()); } private void checkShutdownProgress(Client client) throws Exception, IOException { - GearmanJob doShutdownJob = doShutdownJobs.get(client.getId()); + ClientJob job = getClientJob(client.getId(), ClientJob.SHUTDOWNJOB); + GearmanJob doShutdownJob = job.getGearmanJob(); if (doShutdownJob != null) { GearmanJobStatus jobStatus = gearmanClient @@ -353,7 +348,7 @@ public class Shutdown extends Thread { if (!resultObj.containsKey("err")) { logger.info(client.getIp() + " Shutdown command sent"); client.setState(ClientState.SHUTDOWN_COMMAND_SENT); - doShutdownJobs.remove(client.getId()); + removeClientJob(job); } else { logger.error(client.getIp() + " Cannot send shutdown command"); @@ -361,7 +356,7 @@ public class Shutdown extends Thread { .setError("Sending the shutdown command has been failed."); // cannot send shutdown command, go in / errorState client.setState(ClientState.SHUTDOWN_ERROR); - doShutdownJobs.remove(client.getId()); + removeClientJob(job); } } } @@ -373,13 +368,14 @@ public class Shutdown extends Thread { .getBytes(), "ping" + client.getId()); gearmanClient.submit(job); client.setState(ClientState.CHECK_PING_SHUTDOWN_PROGRESS); - pingShutdownJobs.put(client.getId(), job); + addClientJob(client.getId(), ClientJob.PINGJOB, job); logger.info("ping " + client.getIp()); } private void checkPingShutdwonProgress(Client client) throws Exception, IOException { - GearmanJob pingJobShutdown = pingShutdownJobs.get(client.getId()); + ClientJob job = getClientJob(client.getId(), ClientJob.PINGJOB); + GearmanJob pingJobShutdown = job.getGearmanJob(); if (pingJobShutdown != null) { Date currentDate = new Date(); @@ -403,7 +399,7 @@ public class Shutdown extends Thread { logger.info(client.getIp() + " is not alive anymore"); client.setState(ClientState.SHUTDOWN_SUCCESS); - pingShutdownJobs.remove(client.getId()); + removeClientJob(job); } else if (alive.equals("true")) { logger .info(client.getIp() @@ -422,7 +418,7 @@ public class Shutdown extends Thread { * failed */ client.setState(ClientState.SHUTDOWN_ERROR); - pingJobs.remove(client.getId()); + removeClientJob(job); } } } @@ -431,7 +427,7 @@ public class Shutdown extends Thread { client.setError("Client is still alive after shutdown."); // still alive, go in errorState client.setState(ClientState.SHUTDOWN_ERROR); - pingShutdownJobs.remove(client.getId()); + removeClientJob(job); } } } @@ -441,12 +437,13 @@ public class Shutdown extends Thread { .getBytes(), "ps" + client.getId()); gearmanClient.submit(job); client.setState(ClientState.CHECK_PS_PROGRESS); - psJobs.put(client.getId(), job); + addClientJob(client.getId(), ClientJob.PSJOB, job); logger.info("ps " + client.getIp()); } private void checkPsProgress(Client client) throws Exception, IOException { - GearmanJob psJob = psJobs.get(client.getId()); + ClientJob job = getClientJob(client.getId(), ClientJob.PSJOB); + GearmanJob psJob = job.getGearmanJob(); if (psJob != null) { GearmanJobStatus jobStatus = gearmanClient.getJobStatus(psJob); @@ -479,18 +476,18 @@ public class Shutdown extends Thread { * if (whitelistFound) { logger.info(client.getIp() * + " is not working"); // is not working * status.put(client.getId(), 4); - * psJobs.remove(client.getId()); + * removeClientJob(job); * * } else { */ client.setState(ClientState.USER_IS_WORKING); - psJobs.remove(client.getId()); + removeClientJob(job); // } } else { logger.info(client.getIp() + " is not working"); // is not working client.setState(ClientState.SHUTDOWN_CLIENT); - psJobs.remove(client.getId()); + removeClientJob(job); } } else { logger.error(client.getIp() @@ -501,13 +498,30 @@ public class Shutdown extends Thread { * cannot check if user is working, go in errorState */ client.setState(ClientState.SHUTDOWN_ERROR); - psJobs.remove(client.getId()); + removeClientJob(job); } } } } } + private ClientJob getClientJob(int clientID, int jobType) { + for (ClientJob job : jobs) { + if (job.getJobType() == jobType && job.getClientID() == clientID) { + return job; + } + } + return null; + } + + private void addClientJob(int clientID, int jobType, GearmanJob gearmanJob) { + jobs.add(new ClientJob(clientID, jobType, gearmanJob)); + } + + private void removeClientJob(ClientJob clientJob) { + jobs.remove(clientJob); + } + public Boolean isFinished() { return finished && !error; } -- cgit v1.2.3-55-g7522