diff options
Diffstat (limited to 'src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h')
-rw-r--r-- | src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h | 69 |
1 files changed, 37 insertions, 32 deletions
diff --git a/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h b/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h index c971e56883..18ab2c9452 100644 --- a/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +++ b/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h @@ -21,47 +21,52 @@ #include <grpc/support/port_platform.h> -#include <stdbool.h> +#include <grpc/support/atm.h> -#include <grpc/impl/codegen/grpc_types.h> +#include "src/core/lib/gprpp/inlined_vector.h" +#include "src/core/lib/gprpp/memory.h" +#include "src/core/lib/gprpp/ref_counted.h" -typedef struct grpc_grpclb_client_stats grpc_grpclb_client_stats; +namespace grpc_core { -typedef struct { - char* token; - int64_t count; -} grpc_grpclb_drop_token_count; +class GrpcLbClientStats : public RefCounted<GrpcLbClientStats> { + public: + struct DropTokenCount { + UniquePtr<char> token; + int64_t count; -typedef struct { - grpc_grpclb_drop_token_count* token_counts; - size_t num_entries; -} grpc_grpclb_dropped_call_counts; + DropTokenCount(UniquePtr<char> token, int64_t count) + : token(std::move(token)), count(count) {} + }; -grpc_grpclb_client_stats* grpc_grpclb_client_stats_create(); -grpc_grpclb_client_stats* grpc_grpclb_client_stats_ref( - grpc_grpclb_client_stats* client_stats); -void grpc_grpclb_client_stats_unref(grpc_grpclb_client_stats* client_stats); + typedef InlinedVector<DropTokenCount, 10> DroppedCallCounts; -void grpc_grpclb_client_stats_add_call_started( - grpc_grpclb_client_stats* client_stats); -void grpc_grpclb_client_stats_add_call_finished( - bool finished_with_client_failed_to_send, bool finished_known_received, - grpc_grpclb_client_stats* client_stats); + GrpcLbClientStats() {} -// This method is not thread-safe; caller must synchronize. -void grpc_grpclb_client_stats_add_call_dropped_locked( - char* token, grpc_grpclb_client_stats* client_stats); + void AddCallStarted(); + void AddCallFinished(bool finished_with_client_failed_to_send, + bool finished_known_received); -// This method is not thread-safe; caller must synchronize. -void grpc_grpclb_client_stats_get_locked( - grpc_grpclb_client_stats* client_stats, int64_t* num_calls_started, - int64_t* num_calls_finished, - int64_t* num_calls_finished_with_client_failed_to_send, - int64_t* num_calls_finished_known_received, - grpc_grpclb_dropped_call_counts** drop_token_counts); + // This method is not thread-safe; caller must synchronize. + void AddCallDroppedLocked(char* token); -void grpc_grpclb_dropped_call_counts_destroy( - grpc_grpclb_dropped_call_counts* drop_entries); + // This method is not thread-safe; caller must synchronize. + void GetLocked(int64_t* num_calls_started, int64_t* num_calls_finished, + int64_t* num_calls_finished_with_client_failed_to_send, + int64_t* num_calls_finished_known_received, + UniquePtr<DroppedCallCounts>* drop_token_counts); + + private: + // This field must only be accessed via *_locked() methods. + UniquePtr<DroppedCallCounts> drop_token_counts_; + // These fields may be accessed from multiple threads at a time. + gpr_atm num_calls_started_ = 0; + gpr_atm num_calls_finished_ = 0; + gpr_atm num_calls_finished_with_client_failed_to_send_ = 0; + gpr_atm num_calls_finished_known_received_ = 0; +}; + +} // namespace grpc_core #endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_GRPCLB_CLIENT_STATS_H \ */ |