annotate src/alice/jungle/codesegment/LogUpdateCodeSegment.java @ 56:ccfe9b5e8f11

bug LogUpdateCodeSegment
author one
date Sun, 14 Jul 2013 21:26:49 +0900
parents 61b2de3f7730
children 1bfd13f831ea
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
34
bf696a6334b2 add LogUpdateCodeSegment
one
parents:
diff changeset
1 package alice.jungle.codesegment;
bf696a6334b2 add LogUpdateCodeSegment
one
parents:
diff changeset
2
40
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
3 import java.io.IOException;
56
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
4 import java.util.Iterator;
40
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
5
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
6 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
7 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
56
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
8 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.core.Node;
40
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
9 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.logger.DefaultTreeOperationLog;
56
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
10 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultEither;
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
11 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.DefaultError;
40
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
12 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
13 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
14 import jungle.test.bbs.JungleManager;
34
bf696a6334b2 add LogUpdateCodeSegment
one
parents:
diff changeset
15 import alice.codesegment.CodeSegment;
bf696a6334b2 add LogUpdateCodeSegment
one
parents:
diff changeset
16 import alice.datasegment.CommandType;
bf696a6334b2 add LogUpdateCodeSegment
one
parents:
diff changeset
17 import alice.datasegment.Receiver;
52
61b2de3f7730 add HashSetDataSegment and HashLogUpdateCodeSegment.
one
parents: 51
diff changeset
18 import alice.jungle.datasegment.HashSetDataSegment;
40
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
19 import alice.jungle.datasegment.store.operations.DefaultTreeOperationLogContainer;
46
fd3643699f83 modified pom.xml. fix conflict log4j libraries
one
parents: 43
diff changeset
20 import alice.jungle.transaction.NetworkDefaultJungleTreeEditor;
34
bf696a6334b2 add LogUpdateCodeSegment
one
parents:
diff changeset
21
bf696a6334b2 add LogUpdateCodeSegment
one
parents:
diff changeset
22 public class LogUpdateCodeSegment extends CodeSegment {
bf696a6334b2 add LogUpdateCodeSegment
one
parents:
diff changeset
23
52
61b2de3f7730 add HashSetDataSegment and HashLogUpdateCodeSegment.
one
parents: 51
diff changeset
24 Receiver parentLog = ids.create(CommandType.PEEK);
61b2de3f7730 add HashSetDataSegment and HashLogUpdateCodeSegment.
one
parents: 51
diff changeset
25 Receiver host = ids.create(CommandType.PEEK);
61b2de3f7730 add HashSetDataSegment and HashLogUpdateCodeSegment.
one
parents: 51
diff changeset
26 Receiver hashLog = ids.create(CommandType.PEEK);
39
10359a815068 add alice.jungle.codesegment.remote
one
parents: 34
diff changeset
27
47
686057add8a4 confirmed LogUpdateCodeSegment
one
parents: 46
diff changeset
28 public LogUpdateCodeSegment() {
52
61b2de3f7730 add HashSetDataSegment and HashLogUpdateCodeSegment.
one
parents: 51
diff changeset
29 parentLog.setKey("parent", "log");
50
459b50f1a6ee add ChildLogCheckCodeSegment.
one
parents: 49
diff changeset
30 host.setKey("host");
52
61b2de3f7730 add HashSetDataSegment and HashLogUpdateCodeSegment.
one
parents: 51
diff changeset
31 hashLog.setKey("hashLog");
39
10359a815068 add alice.jungle.codesegment.remote
one
parents: 34
diff changeset
32 }
10359a815068 add alice.jungle.codesegment.remote
one
parents: 34
diff changeset
33
50
459b50f1a6ee add ChildLogCheckCodeSegment.
one
parents: 49
diff changeset
34 public LogUpdateCodeSegment(int index) {
52
61b2de3f7730 add HashSetDataSegment and HashLogUpdateCodeSegment.
one
parents: 51
diff changeset
35 parentLog.setKey("parent", "log", index);
50
459b50f1a6ee add ChildLogCheckCodeSegment.
one
parents: 49
diff changeset
36 host.setKey("host");
52
61b2de3f7730 add HashSetDataSegment and HashLogUpdateCodeSegment.
one
parents: 51
diff changeset
37 hashLog.setKey("hashLog");
49
a89c3539bff2 modified LogUpdateCodeSegment
one
parents: 47
diff changeset
38 }
a89c3539bff2 modified LogUpdateCodeSegment
one
parents: 47
diff changeset
39
34
bf696a6334b2 add LogUpdateCodeSegment
one
parents:
diff changeset
40 public void run() {
51
9e782b4eb06e add HashSetConvertDataSegment
one
parents: 50
diff changeset
41 System.out.println("--LogUpdateCodeSegment--");
52
61b2de3f7730 add HashSetDataSegment and HashLogUpdateCodeSegment.
one
parents: 51
diff changeset
42 int index = parentLog.index;
47
686057add8a4 confirmed LogUpdateCodeSegment
one
parents: 46
diff changeset
43 String h = host.asString();
52
61b2de3f7730 add HashSetDataSegment and HashLogUpdateCodeSegment.
one
parents: 51
diff changeset
44 DefaultTreeOperationLogContainer container = parentLog.asClass(DefaultTreeOperationLogContainer.class);
61b2de3f7730 add HashSetDataSegment and HashLogUpdateCodeSegment.
one
parents: 51
diff changeset
45 HashSetDataSegment ds = hashLog.asClass(HashSetDataSegment.class);
61b2de3f7730 add HashSetDataSegment and HashLogUpdateCodeSegment.
one
parents: 51
diff changeset
46 if(ds.hash.contains(container.getHashLogString())) {
61b2de3f7730 add HashSetDataSegment and HashLogUpdateCodeSegment.
one
parents: 51
diff changeset
47 ods.update("hashLog", ds);
51
9e782b4eb06e add HashSetConvertDataSegment
one
parents: 50
diff changeset
48 new LogUpdateCodeSegment(index);
42
4419ac56cbfd implemented serverName filed
one
parents: 40
diff changeset
49 return;
4419ac56cbfd implemented serverName filed
one
parents: 40
diff changeset
50 }
40
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
51 DefaultTreeOperationLog log = null;
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
52 try {
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
53 log = container.convert();
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
54 } catch (IOException e) {
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
55 e.printStackTrace();
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
56 }
51
9e782b4eb06e add HashSetConvertDataSegment
one
parents: 50
diff changeset
57 String treeName = container.getTreeName();
9e782b4eb06e add HashSetConvertDataSegment
one
parents: 50
diff changeset
58 if (JungleManager.getJungle().getTreeByName(treeName) == null) {
9e782b4eb06e add HashSetConvertDataSegment
one
parents: 50
diff changeset
59 if(null == JungleManager.getJungle().createNewTree(treeName)){
9e782b4eb06e add HashSetConvertDataSegment
one
parents: 50
diff changeset
60 throw new IllegalStateException();
9e782b4eb06e add HashSetConvertDataSegment
one
parents: 50
diff changeset
61 }
9e782b4eb06e add HashSetConvertDataSegment
one
parents: 50
diff changeset
62 }
9e782b4eb06e add HashSetConvertDataSegment
one
parents: 50
diff changeset
63 JungleTree tree = JungleManager.getJungle().getTreeByName(treeName);
40
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
64 JungleTreeEditor editor = tree.getTreeEditor();
43
12d87bb4b84d modified LogUpdateCodeSegment
one
parents: 42
diff changeset
65 Either<Error, JungleTreeEditor> either = JungleManager.edit(editor, log);
40
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
66 if(either.isA()) {
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
67 throw new IllegalStateException();
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
68 }
7e94de2d6bc0 add PutAnotherLogCodeSegment, PutHostLogCodeSegment
one
parents: 39
diff changeset
69 editor = either.b();
46
fd3643699f83 modified pom.xml. fix conflict log4j libraries
one
parents: 43
diff changeset
70 either = editor.success();
fd3643699f83 modified pom.xml. fix conflict log4j libraries
one
parents: 43
diff changeset
71 if(either.isA()) {
fd3643699f83 modified pom.xml. fix conflict log4j libraries
one
parents: 43
diff changeset
72 throw new IllegalStateException();
fd3643699f83 modified pom.xml. fix conflict log4j libraries
one
parents: 43
diff changeset
73 }
52
61b2de3f7730 add HashSetDataSegment and HashLogUpdateCodeSegment.
one
parents: 51
diff changeset
74 ds.hash.add(container.getHashLogString());
61b2de3f7730 add HashSetDataSegment and HashLogUpdateCodeSegment.
one
parents: 51
diff changeset
75 ods.update("hashLog", ds);
61b2de3f7730 add HashSetDataSegment and HashLogUpdateCodeSegment.
one
parents: 51
diff changeset
76 System.out.println("ods.put log container");
49
a89c3539bff2 modified LogUpdateCodeSegment
one
parents: 47
diff changeset
77 ods.put("log", container);
51
9e782b4eb06e add HashSetConvertDataSegment
one
parents: 50
diff changeset
78 new LogUpdateCodeSegment(index);
34
bf696a6334b2 add LogUpdateCodeSegment
one
parents:
diff changeset
79 }
56
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
80
42
4419ac56cbfd implemented serverName filed
one
parents: 40
diff changeset
81
56
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
82 private DefaultEither<DefaultError, Integer> checkTimeStamp(Node node, long newNodeTimeStamp) {
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
83 int count = 0;
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
84 long childTimeStamp = 0;
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
85 for(Iterator<Node> iter = node.getChildren().iterator();iter.hasNext();) {
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
86 Node n = iter.next();
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
87 if(n.getAttributes().get("timestamp") == null) {
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
88 return DefaultEither.newA(new DefaultError());
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
89 }
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
90 if(n.getAttributes().get("timestamp") != null) {
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
91 childTimeStamp = n.getAttributes().get("timestamp").getLong();
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
92 if (newNodeTimeStamp < childTimeStamp) {
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
93 break;
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
94 }
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
95 }
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
96 count++;
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
97 }
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
98 return DefaultEither.newB(count);
42
4419ac56cbfd implemented serverName filed
one
parents: 40
diff changeset
99 }
56
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
100
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
101
ccfe9b5e8f11 bug LogUpdateCodeSegment
one
parents: 52
diff changeset
102
34
bf696a6334b2 add LogUpdateCodeSegment
one
parents:
diff changeset
103 }