You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by hz...@apache.org on 2016/03/01 23:36:18 UTC

[32/37] incubator-trafodion git commit: syc delete jars

syc delete jars


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/352c6e05
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/352c6e05
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/352c6e05

Branch: refs/heads/master
Commit: 352c6e0516dbd01099fa9a711db1c8b16bc485d6
Parents: e5757fd
Author: Kevin Xu <ka...@esgyn.cn>
Authored: Thu Jan 21 11:34:47 2016 +0800
Committer: Kevin Xu <ka...@esgyn.cn>
Committed: Thu Jan 21 11:34:47 2016 +0800

----------------------------------------------------------------------
 .../java/org/trafodion/libmgmt/FileMgmt.java    | 68 ++++++++++++++++----
 1 file changed, 56 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/352c6e05/core/sql/lib_mgmt/src/main/java/org/trafodion/libmgmt/FileMgmt.java
----------------------------------------------------------------------
diff --git a/core/sql/lib_mgmt/src/main/java/org/trafodion/libmgmt/FileMgmt.java b/core/sql/lib_mgmt/src/main/java/org/trafodion/libmgmt/FileMgmt.java
index b317612..f2dbd28 100644
--- a/core/sql/lib_mgmt/src/main/java/org/trafodion/libmgmt/FileMgmt.java
+++ b/core/sql/lib_mgmt/src/main/java/org/trafodion/libmgmt/FileMgmt.java
@@ -30,6 +30,7 @@ import java.io.InputStream;
 import java.io.RandomAccessFile;
 import java.nio.channels.FileChannel;
 import java.nio.channels.FileLock;
+import java.nio.file.Files;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
@@ -52,6 +53,7 @@ public class FileMgmt {
 	private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 	private static final int MaxDataSize = 12800;
 	private static final String CHARTSET = "ISO-8859-1";
+	private static final String DEL_POSTFIX = ".DELETE";
 
 	/**
 	 * Print help info
@@ -248,6 +250,18 @@ public class FileMgmt {
 			}
 		}
 	}
+	
+	public static void rmJar(String userPath, String fileName) throws SQLException, IOException {
+		checkFileName(fileName);
+		LOG.info("syncJars " + fileName);
+		String nodes = System.getenv("MY_NODES");
+		if (nodes != null && !"".equals(nodes.trim())) {
+			String pdsh = System.getenv("SQ_PDSH");
+			if (pdsh != null) {
+				execShell(pdsh + " " + nodes + " rm -rf " + userPath + fileName.trim());
+			}
+		}
+	}
 
 	private static String execShell(String cmd) throws IOException {
 		Process p = Runtime.getRuntime().exec(cmd);
@@ -337,18 +351,36 @@ public class FileMgmt {
 	 * 
 	 * @param fileName
 	 * @throws SQLException
+	 * @throws IOException 
 	 */
-	public static void rm(String fileName) throws SQLException {
+	public static void rm(String fileName) throws SQLException, IOException {
 		checkFileName(fileName);
 		Connection conn = getConn();
 		LOG.info("Remove " + fileName);
 		String userPath = getCodeFilePath(conn);
 		close(conn);
 		File file = new File(userPath + fileName);
+		File delFile = new File(fileName + DEL_POSTFIX);
+		boolean isSuccess = false;
 		if (file.exists()) {
-			file.delete();
-			LOG.info("Remove " + fileName + " successfully!");
-			return;
+			try {
+				boolean isRenamed = file.renameTo(delFile);
+				if (isRenamed)
+					rmJar(userPath, fileName);
+				else {
+					throw new IOException("Delete " + fileName + " failed. File metrics: CanRead is " + file.canRead()
+							+ ", canWrite is " + file.canWrite() + ", canExecute is " + file.canExecute());
+				}
+				LOG.info("Remove " + fileName + " successfully!");
+				isSuccess = true;
+				return;
+			} finally {
+				if (isSuccess) {
+					delFile.delete();
+				} else {
+					delFile.renameTo(file);
+				}
+			}
 		} else {
 			LOG.error("No such file[" + fileName + "]");
 			throw new SQLException("No such file[" + fileName + "]");
@@ -363,26 +395,38 @@ public class FileMgmt {
 	 * @param names
 	 *            : file names to be deleted
 	 * @throws SQLException
+	 * @throws IOException 
 	 */
-	public static void rmRex(String pattern, String[] names) throws SQLException {
+	public static void rmRex(String pattern, String[] names) throws SQLException, IOException {
 		checkFileName(pattern);
 		Connection conn = getConn();
 		LOG.info("Try to remove files[" + pattern + "]");
 		String userPath = getCodeFilePath(conn);
 		close(conn);
 		File[] files = getFiles(pattern, new File(userPath));
+		File[] delFiles = new File[files.length];
 		StringBuilder sb = new StringBuilder();
 		sb.append("<rmRex>");
 		sb.append(toXML(files, "rmList"));
 		sb.append("<message>");
 		boolean hasError = false;
-		for (File f : files) {
-			try {
-				f.delete();
-			} catch (Exception e) {
-				hasError = true;
-				LOG.error(e.getMessage(), e);
-				sb.append("<error fileName='" + f.getName() + "'>" + e.getMessage() + "</error>");
+		boolean isSuccess = false;
+		try {
+			for (int i = 0; i < files.length; i++) {
+				delFiles[i] = new File(files[i].getAbsolutePath() + DEL_POSTFIX);
+				files[i].renameTo(delFiles[i]);
+			}
+			rmJar(userPath, pattern);
+			isSuccess = true;
+		} finally {
+			if (isSuccess) {
+				for (int i = 0; i < delFiles.length; i++) {
+					delFiles[i].delete();
+				}
+			} else {
+				for (int i = 0; i < delFiles.length; i++) {
+					delFiles[i].renameTo(files[i]);
+				}
 			}
 		}
 		if (!hasError) {