Add mutex for stream in ProtoReflectionDescriptorDatabase, fix headers check

pull/6729/head
Yuchen Zeng 9 years ago
parent 46bf1467c5
commit c92fe25af5
  1. 2
      build.yaml
  2. 32
      test/cpp/util/proto_reflection_descriptor_database.cc
  3. 2
      test/cpp/util/proto_reflection_descriptor_database.h
  4. 3
      tools/run_tests/sanity/check_sources_and_headers.py
  5. 4
      tools/run_tests/sources_and_headers.json

@ -914,6 +914,8 @@ libs:
- extensions/reflection/proto_server_reflection_plugin.cc
- extensions/reflection/reflection.grpc.pb.cc
- extensions/reflection/reflection.pb.cc
uses:
- grpc++_base
- name: grpc++_test_config
build: private
language: c++

@ -31,7 +31,7 @@
*
*/
#include "proto_reflection_descriptor_database.h"
#include "test/cpp/util/proto_reflection_descriptor_database.h"
#include <vector>
@ -69,16 +69,14 @@ bool ProtoReflectionDescriptorDatabase::FindFileByName(
request.set_file_by_filename(filename);
ServerReflectionResponse response;
stream_mutex_.lock();
GetStream()->Write(request);
GetStream()->Read(&response);
stream_mutex_.unlock();
if (response.message_response_case() ==
ServerReflectionResponse::MessageResponseCase::kFileDescriptorResponse) {
AddFileFromResponse(response.file_descriptor_response());
// const google::protobuf::FileDescriptorProto file_proto =
// ParseFileDescriptorProtoResponse(response.file_descriptor_response());
// known_files_.insert(file_proto.name());
// cached_db_.Add(file_proto);
} else if (response.message_response_case() ==
ServerReflectionResponse::MessageResponseCase::kErrorResponse) {
const ErrorResponse error = response.error_response();
@ -119,19 +117,14 @@ bool ProtoReflectionDescriptorDatabase::FindFileContainingSymbol(
request.set_file_containing_symbol(symbol_name);
ServerReflectionResponse response;
stream_mutex_.lock();
GetStream()->Write(request);
GetStream()->Read(&response);
stream_mutex_.unlock();
// Status status = stub_->GetFileContainingSymbol(&ctx, request, &response);
if (response.message_response_case() ==
ServerReflectionResponse::MessageResponseCase::kFileDescriptorResponse) {
AddFileFromResponse(response.file_descriptor_response());
// const google::protobuf::FileDescriptorProto file_proto =
// ParseFileDescriptorProtoResponse(response.file_descriptor_response());
// if (known_files_.find(file_proto.name()) == known_files_.end()) {
// known_files_.insert(file_proto.name());
// cached_db_.Add(file_proto);
// }
} else if (response.message_response_case() ==
ServerReflectionResponse::MessageResponseCase::kErrorResponse) {
const ErrorResponse error = response.error_response();
@ -181,20 +174,14 @@ bool ProtoReflectionDescriptorDatabase::FindFileContainingExtension(
field_number);
ServerReflectionResponse response;
stream_mutex_.lock();
GetStream()->Write(request);
GetStream()->Read(&response);
stream_mutex_.unlock();
// Status status = stub_->GetFileContainingExtension(&ctx, request,
// &response);
if (response.message_response_case() ==
ServerReflectionResponse::MessageResponseCase::kFileDescriptorResponse) {
AddFileFromResponse(response.file_descriptor_response());
// const google::protobuf::FileDescriptorProto file_proto =
// ParseFileDescriptorProtoResponse(response.file_descriptor_response());
// if (known_files_.find(file_proto.name()) == known_files_.end()) {
// known_files_.insert(file_proto.name());
// cached_db_.Add(file_proto);
// }
} else if (response.message_response_case() ==
ServerReflectionResponse::MessageResponseCase::kErrorResponse) {
const ErrorResponse error = response.error_response();
@ -240,8 +227,10 @@ bool ProtoReflectionDescriptorDatabase::FindAllExtensionNumbers(
request.set_all_extension_numbers_of_type(extendee_type);
ServerReflectionResponse response;
stream_mutex_.lock();
GetStream()->Write(request);
GetStream()->Read(&response);
stream_mutex_.unlock();
if (response.message_response_case() ==
ServerReflectionResponse::MessageResponseCase::
@ -272,8 +261,11 @@ bool ProtoReflectionDescriptorDatabase::GetServices(
ServerReflectionRequest request;
request.set_list_services("");
ServerReflectionResponse response;
stream_mutex_.lock();
GetStream()->Write(request);
GetStream()->Read(&response);
stream_mutex_.unlock();
if (response.message_response_case() ==
ServerReflectionResponse::MessageResponseCase::kListServicesResponse) {

@ -32,6 +32,7 @@
*/
#include <memory>
#include <mutex>
#include <unordered_map>
#include <unordered_set>
#include <vector>
@ -98,6 +99,7 @@ class ProtoReflectionDescriptorDatabase
std::unordered_set<string> missing_symbols_;
std::unordered_map<string, std::unordered_set<int>> missing_extensions_;
std::unordered_map<string, std::vector<int>> cached_extension_numbers_;
std::mutex stream_mutex_;
google::protobuf::SimpleDescriptorDatabase cached_db_;
};

@ -57,6 +57,9 @@ def target_has_header(target, name):
return True
if name == 'src/core/lib/profiling/stap_probes.h':
return True
if not name.startswith('extensions') \
and target_has_header(target, 'extensions/' + name):
return True
return False
def produces_object(name):

@ -4371,7 +4371,9 @@
"type": "lib"
},
{
"deps": [],
"deps": [
"grpc++_base"
],
"headers": [
"extensions/include/grpc++/impl/proto_server_reflection_plugin.h",
"extensions/include/grpc++/impl/reflection.grpc.pb.h",

Loading…
Cancel
Save