| 8714 | |
| 8715 | |
| 8716 | void Slave::handleResourceProviderMessage( |
| 8717 | const Future<ResourceProviderMessage>& message) |
| 8718 | { |
| 8719 | // Ignore terminal messages which are not ready. These |
| 8720 | // can arise e.g., if the `Future` was discarded. |
| 8721 | if (!message.isReady()) { |
| 8722 | LOG(ERROR) << "Last resource provider message became terminal before " |
| 8723 | "becoming ready: " |
| 8724 | << (message.isFailed() ? message.failure() : "future discarded"); |
| 8725 | |
| 8726 | // Wait for the next message. |
| 8727 | CHECK_NOTNULL(resourceProviderManager.get())->messages().get() |
| 8728 | .onAny(defer(self(), &Self::handleResourceProviderMessage, lambda::_1)); |
| 8729 | |
| 8730 | return; |
| 8731 | } |
| 8732 | |
| 8733 | LOG(INFO) << "Handling resource provider message '" << message.get() << "'"; |
| 8734 | |
| 8735 | switch(message->type) { |
| 8736 | case ResourceProviderMessage::Type::SUBSCRIBE: { |
| 8737 | CHECK_SOME(message->subscribe); |
| 8738 | |
| 8739 | const ResourceProviderMessage::Subscribe& subscribe = |
| 8740 | message->subscribe.get(); |
| 8741 | |
| 8742 | CHECK(subscribe.info.has_id()); |
| 8743 | |
| 8744 | ResourceProvider* resourceProvider = |
| 8745 | getResourceProvider(subscribe.info.id()); |
| 8746 | |
| 8747 | if (resourceProvider == nullptr) { |
| 8748 | resourceProvider = new ResourceProvider(subscribe.info, {}, None()); |
| 8749 | |
| 8750 | addResourceProvider(resourceProvider); |
| 8751 | } else { |
| 8752 | // Always update the resource provider info. |
| 8753 | resourceProvider->info = subscribe.info; |
| 8754 | } |
| 8755 | break; |
| 8756 | } |
| 8757 | case ResourceProviderMessage::Type::UPDATE_STATE: { |
| 8758 | CHECK_SOME(message->updateState); |
| 8759 | |
| 8760 | const ResourceProviderMessage::UpdateState& updateState = |
| 8761 | message->updateState.get(); |
| 8762 | |
| 8763 | ResourceProvider* resourceProvider = |
| 8764 | getResourceProvider(updateState.resourceProviderId); |
| 8765 | |
| 8766 | CHECK(resourceProvider); |
| 8767 | |
| 8768 | if (resourceProvider->totalResources != updateState.totalResources) { |
| 8769 | // Update the 'total' in the Slave. |
| 8770 | CHECK(totalResources.contains(resourceProvider->totalResources)); |
| 8771 | totalResources -= resourceProvider->totalResources; |
| 8772 | totalResources += updateState.totalResources; |
| 8773 |
nothing calls this directly
no test coverage detected