diff --git a/alternator/executor.cc b/alternator/executor.cc index 102b027dc0..5df4d2c06f 100644 --- a/alternator/executor.cc +++ b/alternator/executor.cc @@ -2104,6 +2104,7 @@ future executor::batch_write_item(client_state& c return make_ready_future(api_error::validation("Provided list of item keys contains duplicates")); } used_keys.insert(std::move(mut_key)); + batch_size++; } else if (r_name == "DeleteRequest") { const rjson::value& key = (r->value)["Key"]; mutation_builders.emplace_back(schema, put_or_delete_item( @@ -2114,6 +2115,7 @@ future executor::batch_write_item(client_state& c return make_ready_future(api_error::validation("Provided list of item keys contains duplicates")); } used_keys.insert(std::move(mut_key)); + batch_size++; } else { return make_ready_future(api_error::validation(format("Unknown BatchWriteItem request type: {}", r_name))); } @@ -3362,7 +3364,7 @@ future executor::batch_get_item(client_state& cli } }; std::vector requests; - + uint batch_size = 0; for (auto it = request_items.MemberBegin(); it != request_items.MemberEnd(); ++it) { table_requests rs(get_table_from_batch_request(_proxy, it)); tracing::add_table_name(trace_state, sstring(executor::KEYSPACE_NAME_PREFIX) + rs.schema->cf_name(), rs.schema->cf_name()); @@ -3376,9 +3378,18 @@ future executor::batch_get_item(client_state& cli rs.add(key); check_key(key, rs.schema); } + batch_size += rs.requests.size(); requests.emplace_back(std::move(rs)); } +<<<<<<< HEAD +======= + for (const table_requests& tr : requests) { + co_await verify_permission(client_state, tr.schema, auth::permission::SELECT); + } + + _stats.api_operations.batch_get_item_batch_total += batch_size; +>>>>>>> 905408f764 (alternator: Fix item counting in batch operations) // If we got here, all "requests" are valid, so let's start the // requests for the different partitions all in parallel. std::vector>> response_futures;