From 461d9515d442404fa5781c109088fe5b8305a1fe Mon Sep 17 00:00:00 2001 From: navid Date: Thu, 5 Feb 2009 22:44:16 +0000 Subject: [PATCH] *** empty log message *** --- .../TransactionalIO/NativeFuncs.c | 87 +++++++++++++++++++ .../TransactionalIO/benchmarks/benchmark.java | 48 +++++++--- .../core/ExtendedTransaction.java | 3 +- .../core/TransactionalFile.java | 4 +- 4 files changed, 124 insertions(+), 18 deletions(-) create mode 100644 Robust/Transactions/TransactionalIO/NativeFuncs.c diff --git a/Robust/Transactions/TransactionalIO/NativeFuncs.c b/Robust/Transactions/TransactionalIO/NativeFuncs.c new file mode 100644 index 00000000..53c63301 --- /dev/null +++ b/Robust/Transactions/TransactionalIO/NativeFuncs.c @@ -0,0 +1,87 @@ +/* + * File: HelloWorld.cpp + * Author: navid + * + * Created on September 3, 2008, 2:17 PM + */ + + #include + #include + #include + #include + #include + #include + #include + #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; + } diff --git a/Robust/Transactions/TransactionalIO/src/TransactionalIO/benchmarks/benchmark.java b/Robust/Transactions/TransactionalIO/src/TransactionalIO/benchmarks/benchmark.java index 894f2123..d239dd92 100644 --- a/Robust/Transactions/TransactionalIO/src/TransactionalIO/benchmarks/benchmark.java +++ b/Robust/Transactions/TransactionalIO/src/TransactionalIO/benchmarks/benchmark.java @@ -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