annotate src/main/java/alice/datasegment/DataSegmentKey.java @ 641:646f705e65b1

setkey on remote
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 31 Dec 2017 01:08:52 +0900
parents 924e5f52a61f
children
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
575
fe55be1ce12d add ids compress local
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 531
diff changeset
3 import java.io.IOException;
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
4 import java.util.ArrayList;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
5 import java.util.Iterator;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
6
467
6e304a7a60e7 remove white space
sugi
parents: 458
diff changeset
7 import alice.datasegment.Command;
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
8
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
9 /**
523
145c425db88d add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 467
diff changeset
10 * ここがコマンドの中身部分
145c425db88d add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 467
diff changeset
11 *
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
12 * Synchronized DataSegment for each DataSegment key
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
13 * @author kazz
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
14 *
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
15 */
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
16 public class DataSegmentKey {
419
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
17
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
18 private ArrayList<DataSegmentValue> dataList = new ArrayList<DataSegmentValue>();
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
19 private ArrayList<Command> waitList = new ArrayList<Command>();
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
20 private int tailIndex = 1;
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
21
419
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
22 public synchronized void runCommand(Command cmd) {
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
23 switch (cmd.type) {
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
24 case UPDATE:
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
25 if (dataList.size() != 0) {
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
26 dataList.remove(0);
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
27 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
28 case PUT:
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
29 int index = tailIndex;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
30 tailIndex++;
467
6e304a7a60e7 remove white space
sugi
parents: 458
diff changeset
31 DataSegmentValue dsv = new DataSegmentValue(index, cmd.rData, cmd.reverseKey);
419
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
32 dataList.add(dsv);
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
33 // Process waiting peek and take commands
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
34 for (Iterator<Command> iter = waitList.iterator(); iter.hasNext(); ) {
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
35 Command waitCmd = iter.next();
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
36 if (waitCmd.index < index) {
527
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) {
530
4aeebea0c9b5 can't unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 527
diff changeset
54 replyValue(cmd, data, cmd.getCompressFlag());
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 replyValue(cmd, data, cmd.getCompressFlag());
419
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
72 iter.remove();
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
73 waitFlag = false;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
74 break;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
75 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
76 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
77 if (waitFlag)
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
78 waitList.add(cmd);
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
79 break;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
80 case REMOVE:
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
81 // TODO: implements later
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
82 break;
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
83 default:
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
84 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
85
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
86 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
87
527
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
88 public void replyValue(Command cmd, DataSegmentValue data, boolean cFlag){
576
2df12c110ebc change print log
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 575
diff changeset
89 if (cFlag && !data.rData.compressed()){
575
fe55be1ce12d add ids compress local
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 531
diff changeset
90 try {
fe55be1ce12d add ids compress local
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 531
diff changeset
91 data.rData.zip();
641
646f705e65b1 setkey on remote
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 577
diff changeset
92 // System.out.println("in reply zip");
575
fe55be1ce12d add ids compress local
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 531
diff changeset
93 } catch (IOException e) {
fe55be1ce12d add ids compress local
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 531
diff changeset
94 e.printStackTrace();
fe55be1ce12d add ids compress local
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 531
diff changeset
95 }
fe55be1ce12d add ids compress local
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 531
diff changeset
96 }
527
bfec2c3ff1b8 change unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
97 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
98 rCmd.setCompressFlag(cFlag);
530
4aeebea0c9b5 can't unzip
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 527
diff changeset
99
419
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
100 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
101 cmd.cs.ids.reply(cmd.receiver, rCmd);
419
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
102 } else {
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
103 try {
458
bcf6f4a6fcd0 need set Meta DataSegment PUT API
sugi
parents: 452
diff changeset
104 if (!cmd.getQuickFlag()) {
452
f68d103498e0 refactor (InputDataSegment holder class changed)
sugi
parents: 448
diff changeset
105 cmd.connection.sendQueue.put(rCmd);
f68d103498e0 refactor (InputDataSegment holder class changed)
sugi
parents: 448
diff changeset
106 } else {
f68d103498e0 refactor (InputDataSegment holder class changed)
sugi
parents: 448
diff changeset
107 cmd.connection.write(rCmd);
419
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
108 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
109 } catch (InterruptedException e) {
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
110 e.printStackTrace();
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
111 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
112 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
113 }
aefbe41fcf12 change tab to space
sugi
parents: 345
diff changeset
114
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
115 }