aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/hub/hub.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenserver/hub/hub.h')
-rw-r--r--src/zenserver/hub/hub.h55
1 files changed, 48 insertions, 7 deletions
diff --git a/src/zenserver/hub/hub.h b/src/zenserver/hub/hub.h
index f880dab52..28e77e729 100644
--- a/src/zenserver/hub/hub.h
+++ b/src/zenserver/hub/hub.h
@@ -53,12 +53,13 @@ public:
std::string HydrationTargetSpecification;
};
- typedef std::function<void(std::string_view ModuleId, const HubProvisionedInstanceInfo& Info)> ProvisionModuleCallbackFunc;
+ typedef std::function<
+ void(std::string_view ModuleId, const HubProvisionedInstanceInfo& Info, HubInstanceState OldState, HubInstanceState NewState)>
+ AsyncModuleStateChangeCallbackFunc;
- Hub(const Configuration& Config,
- ZenServerEnvironment&& RunEnvironment,
- ProvisionModuleCallbackFunc&& ProvisionedModuleCallback = {},
- ProvisionModuleCallbackFunc&& DeprovisionedModuleCallback = {});
+ Hub(const Configuration& Config,
+ ZenServerEnvironment&& RunEnvironment,
+ AsyncModuleStateChangeCallbackFunc&& ModuleStateChangeCallback = {});
~Hub();
Hub(const Hub&) = delete;
@@ -73,6 +74,11 @@ public:
};
/**
+ * Deprovision all running instances
+ */
+ void Shutdown();
+
+ /**
* Provision a storage server instance for the given module ID.
*
* @param ModuleId The ID of the module to provision.
@@ -139,8 +145,7 @@ private:
const Configuration m_Config;
ZenServerEnvironment m_RunEnvironment;
- ProvisionModuleCallbackFunc m_ProvisionedModuleCallback;
- ProvisionModuleCallbackFunc m_DeprovisionedModuleCallback;
+ AsyncModuleStateChangeCallbackFunc m_ModuleStateChangeCallback;
std::string m_HydrationTargetSpecification;
std::filesystem::path m_HydrationTempPath;
@@ -170,6 +175,42 @@ private:
void UpdateStats();
void UpdateCapacityMetrics();
bool CanProvisionInstance(std::string_view ModuleId, std::string& OutReason);
+
+ class InstanceStateUpdateGuard
+ {
+ public:
+ InstanceStateUpdateGuard(Hub& InHub,
+ std::string_view ModuleId,
+ HubInstanceState OldState,
+ HubInstanceState& NewState,
+ uint16_t BasePort,
+ const std::string& BaseUri)
+ : m_Hub(InHub)
+ , m_ModuleId(ModuleId)
+ , m_OldState(OldState)
+ , m_NewState(NewState)
+ , m_BasePort(BasePort)
+ , m_BaseUri(BaseUri)
+ {
+ }
+ ~InstanceStateUpdateGuard() { m_Hub.OnStateUpdate(m_ModuleId, m_OldState, m_NewState, m_BasePort, m_BaseUri); }
+
+ private:
+ Hub& m_Hub;
+ const std::string m_ModuleId;
+ HubInstanceState m_OldState;
+ HubInstanceState& m_NewState;
+ uint16_t m_BasePort;
+ const std::string m_BaseUri;
+ };
+
+ void OnStateUpdate(std::string_view ModuleId,
+ HubInstanceState OldState,
+ HubInstanceState& NewState,
+ uint16_t BasePort,
+ std::string_view BaseUri);
+
+ friend class InstanceStateUpdateGuard;
};
#if ZEN_WITH_TESTS