Skip to content
Snippets Groups Projects
Commit c92fe25a authored by Yuchen Zeng's avatar Yuchen Zeng
Browse files

Add mutex for stream in ProtoReflectionDescriptorDatabase, fix headers check

parent 46bf1467
Branches
Tags
No related merge requests found
...@@ -914,6 +914,8 @@ libs: ...@@ -914,6 +914,8 @@ libs:
- extensions/reflection/proto_server_reflection_plugin.cc - extensions/reflection/proto_server_reflection_plugin.cc
- extensions/reflection/reflection.grpc.pb.cc - extensions/reflection/reflection.grpc.pb.cc
- extensions/reflection/reflection.pb.cc - extensions/reflection/reflection.pb.cc
uses:
- grpc++_base
- name: grpc++_test_config - name: grpc++_test_config
build: private build: private
language: c++ language: c++
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
* *
*/ */
#include "proto_reflection_descriptor_database.h" #include "test/cpp/util/proto_reflection_descriptor_database.h"
#include <vector> #include <vector>
...@@ -69,16 +69,14 @@ bool ProtoReflectionDescriptorDatabase::FindFileByName( ...@@ -69,16 +69,14 @@ bool ProtoReflectionDescriptorDatabase::FindFileByName(
request.set_file_by_filename(filename); request.set_file_by_filename(filename);
ServerReflectionResponse response; ServerReflectionResponse response;
stream_mutex_.lock();
GetStream()->Write(request); GetStream()->Write(request);
GetStream()->Read(&response); GetStream()->Read(&response);
stream_mutex_.unlock();
if (response.message_response_case() == if (response.message_response_case() ==
ServerReflectionResponse::MessageResponseCase::kFileDescriptorResponse) { ServerReflectionResponse::MessageResponseCase::kFileDescriptorResponse) {
AddFileFromResponse(response.file_descriptor_response()); 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() == } else if (response.message_response_case() ==
ServerReflectionResponse::MessageResponseCase::kErrorResponse) { ServerReflectionResponse::MessageResponseCase::kErrorResponse) {
const ErrorResponse error = response.error_response(); const ErrorResponse error = response.error_response();
...@@ -119,19 +117,14 @@ bool ProtoReflectionDescriptorDatabase::FindFileContainingSymbol( ...@@ -119,19 +117,14 @@ bool ProtoReflectionDescriptorDatabase::FindFileContainingSymbol(
request.set_file_containing_symbol(symbol_name); request.set_file_containing_symbol(symbol_name);
ServerReflectionResponse response; ServerReflectionResponse response;
stream_mutex_.lock();
GetStream()->Write(request); GetStream()->Write(request);
GetStream()->Read(&response); GetStream()->Read(&response);
stream_mutex_.unlock();
// Status status = stub_->GetFileContainingSymbol(&ctx, request, &response);
if (response.message_response_case() == if (response.message_response_case() ==
ServerReflectionResponse::MessageResponseCase::kFileDescriptorResponse) { ServerReflectionResponse::MessageResponseCase::kFileDescriptorResponse) {
AddFileFromResponse(response.file_descriptor_response()); 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() == } else if (response.message_response_case() ==
ServerReflectionResponse::MessageResponseCase::kErrorResponse) { ServerReflectionResponse::MessageResponseCase::kErrorResponse) {
const ErrorResponse error = response.error_response(); const ErrorResponse error = response.error_response();
...@@ -181,20 +174,14 @@ bool ProtoReflectionDescriptorDatabase::FindFileContainingExtension( ...@@ -181,20 +174,14 @@ bool ProtoReflectionDescriptorDatabase::FindFileContainingExtension(
field_number); field_number);
ServerReflectionResponse response; ServerReflectionResponse response;
stream_mutex_.lock();
GetStream()->Write(request); GetStream()->Write(request);
GetStream()->Read(&response); GetStream()->Read(&response);
stream_mutex_.unlock();
// Status status = stub_->GetFileContainingExtension(&ctx, request,
// &response);
if (response.message_response_case() == if (response.message_response_case() ==
ServerReflectionResponse::MessageResponseCase::kFileDescriptorResponse) { ServerReflectionResponse::MessageResponseCase::kFileDescriptorResponse) {
AddFileFromResponse(response.file_descriptor_response()); 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() == } else if (response.message_response_case() ==
ServerReflectionResponse::MessageResponseCase::kErrorResponse) { ServerReflectionResponse::MessageResponseCase::kErrorResponse) {
const ErrorResponse error = response.error_response(); const ErrorResponse error = response.error_response();
...@@ -240,8 +227,10 @@ bool ProtoReflectionDescriptorDatabase::FindAllExtensionNumbers( ...@@ -240,8 +227,10 @@ bool ProtoReflectionDescriptorDatabase::FindAllExtensionNumbers(
request.set_all_extension_numbers_of_type(extendee_type); request.set_all_extension_numbers_of_type(extendee_type);
ServerReflectionResponse response; ServerReflectionResponse response;
stream_mutex_.lock();
GetStream()->Write(request); GetStream()->Write(request);
GetStream()->Read(&response); GetStream()->Read(&response);
stream_mutex_.unlock();
if (response.message_response_case() == if (response.message_response_case() ==
ServerReflectionResponse::MessageResponseCase:: ServerReflectionResponse::MessageResponseCase::
...@@ -272,8 +261,11 @@ bool ProtoReflectionDescriptorDatabase::GetServices( ...@@ -272,8 +261,11 @@ bool ProtoReflectionDescriptorDatabase::GetServices(
ServerReflectionRequest request; ServerReflectionRequest request;
request.set_list_services(""); request.set_list_services("");
ServerReflectionResponse response; ServerReflectionResponse response;
stream_mutex_.lock();
GetStream()->Write(request); GetStream()->Write(request);
GetStream()->Read(&response); GetStream()->Read(&response);
stream_mutex_.unlock();
if (response.message_response_case() == if (response.message_response_case() ==
ServerReflectionResponse::MessageResponseCase::kListServicesResponse) { ServerReflectionResponse::MessageResponseCase::kListServicesResponse) {
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
*/ */
#include <memory> #include <memory>
#include <mutex>
#include <unordered_map> #include <unordered_map>
#include <unordered_set> #include <unordered_set>
#include <vector> #include <vector>
...@@ -98,6 +99,7 @@ class ProtoReflectionDescriptorDatabase ...@@ -98,6 +99,7 @@ class ProtoReflectionDescriptorDatabase
std::unordered_set<string> missing_symbols_; std::unordered_set<string> missing_symbols_;
std::unordered_map<string, std::unordered_set<int>> missing_extensions_; std::unordered_map<string, std::unordered_set<int>> missing_extensions_;
std::unordered_map<string, std::vector<int>> cached_extension_numbers_; std::unordered_map<string, std::vector<int>> cached_extension_numbers_;
std::mutex stream_mutex_;
google::protobuf::SimpleDescriptorDatabase cached_db_; google::protobuf::SimpleDescriptorDatabase cached_db_;
}; };
......
...@@ -57,6 +57,9 @@ def target_has_header(target, name): ...@@ -57,6 +57,9 @@ def target_has_header(target, name):
return True return True
if name == 'src/core/lib/profiling/stap_probes.h': if name == 'src/core/lib/profiling/stap_probes.h':
return True return True
if not name.startswith('extensions') \
and target_has_header(target, 'extensions/' + name):
return True
return False return False
def produces_object(name): def produces_object(name):
......
...@@ -4371,7 +4371,9 @@ ...@@ -4371,7 +4371,9 @@
"type": "lib" "type": "lib"
}, },
{ {
"deps": [], "deps": [
"grpc++_base"
],
"headers": [ "headers": [
"extensions/include/grpc++/impl/proto_server_reflection_plugin.h", "extensions/include/grpc++/impl/proto_server_reflection_plugin.h",
"extensions/include/grpc++/impl/reflection.grpc.pb.h", "extensions/include/grpc++/impl/reflection.grpc.pb.h",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment