Remembered recovered and subscribed providers in ephemeral state. This patch adds a data structure to bookkeep subscribed and recovered resource providers in the ephemeral state of the resource provider manager.
Review: https://reviews.apache.org/r/66544/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/9a8cef07 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/9a8cef07 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/9a8cef07 Branch: refs/heads/master Commit: 9a8cef0739446925a0719abf51758ea7443c8990 Parents: 169efe6 Author: Benjamin Bannier <[email protected]> Authored: Tue May 1 13:09:17 2018 -0700 Committer: Chun-Hung Hsiao <[email protected]> Committed: Tue May 1 13:09:17 2018 -0700 ---------------------------------------------------------------------- src/resource_provider/manager.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/9a8cef07/src/resource_provider/manager.cpp ---------------------------------------------------------------------- diff --git a/src/resource_provider/manager.cpp b/src/resource_provider/manager.cpp index dfb8e73..bc52741 100644 --- a/src/resource_provider/manager.cpp +++ b/src/resource_provider/manager.cpp @@ -208,6 +208,10 @@ private: struct ResourceProviders { hashmap<ResourceProviderID, Owned<ResourceProvider>> subscribed; + hashmap< + ResourceProviderID, + mesos::resource_provider::registry::ResourceProvider> + known; } resourceProviders; struct Metrics @@ -253,6 +257,13 @@ void ResourceProviderManagerProcess::initialize() Future<Nothing> ResourceProviderManagerProcess::recover( const mesos::resource_provider::registry::Registry& registry) { + foreach ( + const mesos::resource_provider::registry::ResourceProvider& + resourceProvider, + registry.resource_providers()) { + resourceProviders.known.put(resourceProvider.id(), resourceProvider); + } + recovered.set(Nothing()); return Nothing(); @@ -697,6 +708,17 @@ void ResourceProviderManagerProcess::subscribe( resourceProviders.subscribed.put( resourceProviderId, std::move(resourceProvider)); + + if (!resourceProviders.known.contains(resourceProviderId)) { + mesos::resource_provider::registry::ResourceProvider resourceProvider_; + resourceProvider_.mutable_id()->CopyFrom(resourceProviderId); + + resourceProviders.known.put( + resourceProviderId, + std::move(resourceProvider_)); + + // TODO(bbannier): Persist this information in the registry. + } }
