Mercurial > hg > Members > tatsuki > bench > jungle-core
comparison 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 |
comparison
equal
deleted
inserted
replaced
153:20af7f25ef32 | 154:b8cef4b640a3 |
---|---|
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet; | 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; | 9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; |
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog; | 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; | 11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; |
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference.Reservation; | 12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference.Reservation; |
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; | |
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; | 14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; |
14 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError; | 15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError; |
15 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; | 16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; |
16 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; | 17 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; |
17 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Index; | 18 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Index; |
19 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.IndexManager; | |
18 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex; | 20 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex; |
19 | 21 |
20 public class DefaultTransactionManager implements TransactionManager | 22 public class DefaultTransactionManager implements TransactionManager { |
21 { | 23 private final AtomicReservableReference<TreeContext> repository; |
22 private final AtomicReservableReference<TreeContext> repository; | 24 private final TreeContext tip; |
23 private final TreeContext tip; | 25 private final ChangeListWriter writer; |
24 private final ChangeListWriter writer; | 26 private final String uuid; |
25 private final String uuid; | |
26 | |
27 public DefaultTransactionManager(ChangeListWriter _writer,TreeContext _tip, AtomicReservableReference<TreeContext> _repository,String _uuid) | |
28 { | |
29 repository = _repository; | |
30 tip = _tip; | |
31 writer = _writer; | |
32 uuid = _uuid; | |
33 } | |
34 | |
35 @Override | |
36 public Either<Error,TransactionManager> commit(TreeNode _newRoot,final TreeOperationLog _log) | |
37 { | |
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 @Override | |
49 public String getTreeName(){ | |
50 return _treeName; | |
51 } | |
52 @Override | |
53 public String uuid(){ | |
54 return uuid; | |
55 } | |
56 | 27 |
57 }; | 28 public DefaultTransactionManager(ChangeListWriter _writer, TreeContext _tip, |
58 | 29 AtomicReservableReference<TreeContext> _repository, String _uuid) { |
59 Index nulIndex = new Index(); | 30 repository = _repository; |
60 ParentIndex nulParentIndex = new ParentIndex(); | 31 tip = _tip; |
61 DefaultChangeSet newCs = new DefaultChangeSet(_newRoot,cs,list,uuid, _treeName, nextRevision, nulIndex, nulParentIndex); | 32 writer = _writer; |
62 DefaultTreeContext newContext = new DefaultTreeContext(_newRoot,newCs); | 33 uuid = _uuid; |
63 | 34 } |
64 @SuppressWarnings("rawtypes") | |
65 Reservation reservation = repository.makeReservation(tip,newContext); | |
66 if(reservation == null){ | |
67 return DefaultEither.newA((Error)new DefaultError()); | |
68 } | |
69 Result r = writer.write(list); | |
70 if(r == Result.SUCCESS){ | |
71 reservation.confirm(); | |
72 TransactionManager txManager = new DefaultTransactionManager(writer,newContext,repository,uuid); | |
73 return DefaultEither.newB(txManager); | |
74 } | |
75 return DefaultEither.newA((Error)new DefaultError()); | |
76 } | |
77 | 35 |
78 @Override | 36 @Override |
79 public String getUUID() | 37 public Either<Error, TransactionManager> commit(TreeNode _newRoot, final TreeOperationLog _log) { |
80 { | 38 ChangeSet cs = tip.getChangeSet(); |
81 return uuid; | 39 long currentRevision = cs.revision(); |
82 } | 40 long nextRevision = currentRevision + 1; |
83 | 41 |
84 @Override | 42 final String _treeName = cs.getTreeName(); |
85 public long getRevision() | 43 ChangeList list = new ChangeList() { |
86 { | 44 @Override |
87 ChangeSet cs = tip.getChangeSet(); | 45 public Iterator<TreeOperation> iterator() { |
88 return cs.revision(); | 46 return _log.iterator(); |
89 } | 47 } |
48 | |
49 @Override | |
50 public String getTreeName() { | |
51 return _treeName; | |
52 } | |
53 | |
54 @Override | |
55 public String uuid() { | |
56 return uuid; | |
57 } | |
58 | |
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); | |
69 | |
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 } | |
83 | |
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 } | |
90 } | 94 } |