1
#include "source/common/upstream/cluster_update_tracker.h"
2

            
3
namespace Envoy {
4
namespace Upstream {
5

            
6
ClusterUpdateTracker::ClusterUpdateTracker(ClusterManager& cm, const std::string& cluster_name)
7
102
    : cluster_name_(cluster_name),
8
102
      cluster_update_callbacks_handle_(cm.addThreadLocalClusterUpdateCallbacks(*this)) {
9
102
  Upstream::ThreadLocalCluster* cluster = cm.getThreadLocalCluster(cluster_name_);
10
102
  if (cluster != nullptr) {
11
91
    thread_local_cluster_ = *cluster;
12
91
  }
13
102
}
14

            
15
void ClusterUpdateTracker::onClusterAddOrUpdate(absl::string_view cluster_name,
16
6
                                                ThreadLocalClusterCommand& get_cluster) {
17
6
  if (cluster_name != cluster_name_) {
18
3
    return;
19
3
  }
20
3
  thread_local_cluster_ = get_cluster();
21
3
}
22

            
23
6
void ClusterUpdateTracker::onClusterRemoval(const std::string& cluster) {
24
6
  if (cluster != cluster_name_) {
25
3
    return;
26
3
  }
27
3
  thread_local_cluster_.reset();
28
3
}
29

            
30
} // namespace Upstream
31
} // namespace Envoy