diff options
author | Krzysztof Grobelny <krzysztof.grobelny@intel.com> | 2020-07-03 13:35:09 +0300 |
---|---|---|
committer | Karol Wachowski <karol.wachowski@intel.com> | 2020-07-17 09:48:46 +0300 |
commit | d113e4284674d112aff0744fe734581bd3fc4abf (patch) | |
tree | 727b644c30a050f39d5fdd21452f40d70cf1df1a /src/interfaces/mount_point_state_machine.hpp | |
parent | 1d453d987d5ece338aad08cee315fbacf179e692 (diff) | |
download | virtual-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.hpp | 40 |
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 |