add a lock for file upload
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/c4c8b4be Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/c4c8b4be Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/c4c8b4be Branch: refs/heads/master Commit: c4c8b4bea502dfd470fb6856ac85d0b92d00a0a9 Parents: 9e36d92 Author: Kevin Xu <[email protected]> Authored: Wed Jan 13 12:58:31 2016 +0800 Committer: Kevin Xu <[email protected]> Committed: Wed Jan 13 12:58:31 2016 +0800 ---------------------------------------------------------------------- .../src/main/java/org/trafodion/libmgmt/FileMgmt.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/c4c8b4be/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 32c39d8..8dd8f4e 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 @@ -28,6 +28,8 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; +import java.nio.channels.FileChannel; +import java.nio.channels.FileLock; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; @@ -405,13 +407,23 @@ public class FileMgmt { String fname = userPath + fileName; checkFile(fname, data.length); FileOutputStream fos = null; + FileChannel channel = null; + FileLock lock = null; try { fos = new FileOutputStream(fname, (appendFlag == 0)); + channel = fos.getChannel(); + lock = channel.tryLock(); fos.write(Arrays.copyOf(data, data.length)); fos.flush(); } finally { if (fos != null) fos.close(); + if(lock != null){ + lock.release(); + } + if(channel !=null){ + channel.close(); + } } syncJar(userPath, fileName);
