Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
redeploy
  • Loading branch information
purplefox committed Jul 27, 2012
1 parent 8ee8490 commit 353668f
Showing 1 changed file with 118 additions and 120 deletions.
Expand Up @@ -195,109 +195,6 @@ public void deployMod(final String modName, final JsonObject config,
doDeployMod(false, null, modName, config, instances, currentModDir, doneHandler); doDeployMod(false, null, modName, config, instances, currentModDir, doneHandler);
} }




/* (non-Javadoc)
* @see org.vertx.java.deploy.impl.VTest#installMod(java.lang.String, org.vertx.java.core.Handler)
*/
public void installMod(final String moduleName, final Handler<Boolean> doneHandler) {
HttpClient client = vertx.createHttpClient();
client.setHost(defaultRepo);
client.exceptionHandler(new Handler<Exception>() {
public void handle(Exception e) {
log.error("Unable to connect to repository");
doneHandler.handle(false);
}
});
String uri = REPO_URI_ROOT + moduleName + "/mod.zip";
log.info("Attempting to install module " + moduleName + " from http://" + defaultRepo + uri);
HttpClientRequest req = client.get(uri, new Handler<HttpClientResponse>() {
public void handle(HttpClientResponse resp) {
if (resp.statusCode == 200) {
log.info("Downloading module...");
resp.bodyHandler(new Handler<Buffer>() {
public void handle(Buffer buffer) {
unzipModule(moduleName, buffer, doneHandler);
}
});
} else if (resp.statusCode == 404) {
log.error("Can't find module " + moduleName + " in repository");
doneHandler.handle(false);
} else {
log.error("Failed to download module: " + resp.statusCode);
doneHandler.handle(false);
}
}
});
req.putHeader("host", "vert-x.github.com");
req.putHeader("user-agent", "Vert.x Module Installer");
req.end();
}

public void reloadModules(final Set<Deployment> deps) {
for (final Deployment deployment: deps) {
if (deployments.containsKey(deployment.name)) {
doUndeploy(deployment.name, new SimpleHandler() {
public void handle() {
redeploy(deployment, deps);
}
});
} else {
// This will be the case if the previous deployment failed, e.g.
// a code error in a user verticle
redeploy(deployment, deps);
}
}
}

public synchronized void undeploy(String name, final Handler<Void> doneHandler) {
final Deployment dep = deployments.get(name);
if (dep == null) {
throw new IllegalArgumentException("There is no deployment with name " + name);
}
Handler<Void> wrappedHandler = new SimpleHandler() {
public void handle() {
if (dep.modName != null && dep.autoRedeploy) {
redeployer.moduleUndeployed(dep);
}
doneHandler.handle(null);
}
};
doUndeploy(name, wrappedHandler);
}

/* (non-Javadoc)
* @see org.vertx.java.deploy.impl.VTest#uninstallMod(java.lang.String)
*/
public void uninstallMod(String moduleName) {
log.info("Removing module " + moduleName + " from directory " + modRoot);
File modDir = new File(modRoot, moduleName);
if (!modDir.exists()) {
log.error("Cannot find module to uninstall");
} else {
try {
vertx.fileSystem().deleteSync(modDir.getAbsolutePath(), true);
log.info("Module " + moduleName + " successfully uninstalled");
} catch (Exception e) {
log.error("Failed to delete directory: " + e.getMessage());
}
}
}

private void doUndeploy(String name, final Handler<Void> doneHandler) {
CountingCompletionHandler count = new CountingCompletionHandler(vertx.getOrAssignContext());
doUndeploy(name, count);
if (doneHandler != null) {
count.setHandler(doneHandler);
}
}


private void redeploy(final Deployment deployment, final Set<Deployment> deployments) {
doDeployMod(true, deployment.name, deployment.modName, deployment.config, deployment.instances,
null, null);
}

