| 2739 | } |
| 2740 | |
| 2741 | std::shared_ptr<const BackendDescriptorPB> ImpalaServer::GetLocalBackendDescriptor() { |
| 2742 | if (!AreServicesReady()) return nullptr; |
| 2743 | |
| 2744 | lock_guard<mutex> l(local_backend_descriptor_lock_); |
| 2745 | // Check if the current backend descriptor needs to be initialized. |
| 2746 | if (local_backend_descriptor_.get() == nullptr) { |
| 2747 | shared_ptr<BackendDescriptorPB> new_be_desc = |
| 2748 | std::make_shared<BackendDescriptorPB>(); |
| 2749 | BuildLocalBackendDescriptorInternal(new_be_desc.get()); |
| 2750 | local_backend_descriptor_ = new_be_desc; |
| 2751 | } |
| 2752 | |
| 2753 | // Check to see if it needs to be updated. |
| 2754 | if (IsShuttingDown() != local_backend_descriptor_->is_quiescing()) { |
| 2755 | std::shared_ptr<BackendDescriptorPB> new_be_desc = |
| 2756 | std::make_shared<BackendDescriptorPB>(*local_backend_descriptor_); |
| 2757 | new_be_desc->set_is_quiescing(IsShuttingDown()); |
| 2758 | local_backend_descriptor_ = new_be_desc; |
| 2759 | } |
| 2760 | |
| 2761 | return local_backend_descriptor_; |
| 2762 | } |
| 2763 | |
| 2764 | void ImpalaServer::BuildLocalBackendDescriptorInternal(BackendDescriptorPB* be_desc) { |
| 2765 | DCHECK(AreServicesReady()); |