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 }