(final byte server_version)
| 79 | } |
| 80 | |
| 81 | private int predictSerializedSize(final byte server_version) { |
| 82 | int size = 0; |
| 83 | |
| 84 | size += 4; // int: Number of parameters. |
| 85 | size += 1; // byte: Type of the 1st parameter. |
| 86 | size += 1; // byte: Type again (see HBASE-2877). |
| 87 | size += 4; // int: How many regions do we want to affect? |
| 88 | |
| 89 | byte[] prev_region = EMPTY_BYTES; |
| 90 | for (ActionEntry entry : batch) { |
| 91 | GetRequest req = entry.rpc; |
| 92 | byte[] region_name = req.getRegion().name(); |
| 93 | boolean new_region = !Bytes.equals(prev_region, region_name); |
| 94 | if (new_region) { |
| 95 | size += 3; // vint: region name length (3 bytes => max length = 32768). |
| 96 | size += region_name.length; // The region name. |
| 97 | size += 4; // int: How many RPCs for this region. |
| 98 | prev_region = req.getRegion().name(); |
| 99 | } |
| 100 | |
| 101 | // action |
| 102 | size += 1; // byte: Type code for 'Action'. |
| 103 | size += 1; // byte: Type code again. |
| 104 | size += 1; // byte: Type code for 'Row' |
| 105 | size += 1; // byte: Type code for 'Get' |
| 106 | |
| 107 | size += req.predictSerializedSize(server_version); |
| 108 | |
| 109 | size += 4; // int: Index of the action. |
| 110 | size += 3; // 3bytes: action result 'null' |
| 111 | } |
| 112 | return size; |
| 113 | } |
| 114 | |
| 115 | /** |
| 116 | * Sorts {@link BatchableRpc}s appropriately for HBase 0.95+ multi-action. |
no test coverage detected