try {
byte[] data = new byte[1];
char[] name = new char[20];
- RandomAccessFile file = new RandomAccessFile("/scratch/TransactionalIO/FinancialTransactionBenchmarkFiles/namelist.text", "rw");
+ /*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 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");
+ RandomAccessFile file3 = new RandomAccessFile("/home/navid/accountbalance.text", "rw");
+
stocks = new String[20];
- preparenamelist();
+ preparenamelist();
count = 0;
m = Collections.synchronizedMap(TransactionalFiles);
+ TransactionalFile tr = new TransactionalFile("/home/navid/randomwords.text", "rw");
+ m.put(String.valueOf(count), tr);
+ count++;
+ TransactionalFile tr2 = new TransactionalFile("/home/navid/input.text", "rw");
+ m.put(String.valueOf(count), tr2);
+ count++;
+ TransactionalFile tr3 = new TransactionalFile("/home/navid/iliad.text", "rw");
+ m.put(String.valueOf(count), tr3);
+ count++;
+ TransactionalFile tr4 = new TransactionalFile("/home/navid/counter_benchmark_output.text", "rw");
+ m.put(String.valueOf(count), tr4);
+ count++;
+
+ TransactionalFile tr5 = new TransactionalFile("/home/navid/financialtransaction.text", "rw");
+ m.put(String.valueOf(count), tr5);
+
+ count++;
+
+ TransactionalFile tr6 = new TransactionalFile("/home/navid/accountbalance.text", "rw");
+ m.put(String.valueOf(count), tr6);
+
+ count++;
+
+ TransactionalFile tr7 = new TransactionalFile("/home/navid/financialtransactionlog.text", "rw");
+ m.put(String.valueOf(count), tr7);
+
+ count++;
+
+ RandomAccessFile tr8 = new RandomAccessFile("/home/navid/accountbalance.text", "rw");
+ m.put(String.valueOf(count), tr8);
+//
+ count++;
+
+ RandomAccessFile tr9 = new RandomAccessFile("/home/navid/financialtransactionlog.text", "rw");
+ m.put(String.valueOf(count), tr9);
+
+ count++;
+
+ int index = 97;
+ for (int i = 0; i < 26; i++) {
+
+ //m.put(String.valueOf((char) (index+i)), 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"));
+
+ count++;
+ }
+
+
+ m.put(100, new RandomAccessFile("/home/navid/counter_benchmark_output.text", "rw"));
+ /*count = 0;
+ m = Collections.synchronizedMap(TransactionalFiles);
TransactionalFile tr = new TransactionalFile("/scratch/TransactionalIO/PureIOBenchmarkFiles/randomwords.text", "rw");
m.put(String.valueOf(count), tr);
count++;
m.put(String.valueOf((char) (index+i)), new TransactionalFile("/scratch/TransactionalIO/PureIOBenchmarkFiles/"
+ String.valueOf((char) (index+i)) + ".text", "rw"));
- count++;
- /* m.put(String.valueOf((char) (index+i)), new RandomAccessFile("/scratch/TransactionalIO/PureIOBenchmarkFiles/"
+ //count++;*/
+ /* m.put(String.valueOf((char) (index+i)), new RandomAccessFile("/scratch/TransactionalIO/PureIOBenchmarkFiles/"
+ String.valueOf((char) (index+i)) + ".text", "rw"));
count++;*/
- }
+ //}
+
+
count = 0;
m2 = Collections.synchronizedMap(hotwords);
m2.put(Integer.valueOf(count), "Polydamas");
f1 = (TransactionalFile)benchmark.m.get("0");
byte[] b = new byte[20];
byte[] data = new byte[1];
- char[] holder = new char[40];
+ char[] holder = new char[30];
long toseek = (Integer.valueOf(Thread.currentThread().getName().substring(7)))%20 * 20448;
Logger.getLogger(thread1.class.getName()).log(Level.SEVERE, null, ex);
}
}
-
-
- // for (int k=0; k< i; k++)
- // System.out.println(Thread.currentThread() + " " +holder[k]);
- // f1.seek(40);
- // System.out.println("current offset " +f1.getFilePointer());
- // f1.write(b);
- // f1.write(b);
-
-
- // f1.write(b);
- //
-
-
- /* for (int i =0; i< 2000; i++){
-
- String str = "Number: " + (Integer.valueOf(Thread.currentThread().getName().substring(7))*200+i) +"\nType: " + v.get((int)(Math.random()*6)) + "\n\n";
- byte[] buff;
- char[] charar = new char[str.length()];
- charar = str.toCharArray();
- buff = new byte[str.length()];
- for (int j=0; j<str.length(); j++)
- buff[j] = (byte) charar[j];
-
- f1.write(buff);
- }*/
-
- /* f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- // f1.seek(0);
- // f1.seek(0);
- // f1.getFilePointer();
- // synchronized(benchmark.lock){
- // /*System.out.println(Thread.currentThread() +" 1-offset " + *///f1.getFilePointer();
- //}
- // synchronized(benchmark.lock){
- // f1.getFilePointer();
- // }
- /// f1.read(bread);
- /* f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
-
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);*/
- /*f1.read(bread);
- // f1.seek(0);
-
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);*/
-
- /* f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);
- f1.write(b);*/
- // f1.seek(0);
- // f1.read(bread2);
- /* synchronized(benchmark.lock){
- for (int j =0; j<20; j++)
- System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread2[j]);
- }*/
- // f1.read(bread);
- /*synchronized(benchmark.lock){
- for (int j =0; j<20; j++)
- System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread[j]);
- }*/
- //f1.read(bread);
- //*synchronized(benchmark.lock){
- // for (int j =0; j<20; j++)
- // System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread[j]);
- // }*/
- // f1.read(bread);
- /* synchronized(benchmark.lock){
- for (int j =0; j<20; j++)
- System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread[j]);
- }*/
- // f1.read(bread);
- /* synchronized(benchmark.lock){
- for (int j =0; j<20; j++)
- System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread[j]);
- }*/
- //f1.read(bread);
- /* synchronized(benchmark.lock){
- for (int j =0; j<20; j++)
- System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread[j]);
- }*/
- //f1.read(bread);
- /*synchronized(benchmark.lock){
- for (int j =0; j<20; j++)
- System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread[j]);
- }*/
- //f1.read(bread);
- /*synchronized(benchmark.lock){
- for (int j =0; j<20; j++)
- System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread[j]);
- }*/
- /*
- f1.read(bread);
- f1.read(bread2);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread2);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
-
- f1.read(bread2);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread2);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
-
-
-
- // f1.seek(0);
- /* synchronized(benchmark.lock){
- for (int j =0; j<20; j++)
- System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread[j]);
- }
- synchronized(benchmark.lock){
- for (int j =0; j<20; j++)
- System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread2[j]);
- }
- */
- /* synchronized(benchmark.lock){
- System.out.println(Thread.currentThread() +" 2-offset " + f1.getFilePointer());
- }*/
- /*f1.write(b);
- f1.write(b);
- // f1.seek(0);
-
- f1.write(b);
- f1.write(b);*/
-
-
- /* synchronized(benchmark.lock){
- System.out.println(Thread.currentThread() +" 3-offset " + f1.getFilePointer());
- }*/
- // f1.seek(50);
- /* synchronized(benchmark.lock){
- System.out.println(Thread.currentThread() +" 4-offset " + f1.getFilePointer());
- }*/
- // f1.read(bread);
- /* synchronized(benchmark.lock){
- for (int j =0; j<20; j++)
- System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread[j]);
- }*/
- // f1.read(bread);
- /*synchronized(benchmark.lock){
- for (int j =0; j<20; j++)
- System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread[j]);
- }*/
- // f1.read(bread);
- /*synchronized(benchmark.lock){
- for (int j =0; j<20; j++)
- System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread[j]);
- }*/
- // f1.read(bread);
- /*synchronized(benchmark.lock){
- for (int j =0; j<20; j++)
- System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread[j]);
- }*/
-
- //f1.read(bread);
- /*synchronized(benchmark.lock){
- for (int j =0; j<20; j++)
- System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread[j]);
- }*/
- /* synchronized(benchmark.lock){
- System.out.println(Thread.currentThread() +" 5-offset " + f1.getFilePointer());
- }*/
- //System.out.println("offset " + f1.getFilePointer());
- /* for (int j =0; j<20; j++)
- System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread[j]);*/
- /* f1.read(bread);
- System.out.println("offset " + f1.getFilePointer());*/
- // for (int j =0; j<20; j++)
- // System.out.println(j+1 + "-" +Thread.currentThread() + " " + (char)bread[j]);
- // f1.write(b);
- /* synchronized(benchmark.lock){
- System.out.println(Thread.currentThread() +" 6-offset " + f1.getFilePointer());
- }*/
- //f1.read(bread);
- /* synchronized(benchmark.lock){
- System.out.println(Thread.currentThread() +" 5-offset " + f1.getFilePointer());
- }*/
- // System.out.println("offset " + f1.getFilePointer());
- /*f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);
- f1.read(bread);*/
- // f1.write(b);
- // f1.write(b);
-
-
-
- // f1.seek(40);
-
- // for (int j =0; j<10; j++)
- // System.out.println((char) b[j]);
-
-// } catch (IOException ex) {
- // Logger.getLogger(thread1.class.getName()).log(Level.SEVERE, null, ex);
- // }
- // TransactionalFile f1 = new TransactionalFile("/home/navid/output1.txt", "rw");
- // TransactionalFile f1 = new TransactionalFile("/home/navid/output1.txt", "rw");
- // TransactionalFile f1 = new TransactionalFile("/home/navid/output1.txt", "rw");
}
*/
public class ExtendedTransaction implements TransactionStatu {
- private native int nativepwrite(byte buff[], long offset, int size, FileDescriptor fd);
+ private static native int nativepwrite(byte buff[], long offset, int size, FileDescriptor fd);
{
private ContentionManager contentionmanager;
private volatile Status status;
private int id;
+
+
+ public ReentrantLock[] toholoffsetlocks;
+ public int offsetcount = 0;
+
+ public Lock[] toholdblocklocks;
+ public int blockcount = 0;
public ExtendedTransaction() {
// super();
this.memorystate = memorystate;
}
- private int invokeNativepwrite(byte buff[], long offset, int size, RandomAccessFile file) {
+ public static int invokeNativepwrite(byte buff[], long offset, int size, RandomAccessFile file) {
try {
return nativepwrite(buff, offset, buff.length, file.getFD());
} catch (IOException ex) {
public boolean lockOffsets() { /// Locking offsets for File Descriptors
-
+ // toholoffsetlocks = new ReentrantLock[30];
+
TreeMap hm = getSortedFileAccessMap(AccessedFiles);
Iterator iter = hm.keySet().iterator();
-
+ offsetcount = 0;
while (iter.hasNext() && (this.getStatus() == Status.ACTIVE)) {
INode key = (INode) iter.next();
Vector vec = (Vector) AccessedFiles.get(key);
+
+ /* if (vec.size() == 1){
+ TransactionalFile tf = ((TransactionalFile)vec.firstElement());
+ tf.offsetlock.lock();
+ // toholoffsetlocks[offsetcount] = tf.offsetlock;
+ // offsetcount++;
+ heldoffsetlocks.add(tf.offsetlock);
+ continue;
+ }*/
+
Collections.sort(vec);
Iterator it = vec.iterator();
- while (it.hasNext() && this.getStatus() == Status.ACTIVE) {
+ while (it.hasNext() /*&& this.getStatus() == Status.ACTIVE*/) {
TransactionalFile value = (TransactionalFile) it.next();
- value.offsetlock.lock();
+ value.offsetlock.lock();
+ // toholoffsetlocks[offsetcount] = value.offsetlock;
+ // offsetcount++;
heldoffsetlocks.add(value.offsetlock);
break;
}
}
if (this.getStatus() != Status.ACTIVE) {
+ // for (int j=0; j<offsetcount; j++){
+ // heldoffsetlocks.add(toholoffsetlocks[j]);
+ // }
return false;
}
return true;
}
lock.lock();
+ // toholdblocklocks[blockcount] = lock;
+ // blockcount++;
heldblocklocks.add(lock);
return true;
}
+ //toholdblocklocks = new Lock[100];
Iterator it = this.getAccessedBlocks().keySet().iterator();
BlockDataStructure[] blocks = new BlockDataStructure[100];
- if (this.getStatus() == Status.ACTIVE)
+ //if (this.getStatus() == Status.ACTIVE)
while (it.hasNext() /*&& (this.getStatus() == Status.ACTIVE)*/) {
INode inode = (INode) it.next();
GlobalINodeState inodestate = TransactionalFileWrapperFactory.getTateransactionalFileINodeState(inode);
}
if (this.getStatus() != Status.ACTIVE) {
-
+ // for (int i=0; i<blockcount; i++)
+ // heldblocklocks.add(toholdblocklocks[i]);
throw new AbortedException();
}
abortAllReaders();
Iterator it;
WriteOperations writeop;
Vector vec;
- while (iter.hasNext() && (this.getStatus() == Status.ACTIVE)) {
+ while (iter.hasNext()) {
INode key = (INode) iter.next();
vec = (Vector) hm.get(key);
TransactionalFile trf = (TransactionalFile) (k.next());
trf.getCommitedoffset().setOffsetnumber(((TransactionLocalFileAttributes) GlobaltoLocalMappings.get(trf)).getLocaloffset());
}
+
+
+ /* for (int i =0; i<blockcount; i++){
+ toholdblocklocks[i].unlock();
+ }
+ for (int i =0; i<offsetcount; i++){
+ toholoffsetlocks[i].unlock();
+ }*/
}
public void unlockAllLocks() {
Lock lock = (Lock) it.next();
lock.unlock();
}
- // heldblocklocks.clear();
+ heldblocklocks.clear();
it = heldoffsetlocks.iterator();
while (it.hasNext()) {
ReentrantLock lock = (ReentrantLock) it.next();
lock.unlock();
}
- // heldoffsetlocks.clear();
+ heldoffsetlocks.clear();
}
public void abortAllReaders() {
import java.util.TreeMap;
import java.util.Vector;
import java.util.concurrent.locks.Lock;
+
import java.util.concurrent.locks.ReentrantLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
import java.util.logging.Level;
import java.util.logging.Logger;
public ReentrantLock offsetlock;
private GlobalOffset committedoffset;
private GlobalINodeState inodestate;
+ Lock[] locks;
+
+ public TransactionalFile(File f, String mode) {
+
+ if ((!(f.exists()))) {
+ to_be_created = true;
+ file = null;
+
+ } else {
+
+ try {
+
+ offsetlock = new ReentrantLock();
+ file = new RandomAccessFile(f, mode);
+ } catch (FileNotFoundException ex) {
+
+ Logger.getLogger(TransactionalFile.class.getName()).log(Level.SEVERE, null, ex);
+ }
+
+ }
+ inode = TransactionalFileWrapperFactory.getINodefromFileName(f.getAbsolutePath());
+ inodestate = TransactionalFileWrapperFactory.createTransactionalFile(inode, f.getAbsolutePath(), mode);
+
+
+ sequenceNum = inodestate.seqNum;
+ inodestate.seqNum++;
+
+ if (mode.equals("rw")) {
+ writemode = true;
+ } else if (mode.equals("a")) {
+ appendmode = true;
+ }
+ if (inodestate != null) {
+ synchronized (inodestate) {
+ committedoffset = new GlobalOffset(0);
+ }
+ }
+ }
+
public TransactionalFile(String filename, String mode) {
return non_Transactional_Read(b);
}
- if (!(me.getGlobaltoLocalMappings().containsKey(this))) {
+ if (!(me.getGlobaltoLocalMappings().containsKey(this))) { // if this is the first time the file is accessed by the transcation
me.addFile(this, 0);
}
- // if (me.getGlobaltoLocalMappings().containsKey(this)) {
TransactionLocalFileAttributes tmp = (TransactionLocalFileAttributes) me.getGlobaltoLocalMappings().get(this);
tmp.setUnknown_inital_offset_for_write(false);
private void markAccessedBlocks(ExtendedTransaction me, long loffset, int size, BlockAccessModesEnum mode) {
+
TreeMap map;
if (me.getAccessedBlocks().get(this.getInode()) != null) {
map = new TreeMap();
me.getAccessedBlocks().put(this.inode, map);
}
- int startblock = FileBlockManager.getCurrentFragmentIndexofTheFile(loffset);
- int targetblock = FileBlockManager.getTargetFragmentIndexofTheFile(loffset, size);
+ int startblock = (int) ((loffset / Defaults.FILEFRAGMENTSIZE));//FileBlockManager.getCurrentFragmentIndexofTheFile(loffset);
+ int targetblock = (int) (((size + loffset) / Defaults.FILEFRAGMENTSIZE));//FileBlockManager.getTargetFragmentIndexofTheFile(loffset, size);
for (int i = startblock; i <= targetblock; i++) {
if (map.get(Integer.valueOf(i)) == null) {
map.put(Integer.valueOf(i), mode);
int end =(int) (((tmp.getLocaloffset() + readdata.length) / Defaults.FILEFRAGMENTSIZE));
BlockDataStructure block = null;
+
+ Lock[] locks = new Lock[end -st +1];
+
int k;
+ //int cou = st;
- for (k = st; k <= end && me.getStatus() == Status.ACTIVE; k++) {
+ for (k = st; k <= end /*&& me.getStatus() == Status.ACTIVE*/; k++) {
block = this.inodestate.getBlockDataStructure(Integer.valueOf(k));
-
block.getLock().readLock().lock();
+
+ // locks[k-st] = block.getLock().readLock();
if (!(block.getReaders().contains(me))) {
block.getReaders().add(me);
}
//whether this improves performance
if (k<=end) {
//We aborted here if k is less than or equal to end
+ me.blockcount = k - st;
for (int i = st; i < k; i++) {
- block = this.inodestate.getBlockDataStructure(Integer.valueOf(k));
- me.getHeldblocklocks().add(block.getLock().readLock());
+ // block = this.inodestate.getBlockDataStructure(Integer.valueOf(i));
+ me.getHeldblocklocks().add(block.getLock().readLock());
+ //me.toholdblocklocks[i-st] = this.inodestate.getBlockDataStructure(Integer.valueOf(i)).getLock().readLock();
+ // me.getHeldblocklocks().add(locks[i-st]);
}
throw new AbortedException();
}
//Needed to make sure that transaction only sees consistent data
if (me.getStatus() == Status.ABORTED) {
+ me.blockcount = end - st + 1;
for (int i = st; i <= end; i++) {
block = this.inodestate.getBlockDataStructure(Integer.valueOf(i));
+ // me.toholdblocklocks[i-st] = this.inodestate.getBlockDataStructure(Integer.valueOf(i)).getLock().readLock();
me.getHeldblocklocks().add(block.getLock().readLock());
+ // me.getHeldblocklocks().add(locks[i-st]);
}
throw new AbortedException();
}
for (k = st; k <= end; k++) {
block = this.inodestate.getBlockDataStructure(Integer.valueOf(k));
block.getLock().readLock().unlock();
+ //locks[k-st].unlock();
}
return size;
}
offsetlock.lock();
int startblock = FileBlockManager.getCurrentFragmentIndexofTheFile(committedoffset.getOffsetnumber());
int targetblock = FileBlockManager.getTargetFragmentIndexofTheFile(committedoffset.getOffsetnumber(), data.length);
+
+
+ WriteLock[] blocksar;
+ blocksar = new WriteLock[targetblock-startblock+1];
for (int i = startblock; i <= targetblock; i++) {
BlockDataStructure block = this.inodestate.getBlockDataStructure(i);
block.getLock().writeLock().lock();
- heldlocks.add(block.getLock().writeLock());
-
+ blocksar[i-startblock] = block.getLock().writeLock();
+ //heldlocks.add(block.getLock().writeLock());
}
try {
- invokeNativepwrite(data, committedoffset.getOffsetnumber(), data.length, file);
+ ExtendedTransaction.invokeNativepwrite(data, committedoffset.getOffsetnumber(), data.length, file);
//file.seek(committedoffset.getOffsetnumber());
//file.write(data);
committedoffset.setOffsetnumber(committedoffset.getOffsetnumber() + data.length);
- //} catch (IOException ex) {
- // Logger.getLogger(TransactionalFile.class.getName()).log(Level.SEVERE, null, ex);
} finally {
- unlockLocks(heldlocks);
+ // unlockLocks(heldlocks);
+ for (int i = startblock; i <= targetblock; i++) {
+ blocksar[i-startblock].unlock();
+ }
offsetlock.unlock();
}
}
public int non_Transactional_Read(byte[] b) {
int size = -1;
- Vector heldlocks = new Vector();
- boolean flag = true;
+
+
offsetlock.lock();
+
int startblock;
int targetblock;
startblock = FileBlockManager.getCurrentFragmentIndexofTheFile(committedoffset.getOffsetnumber());
targetblock = FileBlockManager.getTargetFragmentIndexofTheFile(committedoffset.getOffsetnumber(), size);
-
+ ReadLock[] blocksar;
+ blocksar = new ReadLock[targetblock-startblock+1];
+
for (int i = startblock; i <= targetblock; i++) {
BlockDataStructure block = this.inodestate.getBlockDataStructure(i);
block.getLock().readLock().lock();
- heldlocks.add(block.getLock().readLock());
+ blocksar[i-startblock] = block.getLock().readLock();
}
size = invokeNativepread(b, committedoffset.getOffsetnumber(), b.length);
}
committedoffset.getOffsetReaders().clear();
}
-
- unlockLocks(heldlocks);
+
+ for (int i = startblock; i <= targetblock; i++) {
+ blocksar[i-startblock].unlock();
+ }
+
+ //unlockLocks(heldlocks);
offsetlock.unlock();
if (size == 0) {
size = -1;