Mercurial > hg > Members > tatsuki > bench > jungle-core
diff src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java @ 179:817febd9c69b
change transaction
author | tatsuki |
---|---|
date | Tue, 17 Mar 2015 11:19:04 +0900 |
parents | 550f51183d8a |
children | 7282ee629af3 67d4c68578cf |
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java Sun Mar 15 20:52:15 2015 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/transaction/DefaultTransactionManager.java Tue Mar 17 11:19:04 2015 +0900 @@ -2,32 +2,30 @@ import java.util.Iterator; +import java.util.concurrent.atomic.AtomicReference; import fj.data.TreeMap; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeListWriter; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.Result; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet; +import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeContext; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.TreeOperationLog; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation; -import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.AtomicReservableReference.Reservation; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either; import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error; -import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.IndexManager; import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex; public class DefaultTransactionManager implements TransactionManager { - private final AtomicReservableReference<TreeContext> repository; + private final AtomicReference<TreeContext> repository; private final TreeContext tip; private final ChangeListWriter writer; private final String uuid; public DefaultTransactionManager(ChangeListWriter _writer, TreeContext _tip, - AtomicReservableReference<TreeContext> _repository, String _uuid) { + AtomicReference<TreeContext> _repository, String _uuid) { repository = _repository; tip = _tip; writer = _writer; @@ -35,12 +33,11 @@ } @Override - public Either<Error, TransactionManager> commit(TreeNode _newRoot, final TreeOperationLog _log) { - ChangeSet cs = tip.getChangeSet(); - long currentRevision = cs.revision(); + public Either<Error, TransactionManager> commit(TreeNode newRoot, final TreeOperationLog _log) { + long currentRevision = tip.revision(); long nextRevision = currentRevision + 1; - final String _treeName = cs.getTreeName(); + final String _treeName = tip.getTreeName(); ChangeList list = new ChangeList() { @Override public Iterator<TreeOperation> iterator() { @@ -58,26 +55,19 @@ } }; - IndexManager indexManager = new IndexManager(repository.getReservation()); - InterfaceTraverser traverser = new InterfaceTraverser(_newRoot, indexManager, true); - traverser.createIndex(); - TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> index = traverser.getIndex(); - ParentIndex parentIndex = traverser.getParentIndex(); - DefaultChangeSet newCs = new DefaultChangeSet(_newRoot, cs, list, uuid, _treeName, nextRevision, index, parentIndex.getParentIndex()); - DefaultTreeContext newContext = new DefaultTreeContext(_newRoot, newCs); + System.out.println("transaction"); + InterfaceTraverser traverser = new InterfaceTraverser(newRoot, true); + traverser.createIndex(); + TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> index = traverser.getIndex(); + ParentIndex parentIndex = traverser.getParentIndex(); + TreeContext newTreeContext = new DefaultTreeContext(newRoot , tip, list, uuid, _treeName, nextRevision,index,parentIndex.getParentIndex()); - @SuppressWarnings("rawtypes") - Reservation reservation = repository.makeReservation(tip, newContext); - if (reservation == null) { - return DefaultEither.newA((Error) new DefaultError()); + if (repository.compareAndSet(newTreeContext.prev(),newTreeContext)) { + TransactionManager txManager = new DefaultTransactionManager(writer, newTreeContext, repository, uuid); + return DefaultEither.newB(txManager); } - Result r = writer.write(list); - if (r == Result.SUCCESS) { - reservation.confirm(); - TransactionManager txManager = new DefaultTransactionManager(writer, newContext, repository, uuid); - return DefaultEither.newB(txManager); - } - return DefaultEither.newA((Error) new DefaultError()); + + return DefaultEither.newA((Error) new DefaultError()); } @Override @@ -87,7 +77,6 @@ @Override public long getRevision() { - ChangeSet cs = tip.getChangeSet(); - return cs.revision(); + return tip.revision(); } }