Mercurial > hg > Database > Cassandra
annotate src/java/org/apache/cassandra/db/ReadResponse.java @ 0:d485154379c8 default tip
apache-cassandra-0.6.0-rc1-src
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 02 Apr 2010 13:36:02 +0900 |
parents | |
children |
rev | line source |
---|---|
0
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 /** |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 * Licensed to the Apache Software Foundation (ASF) under one |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 * or more contributor license agreements. See the NOTICE file |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 * distributed with this work for additional information |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 * regarding copyright ownership. The ASF licenses this file |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 * to you under the Apache License, Version 2.0 (the |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 * "License"); you may not use this file except in compliance |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 * with the License. You may obtain a copy of the License at |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 * |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 * http://www.apache.org/licenses/LICENSE-2.0 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 * |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 * Unless required by applicable law or agreed to in writing, software |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 * distributed under the License is distributed on an "AS IS" BASIS, |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 * See the License for the specific language governing permissions and |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 * limitations under the License. |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 */ |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 package org.apache.cassandra.db; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 import java.io.ByteArrayOutputStream; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 import java.io.DataInputStream; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 import java.io.DataOutputStream; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 import java.io.IOException; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 import org.apache.cassandra.concurrent.StageManager; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 import org.apache.cassandra.io.ICompactSerializer; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 import org.apache.cassandra.net.Message; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 import org.apache.cassandra.net.MessagingService; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 import org.apache.cassandra.utils.FBUtilities; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 import org.apache.commons.lang.ArrayUtils; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 /* |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 * The read response message is sent by the server when reading data |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 * this encapsulates the tablename and the row that has been read. |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 * The table name is needed so that we can use it to create repairs. |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 */ |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 public class ReadResponse |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 { |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 private static ICompactSerializer<ReadResponse> serializer_; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 static |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 { |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 serializer_ = new ReadResponseSerializer(); |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 } |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 public static ICompactSerializer<ReadResponse> serializer() |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 { |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 return serializer_; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 } |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 private Row row_; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 private byte[] digest_ = ArrayUtils.EMPTY_BYTE_ARRAY; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 private boolean isDigestQuery_ = false; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 public ReadResponse(byte[] digest ) |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 { |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 assert digest != null; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 digest_= digest; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 } |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 public ReadResponse(Row row) |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 { |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 row_ = row; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 } |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 public Row row() |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 { |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 return row_; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 } |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 public byte[] digest() |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 { |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 return digest_; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 } |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 public boolean isDigestQuery() |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 { |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 return isDigestQuery_; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 } |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 public void setIsDigestQuery(boolean isDigestQuery) |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 { |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 isDigestQuery_ = isDigestQuery; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 } |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 } |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 class ReadResponseSerializer implements ICompactSerializer<ReadResponse> |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 { |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 public void serialize(ReadResponse rm, DataOutputStream dos) throws IOException |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 { |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 dos.writeInt(rm.digest().length); |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 dos.write(rm.digest()); |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 dos.writeBoolean(rm.isDigestQuery()); |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 if( !rm.isDigestQuery() && rm.row() != null ) |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 { |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 Row.serializer().serialize(rm.row(), dos); |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 } |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 } |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 public ReadResponse deserialize(DataInputStream dis) throws IOException |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
105 { |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
106 int digestSize = dis.readInt(); |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
107 byte[] digest = new byte[digestSize]; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
108 dis.read(digest, 0 , digestSize); |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109 boolean isDigest = dis.readBoolean(); |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
110 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 Row row = null; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 if (!isDigest) |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 { |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
114 row = Row.serializer().deserialize(dis); |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
115 } |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 ReadResponse rmsg = isDigest ? new ReadResponse(digest) : new ReadResponse(row); |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 rmsg.setIsDigestQuery(isDigest); |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
119 return rmsg; |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 } |
d485154379c8
apache-cassandra-0.6.0-rc1-src
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 } |