Mercurial > hg > Members > tatsuki > bench > jungle-core
annotate src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java @ 166:6615db346bf5
miner change
author | one |
---|---|
date | Wed, 24 Dec 2014 14:33:17 +0900 |
parents | 7be56a1be5d9 |
children | 3cd075a445bf |
rev | line source |
---|---|
38
cb9fabaedfd4
added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff
changeset
|
1 package jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction; |
cb9fabaedfd4
added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff
changeset
|
2 |
162 | 3 import java.io.BufferedWriter; |
4 import java.io.File; | |
5 import java.io.FileWriter; | |
6 import java.io.IOException; | |
7 import java.io.PrintWriter; | |
45 | 8 import java.util.Iterator; |
103 | 9 |
45 | 10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList; |
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter; | |
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Result; | |
54 | 13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet; |
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; | |
53 | 15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog; |
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; | |
45 | 17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference.Reservation; |
154 | 18 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; |
45 | 19 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; |
20 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError; | |
38
cb9fabaedfd4
added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff
changeset
|
21 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; |
cb9fabaedfd4
added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff
changeset
|
22 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; |
151 | 23 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Index; |
154 | 24 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.IndexManager; |
149 | 25 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex; |
38
cb9fabaedfd4
added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff
changeset
|
26 |
154 | 27 public class DefaultTransactionManager implements TransactionManager { |
28 private final AtomicReservableReference<TreeContext> repository; | |
29 private final TreeContext tip; | |
30 private final ChangeListWriter writer; | |
31 private final String uuid; | |
32 | |
33 public DefaultTransactionManager(ChangeListWriter _writer, TreeContext _tip, | |
34 AtomicReservableReference<TreeContext> _repository, String _uuid) { | |
35 repository = _repository; | |
36 tip = _tip; | |
37 writer = _writer; | |
38 uuid = _uuid; | |
39 } | |
40 | |
41 @Override | |
42 public Either<Error, TransactionManager> commit(TreeNode _newRoot, final TreeOperationLog _log) { | |
43 ChangeSet cs = tip.getChangeSet(); | |
44 long currentRevision = cs.revision(); | |
45 long nextRevision = currentRevision + 1; | |
46 | |
47 final String _treeName = cs.getTreeName(); | |
48 ChangeList list = new ChangeList() { | |
49 @Override | |
50 public Iterator<TreeOperation> iterator() { | |
51 return _log.iterator(); | |
52 } | |
53 | |
54 @Override | |
55 public String getTreeName() { | |
56 return _treeName; | |
57 } | |
58 | |
59 @Override | |
60 public String uuid() { | |
61 return uuid; | |
62 } | |
135 | 63 |
154 | 64 }; |
65 | |
66 IndexManager indexManager = new IndexManager(repository.getReservation()); | |
166 | 67 InterfaceTraverser traverser = new InterfaceTraverser(_newRoot, indexManager, false); |
154 | 68 traverser.createIndex(); |
163 | 69 Index index = traverser.getIndex(); |
70 ParentIndex parentIndex = traverser.getParentIndex(); | |
71 DefaultChangeSet newCs = new DefaultChangeSet(_newRoot, cs, list, uuid, _treeName, nextRevision, index.getIndex(), | |
72 parentIndex.getParentIndex()); | |
154 | 73 DefaultTreeContext newContext = new DefaultTreeContext(_newRoot, newCs); |
38
cb9fabaedfd4
added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff
changeset
|
74 |
154 | 75 @SuppressWarnings("rawtypes") |
76 Reservation reservation = repository.makeReservation(tip, newContext); | |
77 if (reservation == null) { | |
78 return DefaultEither.newA((Error) new DefaultError()); | |
79 } | |
80 Result r = writer.write(list); | |
81 if (r == Result.SUCCESS) { | |
82 reservation.confirm(); | |
83 TransactionManager txManager = new DefaultTransactionManager(writer, newContext, repository, uuid); | |
84 return DefaultEither.newB(txManager); | |
85 } | |
86 return DefaultEither.newA((Error) new DefaultError()); | |
87 } | |
45 | 88 |
154 | 89 @Override |
90 public String getUUID() { | |
91 return uuid; | |
92 } | |
93 | |
94 @Override | |
95 public long getRevision() { | |
96 ChangeSet cs = tip.getChangeSet(); | |
97 return cs.revision(); | |
98 } | |
38
cb9fabaedfd4
added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff
changeset
|
99 } |