4 * Copyright 2006 Sun Microsystems, Inc., 4150 Network Circle, Santa
5 * Clara, California 95054, U.S.A. All rights reserved.
7 * Sun Microsystems, Inc. has intellectual property rights relating to
8 * technology embodied in the product that is described in this
9 * document. In particular, and without limitation, these
10 * intellectual property rights may include one or more of the
11 * U.S. patents listed at http://www.sun.com/patents and one or more
12 * additional patents or pending patent applications in the U.S. and
15 * U.S. Government Rights - Commercial software.
16 * Government users are subject to the Sun Microsystems, Inc. standard
17 * license agreement and applicable provisions of the FAR and its
18 * supplements. Use is subject to license terms. Sun, Sun
19 * Microsystems, the Sun logo and Java are trademarks or registered
20 * trademarks of Sun Microsystems, Inc. in the U.S. and other
23 * This product is covered and controlled by U.S. Export Control laws
24 * and may be subject to the export or import laws in other countries.
25 * Nuclear, missile, chemical biological weapons or nuclear maritime
26 * end uses or end users, whether direct or indirect, are strictly
27 * prohibited. Export or reexport to countries subject to
28 * U.S. embargo or to entities identified on U.S. export exclusion
29 * lists, including, but not limited to, the denied persons and
30 * specially designated nationals lists is strictly prohibited.
32 package TransactionalIO.core;
34 import java.util.Collections;
35 import java.util.HashMap;
37 import java.util.concurrent.ConcurrentHashMap;
38 import java.util.concurrent.atomic.AtomicLong;
41 * Obstruction-free atomic object implementation. Visible reads.
42 * Support snapshots and early release.
45 public class GlobalINodeState {
47 // public HashMap<Integer,BlockLock> lockmap;
48 public HashMap lockmap;
49 private ConcurrentHashMap conlockmap = new ConcurrentHashMap();
51 public GlobalLength commitedfilesize;
52 private ExtendedTransaction writer;
53 public int seqNum = 0;
56 public GlobalINodeState() {
62 protected GlobalINodeState(INode inode, long length) {
64 lockmap = new HashMap();
66 commitedfilesize = new GlobalLength(length);
67 // System.out.println(length);
74 public GlobalLength getCommitedfilesize() {
75 return commitedfilesize;
78 public void setCommitedfilesize(GlobalLength commitedfilesize) {
79 this.commitedfilesize = commitedfilesize;
82 public ExtendedTransaction getWriter() {
86 public void setWriter(ExtendedTransaction writer) {
90 public BlockDataStructure getBlockDataStructure(Integer blocknumber) {
91 /* synchronized (lockmap) {
92 if (lockmap.containsKey(blocknumber)) {
93 return ((BlockDataStructure) (lockmap.get(blocknumber)));
95 BlockDataStructure tmp = new BlockDataStructure(inode, blocknumber);
96 lockmap.put(blocknumber, tmp);
101 BlockDataStructure rec = (BlockDataStructure)conlockmap.get(blocknumber);
103 // record does not yet exist
104 BlockDataStructure newRec = new BlockDataStructure(inode, blocknumber);
105 rec = (BlockDataStructure)conlockmap.putIfAbsent(blocknumber, newRec);
107 // put succeeded, use new value