annotate src/alice/datasegment/DataSegmentKey.java @ 298:4fe924c9f504

remove code
author sugi
date Tue, 22 Oct 2013 20:02:15 +0900
parents 88be2824a989
children a8255a831ade
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
f71eabb1df2a create outline of DataSegment model
one
parents:
diff changeset
1 package alice.datasegment;
f71eabb1df2a create outline of DataSegment model
one
parents:
diff changeset
2
3
91057e15065f add DataSegment API and CodeSegment
one
parents: 2
diff changeset
3 import java.util.ArrayList;
17
bb075e103cd3 bug fix for take()
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
4 import java.util.Iterator;
3
91057e15065f add DataSegment API and CodeSegment
one
parents: 2
diff changeset
5
91057e15065f add DataSegment API and CodeSegment
one
parents: 2
diff changeset
6 import alice.datasegment.Command;
91057e15065f add DataSegment API and CodeSegment
one
parents: 2
diff changeset
7
57
7fa9ddb31f64 add comment
one
parents: 44
diff changeset
8 /**
7fa9ddb31f64 add comment
one
parents: 44
diff changeset
9 * Synchronized DataSegment for each DataSegment key
7fa9ddb31f64 add comment
one
parents: 44
diff changeset
10 * @author kazz
7fa9ddb31f64 add comment
one
parents: 44
diff changeset
11 *
7fa9ddb31f64 add comment
one
parents: 44
diff changeset
12 */
2
f71eabb1df2a create outline of DataSegment model
one
parents:
diff changeset
13 public class DataSegmentKey {
f71eabb1df2a create outline of DataSegment model
one
parents:
diff changeset
14
3
91057e15065f add DataSegment API and CodeSegment
one
parents: 2
diff changeset
15 private ArrayList<DataSegmentValue> dataList = new ArrayList<DataSegmentValue>();
91057e15065f add DataSegment API and CodeSegment
one
parents: 2
diff changeset
16 private ArrayList<Command> waitList = new ArrayList<Command>();
73
4bfd81352cfa change to concurrent data segment
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
17 private int tailIndex = 1;
3
91057e15065f add DataSegment API and CodeSegment
one
parents: 2
diff changeset
18
73
4bfd81352cfa change to concurrent data segment
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
19 public synchronized void runCommand(Command cmd) {
69
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
20 switch (cmd.type) {
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
21 case UPDATE:
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
22 if (dataList.size() != 0) {
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
23 dataList.remove(0);
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
24 }
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
25 case PUT:
225
bc061ee5f31f bitonic sort work but data is not sorted
sugi
parents: 224
diff changeset
26 int index = tailIndex;
bc061ee5f31f bitonic sort work but data is not sorted
sugi
parents: 224
diff changeset
27 tailIndex++;
190
a85ff8dc16c1 add Object data
one
parents: 189
diff changeset
28 DataSegmentValue dsv = new DataSegmentValue(index, cmd.val, cmd.obj,cmd.reverseKey);
69
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
29 dataList.add(dsv);
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
30 // Process waiting peek and take commands
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
31 for (Iterator<Command> iter = waitList.iterator(); iter.hasNext(); ) {
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
32 Command waitCmd = iter.next();
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
33 if (waitCmd.index < index) {
235
4dc2f09a8f7a use extract method
sugi
parents: 232
diff changeset
34 replyValue(waitCmd ,dsv);
69
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
35 iter.remove();
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
36 if (waitCmd.type == CommandType.TAKE) { // someone is waiting for this put or update command
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
37 dataList.remove(dsv);
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
38 break;
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
39 }
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
40 }
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
41 }
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
42 break;
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
43 case PEEK:
73
4bfd81352cfa change to concurrent data segment
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
44 if (cmd.index >= tailIndex) {
69
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
45 waitList.add(cmd);
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
46 break;
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
47 }
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
48 boolean waitFlag2 = true;
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
49 for (DataSegmentValue data : dataList) {
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
50 if (data.index > cmd.index) {
232
496b687f3793 peek or take command from local no use Reply Thread
sugi
parents: 225
diff changeset
51 replyValue(cmd ,data);
69
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
52 waitFlag2 = false;
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
53 break;
3
91057e15065f add DataSegment API and CodeSegment
one
parents: 2
diff changeset
54 }
91057e15065f add DataSegment API and CodeSegment
one
parents: 2
diff changeset
55 }
69
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
56 if (waitFlag2)
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
57 waitList.add(cmd);
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
58 break;
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
59 case TAKE:
73
4bfd81352cfa change to concurrent data segment
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 69
diff changeset
60 if (cmd.index >= tailIndex) {
69
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
61 waitList.add(cmd);
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
62 break;
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
63 }
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
64 boolean waitFlag = true;
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
65 for (Iterator<DataSegmentValue> iter = dataList.iterator(); iter.hasNext(); ) {
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
66 DataSegmentValue data = iter.next();
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
67 if (data.index > cmd.index) {
232
496b687f3793 peek or take command from local no use Reply Thread
sugi
parents: 225
diff changeset
68 replyValue(cmd ,data);
69
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
69 iter.remove();
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
70 waitFlag = false;
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
71 break;
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
72 }
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
73 }
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
74 if (waitFlag)
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
75 waitList.add(cmd);
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
76 break;
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
77 case REMOVE:
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
78 // TODO: implements later
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
79 break;
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
80 default:
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
81 }
1d4f2b72fb31 delete KeyThread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 59
diff changeset
82
20
0bb03861b5cd set name to Thread
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
83 }
3
91057e15065f add DataSegment API and CodeSegment
one
parents: 2
diff changeset
84
232
496b687f3793 peek or take command from local no use Reply Thread
sugi
parents: 225
diff changeset
85 public void replyValue(Command cmd, DataSegmentValue data){
235
4dc2f09a8f7a use extract method
sugi
parents: 232
diff changeset
86 if (cmd.cs!=null){ // if cmd has cs-instance, it means Command from local.
4dc2f09a8f7a use extract method
sugi
parents: 232
diff changeset
87 cmd.cs.ids.reply(cmd.receiver, new Command(CommandType.REPLY, null, null, data.val, data.obj, data.index, cmd.seq, null, null, data.from));
232
496b687f3793 peek or take command from local no use Reply Thread
sugi
parents: 225
diff changeset
88 } else {
496b687f3793 peek or take command from local no use Reply Thread
sugi
parents: 225
diff changeset
89 try {
251
88be2824a989 no use Queue
sugi
parents: 236
diff changeset
90 if (!cmd.flag){
88be2824a989 no use Queue
sugi
parents: 236
diff changeset
91 cmd.connection.sendQueue.put(new Command(CommandType.REPLY, null, null, data.val, data.obj, data.index, cmd.seq, null, null, data.from));
88be2824a989 no use Queue
sugi
parents: 236
diff changeset
92 }
88be2824a989 no use Queue
sugi
parents: 236
diff changeset
93 else {
88be2824a989 no use Queue
sugi
parents: 236
diff changeset
94 cmd.connection.write(new Command(CommandType.REPLY, null, null, data.val, data.obj, data.index, cmd.seq, null, null, data.from));
88be2824a989 no use Queue
sugi
parents: 236
diff changeset
95 }
88be2824a989 no use Queue
sugi
parents: 236
diff changeset
96
232
496b687f3793 peek or take command from local no use Reply Thread
sugi
parents: 225
diff changeset
97 } catch (InterruptedException e) {
496b687f3793 peek or take command from local no use Reply Thread
sugi
parents: 225
diff changeset
98 e.printStackTrace();
496b687f3793 peek or take command from local no use Reply Thread
sugi
parents: 225
diff changeset
99 }
496b687f3793 peek or take command from local no use Reply Thread
sugi
parents: 225
diff changeset
100 }
496b687f3793 peek or take command from local no use Reply Thread
sugi
parents: 225
diff changeset
101 }
496b687f3793 peek or take command from local no use Reply Thread
sugi
parents: 225
diff changeset
102
2
f71eabb1df2a create outline of DataSegment model
one
parents:
diff changeset
103 }