summaryrefslogtreecommitdiffstats
path: root/gearman
diff options
context:
space:
mode:
authorBjörn Geiger2011-09-13 10:34:02 +0200
committerBjörn Geiger2011-09-13 10:34:02 +0200
commit40d7c666d30433fc92f7d247a89257daaac1d9df (patch)
tree0279ac2c51db076574335d0eb8c0864d26bed8f9 /gearman
parentMerge branch 'master' of git.openslx.org:lsfks/projekte/poolctrl (diff)
downloadpoolctrl-40d7c666d30433fc92f7d247a89257daaac1d9df.tar.gz
poolctrl-40d7c666d30433fc92f7d247a89257daaac1d9df.tar.xz
poolctrl-40d7c666d30433fc92f7d247a89257daaac1d9df.zip
ClientJob nun auch in Shutdown
Diffstat (limited to 'gearman')
-rwxr-xr-xgearman/controllerWorker/ControllerWorker/ClientJob.java3
-rwxr-xr-xgearman/controllerWorker/ControllerWorker/Shutdown.java88
2 files changed, 54 insertions, 37 deletions
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<Client> clients;
private final int updateRate;
private long waitTime;
- //private Vector<String> psWhitelist;
+ // private Vector<String> psWhitelist;
private Vector<String> psBlacklist;
private final GearmanJobServerConnection gearmanConnection;
private GearmanClient gearmanClient;
- private HashMap<Integer, GearmanJob> pingJobs;
- private HashMap<Integer, GearmanJob> whoJobs;
- private HashMap<Integer, GearmanJob> doShutdownJobs;
- private HashMap<Integer, GearmanJob> pingShutdownJobs;
- private HashMap<Integer, GearmanJob> psJobs;
+ private Vector<ClientJob> jobs;
private HashMap<Integer, Long> 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<Integer, GearmanJob>();
- whoJobs = new HashMap<Integer, GearmanJob>();
- doShutdownJobs = new HashMap<Integer, GearmanJob>();
- pingShutdownJobs = new HashMap<Integer, GearmanJob>();
- psJobs = new HashMap<Integer, GearmanJob>();
+ jobs = new Vector<ClientJob>();
pingShutdownTime = new HashMap<Integer, Long>();
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;
}