Line data Source code
1 : #include "source/common/rds/route_config_update_receiver_impl.h" 2 : 3 : #include "source/common/rds/util.h" 4 : 5 : namespace Envoy { 6 : namespace Rds { 7 : 8 : RouteConfigUpdateReceiverImpl::RouteConfigUpdateReceiverImpl( 9 : ConfigTraits& config_traits, ProtoTraits& proto_traits, 10 : Server::Configuration::ServerFactoryContext& factory_context) 11 : : config_traits_(config_traits), proto_traits_(proto_traits), factory_context_(factory_context), 12 : time_source_(factory_context.timeSource()), 13 : route_config_proto_(proto_traits_.createEmptyProto()), 14 50 : config_(config_traits_.createNullConfig()) {} 15 : 16 : void RouteConfigUpdateReceiverImpl::updateConfig( 17 36 : std::unique_ptr<Protobuf::Message>&& route_config_proto) { 18 36 : config_ = config_traits_.createConfig(*route_config_proto, factory_context_, 19 36 : false /* not validate unknown cluster */); 20 : // If the above create config doesn't raise exception, update the 21 : // other cached config entries. 22 36 : route_config_proto_ = std::move(route_config_proto); 23 36 : } 24 : 25 36 : void RouteConfigUpdateReceiverImpl::onUpdateCommon(const std::string& version_info) { 26 36 : last_updated_ = time_source_.systemTime(); 27 36 : config_info_.emplace(RouteConfigProvider::ConfigInfo{*route_config_proto_, version_info}); 28 36 : } 29 : 30 : // Rds::RouteConfigUpdateReceiver 31 : bool RouteConfigUpdateReceiverImpl::onRdsUpdate(const Protobuf::Message& rc, 32 0 : const std::string& version_info) { 33 0 : uint64_t new_hash = getHash(rc); 34 0 : if (!checkHash(new_hash)) { 35 0 : return false; 36 0 : } 37 0 : updateConfig(cloneProto(proto_traits_, rc)); 38 0 : updateHash(new_hash); 39 0 : onUpdateCommon(version_info); 40 0 : return true; 41 0 : } 42 : 43 : const absl::optional<RouteConfigProvider::ConfigInfo>& 44 154 : RouteConfigUpdateReceiverImpl::configInfo() const { 45 154 : return config_info_; 46 154 : } 47 : 48 : } // namespace Rds 49 : } // namespace Envoy