Mercurial > hg > Members > tatsuki > bench > jungle-core
annotate src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java @ 73:e97a59269bf5
change to Various
author | one |
---|---|
date | Wed, 27 Aug 2014 01:02:11 +0900 |
parents | 57e965b73c9e |
children | a4e2f1d45fdc |
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; |
53 | 4 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node; |
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; |
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; | |
14 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
|
15 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
|
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; |
cb9fabaedfd4
added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff
changeset
|
17 |
54 | 18 public class DefaultTransactionManager<T extends TreeNode<T>> implements TransactionManager<T> |
38
cb9fabaedfd4
added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff
changeset
|
19 { |
54 | 20 private final AtomicReservableReference<TreeContext<T>> repository; |
21 private final TreeContext<T> tip; | |
45 | 22 private final ChangeListWriter writer; |
23 private final String uuid; | |
24 | |
54 | 25 public DefaultTransactionManager(ChangeListWriter _writer,TreeContext<T> _tip, |
26 AtomicReservableReference<TreeContext<T>> _repository,String _uuid) | |
45 | 27 { |
28 repository = _repository; | |
54 | 29 tip = _tip; |
45 | 30 writer = _writer; |
31 uuid = _uuid; | |
32 } | |
33 | |
38
cb9fabaedfd4
added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff
changeset
|
34 @Override |
73 | 35 public Either<Error,TransactionManager<T>> commit(TreeNode<T> _newRoot,final TreeOperationLog _log) |
38
cb9fabaedfd4
added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff
changeset
|
36 { |
73 | 37 ChangeSet<T> cs = tip.getChangeSet(); |
54 | 38 long currentRevision = cs.revision(); |
45 | 39 long nextRevision = currentRevision + 1; |
40 | |
59
57e965b73c9e
Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents:
54
diff
changeset
|
41 final String _treeName = cs.getTreeName(); |
45 | 42 ChangeList list = new ChangeList(){ |
43 @Override | |
53 | 44 public Iterator<TreeOperation> iterator(){ |
45 | 45 return _log.iterator(); |
46 } | |
59
57e965b73c9e
Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents:
54
diff
changeset
|
47 @Override |
57e965b73c9e
Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents:
54
diff
changeset
|
48 public String getTreeName(){ |
57e965b73c9e
Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents:
54
diff
changeset
|
49 return _treeName; |
57e965b73c9e
Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents:
54
diff
changeset
|
50 } |
57e965b73c9e
Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents:
54
diff
changeset
|
51 @Override |
57e965b73c9e
Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents:
54
diff
changeset
|
52 public String uuid(){ |
57e965b73c9e
Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents:
54
diff
changeset
|
53 return uuid; |
57e965b73c9e
Implement getTreeName method in ChangeSet and ChangeList interface.
one
parents:
54
diff
changeset
|
54 } |
45 | 55 }; |
56 | |
73 | 57 TreeNode<T> root = _newRoot; |
58 DefaultChangeSet<T> newCs = new DefaultChangeSet(root,cs,list,uuid, _treeName, nextRevision); | |
54 | 59 DefaultTreeContext<T> newContext = new DefaultTreeContext<T>(_newRoot,newCs); |
60 | |
61 @SuppressWarnings("rawtypes") | |
62 Reservation reservation = repository.makeReservation(tip,newContext); | |
45 | 63 if(reservation == null){ |
64 return DefaultEither.newA((Error)new DefaultError()); | |
65 } | |
66 Result r = writer.write(list); | |
67 if(r == Result.SUCCESS){ | |
68 reservation.confirm(); | |
54 | 69 TransactionManager<T> txManager = new DefaultTransactionManager<T>(writer,newContext,repository,uuid); |
45 | 70 return DefaultEither.newB(txManager); |
71 } | |
72 return DefaultEither.newA((Error)new DefaultError()); | |
38
cb9fabaedfd4
added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff
changeset
|
73 } |
cb9fabaedfd4
added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff
changeset
|
74 |
45 | 75 @Override |
76 public String getUUID() | |
77 { | |
78 return uuid; | |
79 } | |
80 | |
81 @Override | |
82 public long getRevision() | |
83 { | |
73 | 84 ChangeSet<T> cs = tip.getChangeSet(); |
54 | 85 return cs.revision(); |
45 | 86 } |
38
cb9fabaedfd4
added tests and changed testing provider to junit47
Shoshi TAMAKI
parents:
diff
changeset
|
87 } |