blob: 42b0a28fd3c99f45d388fd6e59e4244ddba096a1 [file] [log] [blame]
#pragma once
#include "NVMeDrive.hpp"
#include "NVMeError.hpp"
#include "NVMeSubsys.hpp"
#include "NVMeVolume.hpp"
#include <boost/asio.hpp>
#include <sdbusplus/asio/connection.hpp>
#include <sdbusplus/asio/object_server.hpp>
#include <xyz/openbmc_project/Common/Progress/server.hpp>
#include <xyz/openbmc_project/Nvme/CreateVolumeProgressFailure/server.hpp>
#include <xyz/openbmc_project/Nvme/CreateVolumeProgressSuccess/server.hpp>
#include <memory>
class NVMeVolume;
using OperationStatus =
sdbusplus::xyz::openbmc_project::Common::server::Progress::OperationStatus;
using CreateVolumeProgressSuccess =
sdbusplus::xyz::openbmc_project::Nvme::server::CreateVolumeProgressSuccess;
using CreateVolumeProgressFailure =
sdbusplus::xyz::openbmc_project::Nvme::server::CreateVolumeProgressFailure;
class NVMeProgress :
public sdbusplus::xyz::openbmc_project::Common::server::Progress
{
public:
NVMeProgress(const std::shared_ptr<sdbusplus::asio::connection>& conn,
const std::string& path);
~NVMeProgress() override;
void complete();
void fail();
void abort();
};
class NVMeCreateVolumeProgress : public NVMeProgress
{
public:
NVMeCreateVolumeProgress(
const std::shared_ptr<sdbusplus::asio::connection>& conn,
const std::string& path);
~NVMeCreateVolumeProgress() override;
void createSuccess(const std::shared_ptr<NVMeVolume>& volume);
void createFailure(const nvme_ex_ptr& e);
/* Returns the volume path if successful, or empty otherwise */
std::string volumePath() const;
const std::string path;
private:
std::shared_ptr<sdbusplus::asio::connection> conn;
// interfaces are added only once the state is set to success/failure
std::shared_ptr<CreateVolumeProgressSuccess> success;
std::shared_ptr<CreateVolumeProgressFailure> failure;
};