summaryrefslogtreecommitdiff
path: root/src/interfaces/mount_point_state_machine.hpp
diff options
context:
space:
mode:
authorKrzysztof Grobelny <krzysztof.grobelny@intel.com>2020-07-03 13:35:09 +0300
committerKarol Wachowski <karol.wachowski@intel.com>2020-07-17 09:48:46 +0300
commitd113e4284674d112aff0744fe734581bd3fc4abf (patch)
tree727b644c30a050f39d5fdd21452f40d70cf1df1a /src/interfaces/mount_point_state_machine.hpp
parent1d453d987d5ece338aad08cee315fbacf179e692 (diff)
downloadvirtual-media-d113e4284674d112aff0744fe734581bd3fc4abf.tar.xz
Fixing multiple problems with state machine in virtual media
- Previously machine did not handle AnyEvent correctly, implementation in BaseState was always run - Changing from ActiveState to ReadyState was bugged, previously only one of event SubprocessStopped or UdevNotification caused state change when it is required to wait for both - Introduced longer timer when waiting for ReadyState during Eject and ActiveState during Inject, because ndbkit can timeout during Eject and it is required to complete before next inject can success. - Added event notification when process is terminated - Added resourcess classes to handle deletion and notifications Signed-off-by: Krzysztof Grobelny <krzysztof.grobelny@intel.com> Signed-off-by: Karol Wachowski <karol.wachowski@intel.com> Change-Id: Ie914e650c2f15bd73cdc87582ea77a94997a3472 Signed-off-by: Karol Wachowski <karol.wachowski@intel.com>
Diffstat (limited to 'src/interfaces/mount_point_state_machine.hpp')
-rw-r--r--src/interfaces/mount_point_state_machine.hpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/interfaces/mount_point_state_machine.hpp b/src/interfaces/mount_point_state_machine.hpp
new file mode 100644
index 0000000..db521fb
--- /dev/null
+++ b/src/interfaces/mount_point_state_machine.hpp
@@ -0,0 +1,40 @@
+#pragma once
+
+#include "configuration.hpp"
+#include "resources.hpp"
+
+struct BasicState;
+
+namespace interfaces
+{
+
+struct MountPointStateMachine
+{
+ struct Target
+ {
+ std::string imgUrl;
+ bool rw;
+ std::unique_ptr<resource::Mount> mountPoint;
+ std::unique_ptr<utils::CredentialsProvider> credentials;
+ };
+
+ virtual ~MountPointStateMachine() = default;
+
+ virtual std::string_view getName() const = 0;
+ virtual Configuration::MountPoint& getConfig() = 0;
+ virtual std::optional<Target>& getTarget() = 0;
+ virtual BasicState& getState() = 0;
+ virtual int& getExitCode() = 0;
+ virtual boost::asio::io_context& getIoc() = 0;
+
+ virtual void emitRegisterDBusEvent(
+ std::shared_ptr<sdbusplus::asio::connection> bus,
+ std::shared_ptr<sdbusplus::asio::object_server> objServer) = 0;
+ virtual void emitMountEvent(std::optional<Target>) = 0;
+ virtual void emitUnmountEvent() = 0;
+ virtual void emitSubprocessStoppedEvent() = 0;
+ virtual void emitUdevStateChangeEvent(const NBDDevice& dev,
+ StateChange devState) = 0;
+};
+
+} // namespace interfaces