annotate src/main/java/alice/daemon/IncomingUdpConnection.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 118e150ac9f3
children 30a74eee59c7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
361
60eee1fb0fd3 create sender with udp
sugi
parents:
diff changeset
1 package alice.daemon;
60eee1fb0fd3 create sender with udp
sugi
parents:
diff changeset
2
365
8072df9130c6 IncomingUdpConnection have to improve. it same IncommingTcpConnection
sugi
parents: 364
diff changeset
3 import java.io.EOFException;
364
1494d44392a2 succeed to receive and send DataSegment on multicast
sugi
parents: 361
diff changeset
4 import java.io.IOException;
1494d44392a2 succeed to receive and send DataSegment on multicast
sugi
parents: 361
diff changeset
5 import java.nio.ByteBuffer;
365
8072df9130c6 IncomingUdpConnection have to improve. it same IncommingTcpConnection
sugi
parents: 364
diff changeset
6 import java.nio.channels.ClosedChannelException;
364
1494d44392a2 succeed to receive and send DataSegment on multicast
sugi
parents: 361
diff changeset
7
361
60eee1fb0fd3 create sender with udp
sugi
parents:
diff changeset
8 import org.msgpack.unpacker.Unpacker;
60eee1fb0fd3 create sender with udp
sugi
parents:
diff changeset
9
60eee1fb0fd3 create sender with udp
sugi
parents:
diff changeset
10 import alice.codesegment.SingletonMessage;
364
1494d44392a2 succeed to receive and send DataSegment on multicast
sugi
parents: 361
diff changeset
11 import alice.datasegment.Command;
1494d44392a2 succeed to receive and send DataSegment on multicast
sugi
parents: 361
diff changeset
12 import alice.datasegment.CommandType;
365
8072df9130c6 IncomingUdpConnection have to improve. it same IncommingTcpConnection
sugi
parents: 364
diff changeset
13 import alice.datasegment.DataSegment;
369
0c24894db37e MulticastDataSegment's extends change from LocalDataSegment to RemoteDataSegment
sugi
parents: 365
diff changeset
14 import alice.datasegment.DataSegmentManager;
458
bcf6f4a6fcd0 need set Meta DataSegment PUT API
sugi
parents: 455
diff changeset
15 import alice.datasegment.ReceiveData;
365
8072df9130c6 IncomingUdpConnection have to improve. it same IncommingTcpConnection
sugi
parents: 364
diff changeset
16 import alice.topology.manager.keeparive.RespondData;
361
60eee1fb0fd3 create sender with udp
sugi
parents:
diff changeset
17
60eee1fb0fd3 create sender with udp
sugi
parents:
diff changeset
18 public class IncomingUdpConnection extends IncomingTcpConnection {
454
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
19 // receive Data set into LocalDataSegment now but need to set into MulticastDataSegment.
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
20 // and this implement has problem. If over 65507 data receive, can not read.
443
2f2623484b77 change protocol
sugi
parents: 369
diff changeset
21 // but Max data length is 65507 because of the max length of UDP payload
454
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
22
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
23 public MulticastConnection receiver;
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
24 public MulticastConnection sender;
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
25
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
26 public IncomingUdpConnection(MulticastConnection s, MulticastConnection r, DataSegmentManager manager) {
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
27 super(manager);
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
28 receiver = r;
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
29 sender = s;
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
30 reverseKey = "multicast";
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
31 }
361
60eee1fb0fd3 create sender with udp
sugi
parents:
diff changeset
32
454
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
33 @Override
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
34 public void run() {
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
35 while (true){
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
36 try {
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
37 Command cmd = null;
458
bcf6f4a6fcd0 need set Meta DataSegment PUT API
sugi
parents: 455
diff changeset
38 ReceiveData rData = null;
454
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
39 // Max data length is 65507 because of the max length of UDP payload
467
6e304a7a60e7 remove white space
sugi
parents: 458
diff changeset
40 ByteBuffer receive = ByteBuffer.allocate(65507);
454
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
41 receiver.receive(receive);
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
42 Unpacker unpacker = SingletonMessage.getInstance().createBufferUnpacker(receive);
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
43 receive.flip();
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
44 CommandMessage msg = unpacker.read(CommandMessage.class);
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
45 CommandType type = CommandType.getCommandTypeFromId(msg.type);
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
46 switch (type) {
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
47 case UPDATE:
458
bcf6f4a6fcd0 need set Meta DataSegment PUT API
sugi
parents: 455
diff changeset
48 case PUT:
510
118e150ac9f3 refactor
sugi
parents: 471
diff changeset
49 rData = new ReceiveData(unpacker.getSerializedByteArray(unpacker.readInt()), msg.compressed, msg.serialized);
458
bcf6f4a6fcd0 need set Meta DataSegment PUT API
sugi
parents: 455
diff changeset
50 cmd = new Command(type, null, null, rData, 0, 0, null, null, reverseKey);
454
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
51 getLocalDataSegmentManager().getDataSegmentKey(msg.key).runCommand(cmd);
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
52 break;
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
53 case PEEK:
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
54 case TAKE:
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
55 cmd = new Command(type, null, null, null, msg.index, msg.seq, null, null ,sender);
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
56 cmd.setQuickFlag(msg.quickFlag);
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
57 getLocalDataSegmentManager().getDataSegmentKey(msg.key).runCommand(cmd);
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
58 break;
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
59 case REMOVE:
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
60 cmd = new Command(type, null, null, null, 0, 0, null, null, "");
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
61 getLocalDataSegmentManager().getDataSegmentKey(msg.key).runCommand(cmd);
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
62 break;
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
63 case REPLY:
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
64 cmd = manager.getAndRemoveCmd(msg.seq);
510
118e150ac9f3 refactor
sugi
parents: 471
diff changeset
65 rData = new ReceiveData(unpacker.getSerializedByteArray(unpacker.readInt()), msg.compressed, msg.serialized);
458
bcf6f4a6fcd0 need set Meta DataSegment PUT API
sugi
parents: 455
diff changeset
66 Command rCmd = new Command(type, null, null, rData, msg.index, msg.seq, null, null, "");
454
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
67 cmd.cs.ids.reply(cmd.receiver, rCmd);
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
68 break;
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
69 case PING:
471
be0b61986ff7 checking having DataSegmentManger before get DataSegmentManager
sugi
parents: 467
diff changeset
70 if (DataSegment.contains(reverseKey))
be0b61986ff7 checking having DataSegmentManger before get DataSegmentManager
sugi
parents: 467
diff changeset
71 DataSegment.get(reverseKey).response(msg.key);
454
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
72 break;
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
73 case RESPONSE:
458
bcf6f4a6fcd0 need set Meta DataSegment PUT API
sugi
parents: 455
diff changeset
74 rData = new ReceiveData(new RespondData(reverseKey, System.currentTimeMillis()), false, false);
523
145c425db88d add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 510
diff changeset
75 DataSegment.getLocal().put(msg.key, rData, false);
454
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
76 break;
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
77 default:
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
78 break;
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
79 }
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
80
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
81 } catch (ClosedChannelException e) {
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
82 return;
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
83 } catch (EOFException e) {
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
84 return;
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
85 } catch (IOException e) {
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
86 e.printStackTrace();
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
87 }
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
88 }
f8a8f869f016 bug fix
sugi
parents: 449
diff changeset
89 }
364
1494d44392a2 succeed to receive and send DataSegment on multicast
sugi
parents: 361
diff changeset
90
361
60eee1fb0fd3 create sender with udp
sugi
parents:
diff changeset
91 }