(final byte server_version)
| 199 | } |
| 200 | |
| 201 | private ChannelBuffer serializeOld(final byte server_version) { |
| 202 | Collections.sort(batch, REGION_CMP); |
| 203 | |
| 204 | ChannelBuffer buf = newBuffer(server_version, |
| 205 | predictSerializedSize(server_version)); |
| 206 | |
| 207 | buf.writeInt(1); // Only 1 parameter for multi (which is MultiAction.) |
| 208 | buf.writeByte(66); // Type code for 'MultiAction'. |
| 209 | buf.writeByte(66); // Type code again. |
| 210 | |
| 211 | int nregion_index = buf.writerIndex(); |
| 212 | buf.writeInt(0); // total number of regions. Will fill it at the end. |
| 213 | |
| 214 | byte[] prev_region = EMPTY_BYTES; |
| 215 | int nregions = 0; |
| 216 | int ngets_index = 0; |
| 217 | int ngets = 0; |
| 218 | int i = 0; |
| 219 | for (ActionEntry entry : batch) { |
| 220 | GetRequest req = entry.rpc; |
| 221 | byte[] region_name = req.getRegion().name(); |
| 222 | boolean new_region = !Bytes.equals(prev_region, region_name); |
| 223 | if (new_region) { |
| 224 | // new region starts. Let's first fill the num of rpcs for the previous region. |
| 225 | if (ngets_index > 0) { |
| 226 | buf.setInt(ngets_index, ngets); |
| 227 | ngets = 0; |
| 228 | } |
| 229 | writeByteArray(buf, region_name); // region name; |
| 230 | ngets_index = buf.writerIndex(); |
| 231 | buf.writeInt(0); // will be filled when we pass this region. |
| 232 | prev_region = region_name; |
| 233 | nregions++; |
| 234 | } |
| 235 | |
| 236 | buf.writeByte(65); // Code for an `Action' object. |
| 237 | buf.writeByte(65); // Code again (see HBASE-2877). |
| 238 | |
| 239 | // Inside the action, serialize a `Get' object. |
| 240 | buf.writeByte(64); // Type code for a `Row' object. |
| 241 | buf.writeByte(32); // Type code for 'Get'. |
| 242 | |
| 243 | req.serializePayloadInto(server_version, buf); // GET |
| 244 | |
| 245 | buf.writeInt(i); // index of the get. we use its index in batch here. |
| 246 | writeHBaseNull(buf); // 'Action' ends with null result in our case. |
| 247 | ngets++; |
| 248 | i++; |
| 249 | } |
| 250 | if (ngets_index > 0) { |
| 251 | buf.setInt(ngets_index, ngets); |
| 252 | } |
| 253 | buf.setInt(nregion_index, nregions); |
| 254 | return buf; |
| 255 | } |
| 256 | |
| 257 | @Override |
| 258 | Object deserialize(final ChannelBuffer buf, final int cell_size) { |
no test coverage detected