Mercurial > hg > Database > Alice
annotate src/main/java/alice/codesegment/InputDataSegment.java @ 527:bfec2c3ff1b8 dispose
change unzip
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 30 Apr 2015 18:14:02 +0900 |
parents | 928907206d21 |
children | b3c9554ccb1b |
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){ |
527 | 37 SendOption option = new SendOption(true, true); |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
38 if (receiver.managerKey == null){//localの場合 |
527 | 39 DataSegment.getCompressedLocal().peek(receiver, cs, option); |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
40 } else { |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
41 if (DataSegment.contains(receiver.managerKey)) {//remoteの場合 |
527 | 42 DataSegment.get(receiver.managerKey + "!").peek(receiver, cs, option); |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
43 } |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
44 } |
417 | 45 } else { |
527 | 46 SendOption option = new SendOption(true, false); |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
47 if (receiver.managerKey == null){ |
527 | 48 DataSegment.getLocal().peek(receiver, cs, option); |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
49 } else { |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
50 if (DataSegment.contains(receiver.managerKey)) { |
527 | 51 DataSegment.get(receiver.managerKey).peek(receiver, cs, option); |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
52 } |
471
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
458
diff
changeset
|
53 } |
455
b004f62b83e5
refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents:
452
diff
changeset
|
54 } |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
55 |
455
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 |
b004f62b83e5
refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents:
452
diff
changeset
|
58 |
b004f62b83e5
refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents:
452
diff
changeset
|
59 public void peek(Receiver receiver) { |
481 | 60 cs.register(receiver); |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
61 |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
62 if (receiver.compressedFlag){ |
527 | 63 SendOption option = new SendOption(false, true); |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
64 if (receiver.managerKey==null){ |
527 | 65 DataSegment.getCompressedLocal().peek(receiver, cs, option); |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
66 } else { |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
67 if (DataSegment.contains(receiver.managerKey)) { |
527 | 68 DataSegment.get(receiver.managerKey + "!").peek(receiver, cs, option); |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
69 } |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
70 } |
455
b004f62b83e5
refactor (remove quick method from DataSegmentManager and use flag)
sugi
parents:
452
diff
changeset
|
71 } else { |
527 | 72 SendOption option = new SendOption(false, false); |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
73 if (receiver.managerKey==null){ |
527 | 74 DataSegment.getLocal().peek(receiver, cs, option); |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
75 } else { |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
76 if (DataSegment.contains(receiver.managerKey)) { |
527 | 77 DataSegment.get(receiver.managerKey).peek(receiver, cs, option); |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
78 } |
471
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
458
diff
changeset
|
79 } |
417 | 80 } |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
81 |
417 | 82 } |
83 | |
84 public void quickTake(Receiver receiver) { | |
481 | 85 cs.register(receiver); |
525
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
86 |
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
87 if (receiver.compressedFlag){ |
527 | 88 SendOption option = new SendOption(true, true); |
525
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
89 if (receiver.managerKey==null){ |
527 | 90 DataSegment.getCompressedLocal().take(receiver, cs, option); |
525
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
91 } else { |
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
92 if (DataSegment.contains(receiver.managerKey)) { |
527 | 93 DataSegment.get(receiver.managerKey + "!").take(receiver, cs, option); |
525
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
94 } |
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
95 } |
417 | 96 } else { |
527 | 97 SendOption option = new SendOption(true, false); |
525
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
98 if (receiver.managerKey==null){ |
527 | 99 DataSegment.getLocal().take(receiver, cs, option); |
525
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
100 } else { |
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
101 if (DataSegment.contains(receiver.managerKey)) { |
527 | 102 DataSegment.get(receiver.managerKey).take(receiver, cs, option); |
525
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
103 } |
471
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
458
diff
changeset
|
104 } |
417 | 105 } |
106 } | |
107 | |
108 public void take(Receiver receiver) { | |
526
928907206d21
remove CompressedRDSM & CompressedLDSM class
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
525
diff
changeset
|
109 System.out.println("in TAKE"); |
481 | 110 cs.register(receiver); |
525
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
111 |
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
112 if (receiver.compressedFlag){ |
527 | 113 SendOption option = new SendOption(false, true); |
526
928907206d21
remove CompressedRDSM & CompressedLDSM class
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
525
diff
changeset
|
114 if (receiver.managerKey==null){// 指定なしの場合デフォはローカルになる |
527 | 115 DataSegment.getCompressedLocal().take(receiver, cs, option); |
525
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
116 } else { |
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
117 if (DataSegment.contains(receiver.managerKey)) { |
527 | 118 DataSegment.get(receiver.managerKey + "!").take(receiver, cs, option); |
525
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
119 } |
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
120 } |
417 | 121 } else { |
527 | 122 SendOption option = new SendOption(false, false); |
525
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
123 if (receiver.managerKey==null){ |
527 | 124 DataSegment.getLocal().take(receiver, cs, option); |
525
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
125 } else { |
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
126 if (DataSegment.contains(receiver.managerKey)) { |
527 | 127 DataSegment.get(receiver.managerKey).take(receiver, cs, option); |
525
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
128 } |
471
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
458
diff
changeset
|
129 } |
417 | 130 } |
131 } | |
345 | 132 |
417 | 133 public void reply(Receiver receiver, Command reply) { |
134 receiver.index = reply.index; | |
471
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
458
diff
changeset
|
135 receiver.from = reply.reverseKey; |
458 | 136 receiver.setData(reply.rData); |
417 | 137 receive(); |
138 } | |
139 | |
140 public void register() { | |
141 count.getAndIncrement(); | |
142 keyCount.getAndIncrement(); | |
143 } | |
345 | 144 |
417 | 145 public void setKey() { |
146 if (keyCount.decrementAndGet() == 0) { | |
147 receive(); | |
148 } | |
149 } | |
150 | |
151 public void receive() { | |
152 if (count.decrementAndGet() == 0) { | |
153 CodeSegmentManager.submit(cs); | |
154 } | |
155 } | |
345 | 156 |
417 | 157 /** |
158 * InputDataSegment factory | |
159 * @param type PEEK or TAKE | |
471
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
458
diff
changeset
|
160 * @return Receiver of DataSegment reply |
417 | 161 */ |
162 public Receiver create(CommandType type) { | |
163 return new Receiver(this, type); | |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
164 }//Receiverを作成 |
525
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
165 |
523
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
166 public Receiver create(CommandType type, boolean compressFlag) {//追加 |
145c425db88d
add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
481
diff
changeset
|
167 return new Receiver(this, type, compressFlag); |
525
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
523
diff
changeset
|
168 } |
417 | 169 |
170 public void recommand(Receiver receiver) { | |
171 // TODO why only local? | |
172 DataSegment.getLocal().recommand(receiver, cs); | |
173 } | |
174 | |
175 public void setCounter(int cnt){ | |
176 count.set(cnt); | |
177 } | |
345 | 178 } |