Mercurial > hg > Database > Alice
annotate src/main/java/alice/codesegment/InputDataSegment.java @ 523:145c425db88d dispose
add CompressedLDSM
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 09 Apr 2015 18:36:26 +0900 |
parents | 549cc29aca59 |
children | 30a74eee59c7 |
rev | line source |
---|---|
345 | 1 package alice.codesegment; |
2 | |
3 import java.util.concurrent.atomic.AtomicInteger; | |
4 | |
5 import alice.datasegment.Command; | |
6 import alice.datasegment.CommandType; | |
7 import alice.datasegment.DataSegment; | |
8 import alice.datasegment.Receiver; | |
455
b004f62b83e5
refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents:
452
diff
changeset
|
9 import alice.datasegment.SendOption; |
345 | 10 |
11 /** | |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
12 * RemoteかLocalかで分けて処理する。ここに圧縮DSMへ投げる処理を追加。 |
345 | 13 * InputDataSegment Manager |
14 * keep tracking unbound/bound count | |
15 * @author kazz | |
16 * | |
17 */ | |
18 public class InputDataSegment { | |
417 | 19 |
20 public CodeSegment cs; | |
21 private AtomicInteger count = new AtomicInteger(1); // 1 for no input data segments | |
22 private AtomicInteger keyCount = new AtomicInteger(0); // number of DataSegments | |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
23 |
417 | 24 public InputDataSegment(CodeSegment cs) { |
25 this.cs = cs; | |
26 } | |
27 | |
28 public void init(){ | |
29 count = new AtomicInteger(1); | |
30 keyCount = new AtomicInteger(0); | |
31 } | |
32 | |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
33 public void quickPeek(Receiver receiver) {//SEDAで実行 |
481 | 34 cs.register(receiver); |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
35 |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
36 if (receiver.compressedFlag){ |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
37 if (receiver.managerKey == null){//localの場合 |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
38 DataSegment.getCompressedLocal().peek(receiver, cs, true); |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
39 } else { |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
40 if (DataSegment.contains(receiver.managerKey)) {//remoteの場合 |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
41 DataSegment.get(receiver.managerKey).peek(receiver, cs, true);//remoteはあとで考える。DataSegment.connect |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
42 } |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
43 } |
417 | 44 } else { |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
45 if (receiver.managerKey == null){ |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
46 DataSegment.getLocal().peek(receiver, cs, true); |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
47 } else { |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
48 if (DataSegment.contains(receiver.managerKey)) { |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
49 DataSegment.get(receiver.managerKey).peek(receiver, cs, true); |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
50 } |
471
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
458
diff
changeset
|
51 } |
455
b004f62b83e5
refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents:
452
diff
changeset
|
52 } |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
53 |
455
b004f62b83e5
refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents:
452
diff
changeset
|
54 } |
b004f62b83e5
refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents:
452
diff
changeset
|
55 |
b004f62b83e5
refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents:
452
diff
changeset
|
56 |
b004f62b83e5
refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents:
452
diff
changeset
|
57 public void peek(Receiver receiver) { |
481 | 58 cs.register(receiver); |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
59 |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
60 if (receiver.compressedFlag){ |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
61 if (receiver.managerKey==null){ |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
62 DataSegment.getCompressedLocal().peek(receiver, cs, false); |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
63 } else { |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
64 if (DataSegment.contains(receiver.managerKey)) { |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
65 DataSegment.get(receiver.managerKey).peek(receiver, cs, false); |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
66 } |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
67 } |
455
b004f62b83e5
refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents:
452
diff
changeset
|
68 } else { |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
69 if (receiver.managerKey==null){ |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
70 DataSegment.getLocal().peek(receiver, cs, false); |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
71 } else { |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
72 if (DataSegment.contains(receiver.managerKey)) { |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
73 DataSegment.get(receiver.managerKey).peek(receiver, cs, false); |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
74 } |
471
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
458
diff
changeset
|
75 } |
417 | 76 } |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
77 |
417 | 78 } |
79 | |
80 public void quickTake(Receiver receiver) { | |
481 | 81 cs.register(receiver); |
417 | 82 if (receiver.managerKey==null){ |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
83 DataSegment.getLocal().take(receiver, cs, true); |
417 | 84 } else { |
471
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
458
diff
changeset
|
85 if (DataSegment.contains(receiver.managerKey)) { |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
86 DataSegment.get(receiver.managerKey).take(receiver, cs, true); |
471
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
458
diff
changeset
|
87 } |
417 | 88 } |
89 } | |
90 | |
91 public void take(Receiver receiver) { | |
481 | 92 cs.register(receiver); |
417 | 93 if (receiver.managerKey==null){ |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
94 DataSegment.getLocal().take(receiver, cs, false); |
417 | 95 } else { |
471
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
458
diff
changeset
|
96 if (DataSegment.contains(receiver.managerKey)) { |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
97 DataSegment.get(receiver.managerKey).take(receiver, cs, false); |
471
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
458
diff
changeset
|
98 } |
417 | 99 } |
100 } | |
345 | 101 |
417 | 102 public void reply(Receiver receiver, Command reply) { |
103 receiver.index = reply.index; | |
471
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
458
diff
changeset
|
104 receiver.from = reply.reverseKey; |
458 | 105 receiver.setData(reply.rData); |
417 | 106 receive(); |
107 } | |
108 | |
109 public void register() { | |
110 count.getAndIncrement(); | |
111 keyCount.getAndIncrement(); | |
112 } | |
345 | 113 |
417 | 114 public void setKey() { |
115 if (keyCount.decrementAndGet() == 0) { | |
116 receive(); | |
117 } | |
118 } | |
119 | |
120 public void receive() { | |
121 if (count.decrementAndGet() == 0) { | |
122 CodeSegmentManager.submit(cs); | |
123 } | |
124 } | |
345 | 125 |
417 | 126 /** |
127 * InputDataSegment factory | |
128 * @param type PEEK or TAKE | |
471
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
458
diff
changeset
|
129 * @return Receiver of DataSegment reply |
417 | 130 */ |
131 public Receiver create(CommandType type) { | |
132 return new Receiver(this, type); | |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
133 }//Receiverを作成 |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
134 public Receiver create(CommandType type, boolean compressFlag) {//追加 |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
135 return new Receiver(this, type, compressFlag); |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
136 }//Receiverを作成 |
417 | 137 |
138 public void recommand(Receiver receiver) { | |
139 // TODO why only local? | |
140 DataSegment.getLocal().recommand(receiver, cs); | |
141 } | |
142 | |
143 public void setCounter(int cnt){ | |
144 count.set(cnt); | |
145 } | |
345 | 146 } |