private int predictSerializedSize(final byte server_version) { int size = 0; size += 4; // int: Number of parameters. size += 1; // byte: Type of the 1st parameter. size += 1; // byte: Type again (see HBASE-2877). size += 4; // int: How many regions do we want to affect? byte[] prev_region = EMPTY_BYTES; for (ActionEntry entry : batch) { GetRequest req = entry.rpc; byte[] region_name = req.getRegion().name(); boolean new_region = !Bytes.equals(prev_region, region_name); if (new_region) { size += 3; // vint: region name length (3 bytes => max length = 32768). size += region_name.length; // The region name. size += 4; // int: How many RPCs for this region. prev_region = req.getRegion().name(); } // action size += 1; // byte: Type code for 'Action'. size += 1; // byte: Type code again. size += 1; // byte: Type code for 'Row' size += 1; // byte: Type code for 'Get' size += req.predictSerializedSize(server_version); size += 4; // int: Index of the action. size += 3; // 3bytes: action result 'null' } return size; }
predictSerializedSize(server_version)); buf.writeInt(2); // Number of parameters.