Chromium Code Reviews| Index: ceee/ie/broker/broker_rpc_server.cc |
| =================================================================== |
| --- ceee/ie/broker/broker_rpc_server.cc (revision 67799) |
| +++ ceee/ie/broker/broker_rpc_server.cc (working copy) |
| @@ -7,8 +7,9 @@ |
| #include "ceee/ie/broker/broker_rpc_server.h" |
| #include "base/atomic_sequence_num.h" |
| +#include "base/logging.h" |
| #include "base/metrics/histogram.h" |
| -#include "base/logging.h" |
| +#include "base/process_util.h" |
| #include "base/win_util.h" |
| #include "broker_rpc_lib.h" // NOLINT |
| #include "ceee/common/com_utils.h" |
| @@ -16,10 +17,40 @@ |
| #include "ceee/ie/broker/broker_rpc_utils.h" |
| #include "ceee/ie/broker/chrome_postman.h" |
| + |
| +namespace { |
| // This lock ensures that histograms created by the broker are thread safe. |
| // The histograms created here can be initialized on multiple threads. |
| Lock g_metrics_lock; |
| +RPC_STATUS PrepareEndpoint(std::wstring endpoint) { |
| + std::wstring protocol = kRpcProtocol; |
| + DCHECK(!protocol.empty()); |
| + DCHECK(!endpoint.empty()); |
| + if (protocol.empty() || endpoint.empty()) |
|
MAD
2010/12/01 19:59:40
I think the test for protocol not being empty is n
Vitaly Buka corp
2010/12/01 20:50:30
But we will crash on protocol[0] if system out of
MAD
2010/12/01 21:09:16
Thus, another reason not to copy this in a std::ws
|
| + return false; |
| + VLOG(2) << "RPC server is starting. Endpoint: " << endpoint; |
|
Sigurður Ásgeirsson
2010/12/01 19:29:38
nit: for the time being, please use VLOG(1), as Sa
Vitaly Buka corp
2010/12/01 20:50:30
Done.
|
| + // Tell RPC runtime to use local interprocess communication for given |
| + // end point. |
| + RPC_STATUS status = ::RpcServerUseProtseqEp( |
| + reinterpret_cast<RPC_WSTR>(&protocol[0]), |
| + RPC_C_PROTSEQ_MAX_REQS_DEFAULT, |
| + reinterpret_cast<RPC_WSTR>(&endpoint[0]), |
| + NULL); |
| + LOG_IF(ERROR, RPC_S_OK != status && RPC_S_DUPLICATE_ENDPOINT != status) << |
| + "Failed to set protocol for RPC end point. RPC_STATUS=0x" << |
| + com::LogWe(status); |
| + // This is not error because unittest may start we start several servers. |
|
MAD
2010/12/01 19:59:40
not error -> not an error
may start we start sever
Vitaly Buka corp
2010/12/01 20:50:30
Done.
Vitaly Buka corp
2010/12/01 20:50:30
Done.
|
| + // For ceee_broker this is error because we should not have several instancess |
|
MAD
2010/12/01 19:59:40
this is error -> this is an error
instancess -> in
Vitaly Buka corp
2010/12/01 20:50:30
Done.
|
| + // of broker for the same endpoint.However BrokerRpcServer with fail anyway |
|
MAD
2010/12/01 19:59:40
endpoint.However -> endpoint. However
BrokerRpcSer
Vitaly Buka corp
2010/12/01 20:50:30
Done.
|
| + //starting listening. |
|
Sigurður Ásgeirsson
2010/12/01 19:29:38
nit: need one space after //
MAD
2010/12/01 19:59:40
starting listening -> while starting to listen.
Vitaly Buka corp
2010/12/01 20:50:30
Done.
|
| + if (RPC_S_DUPLICATE_ENDPOINT == status) |
| + status = RPC_S_OK; |
| + return status; |
| +} |
| + |
| +} // namespace |
| + |
| BrokerRpcServer::BrokerRpcServer() |
| : is_started_(false), |
| current_thread_(::GetCurrentThreadId()) { |
| @@ -36,25 +67,10 @@ |
| if (is_started()) |
| return true; |
| - std::wstring end_point = GetRpcEndPointAddress(); |
| - std::wstring protocol = kRpcProtocol; |
| - DCHECK(!protocol.empty()); |
| - DCHECK(!end_point.empty()); |
| - if (protocol.empty() || end_point.empty()) |
| - return false; |
| + std::wstring endpoint = GetRpcEndpointAddress(); |
| + RPC_STATUS status = PrepareEndpoint(endpoint); |
| - LOG(INFO) << "RPC server is starting. Endpoint: " << end_point; |
| - // Tell RPC runtime to use local interprocess communication for given |
| - // end point. |
| - RPC_STATUS status = ::RpcServerUseProtseqEp( |
| - reinterpret_cast<RPC_WSTR>(&protocol[0]), |
| - RPC_C_PROTSEQ_MAX_REQS_DEFAULT, |
| - reinterpret_cast<RPC_WSTR>(&end_point[0]), |
| - NULL); |
| - LOG_IF(ERROR, RPC_S_OK != status && RPC_S_DUPLICATE_ENDPOINT != status) << |
| - "Failed to set protocol for RPC end point. RPC_STATUS=0x" << |
| - com::LogWe(status); |
| - if (RPC_S_OK == status || RPC_S_DUPLICATE_ENDPOINT == status) { |
| + if (RPC_S_OK == status) { |
| // Register RPC interface with the RPC runtime. |
| status = ::RpcServerRegisterIfEx(BrokerRpcServer_CeeeBroker_v1_1_s_ifspec, |
| NULL, NULL, 0, RPC_C_LISTEN_MAX_CALLS_DEFAULT, NULL); |
| @@ -66,7 +82,7 @@ |
| LOG_IF(ERROR, RPC_S_OK != status) << |
| "Failed to start listening. RPC_STATUS=0x" << com::LogWe(status); |
| if (RPC_S_OK == status) { |
| - LOG(INFO) << "RPC server is started. Endpoint: " << end_point; |
| + VLOG(2) << "RPC server is started. Endpoint: " << endpoint; |
| is_started_ = true; |
| } |
| } |
| @@ -82,17 +98,19 @@ |
| is_started_ = false; |
| // Stop server listening for RPC. |
| RPC_STATUS status = ::RpcMgmtStopServerListening(NULL); |
| - LOG_IF(WARNING, RPC_S_OK != status) << |
| - "Failed to stop listening. RPC_STATUS=0x" << com::LogWe(status); |
| + LOG_IF(WARNING, RPC_S_OK != status && RPC_S_NOT_LISTENING != status) << |
| + "Failed to stop listening. RPC_STATUS=0x" << com::LogWe(status); |
| // Wait while server stops listening threads. |
| status = ::RpcMgmtWaitServerListen(); |
| - LOG_IF(WARNING, RPC_S_OK != status) << |
| - "Failed to wait server listen. RPC_STATUS=0x" << com::LogWe(status); |
| + LOG_IF(WARNING, RPC_S_OK != status && RPC_S_NOT_LISTENING != status) << |
| + "Failed to wait server listen. RPC_STATUS=0x" << com::LogWe(status); |
| // Unregister RPC interface. |
| status = ::RpcServerUnregisterIf( |
| BrokerRpcServer_CeeeBroker_v1_1_s_ifspec, NULL, FALSE); |
| - LOG_IF(WARNING, RPC_S_OK != status) << |
| - "Failed to unregister interface. RPC_STATUS=0x" << com::LogWe(status); |
| + LOG_IF(WARNING, RPC_S_OK != status || RPC_S_UNKNOWN_MGR_TYPE != status || |
| + RPC_S_UNKNOWN_IF != status) << |
| + "Failed to unregister interface. RPC_STATUS=0x" << com::LogWe(status); |
| + |
| return RPC_S_OK == status; |
| } |
| @@ -127,6 +145,7 @@ |
| void BrokerRpcServer_FireEvent( |
| handle_t binding_handle, |
| + BrokerContextHandle context, |
| const char* event_name, |
| const char* event_args) { |
| DCHECK(ChromePostman::GetInstance()); |