*** empty log message ***
authornavid <navid>
Thu, 5 Feb 2009 22:44:16 +0000 (22:44 +0000)
committernavid <navid>
Thu, 5 Feb 2009 22:44:16 +0000 (22:44 +0000)
Robust/Transactions/TransactionalIO/NativeFuncs.c [new file with mode: 0644]
Robust/Transactions/TransactionalIO/src/TransactionalIO/benchmarks/benchmark.java
Robust/Transactions/TransactionalIO/src/TransactionalIO/core/ExtendedTransaction.java
Robust/Transactions/TransactionalIO/src/TransactionalIO/core/TransactionalFile.java

diff --git a/Robust/Transactions/TransactionalIO/NativeFuncs.c b/Robust/Transactions/TransactionalIO/NativeFuncs.c
new file mode 100644 (file)
index 0000000..53c6330
--- /dev/null
@@ -0,0 +1,87 @@
+/* 
+ * File:   HelloWorld.cpp
+ * Author: navid
+ *
+ * Created on September 3, 2008, 2:17 PM
+ */
+
+        #include <jni.h>
+        #include <errno.h>
+       #include <fcntl.h>
+       #include <unistd.h>
+        #include <stdio.h>
+       #include <stdlib.h>
+       #include <sys/stat.h>
+        #include "NativeFunctions.h"
+        #define BUF_SIZE 8192
+
+        JNIEXPORT jlong JNICALL Java_TransactionalIO_core_TransactionalFileWrapperFactory_getINodeNative
+            (JNIEnv *env, jobject obj, jstring filename) 
+        {
+           struct stat status_buf;
+           jlong inodenum;
+          // stat("/home/navid/myfile.txt",&status_buf);
+           char *str = (*env)->GetStringUTFChars(env, filename, 0);
+           if (stat(str,&status_buf)<0)
+               inodenum = -1;   
+           else
+           {
+                   inodenum = status_buf.st_ino;
+           }
+           (*env)->ReleaseStringUTFChars(env, filename, str);
+           return inodenum;
+        }
+
+       
+        JNIEXPORT jint JNICALL Java_TransactionalIO_core_TransactionalFile_nativepread(JNIEnv *env, jobject obj2, jbyteArray buff, jlong offset, jint size, jobject fobj )     {
+           
+           
+           //signed char str[200];
+           signed char stackBuf[BUF_SIZE];
+           signed char *buf = 0;
+           size_t nativesize = size;
+           off_t nativeoffset =offset;
+           if (nativesize > BUF_SIZE){
+               buf = malloc(nativesize);
+               if (buf == 0) {
+                  JNU_ThrowOutOfMemoryError(env, 0);
+                  return; 
+               }
+           }
+           else buf = stackBuf;
+          
+
+           jclass cls2 = (*env) ->GetObjectClass(env, fobj);
+
+
+           jfieldID fid3 = (*env)->GetFieldID(env, cls2,"fd", "I");
+
+           jobject fp = (*env)->GetIntField(env, fobj, fid3); 
+
+           int res =  pread((int)fp, buf,nativesize ,nativeoffset);
+
+           (*env) -> SetByteArrayRegion(env, buff, 0, res, buf);
+
+           return res;
+       }
+
+        JNIEXPORT jint JNICALL Java_TransactionalIO_core_ExtendedTransaction_nativepwrite(JNIEnv *env, jobject obj2, jbyteArray buff, jlong offset, jint size, jobject fobj )  {
+
+           jbyteArray str;
+           size_t nativesize = (*env)->GetArrayLength(env, buff);
+           off_t nativeoffset =offset;
+          
+
+           jclass cls2 = (*env) ->GetObjectClass(env, fobj);
+
+           str = (*env) -> GetByteArrayElements(env, buff, NULL);
+
+           jfieldID fid3 = (*env)->GetFieldID(env, cls2,"fd", "I");
+
+           jobject fp = (*env)->GetIntField(env, fobj, fid3); 
+
+           int res =  pwrite((int)fp, str,nativesize ,nativeoffset);
+
+
+           return res;
+       }
index 894f2123cb68d905ec52677b7dfc809f1d357199..d239dd92229fad0787a020136c8fd32bf92449b2 100644 (file)
@@ -13,11 +13,8 @@ import java.io.RandomAccessFile;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Random;
 import java.util.Vector;
