From 00e81fcc159aaab6c0c67f59d03fd4e913162cf6 Mon Sep 17 00:00:00 2001 From: luccioman Date: Thu, 15 Dec 2016 15:30:36 +0100 Subject: [PATCH] Check HTTP status when downloading a release, and report eventual error. --- htroot/ConfigUpdate_p.html | 3 ++ htroot/ConfigUpdate_p.java | 32 +++++++++++-------- .../net/yacy/peers/operation/yacyRelease.java | 6 ++++ 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/htroot/ConfigUpdate_p.html b/htroot/ConfigUpdate_p.html index 6c12e6318..31aafabba 100644 --- a/htroot/ConfigUpdate_p.html +++ b/htroot/ConfigUpdate_p.html @@ -30,6 +30,9 @@ + #(downloadError)#:: + Download of release #[releasedownload]# failed. + #(/downloadError)#
diff --git a/htroot/ConfigUpdate_p.java b/htroot/ConfigUpdate_p.java index 2996e1386..c70e71f39 100644 --- a/htroot/ConfigUpdate_p.java +++ b/htroot/ConfigUpdate_p.java @@ -70,6 +70,7 @@ public class ConfigUpdate_p { prop.put("candeploy_configCommit", "0"); prop.put("candeploy_autoUpdate", "0"); prop.put("candeploy_downloadsAvailable", "0"); + prop.put("candeploy_downloadError", "0"); if (post != null) { // check if update is supposed to be installed and a release is defined @@ -86,21 +87,26 @@ public class ConfigUpdate_p { final String release = post.get("releasedownload", ""); if (!release.isEmpty()) { try { - yacyRelease versionToDownload = new yacyRelease(new DigestURL(release)); + yacyRelease versionToDownload = new yacyRelease(new DigestURL(release)); - // replace this version with version which contains public key - final yacyRelease.DevAndMainVersions allReleases = yacyRelease.allReleases(false, false); - final Set mostReleases = versionToDownload.isMainRelease() ? allReleases.main : allReleases.dev; - for (final yacyRelease rel : mostReleases) { - if (rel.equals(versionToDownload)) { - versionToDownload = rel; - break; - } - } - versionToDownload.downloadRelease(); + // replace this version with version which contains public key + final yacyRelease.DevAndMainVersions allReleases = yacyRelease.allReleases(false, false); + final Set mostReleases = versionToDownload.isMainRelease() ? allReleases.main : allReleases.dev; + for (final yacyRelease rel : mostReleases) { + if (rel.equals(versionToDownload)) { + versionToDownload = rel; + break; + } + } + File downloadedRelease = versionToDownload.downloadRelease(); + if(downloadedRelease == null) { + prop.put("candeploy_downloadError", "1"); + prop.putHTML("candeploy_downloadError_releasedownload", release); + } } catch (final IOException e) { - // TODO Auto-generated catch block - ConcurrentLog.logException(e); + ConcurrentLog.logException(e); + prop.put("candeploy_downloadError", "1"); + prop.putHTML("candeploy_downloadError_releasedownload", release); } } } diff --git a/source/net/yacy/peers/operation/yacyRelease.java b/source/net/yacy/peers/operation/yacyRelease.java index 1bfdfe9c0..5884c2092 100644 --- a/source/net/yacy/peers/operation/yacyRelease.java +++ b/source/net/yacy/peers/operation/yacyRelease.java @@ -44,6 +44,8 @@ import java.util.SortedSet; import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; +import org.apache.http.HttpStatus; + import net.yacy.cora.document.encoding.UTF8; import net.yacy.cora.document.id.AnchorURL; import net.yacy.cora.document.id.DigestURL; @@ -304,6 +306,10 @@ public final class yacyRelease extends yacyVersion { client.setTimout(120000); client.GET(getUrl().toString(), false); int statusCode = client.getHttpResponse().getStatusLine().getStatusCode(); + if(statusCode != HttpStatus.SC_OK) { + /* HTTP status is not OK (200) : let's stop here to avoid creating a invalid download file*/ + throw new IOException("HTTP response status code : " + statusCode); + } final ResponseHeader header = new ResponseHeader(statusCode, client.getHttpResponse().getAllHeaders()); final boolean unzipped = header.gzip() && (header.mime().toLowerCase().equals("application/x-tar")); // if true, then the httpc has unzipped the file