Author: markt Date: Mon Mar 17 12:14:37 2014 New Revision: 1578329 URL: http://svn.apache.org/r1578329 Log: Make upload process more robust. If upload fails and it was going to update an existing WAR, don't remove the existing WAR.
Modified: tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java Modified: tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java?rev=1578329&r1=1578328&r2=1578329&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java (original) +++ tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java Mon Mar 17 12:14:37 2014 @@ -661,7 +661,18 @@ public class ManagerServlet extends Http // Determine full path for uploaded WAR File uploadedWar; if (tag == null) { - uploadedWar = deployedWar; + if (update) { + // Append ".tmp" to the file name so it won't get deployed if auto + // deployment is enabled. It also means the old war won't get + // deleted if the upload fails + uploadedWar = new File(deployedWar.getAbsolutePath() + ".tmp"); + if (uploadedWar.exists() && !uploadedWar.delete()) { + writer.println(smClient.getString("managerServlet.deleteFail", + uploadedWar)); + } + } else { + uploadedWar = deployedWar; + } } else { File uploadPath = new File(versioned, tag); if (!uploadPath.mkdirs() && !uploadPath.isDirectory()) { @@ -679,15 +690,17 @@ public class ManagerServlet extends Http if (!isServiced(name)) { addServiced(name); try { - if (update && tag == null && deployedWar.isFile()) { - if (!deployedWar.delete()) { + // Upload WAR + uploadWar(writer, request, uploadedWar, smClient); + if (update && tag == null) { + if (deployedWar.exists() && !deployedWar.delete()) { writer.println(smClient.getString("managerServlet.deleteFail", deployedWar)); return; } + // Rename uploaded WAR file + uploadedWar.renameTo(deployedWar); } - // Upload WAR - uploadWar(writer, request, uploadedWar, smClient); if (tag != null) { // Copy WAR to the host's appBase copy(uploadedWar, deployedWar); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org