fix for bad deploy:

- the name of downloaded release files is adopted if the httpc delivers uncompressed tar.gz files (the .gz is removed from the file name)
- the deploy method is able to handle tar-file (not tar.gz-files)

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@4679 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
orbiter 17 years ago
parent 202a3adb3e
commit 5d1fbb25e7

@ -89,18 +89,17 @@ public class ConfigUpdate_p {
} else { } else {
// there is a version that is more recent. Load it and re-start with it // there is a version that is more recent. Load it and re-start with it
sb.getLog().logInfo("AUTO-UPDATE: downloading more recent release " + updateVersion.url); sb.getLog().logInfo("AUTO-UPDATE: downloading more recent release " + updateVersion.url);
boolean downloaded = yacyVersion.downloadRelease(updateVersion); File downloaded = yacyVersion.downloadRelease(updateVersion);
prop.put("candeploy_autoUpdate_downloadedRelease", updateVersion.name); prop.put("candeploy_autoUpdate_downloadedRelease", updateVersion.name);
File releaseFile = new File(sb.getRootPath(), "DATA/RELEASE/" + updateVersion.name);
boolean devenvironment = yacyVersion.combined2prettyVersion(sb.getConfig("version","0.1")).startsWith("dev"); boolean devenvironment = yacyVersion.combined2prettyVersion(sb.getConfig("version","0.1")).startsWith("dev");
if (devenvironment) { if (devenvironment) {
sb.getLog().logInfo("AUTO-UPDATE: omiting update because this is a development environment"); sb.getLog().logInfo("AUTO-UPDATE: omiting update because this is a development environment");
prop.put("candeploy_autoUpdate", "3"); prop.put("candeploy_autoUpdate", "3");
} else if ((!downloaded) || (!releaseFile.exists()) || (releaseFile.length() == 0)) { } else if ((downloaded == null) || (!downloaded.exists()) || (downloaded.length() == 0)) {
sb.getLog().logInfo("AUTO-UPDATE: omiting update because download failed (file cannot be found or is too small)"); sb.getLog().logInfo("AUTO-UPDATE: omiting update because download failed (file cannot be found or is too small)");
prop.put("candeploy_autoUpdate", "4"); prop.put("candeploy_autoUpdate", "4");
} else { } else {
yacyVersion.deployRelease(updateVersion.name); yacyVersion.deployRelease(downloaded);
sb.terminate(5000); sb.terminate(5000);
sb.getLog().logInfo("AUTO-UPDATE: deploy and restart initiated"); sb.getLog().logInfo("AUTO-UPDATE: deploy and restart initiated");
prop.put("candeploy_autoUpdate", "1"); prop.put("candeploy_autoUpdate", "1");

@ -88,7 +88,7 @@ public class Steering {
String releaseFileName = post.get("releaseinstall", ""); String releaseFileName = post.get("releaseinstall", "");
File releaseFile = new File(sb.getRootPath(), "DATA/RELEASE/" + releaseFileName); File releaseFile = new File(sb.getRootPath(), "DATA/RELEASE/" + releaseFileName);
if ((!devenvironment) && (releaseFile.length() > 0) && (releaseFile.exists())) { if ((!devenvironment) && (releaseFile.length() > 0) && (releaseFile.exists())) {
yacyVersion.deployRelease(releaseFileName); yacyVersion.deployRelease(releaseFile);
} }
prop.put("info", "5"); prop.put("info", "5");
prop.put("info_release", releaseFileName); prop.put("info_release", releaseFileName);

@ -2012,15 +2012,14 @@ public final class plasmaSwitchboard extends serverAbstractSwitch<plasmaSwitchbo
if (updateVersion != null) { if (updateVersion != null) {
// there is a version that is more recent. Load it and re-start with it // there is a version that is more recent. Load it and re-start with it
log.logInfo("AUTO-UPDATE: downloading more recent release " + updateVersion.url); log.logInfo("AUTO-UPDATE: downloading more recent release " + updateVersion.url);
boolean downloaded = yacyVersion.downloadRelease(updateVersion); File downloaded = yacyVersion.downloadRelease(updateVersion);
File releaseFile = new File(sb.getRootPath(), "DATA/RELEASE/" + updateVersion.name);
boolean devenvironment = yacyVersion.combined2prettyVersion(sb.getConfig("version","0.1")).startsWith("dev"); boolean devenvironment = yacyVersion.combined2prettyVersion(sb.getConfig("version","0.1")).startsWith("dev");
if (devenvironment) { if (devenvironment) {
log.logInfo("AUTO-UPDATE: omiting update because this is a development environment"); log.logInfo("AUTO-UPDATE: omiting update because this is a development environment");
} else if ((!downloaded) || (!releaseFile.exists()) || (releaseFile.length() == 0)) { } else if ((downloaded == null) || (!downloaded.exists()) || (downloaded.length() == 0)) {
log.logInfo("AUTO-UPDATE: omiting update because download failed (file cannot be found or is too small)"); log.logInfo("AUTO-UPDATE: omiting update because download failed (file cannot be found or is too small)");
} else { } else {
yacyVersion.deployRelease(updateVersion.name); yacyVersion.deployRelease(downloaded);
terminate(5000); terminate(5000);
log.logInfo("AUTO-UPDATE: deploy and restart initiated"); log.logInfo("AUTO-UPDATE: deploy and restart initiated");
} }

@ -326,14 +326,21 @@ public final class yacyVersion implements Comparator<yacyVersion>, Comparable<ya
return new DevMain(devreleases, mainreleases); return new DevMain(devreleases, mainreleases);
} }
public static boolean downloadRelease(yacyVersion release) { public static File downloadRelease(yacyVersion release) {
File storagePath = plasmaSwitchboard.getSwitchboard().releasePath; File storagePath = plasmaSwitchboard.getSwitchboard().releasePath;
// load file // load file
File download = new File(storagePath, release.url.getFileName()); File download = null;
JakartaCommonsHttpClient client = new JakartaCommonsHttpClient(120000, null, null); JakartaCommonsHttpClient client = new JakartaCommonsHttpClient(120000, null, null);
JakartaCommonsHttpResponse res = null; JakartaCommonsHttpResponse res = null;
String name = release.url.getFileName();
try { try {
res = client.GET(release.url.toString()); res = client.GET(release.url.toString());
boolean unzipped = res.getResponseHeader().gzip() && (res.getResponseHeader().mime().toLowerCase().equals("application/x-tar")); // if true, then the httpc has unzipped the file
if ((unzipped) && (name.endsWith(".tar.gz"))) {
download = new File(storagePath, name.substring(0, name.length() - 3));
} else {
download = new File(storagePath, name);
}
try { try {
serverFileUtils.copyToStream(new BufferedInputStream(res.getDataAsStream()), new BufferedOutputStream(new FileOutputStream(download))); serverFileUtils.copyToStream(new BufferedInputStream(res.getDataAsStream()), new BufferedOutputStream(new FileOutputStream(download)));
} finally { } finally {
@ -343,6 +350,7 @@ public final class yacyVersion implements Comparator<yacyVersion>, Comparable<ya
} catch (IOException e) { } catch (IOException e) {
serverLog.logSevere("yacyVersion", "download of " + release.name + " failed: " + e.getMessage()); serverLog.logSevere("yacyVersion", "download of " + release.name + " failed: " + e.getMessage());
if (download.exists()) download.delete(); if (download.exists()) download.delete();
download = null;
} finally { } finally {
if (res != null) { if (res != null) {
// release connection // release connection
@ -350,7 +358,7 @@ public final class yacyVersion implements Comparator<yacyVersion>, Comparable<ya
} }
} }
plasmaSwitchboard.getSwitchboard().setConfig("update.time.download", System.currentTimeMillis()); plasmaSwitchboard.getSwitchboard().setConfig("update.time.download", System.currentTimeMillis());
return download.exists(); return download;
} }
@ -395,7 +403,7 @@ public final class yacyVersion implements Comparator<yacyVersion>, Comparable<ya
} }
} }
public static void deployRelease(String release) { public static void deployRelease(File releaseFile) {
//byte[] script = ("cd " + plasmaSwitchboard.getSwitchboard().getRootPath() + ";while [ -e ../yacy.running ]; do sleep 1;done;tar xfz " + release + ";cp -Rf yacy/* ../../;rm -Rf yacy;cd ../../;startYACY.sh").getBytes(); //byte[] script = ("cd " + plasmaSwitchboard.getSwitchboard().getRootPath() + ";while [ -e ../yacy.running ]; do sleep 1;done;tar xfz " + release + ";cp -Rf yacy/* ../../;rm -Rf yacy;cd ../../;startYACY.sh").getBytes();
try { try {
plasmaSwitchboard sb = plasmaSwitchboard.getSwitchboard(); plasmaSwitchboard sb = plasmaSwitchboard.getSwitchboard();
@ -404,9 +412,12 @@ public final class yacyVersion implements Comparator<yacyVersion>, Comparable<ya
String script = String script =
"#!/bin/sh" + serverCore.LF_STRING + "#!/bin/sh" + serverCore.LF_STRING +
"cd " + sb.getRootPath() + "/DATA/RELEASE/" + serverCore.LF_STRING + "cd " + sb.getRootPath() + "/DATA/RELEASE/" + serverCore.LF_STRING +
"if gunzip -t " + release + serverCore.LF_STRING + ((releaseFile.getName().endsWith(".gz")) ?
"then" + serverCore.LF_STRING + ("if gunzip -t " + releaseFile.getAbsolutePath() + serverCore.LF_STRING +
"gunzip -c " + release + " | tar xf -" + serverCore.LF_STRING + "then" + serverCore.LF_STRING +
"gunzip -c " + releaseFile.getAbsolutePath() + " | tar xf -" + serverCore.LF_STRING) :
("tar xf " + releaseFile.getAbsolutePath() + serverCore.LF_STRING)
) +
"while [ -f ../yacy.running ]; do" + serverCore.LF_STRING + "while [ -f ../yacy.running ]; do" + serverCore.LF_STRING +
"sleep 1" + serverCore.LF_STRING + "sleep 1" + serverCore.LF_STRING +
"done" + serverCore.LF_STRING + "done" + serverCore.LF_STRING +

Loading…
Cancel
Save