private void doDeployMod(final boolean redeploy, final String depName, final String modName, final JsonObject config, private void doDeployMod(final boolean redeploy, final String depName, final String modName, final JsonObject config,
final int instances, final File currentModDir, final Handler<String> doneHandler) { final int instances, final File currentModDir, final Handler<String> doneHandler) {
final Context ctx = vertx.getOrAssignContext(); final Context ctx = vertx.getOrAssignContext();
Expand Down Expand Up @@ -493,6 +390,62 @@ public void handle(Boolean b) {
return urls; return urls;
} }



/* (non-Javadoc)
* @see org.vertx.java.deploy.impl.VTest#installMod(java.lang.String, org.vertx.java.core.Handler)
*/
public void installMod(final String moduleName, final Handler<Boolean> doneHandler) {
HttpClient client = vertx.createHttpClient();
client.setHost(defaultRepo);
client.exceptionHandler(new Handler<Exception>() {
public void handle(Exception e) {
log.error("Unable to connect to repository");
doneHandler.handle(false);
}
});
String uri = REPO_URI_ROOT + moduleName + "/mod.zip";
log.info("Attempting to install module " + moduleName + " from http://" + defaultRepo + uri);
HttpClientRequest req = client.get(uri, new Handler<HttpClientResponse>() {
public void handle(HttpClientResponse resp) {
if (resp.statusCode == 200) {
log.info("Downloading module...");
resp.bodyHandler(new Handler<Buffer>() {
public void handle(Buffer buffer) {
unzipModule(moduleName, buffer, doneHandler);
}
});
} else if (resp.statusCode == 404) {
log.error("Can't find module " + moduleName + " in repository");
doneHandler.handle(false);
} else {
log.error("Failed to download module: " + resp.statusCode);
doneHandler.handle(false);
}
}
});
req.putHeader("host", "vert-x.github.com");
req.putHeader("user-agent", "Vert.x Module Installer");
req.end();
}

/* (non-Javadoc)
* @see org.vertx.java.deploy.impl.VTest#uninstallMod(java.lang.String)
*/
public void uninstallMod(String moduleName) {
log.info("Removing module " + moduleName + " from directory " + modRoot);
File modDir = new File(modRoot, moduleName);
if (!modDir.exists()) {
log.error("Cannot find module to uninstall");
} else {
try {
vertx.fileSystem().deleteSync(modDir.getAbsolutePath(), true);
log.info("Module " + moduleName + " successfully uninstalled");
} catch (Exception e) {
log.error("Failed to delete directory: " + e.getMessage());
}
}
}

private void unzipModule(final String modName, final Buffer data, final Handler<Boolean> doneHandler) { private void unzipModule(final String modName, final Buffer data, final Handler<Boolean> doneHandler) {


AsyncResultHandler<Boolean> arHandler = new AsyncResultHandler<Boolean>() { AsyncResultHandler<Boolean> arHandler = new AsyncResultHandler<Boolean>() {
Expand Down Expand Up @@ -577,19 +530,6 @@ private void setPathAdjustment(File modDir) {
Context.getContext().setPathAdjustment(relative); Context.getContext().setPathAdjustment(relative);
} }


private void executeHandlerOnContext(final Context context,
final Handler<String> doneHandler,
final String res)
{
if (doneHandler != null) {
context.execute(new Runnable() {
public void run() {
doneHandler.handle(res);
}
});
}
}

private synchronized void doDeploy(String depName, private synchronized void doDeploy(String depName,
boolean autoRedeploy, boolean autoRedeploy,
boolean worker, final String main, boolean worker, final String main,
Expand Down Expand Up @@ -709,10 +649,6 @@ public void handle() {
} }
} }


private void addDeployment(String deploymentName, Deployment deployment) {
deployments.put(deploymentName, deployment);
}

// Must be synchronized since called directly from different thread // Must be synchronized since called directly from different thread
private synchronized void addVerticle(Deployment deployment, Verticle verticle) { private synchronized void addVerticle(Deployment deployment, Verticle verticle) {
String loggerName = deployment.name + "-" + deployment.verticles.size(); String loggerName = deployment.name + "-" + deployment.verticles.size();
Expand All @@ -734,6 +670,13 @@ private VerticleHolder getVerticleHolder() {
} }
} }


private void doUndeploy(String name, final Handler<Void> doneHandler) {
CountingCompletionHandler count = new CountingCompletionHandler(vertx.getOrAssignContext());
doUndeploy(name, count);
if (doneHandler != null) {
count.setHandler(doneHandler);
}
}


private void doUndeploy(String name, final CountingCompletionHandler count) { private void doUndeploy(String name, final CountingCompletionHandler count) {


Expand Down Expand Up @@ -769,4 +712,59 @@ public void run() {
} }
} }
} }

public void reloadModules(final Set<Deployment> deps) {
for (final Deployment deployment: deps) {
if (deployments.containsKey(deployment.name)) {
doUndeploy(deployment.name, new SimpleHandler() {
public void handle() {
redeploy(deployment, deps);
}
});
} else {
// This will be the case if the previous deployment failed, e.g.
// a code error in a user verticle
redeploy(deployment, deps);
}
}
}

public synchronized void undeploy(String name, final Handler<Void> doneHandler) {
final Deployment dep = deployments.get(name);
if (dep == null) {
throw new IllegalArgumentException("There is no deployment with name " + name);
}
Handler<Void> wrappedHandler = new SimpleHandler() {
public void handle() {
if (dep.modName != null && dep.autoRedeploy) {
redeployer.moduleUndeployed(dep);
}
doneHandler.handle(null);
}
};
doUndeploy(name, wrappedHandler);
}

private void redeploy(final Deployment deployment, final Set<Deployment> deployments) {
doDeployMod(true, deployment.name, deployment.modName, deployment.config, deployment.instances,
null, null);
}

private void executeHandlerOnContext(final Context context,
final Handler<String> doneHandler,
final String res)
{
if (doneHandler != null) {
context.execute(new Runnable() {
public void run() {
doneHandler.handle(res);
}
});
}
}

private void addDeployment(String deploymentName, Deployment deployment) {
deployments.put(deploymentName, deployment);
}

} }

0 comments on commit 353668f

Please sign in to comment.