-import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -52,7 +49,6 @@ public class benchmark {
             byte[] data = new byte[1];
             char[] name = new char[20];
             RandomAccessFile file = new RandomAccessFile("/scratch/TransactionalIO/FinancialTransactionBenchmarkFiles/namelist.text", "rw");
-            RandomAccessFile file2 = new RandomAccessFile("/scratch/TransactionalIO/FinancialTransactionBenchmarkFiles/financialtransaction.text", "rw");
             RandomAccessFile file3 = new RandomAccessFile("/scratch/TransactionalIO/FinancialTransactionBenchmarkFiles/accountbalance.text", "rw");
             /*RandomAccessFile file = new RandomAccessFile("/home/navid/namelist.text", "rw");
             RandomAccessFile file2 = new RandomAccessFile("/home/navid/financialtransaction.text", "rw");
@@ -165,10 +161,27 @@ public class benchmark {
         
           
           for (int i=0; i<50; i++){
-              String towrite = (String)m3.get(Integer.valueOf(i)) +"\n";
-              for (int j=0; j<stocks.length; j++)
-                towrite +=  stocks[j] + " Stock Balance: " + ((int)(Math.random()*100+100)) + "             \n";
-              System.out.println(towrite);
+              String towrite = (String)m3.get(Integer.valueOf(i));
+              String tmpst = (String)m3.get(Integer.valueOf(i));
+              int tmp = tmpst.length();
+              while(tmp<10){
+                  towrite += new String(" ");
+                  tmp++;
+              }
+              towrite += "\n";
+              for (int j=0; j<stocks.length; j++){
+                tmpst = stocks[j] + " Stock Balance: " + ((int)(Math.random()*100+100));  
+                towrite +=  stocks[j] + " Stock Balance: " + ((int)(Math.random()*100+100));
+                tmp = tmpst.length();
+                System.out.println(tmp);
+                while(tmp<40){
+                  towrite += new String(" ");
+                  tmp++;
+                }
+                towrite += "\n";
+              }
+             
+            //  System.out.println(towrite);
               file3.write(towrite.getBytes());
               while (file3.getFilePointer()<(i+1)*Defaults.FILEFRAGMENTSIZE)
                   file3.write(new String(" ").getBytes());    
@@ -179,6 +192,13 @@ public class benchmark {
               System.out.println((char)f[i]);*/
           file.close();
 //          file2.close();
+          byte[] b= new byte[41];
+          
+          file3.seek(1024);
+          file3.read(new byte[11]);
+          file3.read(b);
+          System.out.println("h " + (char)b[40]);
+          System.out.println((char)file3.readByte());
           file3.close();
         } catch (IOException ex) {
             Logger.getLogger(benchmark.class.getName()).log(Level.SEVERE, null, ex);
@@ -224,16 +244,16 @@ public class benchmark {
             count++;
 
             //TransactionalFile tr6 = new TransactionalFile("/home/navid/accountbalance.text", "rw");
-            TransactionalFile tr6 = new TransactionalFile("/scratch/TransactionalIO/FinancialTransactionBenchmarkFiles/accountbalance.text", "rw");
-            m.put("accountbalance", tr6);
+          //  TransactionalFile tr6 = new TransactionalFile("/scratch/TransactionalIO/FinancialTransactionBenchmarkFiles/accountbalance.text", "rw");
+            //m.put("accountbalance", tr6);
             //m.put(String.valueOf(count), tr6);
 
             count++;
 
             //TransactionalFile tr7 = new TransactionalFile("/home/navid/financialtransactionlog.text", "rw");
-            TransactionalFile tr7 = new TransactionalFile("/scratch/TransactionalIO/FinancialTransactionBenchmarkFiles/financialtransactionlog.text", "rw");
-            m.put("financialtransactionlog", tr7);
-            m.put(String.valueOf(count), tr7);
+          //  TransactionalFile tr7 = new TransactionalFile("/scratch/TransactionalIO/FinancialTransactionBenchmarkFiles/financialtransactionlog.text", "rw");
+          //  m.put("financialtransactionlog", tr7);
+          //  m.put(String.valueOf(count), tr7);
             count++;
 
             //RandomAccessFile tr8 = new RandomAccessFile("/home/navid/accountbalance.text", "rw");
@@ -252,7 +272,7 @@ public class benchmark {
             int index = 97;
             for (int i = 0; i < 26; i++) {
                       m.put(String.valueOf((char) (index+i))+"random", new RandomAccessFile("/home/navid/" + String.valueOf((char) (index+i)) + ".text", "rw"));
-                      //m.put(String.valueOf((char) (index+i)), new TransactionalFile("/home/navid/" + String.valueOf((char) (index+i)) + ".text", "rw"));
+                      m.put(String.valueOf((char) (index+i)), new TransactionalFile("/home/navid/" + String.valueOf((char) (index+i)) + ".text", "rw"));
                       m.put(String.valueOf((char) (index+i)), new TransactionalFile("/scratch/TransactionalIO/PureIOBenchmarkFiles/" + String.valueOf((char) (index+i)) + ".text", "rw"));
                       count++;
             }
index 9f53876564dcb947e5725bc0d71c4fb030990066..00f81329e47efeae43bbaed12f75cf02947230a6 100644 (file)
@@ -42,7 +42,7 @@ public class ExtendedTransaction implements TransactionStatu {
     
 
     {
-        System.load("/home/navid/libkooni.so");
+        System.load("/home/navid/libnav.so");
     }
     
     private boolean flag = true;
@@ -355,7 +355,6 @@ public class ExtendedTransaction implements TransactionStatu {
         //toholdblocklocks = new Lock[100];
         
         Iterator it = this.getAccessedBlocks().keySet().iterator();
-        BlockDataStructure[] blocks = new BlockDataStructure[100];
         //if (this.getStatus() == Status.ACTIVE)
             while (it.hasNext() /*&& (this.getStatus() == Status.ACTIVE)*/) {
                 INode inode = (INode) it.next();
index f025376d863f58340843d9ef0e8f5f48f44c6338..8eebab2b3c2da5e48b9ecaaf4797813f8efea23b 100644 (file)
@@ -46,7 +46,7 @@ public class TransactionalFile implements Comparable {
     
 
     {
-        System.load("/home/navid/libkooni.so");
+        System.load("/home/navid/libnav.so");
     }
     public RandomAccessFile file;
     private INode inode;
@@ -871,7 +871,7 @@ public class TransactionalFile implements Comparable {
             non_Transactional_Write(data);
             return;
         }
-
+       // System.out.println("write " + Thread.currentThread());
         if (!(me.getGlobaltoLocalMappings().containsKey(this))) {
             me.addFile(this, 0);
         }