Mercurial > hg > Database > Alice
annotate src/main/java/alice/daemon/IncomingTcpConnection.java @ 600:0564f38e9bfe dispose
change allow using ids only peek from Normal Code Segment
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 16 Feb 2016 19:12:52 +0900 |
parents | 3284428f525e |
children |
rev | line source |
---|---|
345 | 1 package alice.daemon; |
2 | |
3 import java.io.EOFException; | |
4 import java.io.IOException; | |
5 import java.nio.channels.ClosedChannelException; | |
6 | |
527 | 7 import alice.datasegment.*; |
528
6ebddfac7ff6
delete RecieveData.setCompressFlag
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
527
diff
changeset
|
8 import org.msgpack.MessagePack; |
345 | 9 import org.msgpack.unpacker.Unpacker; |
10 | |
11 import alice.topology.manager.keeparive.RespondData; | |
12 | |
13 public class IncomingTcpConnection extends Thread { | |
419 | 14 |
480 | 15 private Connection connection; |
16 protected DataSegmentManager manager; | |
17 protected String reverseKey; | |
419 | 18 private LocalDataSegmentManager lmanager = DataSegment.getLocal(); |
599
3284428f525e
add MetaCodeSegment & MetaDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
574
diff
changeset
|
19 private LocalDataSegmentManager metalmanager = DataSegment.getMetaLocal(); |
529
cb7c31848d16
add CompressedDSMs
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
528
diff
changeset
|
20 private CompressedLocalDataSegmentManager compressedlmanager = DataSegment.getCompressedLocal(); |
599
3284428f525e
add MetaCodeSegment & MetaDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
574
diff
changeset
|
21 private CompressedLocalDataSegmentManager compressedmetalmanager = DataSegment.getCompressedMetaLocal(); |
528
6ebddfac7ff6
delete RecieveData.setCompressFlag
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
527
diff
changeset
|
22 private static final MessagePack packer = new MessagePack(); |
419 | 23 |
24 public IncomingTcpConnection(DataSegmentManager manager) { | |
25 this.manager = manager; | |
26 } | |
27 | |
28 public IncomingTcpConnection(Connection connection, DataSegmentManager manager, String reverseKey) { | |
29 this.manager = manager; | |
30 this.connection = connection; | |
31 this.reverseKey = reverseKey; | |
32 } | |
33 | |
34 public LocalDataSegmentManager getLocalDataSegmentManager(){ | |
35 return lmanager; | |
36 } | |
345 | 37 |
529
cb7c31848d16
add CompressedDSMs
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
528
diff
changeset
|
38 public CompressedLocalDataSegmentManager getCompressedLocalDataSegmentManager(){ |
cb7c31848d16
add CompressedDSMs
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
528
diff
changeset
|
39 return compressedlmanager; |
cb7c31848d16
add CompressedDSMs
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
528
diff
changeset
|
40 } |
cb7c31848d16
add CompressedDSMs
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
528
diff
changeset
|
41 |
419 | 42 /** |
43 * pipeline thread for receiving | |
44 */ | |
45 public void run() { | |
46 Unpacker unpacker = null; | |
47 try { | |
528
6ebddfac7ff6
delete RecieveData.setCompressFlag
kazz <kazz@cr.ie.u-ryukyu.ac.jp>
parents:
527
diff
changeset
|
48 unpacker = packer.createUnpacker(connection.socket.getInputStream()); |
419 | 49 } catch (IOException e) { |
50 e.printStackTrace(); | |
51 } | |
52 if (unpacker == null) { | |
53 return; | |
54 } | |
55 while (true) { | |
56 try { | |
447 | 57 Command cmd = null; |
458 | 58 ReceiveData rData = null; |
530 | 59 CommandMessage msg = unpacker.read(CommandMessage.class);///read header |
419 | 60 CommandType type = CommandType.getCommandTypeFromId(msg.type); |
61 switch (type) { | |
62 case UPDATE: | |
63 case PUT: | |
555
2af387211a85
add zippedDataSize to ReceiveData
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
554
diff
changeset
|
64 int dataSize = unpacker.readInt(); |
574
ea21af9a4762
delete serializeFlag, fix MessagePack pack&unpack
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
561
diff
changeset
|
65 rData = new ReceiveData(unpacker.getSerializedByteArray(dataSize), msg.compressed, msg.dataSize); |
599
3284428f525e
add MetaCodeSegment & MetaDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
574
diff
changeset
|
66 rData.setMeta(msg.meta); |
526
928907206d21
remove CompressedRDSM & CompressedLDSM class
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
525
diff
changeset
|
67 |
488 | 68 if (msg.setTime) { |
554
1dc473a637c6
add setter/getter to setTime of ReceivedData
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
533
diff
changeset
|
69 rData.setTimes(msg.time, true, msg.depth); |
560
72ef96ba4195
add zeppedDataSize in CommandMessage
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
555
diff
changeset
|
70 } |
561
f1777341c5a2
add setZipped to CommandMessage&ReceiveData
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
560
diff
changeset
|
71 if (msg.setZepped){ |
f1777341c5a2
add setZipped to CommandMessage&ReceiveData
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
560
diff
changeset
|
72 rData.setZipped(msg.zippedDataSize, true); |
560
72ef96ba4195
add zeppedDataSize in CommandMessage
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
555
diff
changeset
|
73 } else { |
561
f1777341c5a2
add setZipped to CommandMessage&ReceiveData
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
560
diff
changeset
|
74 rData.setZipped(dataSize, true); |
488 | 75 } |
526
928907206d21
remove CompressedRDSM & CompressedLDSM class
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
525
diff
changeset
|
76 |
458 | 77 cmd = new Command(type, null, null, rData, 0, 0, null, null, reverseKey); |
530 | 78 cmd.setCompressFlag(msg.compressed); |
526
928907206d21
remove CompressedRDSM & CompressedLDSM class
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
525
diff
changeset
|
79 |
600
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
80 runCommand(msg, cmd); |
526
928907206d21
remove CompressedRDSM & CompressedLDSM class
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
525
diff
changeset
|
81 |
419 | 82 break; |
83 case PEEK: | |
84 case TAKE: | |
446 | 85 cmd = new Command(type, null, null, null, msg.index, msg.seq, null, null, connection); |
530 | 86 cmd.setCompressFlag(msg.compressed); |
526
928907206d21
remove CompressedRDSM & CompressedLDSM class
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
525
diff
changeset
|
87 |
600
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
88 runCommand(msg, cmd); |
526
928907206d21
remove CompressedRDSM & CompressedLDSM class
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
525
diff
changeset
|
89 |
467 | 90 break; |
419 | 91 case REMOVE: |
446 | 92 cmd = new Command(type, null, null, null, 0, 0, null, null, ""); |
530 | 93 lmanager.getDataSegmentKey(msg.key).runCommand(cmd);//ToDo:fix |
419 | 94 break; |
95 case REPLY: | |
446 | 96 cmd = manager.getAndRemoveCmd(msg.seq); |
533
b3c9554ccb1b
change compressed API to set data specified DSM name
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
532
diff
changeset
|
97 |
574
ea21af9a4762
delete serializeFlag, fix MessagePack pack&unpack
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
561
diff
changeset
|
98 rData = new ReceiveData(unpacker.getSerializedByteArray(unpacker.readInt()), msg.compressed, msg.dataSize); |
526
928907206d21
remove CompressedRDSM & CompressedLDSM class
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
525
diff
changeset
|
99 |
467 | 100 Command rCmd = new Command(type, null, null, rData, msg.index, msg.seq, null, null, ""); |
530 | 101 cmd.setCompressFlag(msg.compressed); |
452 | 102 cmd.cs.ids.reply(cmd.receiver, rCmd); |
419 | 103 break; |
104 case PING: | |
471
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
467
diff
changeset
|
105 if (DataSegment.contains(reverseKey)) |
be0b61986ff7
checking having DataSegmentManger before get DataSegmentManager
sugi
parents:
467
diff
changeset
|
106 DataSegment.get(reverseKey).response(msg.key); |
419 | 107 break; |
108 case RESPONSE: | |
525
30a74eee59c7
working TestRemoteAlice
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
524
diff
changeset
|
109 rData = new ReceiveData(new RespondData(reverseKey, System.currentTimeMillis())); |
533
b3c9554ccb1b
change compressed API to set data specified DSM name
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
532
diff
changeset
|
110 DataSegment.getLocal().put(msg.key, rData, false); |
419 | 111 break; |
112 default: | |
113 break; | |
114 } | |
115 } catch (ClosedChannelException e) { | |
116 return; | |
117 } catch (EOFException e) { | |
118 return; | |
119 } catch (IOException e) { | |
478 | 120 return; |
419 | 121 } |
122 } | |
443 | 123 } |
480 | 124 |
600
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
125 private void runCommand(CommandMessage msg, Command cmd) { |
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
126 if (msg.meta){ |
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
127 if (msg.compressed){ |
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
128 compressedmetalmanager.getDataSegmentKey(msg.key).runCommand(cmd); |
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
129 } else { |
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
130 metalmanager.getDataSegmentKey(msg.key).runCommand(cmd); |
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
131 } |
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
132 } else { |
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
133 if (msg.compressed){ |
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
134 compressedlmanager.getDataSegmentKey(msg.key).runCommand(cmd); |
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
135 } else { |
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
136 lmanager.getDataSegmentKey(msg.key).runCommand(cmd); |
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
137 } |
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
138 } |
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
139 } |
0564f38e9bfe
change allow using ids only peek from Normal Code Segment
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
599
diff
changeset
|
140 |
480 | 141 public void setReverseKey(String name) { |
142 this.reverseKey = name; | |
143 setName(name+"-IncomingTcp"); | |
144 } | |
345 | 145 } |