annotate src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle/transaction/DefaultTransactionManager.cs @ 7:02b2ab7bffe6

fix
author Kazuma
date Tue, 27 Sep 2016 18:36:05 +0900
parents a3af05a061b4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
1 using System.Collections.Generic;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
2 using System.Collections;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
3 using System;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
4
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
5 public class DefaultTransactionManager : TransactionManager {
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
6 private AtomicReference<TreeContext> repository;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
7 private TreeContext tip;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
8 private ChangeListWriter writer;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
9 private string uuid;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
10
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
11
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
12 public DefaultTransactionManager(ChangeListWriter _writer, TreeContext _tip, AtomicReference<TreeContext> _repository, string _uuid) {
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
13 repository = _repository;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
14 tip = _tip;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
15 writer = _writer;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
16 uuid = _uuid;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
17 }
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
18
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
19 public Either<Error, TransactionManager> commit(TreeNode newRoot, TreeOperationLog _log) {
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
20 long currentRevision = tip.getRevision();
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
21 long nextRevision = currentRevision + 1;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
22
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
23 string _treeName = tip.getTreeName();
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
24 // 通信時に必要?
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
25 ChangeList list = new InnerChangeList(_log, _treeName, uuid);
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
26
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
27 InterfaceTraverser traverser = new InterfaceTraverser(newRoot, true);
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
28 // traverser.createIndex();
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
29 TreeContext newTreeContext = new DefaultTreeContext(newRoot , tip, list, uuid, _treeName, nextRevision,traverser);
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
30 // compare and setがどういう役割か?Javaで
7
Kazuma
parents: 2
diff changeset
31 if (repository.CompareAndSet(newTreeContext, newTreeContext.prev())) { // CompareAndSetが成功した場合に処理を実行
0
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
32 TransactionManager txManager = new DefaultTransactionManager(writer, newTreeContext, repository, uuid);
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
33 return DefaultEither<Error, TransactionManager>.newB(txManager);
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
34 }
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
35
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
36 return DefaultEither<Error, TransactionManager>.newA((Error) new DefaultError());
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
37 }
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
38
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
39 public Either<Error, TransactionManager> firstcommit(TreeNode _newRoot, TreeOperationLog _log) {
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
40 return commit(_newRoot,_log);
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
41 }
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
42
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
43 public string getUUID() {
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
44 return uuid;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
45 }
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
46
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
47 public long getRevision() {
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
48 return tip.getRevision();
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
49 }
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
50
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
51 public class InnerChangeList : ChangeList{
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
52
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
53 TreeOperationLog log;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
54 string treeName;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
55 string uuid;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
56
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
57
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
58 IEnumerator IEnumerable.GetEnumerator()
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
59 {
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
60 // call the generic version of the method
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
61 return this.GetEnumerator();
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
62 }
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
63
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
64 public IEnumerator<TreeOperation> GetEnumerator()
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
65 {
2
a3af05a061b4 fix , but not work.
Kazuma
parents: 0
diff changeset
66 return iterator ();
0
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
67 }
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
68
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
69
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
70 public InnerChangeList(TreeOperationLog _log, string _treeName, string _uuid){
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
71 this.log = _log;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
72 this.treeName = _treeName;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
73 this.uuid = _uuid;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
74 }
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
75
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
76 public IEnumerator<TreeOperation> iterator() {
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
77 return log.GetEnumerator();
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
78 }
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
79
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
80 public string getTreeName() {
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
81 return treeName;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
82 }
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
83
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
84 public TreeOperationLog getLog() {
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
85 return log;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
86 }
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
87
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
88 public string uuids() {
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
89 return uuid;
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
90 }
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
91 }
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
92
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
93 }
dec15de2c6ff first commit
Kazuma
parents:
diff changeset
94