annotate src/main/java/alice/datasegment/DataSegmentKey.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 145c425db88d
children 4aeebea0c9b5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
1 package alice.datasegment;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
2
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
3 import java.util.ArrayList;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
4 import java.util.Iterator;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
5
467
6e304a7a60e7 remove white space
sugi
parents: 458
diff changeset
6 import alice.datasegment.Command;
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
7
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
8 /**
523
145c425db88d add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 467
diff changeset
9 * ここがコマンドの中身部分
145c425db88d add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 467
diff changeset
10 *
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
11 * Synchronized DataSegment for each DataSegment key
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
12 * @author kazz
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
13 *
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
14 */
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
15 public class DataSegmentKey {
419
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
16
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
17 private ArrayList<DataSegmentValue> dataList = new ArrayList<DataSegmentValue>();
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
18 private ArrayList<Command> waitList = new ArrayList<Command>();
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
19 private int tailIndex = 1;
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
20
419
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
21 public synchronized void runCommand(Command cmd) {
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
22 switch (cmd.type) {
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
23 case UPDATE:
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
24 if (dataList.size() != 0) {
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
25 dataList.remove(0);
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
26 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
27 case PUT:
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
28 int index = tailIndex;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
29 tailIndex++;
467
6e304a7a60e7 remove white space
sugi
parents: 458
diff changeset
30 DataSegmentValue dsv = new DataSegmentValue(index, cmd.rData, cmd.reverseKey);
419
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
31 dataList.add(dsv);
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
32 // Process waiting peek and take commands
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
33 for (Iterator<Command> iter = waitList.iterator(); iter.hasNext(); ) {
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
34 Command waitCmd = iter.next();
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
35 if (waitCmd.index < index) {
527
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
36 System.out.println("DSKey cmdFlag:" + cmd.getCompressFlag());
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
37 replyValue(waitCmd, dsv, cmd.getCompressFlag());
419
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
38 iter.remove();
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
39 if (waitCmd.type == CommandType.TAKE) { // someone is waiting for this put or update command
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
40 dataList.remove(dsv);
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
41 break;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
42 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
43 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
44 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
45 break;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
46 case PEEK:
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
47 if (cmd.index >= tailIndex) {
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
48 waitList.add(cmd);
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
49 break;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
50 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
51 boolean waitFlag2 = true;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
52 for (DataSegmentValue data : dataList) {
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
53 if (data.index > cmd.index) {
452
f68d103498e0 refactor (InputDataSegment holder class changed)
sugi
parents: 448
diff changeset
54 replyValue(cmd, data);
419
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
55 waitFlag2 = false;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
56 break;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
57 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
58 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
59 if (waitFlag2)
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
60 waitList.add(cmd);
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
61 break;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
62 case TAKE:
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
63 if (cmd.index >= tailIndex) {
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
64 waitList.add(cmd);
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
65 break;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
66 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
67 boolean waitFlag = true;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
68 for (Iterator<DataSegmentValue> iter = dataList.iterator(); iter.hasNext(); ) {
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
69 DataSegmentValue data = iter.next();
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
70 if (data.index > cmd.index) {
527
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
71 System.out.println("DSKey2 cmdFlag:" + cmd.getCompressFlag());
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
72 replyValue(cmd, data, cmd.getCompressFlag());
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
73 //replyValue(cmd, data);
419
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
74 iter.remove();
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
75 waitFlag = false;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
76 break;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
77 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
78 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
79 if (waitFlag)
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
80 waitList.add(cmd);
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
81 break;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
82 case REMOVE:
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
83 // TODO: implements later
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
84 break;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
85 default:
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
86 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
87
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
88 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
89
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
90 public void replyValue(Command cmd, DataSegmentValue data){
458
bcf6f4a6fcd0 need set Meta DataSegment PUT API
sugi
parents: 452
diff changeset
91 Command rCmd = new Command(CommandType.REPLY, null, null, data.rData, data.index, cmd.seq, null, null, data.from);
527
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
92 cmd.setCompressFlag(true);
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
93 if (cmd.cs!=null){ // if cmd has cs-instance, it means Command from local.
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
94 cmd.cs.ids.reply(cmd.receiver, rCmd);
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
95 } else {
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
96 try {
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
97 if (!cmd.getQuickFlag()) {
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
98 cmd.connection.sendQueue.put(rCmd);
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
99 } else {
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
100 cmd.connection.write(rCmd);
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
101 }
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
102 } catch (InterruptedException e) {
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
103 e.printStackTrace();
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
104 }
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
105 }
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
106 }
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
107
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
108 public void replyValue(Command cmd, DataSegmentValue data, boolean cFlag){
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
109 Command rCmd = new Command(CommandType.REPLY, null, null, data.rData, data.index, cmd.seq, null, null, data.from);
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
110 rCmd.setCompressFlag(cFlag);
419
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
111 if (cmd.cs!=null){ // if cmd has cs-instance, it means Command from local.
452
f68d103498e0 refactor (InputDataSegment holder class changed)
sugi
parents: 448
diff changeset
112 cmd.cs.ids.reply(cmd.receiver, rCmd);
419
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
113 } else {
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
114 try {
458
bcf6f4a6fcd0 need set Meta DataSegment PUT API
sugi
parents: 452
diff changeset
115 if (!cmd.getQuickFlag()) {
452
f68d103498e0 refactor (InputDataSegment holder class changed)
sugi
parents: 448
diff changeset
116 cmd.connection.sendQueue.put(rCmd);
f68d103498e0 refactor (InputDataSegment holder class changed)
sugi
parents: 448
diff changeset
117 } else {
f68d103498e0 refactor (InputDataSegment holder class changed)
sugi
parents: 448
diff changeset
118 cmd.connection.write(rCmd);
419
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
119 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
120 } catch (InterruptedException e) {
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
121 e.printStackTrace();
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
122 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
123 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
124 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
125
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
126 }