Serializes this request for HBase 0.94 and before.
(final byte server_version)
| 1398 | |
| 1399 | /** Serializes this request for HBase 0.94 and before. */ |
| 1400 | private ChannelBuffer serializeOld(final byte server_version) { |
| 1401 | final ChannelBuffer buf = newBuffer(server_version, |
| 1402 | predictSerializedSize()); |
| 1403 | buf.writeInt(2); // Number of parameters. |
| 1404 | |
| 1405 | // 1st param: byte array containing region name |
| 1406 | writeHBaseByteArray(buf, super.region.name()); |
| 1407 | |
| 1408 | // 2nd param: Scan object |
| 1409 | buf.writeByte(39); // Code for a `Scan' parameter. |
| 1410 | buf.writeByte(39); // Code again (see HBASE-2877). |
| 1411 | buf.writeByte(1); // Manual versioning of Scan. |
| 1412 | writeByteArray(buf, start_key); |
| 1413 | writeByteArray(buf, stop_key); |
| 1414 | buf.writeInt(versions); // Max number of versions to return. |
| 1415 | |
| 1416 | // Max number of KeyValues to get per RPC. |
| 1417 | buf.writeInt(max_num_kvs); |
| 1418 | |
| 1419 | // Unused field, only used by HBase's client. This value should represent |
| 1420 | // how many rows per call the client will fetch, but the server doesn't |
| 1421 | // care about this value, neither do we, because we use a different API. |
| 1422 | buf.writeInt(0xDEADBA5E); |
| 1423 | |
| 1424 | // Whether or not to populate the blockcache. |
| 1425 | buf.writeByte(populate_blockcache ? 0x01 : 0x00); |
| 1426 | |
| 1427 | if (filter == null) { |
| 1428 | buf.writeByte(0x00); // boolean (false): don't use a filter. |
| 1429 | } else { |
| 1430 | buf.writeByte(0x01); // boolean (true): use a filter. |
| 1431 | filter.serializeOld(buf); |
| 1432 | } |
| 1433 | |
| 1434 | // TimeRange |
| 1435 | buf.writeLong(min_timestamp); // Minimum timestamp. |
| 1436 | buf.writeLong(max_timestamp); // Maximum timestamp. |
| 1437 | // Boolean: "all time". |
| 1438 | buf.writeByte(min_timestamp != 0 || max_timestamp != Long.MAX_VALUE |
| 1439 | ? 0x00 : 0x01); |
| 1440 | |
| 1441 | // Families. |
| 1442 | if (families != null) { |
| 1443 | buf.writeInt(families.length); // Number of families that follow. |
| 1444 | for (int i = 0; i < families.length; i++) { |
| 1445 | // Each family is then written like so: |
| 1446 | writeByteArray(buf, families[i]); // Column family name. |
| 1447 | if (qualifiers != null && qualifiers[i] != null) { |
| 1448 | buf.writeInt(qualifiers[i].length); // How many qualifiers do we want? |
| 1449 | for (byte[] qualifier : qualifiers[i]) { |
| 1450 | writeByteArray(buf, qualifier); // Column qualifier name. |
| 1451 | } |
| 1452 | } else { |
| 1453 | buf.writeInt(0); // No qualifiers. |
| 1454 | } |
| 1455 | } |
| 1456 | } else { |
| 1457 | buf.writeInt(0); // No families. |
no test coverage detected