2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
5 package TransactionalIO.core;
11 import TransactionalIO.exceptions.AbortedException;
12 import TransactionalIO.benchmarks.benchmark;
13 import TransactionalIO.benchmarks.customhandler;
14 import TransactionalIO.benchmarks.customhandler;
15 import TransactionalIO.interfaces.BlockAccessModesEnum;
16 import TransactionalIO.interfaces.ContentionManager;
17 import TransactionalIO.interfaces.TransactionStatu;
18 //import dstm2.file.managers.BaseManager;
19 import java.awt.event.ActionListener;
20 import java.beans.EventHandler;
21 import java.beans.PropertyChangeEvent;
22 import java.beans.PropertyChangeListener;
23 import java.beans.PropertyChangeSupport;
24 import java.io.FileDescriptor;
25 import java.io.IOException;
26 import java.io.RandomAccessFile;
27 import java.util.Collections;
28 import java.util.HashMap;
29 import java.util.Iterator;
31 import java.util.TreeMap;
32 import java.util.Vector;
33 import java.util.concurrent.locks.Lock;
34 import java.util.concurrent.locks.ReentrantLock;
35 import java.util.concurrent.locks.ReentrantReadWriteLock;
36 import java.util.logging.Level;
37 import java.util.logging.Logger;
43 public class ExtendedTransaction implements TransactionStatu {
46 private native int nativepwrite(byte buff[], long offset, int size, FileDescriptor fd);
49 System.load("/home/navid/libkooni.so");
52 private boolean flag = true;
53 public TransactionStatu memorystate;
54 private PropertyChangeSupport changes = new PropertyChangeSupport(this);
58 public TreeMap msg = new TreeMap();
59 public int numberofwrites;
60 public int numberofreads;
62 public enum Status {ABORTED, ACTIVE, COMMITTED};
63 private boolean writesmerged = true;
65 //private Vector<ReentrantLock> heldoffsetlocks;
66 private Vector heldoffsetlocks;
68 //private Vector<ReentrantLock> heldblocklocks;
69 private Vector heldblocklocks;
71 //private HashMap<INode, Vector<TransactionalFile>> AccessedFiles;
72 private HashMap AccessedFiles;
75 //private HashMap<INode, HashMap<Integer, BlockAccessModesEnum> > accessedBlocks;
76 private HashMap accessedBlocks;
78 //private HashMap<TransactionalFile, TransactionLocalFileAttributes> LocaltoGlobalMappings;
79 private HashMap GlobaltoLocalMappings;
81 public HashMap merge_for_writes_done;
86 private HashMap writeBuffer;
88 private ContentionManager contentionmanager;
89 private /*volatile*/ Status status;
95 public ExtendedTransaction() {
97 // id = Integer.valueOf(Thread.currentThread().getName().substring(7));
98 heldblocklocks = new Vector() ;
99 heldoffsetlocks= new Vector();
100 AccessedFiles = new HashMap();
101 GlobaltoLocalMappings = new HashMap/*<TransactionalFile, TransactionLocalFileAttributes >*/();
102 writeBuffer = new HashMap();
103 status = Status.ACTIVE;
104 accessedBlocks = new HashMap();
105 merge_for_writes_done = new HashMap();
107 // setContentionmanager(new BaseManager());
108 // beginTransaction();
112 public ExtendedTransaction(TransactionStatu memorystate){
114 /* heldblocklocks = new Vector() ;
115 heldoffsetlocks= new Vector();
116 AccessedFiles = new HashMap();
117 GlobaltoLocalMappings = new HashMap();
118 writeBuffer = new HashMap();
119 status = Status.ACTIVE;
120 accessedBlocks = new HashMap();
121 merge_for_writes_done = new HashMap();
122 writesmerged = true;*/
123 this.memorystate = memorystate ;
126 private int invokeNativepwrite(byte buff[], long offset, int size, RandomAccessFile file) {
128 //System.out.println(buff.length);
129 // System.out.println(offset);
130 return nativepwrite(buff, offset, buff.length, file.getFD());
131 } catch (IOException ex) {
133 Logger.getLogger(TransactionalFile.class.getName()).log(Level.SEVERE, null, ex);
139 public void beginTransaction(){
140 this.addPropertyChangeListener(new customhandler(Status.ABORTED));
146 public void abort() {
148 // Status oldst = getStatus();
149 /* synchronized(benchmark.lock){
150 System.out.println("be ga raftim 0");
152 this.status = Status.ABORTED;
153 if (this.memorystate !=null && !(this.memorystate).isAborted()){
154 /* synchronized(benchmark.lock){
155 System.out.println(Thread.currentThread() +" be ga raftim 1 file");
157 this.memorystate.abortThisSystem();
158 /* synchronized(benchmark.lock){
159 System.out.println(Thread.currentThread() + " be ga raftim 2 file");
162 // Thread[] group = new Thread[30];
163 // Thread.currentThread().enumerate(group);
164 // group[this.id].interrupt();
165 /*synchronized(benchmark.lock){
166 System.out.println("/////////////");
167 System.out.println(Thread.currentThread() + " " +Thread.currentThread().enumerate(group));
168 System.out.println(Thread.currentThread() + " " +group[0]);
169 System.out.println(Thread.currentThread() + " " +group[1]);
170 System.out.println(Thread.currentThread() + " " +group[2]);
171 System.out.println("/////////////");
175 // this.changes.firePropertyChange("status", oldst, Status.ABORTED);
180 public Status getStatus() {
184 public boolean isActive() {
185 return this.getStatus() == Status.ACTIVE;
189 public boolean isAborted() {
190 return this.getStatus() == Status.ABORTED;
193 public ContentionManager getContentionmanager() {
194 return contentionmanager;
197 public void setContentionmanager(ContentionManager contentionmanager) {
198 this.contentionmanager = contentionmanager;
202 public HashMap getWriteBuffer() {
206 public HashMap getAccessedFiles() {
207 return AccessedFiles;
210 public boolean isWritesmerged() {
214 public void setWritesmerged(boolean writesmerged) {
215 this.writesmerged = writesmerged;
223 public HashMap getGlobaltoLocalMappings() {
224 return GlobaltoLocalMappings;
227 public HashMap getAccessedBlocks() {
228 return accessedBlocks;
232 public ContentionManager getBlockContentionManager(){
233 return ManagerRepository.getBlockcm();
236 public ContentionManager getOffsetContentionManager(){
237 return ManagerRepository.getOffsetcm();
240 public TreeMap getSortedFileAccessMap(HashMap hmap) {
241 /*TreeMap sortedMap = new TreeMap(hmap);
243 return new TreeMap(hmap);
247 public void setStatus(Status st){
248 Status oldst = getStatus();
250 this.changes.firePropertyChange("status", oldst, st);
256 public void addFile(TransactionalFile tf, long offsetnumber/*, TransactionLocalFileAttributes tmp*/) {
258 TransactionLocalFileAttributes tmp = new TransactionLocalFileAttributes(offsetnumber/*, tf.getInodestate().commitedfilesize.get()*/);
261 if (AccessedFiles.containsKey(tf.getInode())) {
262 dummy = (Vector) AccessedFiles.get(tf.getInode());
264 dummy = new Vector();
265 AccessedFiles.put(tf.getInode(), dummy);
268 GlobaltoLocalMappings.put(tf, tmp);
269 merge_for_writes_done.put(tf.getInode(), Boolean.TRUE);
273 public boolean lockOffsets() { /// Locking offsets for File Descriptors
276 TreeMap hm = getSortedFileAccessMap(AccessedFiles);
277 Iterator iter = hm.keySet().iterator();
279 while (iter.hasNext() && (this.getStatus() == Status.ACTIVE)) {
280 INode key = (INode) iter.next();
282 Vector vec = (Vector) AccessedFiles.get(key);
283 Collections.sort(vec);
284 Iterator it = vec.iterator();
285 while (it.hasNext()){
286 TransactionalFile value = (TransactionalFile) it.next();
287 while (this.getStatus() ==Status.ACTIVE){
288 //if (value.offsetlock.tryLock()) {
289 value.offsetlock.lock();
291 // synchronized(value.getCommitedoffset()){
292 // value.getCommitedoffset().setOffsetOwner(this);
294 // this.msg.put(System.nanoTime(), Thread.currentThread().getName() + " Locked the offset lock in commit for file " + value.getInode() + " from descriptor "+ value.getSequenceNum() +"\n");
295 heldoffsetlocks.add(value.offsetlock);
298 // getContentionmanager().resolveConflict(this, value.getCommitedoffset());
302 if (this.getStatus() != Status.ACTIVE){
310 if (this.getStatus() != Status.ACTIVE){
318 /*public boolean commit() { /// Locking offsets for File Descriptors
320 Map hm = getSortedFileAccessMap(FilesAccesses);
322 Iterator iter = hm.keySet().iterator();
323 TransactionLocalFileAttributes value;
324 while (iter.hasNext() && (this.getStatus() == Status.ACTIVE)) {
325 INode key = (INode) iter.next();
326 value = (TransactionLocalFileAttributes) hm.get(key);
327 synchronized(value.getCurrentcommitedoffset()){
328 if (value.offsetlock.tryLock()) {
329 value.getCurrentcommitedoffset().setOffsetOwner(this);
330 heldblocklocks.add(value.offsetlock);
331 Iterator it = value.getCurrentcommitedoffset().getOffsetReaders().iterator(); // for in-place aborting visible readers strategy
334 ExtendedTransaction tr = (ExtendedTransaction) it.next();
340 getOffsetContentionManager().resolveConflict(this, value.getCurrentcommitedoffset().getOffsetOwner());
345 /*public boolean commit() { /// Locking offsets for File Descriptors with checking strategy
347 Map hm = getSortedFileAccessMap(FilesAccesses);
349 Iterator iter = hm.keySet().iterator();
350 TransactionLocalFileAttributes value;
351 while (iter.hasNext() && (this.getStatus() == Status.ACTIVE)) {
352 INode key = (INode) iter.next();
353 value = (TransactionLocalFileAttributes) hm.get(key);
355 if (value.isValidatelocaloffset()) {
356 if (value.getCopylocaloffset() == value.currentcommitedoffset.getOffsetnumber()) {
357 value.offsetlock.lock();
358 heldoffsetlocks.add(value.offsetlock);
359 if (!(value.getCopylocaloffset() == value.currentcommitedoffset.getOffsetnumber())) {
368 value.offsetlock.lock();
369 heldoffsetlocks.add(value.offsetlock);
377 public boolean lockBlock(BlockDataStructure block, BlockAccessModesEnum mode/*, GlobalINodeState adapter, BlockAccessModesEnum mode, int expvalue, INode inode, TransactionLocalFileAttributes tf*/) {
380 //boolean locked = false;
385 if (mode == BlockAccessModesEnum.READ){
386 lock = block.getLock().readLock();
392 lock = block.getLock().writeLock();
396 while (this.getStatus() == Status.ACTIVE) {
397 //synchronized(block){
399 // if (lock.tryLock()) {
401 // synchronized(benchmark.lock){
402 // System.out.println(Thread.currentThread() + " Lock the block lock for " + lock +" number " + block.getBlocknumber());
404 heldblocklocks.add(lock);
405 // block.setOwner(this);
410 //getContentionmanager().resolveConflict(this, block);
416 public boolean lockBlock(BlockDataStructure block, Adapter adapter, BlockAccessModesEnum mode, int expvalue) { // from here for visible readers strategy
417 while (this.getStatus() == Status.ACTIVE) {
418 if (lock.tryLock()) {
419 Thread.onAbortOnce(new Runnable() {
426 heldblocklocks.add(lock);
428 synchronized (adapter) {
429 block.setOwner(this);
430 // Iterator it = block.getReaders().iterator();
431 // while (it.hasNext())
433 // ExtendedTransaction tr = (ExtendedTransaction) it.next();
440 getBlockContentionManager().resolveConflict(this, block.getOwner());
447 public boolean lockBlock(BlockDataStructure block, Adapter adapter, BlockAccessModesEnum mode, int expvalue) { // versioning strat
448 while (this.getStatus() == Status.ACTIVE) {
449 if (lock.tryLock()) {
450 Thread.onAbortOnce(new Runnable() {
457 heldblocklocks.add(lock);
458 if (mode != BlockAccessModesEnum.WRITE) { egy
459 if (block.getVersion().get() != expvalue) {
464 synchronized (adapter) {
465 block.setOwner(this);
470 getContentionManager().resolveConflict(this, block.getOwner());
476 public void prepareCommit() {
477 if (this.status != Status.ACTIVE)
478 throw new AbortedException();
484 // this.msg.put(System.nanoTime(),Thread.currentThread().getName() + " Aborted \n");
485 /* synchronized(benchmark.lock){
486 benchmark.msg += Thread.currentThread().getName() + " Aborted in prepare commit\n";
488 //Thread.currentThread().stop();
489 throw new AbortedException();
493 ///////////////////////////
496 Map hm = getWriteBuffer();
498 Iterator iter = hm.keySet().iterator();
499 WriteOperations value;
500 Vector vec = new Vector();
501 while (iter.hasNext() && (this.getStatus() == Status.ACTIVE) && ok) {
504 INode key = (INode) iter.next();
505 vec = (Vector) hm.get(key);
506 Collections.sort(vec);
507 Iterator it = vec.iterator();
508 while (it.hasNext()){
510 value = (WriteOperations) it.next();
511 if (value.isUnknownoffset()){
516 //synchronized(value.getOwnertransactionalFile().getCommitedoffset()){
517 start = value.getRange().getStart() - value.getBelongingto().getCopylocaloffset() + value.getOwnertransactionalFile().getCommitedoffset().getOffsetnumber();
518 end = value.getRange().getEnd() - value.getBelongingto().getCopylocaloffset() + value.getOwnertransactionalFile().getCommitedoffset().getOffsetnumber();
519 if (value.getBelongingto().isUnknown_inital_offset_for_write()){
520 value.getBelongingto().setLocaloffset(value.getBelongingto().getLocaloffset() - value.getBelongingto().getCopylocaloffset() + value.getOwnertransactionalFile().getCommitedoffset().getOffsetnumber());
521 value.getBelongingto().setUnknown_inital_offset_for_write(false);
525 // System.out.println("start write " + start);
526 /// System.out.println("end write " + end);
527 int startblock = FileBlockManager.getCurrentFragmentIndexofTheFile(start);
528 int targetblock = FileBlockManager.getTargetFragmentIndexofTheFile(start, value.getRange().getEnd() - value.getRange().getStart());
531 if (this.getAccessedBlocks().get(key) != null){
532 sset = (TreeMap) this.getAccessedBlocks().get(key);
536 sset = new TreeMap();
537 this.getAccessedBlocks().put(key, sset);
541 for (int i = startblock; i <= targetblock; i++) {
542 if (sset.containsKey(Integer.valueOf(i))){
543 if (sset.get(Integer.valueOf(i)) != BlockAccessModesEnum.WRITE)
544 sset.put(Integer.valueOf(i), BlockAccessModesEnum.READ_WRITE);
547 sset.put(Integer.valueOf(i), BlockAccessModesEnum.WRITE);
549 // tt.add(Integer.valueOf(i));
552 value.getRange().setStart(start);
553 value.getRange().setEnd(end);
555 // System.out.println(Thread.currentThread().);
556 // System.out.println(value.getRange().getStart());
557 // System.out.println(value.getRange().getEnd());
558 // System.out.println("---------------");
559 //this.getAccessedBlocks().put(value.getOwnertransactionalFile().getInode(), sset);
565 Iterator it = this.getAccessedBlocks().keySet().iterator();
566 while (it.hasNext() && (this.getStatus() == Status.ACTIVE)) {
567 INode inode = (INode) it.next();
568 GlobalINodeState inodestate = TransactionalFileWrapperFactory.getTateransactionalFileINodeState(inode);
569 TreeMap vec2 = (TreeMap) this.getAccessedBlocks().get(inode);
570 Iterator iter2 = vec2.keySet().iterator();
571 while(iter2.hasNext()){
572 Integer num = (Integer) iter2.next();
574 //BlockDataStructure blockobj = (BlockDataStructure) inodestate.lockmap.get(num);
575 BlockDataStructure blockobj;
576 // if (((BlockAccessModesEnum)vec2.get(num)) == BlockAccessModesEnum.WRITE){
577 blockobj = inodestate.getBlockDataStructure(num);
580 // blockobj = (BlockDataStructure) inodestate.lockmap.get(num);
582 ok = this.lockBlock(blockobj, (BlockAccessModesEnum)vec2.get(num));
585 /* synchronized(benchmark.lock){
586 benchmark.msg += Thread.currentThread().getName() + " Locked the Block Number " + blockobj.getBlocknumber() +" for " + inode + "\n";
588 // this.msg.put(System.nanoTime(), Thread.currentThread().getName() + " Locked the Block Number " + blockobj.getBlocknumber() + " for file " + inode + "\n");
592 if (this.getStatus() != Status.ACTIVE){
594 // this.msg.put(System.nanoTime(), Thread.currentThread().getName() + " Aborted \n");
595 /* synchronized(benchmark.lock){
596 benchmark.msg += Thread.currentThread().getName() + " Aborted \n";
598 // Thread.currentThread().stop();
599 throw new AbortedException();
604 //expvalue = ((Integer) value.getBlockversions().get(it)).intValue(); //for versioning strategy
605 /*if (!(value.isValidatelocaloffset())) {
606 if (((BlockAccessModesEnum) (value.getAccesedblocks().get(blockno))) != BlockAccessModesEnum.WRITE) { //versioning strategy
608 /if (blockobj.getVersion().get() == expvalue) {
610 ok = this.lock(blockobj, value.adapter, (BlockAccessModesEnum) (value.getAccesedblocks().get(blockno)), expvalue);
621 ok = this.lock(blockobj, value.adapter, (BlockAccessModesEnum) (value.getAccesedblocks().get(blockno)), expvalue);
631 throw new AbortedException();
635 public void commitChanges(){
637 // this.msg.put(System.nanoTime(), Thread.currentThread().getName() + " is committing \n");
641 //synchronized(benchmark.lock){
642 // System.out.println(Thread.currentThread().getName() + " is commiting");
646 Map hm = getWriteBuffer();
647 Iterator iter = hm.keySet().iterator();
649 WriteOperations writeop;
651 while (iter.hasNext() && (this.getStatus() == Status.ACTIVE)) {
652 INode key = (INode) iter.next();
654 vec = (Vector) hm.get(key);
655 Collections.sort(vec);
657 while (it.hasNext()){
660 //value = (WriteOperations) it.next();
661 // writeop = (WriteOperations) writeBuffer.get(key);
662 writeop = (WriteOperations) it.next();
663 // System.out.println(writeop);
664 Byte[] data = new Byte[(int) (writeop.getRange().getEnd() - writeop.getRange().getStart())];
665 byte[] bytedata = new byte[(int) (writeop.getRange().getEnd() - writeop.getRange().getStart())];
666 data = (Byte[]) writeop.getData();
668 for (int i = 0; i < data.length; i++) {
669 bytedata[i] = data[i];
674 // writeop.getOwnertransactionalFile().file.seek(writeop.getRange().getStart());
675 // System.out.println(Thread.currentThread() + " range " + writeop.getRange().getStart());
676 // writeop.getOwnertransactionalFile().file.write(bytedata);
677 invokeNativepwrite(bytedata, writeop.getRange().getStart(), bytedata.length, writeop.getOwnertransactionalFile().file);
678 // System.out.println(Thread.currentThread() + " " + bytedata);
680 // } catch (IOException ex) {
681 // Logger.getLogger(ExtendedTransaction.class.getName()).log(Level.SEVERE, null, ex);
688 /*if (((FileAccessModesEum) (this.FilesAccessModes.get(key))) == FileAccessModesEum.APPEND) {
690 Range range = (Range) value.getWrittendata().firstKey();
693 //synchronized(value.adapter){
694 //value.f.seek(value.adapter.commitedfilesize.get());
695 value.f.seek(value.getFilelength());
698 Byte[] data = new Byte[(int) (range.getEnd() - range.getStart())];
699 byte[] bytedata = new byte[(int) (range.getEnd() - range.getStart())];
700 data = (Byte[]) value.getWrittendata().get(range);
702 for (int i = 0; i < data.length; i++) {
703 bytedata[i] = data[i];
705 value.f.write(bytedata);
707 } catch (IOException ex) {
708 Logger.getLogger(ExtendedTransaction.class.getName()).log(Level.SEVERE, null, ex);
711 } else if (((FileAccessModesEum) (this.FilesAccessModes.get(key))) == FileAccessModesEum.READ) {
714 else if (value.relocatablewrite && value.getContinious_written_data() != null){
718 else if (!(value.getNon_Speculative_Writtendata().isEmpty())) {
719 int tobeaddedoffset = 0;
721 if (value.isValidatelocaloffset()) {
724 tobeaddedoffset = (int) (value.getCurrentcommitedoffset().getOffsetnumber() - value.getCopylocaloffset());
726 Iterator it = value.getNon_Speculative_Writtendata().keySet().iterator();
728 while (it.hasNext() && (this.getStatus() == Status.ACTIVE)) {
730 Range range = (Range) it.next();
733 value.f.seek(range.getStart() + tobeaddedoffset);
735 Byte[] data = new Byte[(int) (range.getEnd() - range.getStart())];
736 byte[] bytedata = new byte[(int) (range.getEnd() - range.getStart())];
737 data = (Byte[]) value.getNon_Speculative_Writtendata().get(range);
739 for (int i = 0; i < data.length; i++) {
740 bytedata[i] = data[i];
742 value.f.write(bytedata);
745 } catch (IOException ex) {
746 Logger.getLogger(ExtendedTransaction.class.getName()).log(Level.SEVERE, null, ex);
755 iter = hm.keySet().iterator();
756 while (iter.hasNext() ) {
757 INode key = (INode) iter.next();
758 value = (TransactionLocalFileAttributes) hm.get(key);
759 Iterator it = value.getAccesedblocks().keySet().iterator();
761 while (it.hasNext()) {
762 Integer blockno = (Integer) it.next();
763 synchronized (value.adapter) {
764 //BlockDataStructure blockobj = (BlockDataStructure) value.adapter.lockmap.get(blockno);
765 //blockobj.getVersion().getAndIncrement(); for versioning strategy
766 //value.getCurrentcommitedoffset().setOffsetnumber(value.getLocaloffset());
767 //value.adapter.commitedfilesize.getAndSet(value.getFilelength());
771 Iterator k = GlobaltoLocalMappings.keySet().iterator();
773 TransactionalFile trf = (TransactionalFile) (k.next());
774 // synchronized(trf.getCommitedoffset()){
775 trf.getCommitedoffset().setOffsetnumber(((TransactionLocalFileAttributes)GlobaltoLocalMappings.get(trf)).getLocaloffset());
776 /*synchronized(benchmark.lock){
777 System.out.println(Thread.currentThread() + " KIRIR " +GlobaltoLocalMappings.get(trf).getLocaloffset());
785 public void unlockAllLocks() {
786 Iterator it = heldblocklocks.iterator();
788 while (it.hasNext()) {
790 Lock lock = (Lock) it.next();
793 /*synchronized(benchmark.lock){
794 System.out.println(Thread.currentThread().getName() + " Released the block lock for " + lock);
797 heldblocklocks.clear();
799 it = heldoffsetlocks.iterator();
800 while (it.hasNext()) {
801 ReentrantLock lock = (ReentrantLock) it.next();
803 // synchronized(benchmark.lock){
804 // System.out.println(Thread.currentThread().getName() + " Released the offset lock for "+ lock +"\n");
807 heldoffsetlocks.clear();
810 public void abortAllReaders(){
811 TreeMap hm = getSortedFileAccessMap(AccessedFiles);
813 Iterator iter = hm.keySet().iterator();
814 TransactionalFile value;
815 while (iter.hasNext()) {
816 INode key = (INode) iter.next();
817 Vector vec = (Vector) AccessedFiles.get(key);
818 Iterator it = vec.iterator();
822 value = (TransactionalFile)it.next();
824 //value = (TransactionalFile) hm.get(key);
825 //System.out.println(value.getCommitedoffset().getOffsetReaders());
827 Iterator it2 = value.getCommitedoffset().getOffsetReaders().iterator(); // for visible readers strategy
828 while ( it2.hasNext())
831 ExtendedTransaction tr = (ExtendedTransaction) it2.next();
835 value.getCommitedoffset().getOffsetReaders().clear();
842 if (accessedBlocks.get(key) != null){
843 vec2 = (TreeMap) accessedBlocks.get(key);
846 vec2 = new TreeMap();
849 GlobalINodeState inodestate = TransactionalFileWrapperFactory.getTateransactionalFileINodeState(key);
850 Iterator it2 = vec2.keySet().iterator();
852 while (it2.hasNext())
855 Integer num = (Integer)it2.next();
856 if (vec2.get(num) != BlockAccessModesEnum.READ)
858 BlockDataStructure blockobj = (BlockDataStructure) inodestate.getBlockDataStructure(num);//lockmap.get(num);
859 Iterator it4 = blockobj.getReaders().iterator(); // from here for visible readers strategy
861 while (it4.hasNext())
864 ExtendedTransaction tr = (ExtendedTransaction) it4.next();
868 blockobj.getReaders().clear();
876 /* SortedSet sst = (SortedSet) this.getAccessedBlocks().get(key);
877 Iterator it3 = sst.iterator();
878 while (it3.hasNext()){
879 Integer num = (Integer)it.next();
880 BlockDataStructure blockobj = (BlockDataStructure) value.getInodestate().lockmap.get(num);
881 Iterator it4 = blockobj.getReaders().iterator(); // from here for visible readers strategy
882 while (it4.hasNext())
884 ExtendedTransaction tr = (ExtendedTransaction) it3.next();
893 public void addPropertyChangeListener(PropertyChangeListener listener){
894 this.changes.addPropertyChangeListener("status",listener);
897 public void removePropertyChangeListener(PropertyChangeListener listener){
898 this.changes.removePropertyChangeListener("status",listener);
901 public TransactionStatu getOtherSystem() {
905 public void setOtherSystem(TransactionStatu othersystem) {
906 memorystate = othersystem;
909 public Vector getHeldblocklocks() {
910 return heldblocklocks;
913 public void setHeldblocklocks(Vector heldblocklocks) {
914 this.heldblocklocks = heldblocklocks;
917 public Vector getHeldoffsetlocks() {
918 return heldoffsetlocks;
921 public void setHeldoffsetlocks(Vector heldoffsetlocks) {
922 this.heldoffsetlocks = heldoffsetlocks;
925 public void abortThisSystem() {
929 public boolean isCommitted() {
930 if (this.status == Status.COMMITTED)