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