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);

Reply via email to