26#include "IDobbyUtils.h"
27#include "IDobbyIPCUtils.h"
28#include "DobbyConfig.h"
29#include "IDobbyRdkPlugin.h"
30#include "IDobbyRdkLoggingPlugin.h"
31#include "ContainerId.h"
32#include "DobbyLogger.h"
34#include <IIpcService.h>
47#include <netinet/in.h>
51# include <json/json.h>
53# include <jsoncpp/json.h>
79 typedef std::function<void(int32_t cd,
const ContainerId&
id)> ContainerStartedFunc;
80 typedef std::function<void(int32_t cd,
const ContainerId&
id, int32_t status)> ContainerStoppedFunc;
81 typedef std::function<void(int32_t cd,
const ContainerId&
id)> ContainerHibernatedFunc;
85 const std::shared_ptr<IDobbyUtils>& utils,
86 const std::shared_ptr<IDobbyIPCUtils>& ipcUtils,
87 const std::shared_ptr<const IDobbySettings>& settings,
88 const ContainerStartedFunc& containerStartedCb,
89 const ContainerStoppedFunc& containerStoppedCb,
90 const ContainerHibernatedFunc& containerHibernatedCb,
91 const ContainerHibernatedFunc& containerAwokenCb);
102#if defined(LEGACY_COMPONENTS)
103 int32_t startContainerFromSpec(
const ContainerId&
id,
104 const std::string& jsonSpec,
105 const std::list<int>& files,
106 const std::string& command,
107 const std::string& displaySocket,
108 const std::vector<std::string>& envVars);
112 const std::string& bundlePath,
113 const std::list<int>& files,
114 const std::string& command,
115 const std::string& displaySocket,
116 const std::vector<std::string>& envVars);
126 const std::string& source,
127 const std::string& destination,
128 const std::vector<std::string>& mountFlags,
129 const std::string& mountData);
131 bool removeMount(int32_t cd,
const std::string& source);
133 bool annotate(int32_t cd,
const std::string &key,
const std::string &value);
137 const std::string& options,
138 const std::string& command);
140 std::list<std::pair<int32_t, ContainerId>>
listContainers()
const;
149#if defined(LEGACY_COMPONENTS)
151 std::string specOfContainer(int32_t cd)
const;
152 bool createBundle(
const ContainerId&
id,
const std::string& jsonSpec);
160 std::shared_ptr<IDobbyRdkLoggingPlugin>
164 const std::unique_ptr<DobbyContainer> &container,
165 const std::list<int> &files);
168 const std::string &command,
169 const std::string &displaySocket,
170 const std::vector<std::string> &envVars);
173 const std::unique_ptr<DobbyContainer>& container,
174 const std::list<int>& files);
177 const std::unique_ptr<DobbyContainer>& container);
180 ContainerStartedFunc mContainerStartedCb;
181 ContainerStoppedFunc mContainerStoppedCb;
182 ContainerHibernatedFunc mContainerHibernatedCb;
183 ContainerHibernatedFunc mContainerAwokenCb;
186 mutable std::mutex mLock;
187 std::map<ContainerId, std::unique_ptr<DobbyContainer>> mContainers;
188 std::multimap<ContainerId, pid_t> mContainerExecPids;
193 bool onPostHaltHook(
const std::unique_ptr<DobbyContainer> &container);
195#if defined(LEGACY_COMPONENTS)
198 const std::shared_ptr<DobbyStartState>& startState,
199 const std::unique_ptr<DobbyContainer>& container);
201 const std::unique_ptr<DobbyContainer>& container);
203 const std::unique_ptr<DobbyContainer>& container);
205 const std::unique_ptr<DobbyContainer>& container);
207 const std::unique_ptr<DobbyContainer>& container);
210 enum class HookType {
211 PostConstruction, PreStart, PostStart, PostStop, PreDestruction };
221 bool shouldEnableSTrace(
const std::shared_ptr<DobbyConfig> &config)
const;
223 const std::shared_ptr<IDobbyEnv> mEnvironment;
224 const std::shared_ptr<IDobbyUtils> mUtilities;
225 const std::shared_ptr<IDobbyIPCUtils> mIPCUtilities;
226 const std::shared_ptr<const IDobbySettings> mSettings;
229 std::unique_ptr<DobbyLogger> mLogger;
230 std::unique_ptr<DobbyRunC> mRunc;
233 sem_t mRuncMonitorThreadStartedSem;
234 std::thread mRuncMonitorThread;
235 std::atomic<bool> mRuncMonitorTerminate;
236 int mCleanupTaskTimerId;
238#if defined(LEGACY_COMPONENTS)
240 std::unique_ptr<DobbyLegacyPluginManager> mLegacyPlugins;
A wrapper around a std::string, used to add some type definition to to an id and also to sanity check...
Definition ContainerId.h:41
Interface that configuration file parser classes have to implement.
Definition DobbyConfig.h:66
Wrapper object used to store container resources.
Definition DobbyContainer.h:59
Class that manages all the plugin hook libraries.
Definition DobbyLegacyPluginManager.h:65
The main object which starts / stops / manages the containers.
Definition DobbyManager.h:77
bool restartContainer(const ContainerId &id, const std::unique_ptr< DobbyContainer > &container)
Attempts to restart the container.
Definition DobbyManager.cpp:1243
void cleanupContainersShutdown()
Gracefully stops and cleans up any running containers. Will emit the container stop event when a cont...
Definition DobbyManager.cpp:476
bool execInContainer(int32_t cd, const std::string &options, const std::string &command)
Executes a command in a running container.
Definition DobbyManager.cpp:2273
bool resumeContainer(int32_t cd)
Thaws a frozen container.
Definition DobbyManager.cpp:1491
void stopRuncMonitorThread()
Stops the monitor thread and cleans up it's resources.
Definition DobbyManager.cpp:3262
void cleanupContainers()
Gets a list of running containers and tries to kill and delete them.
Definition DobbyManager.cpp:375
std::string statsOfContainer(int32_t cd) const
Gets the stats for the container.
Definition DobbyManager.cpp:2466
bool addMount(int32_t cd, const std::string &source, const std::string &destination, const std::vector< std::string > &mountFlags, const std::string &mountData)
adds a mount to a running container
Definition DobbyManager.cpp:1890
void runcMonitorThread()
Thread function that monitors for any SIGCHILD signals and if detected loops through the running cont...
Definition DobbyManager.cpp:3301
bool wakeupContainer(int32_t cd)
Wakeup a checkpointed container from existing dump.
Definition DobbyManager.cpp:1713
int32_t startContainerFromBundle(const ContainerId &id, const std::string &bundlePath, const std::list< int > &files, const std::string &command, const std::string &displaySocket, const std::vector< std::string > &envVars)
Where the magic begins ... attempts to create a container from an OCI bundle*.
Definition DobbyManager.cpp:993
bool annotate(int32_t cd, const std::string &key, const std::string &value)
Adds a key-value pair annotation to a running container.
Definition DobbyManager.cpp:1806
bool cleanupContainer(const DobbyRunC::ContainerListItem &container)
Cleans up a container that is in an unknown state - used at Dobby startup to ensure the box is in a c...
Definition DobbyManager.cpp:249
bool removeMount(int32_t cd, const std::string &source)
removes a mount from a running container
Definition DobbyManager.cpp:2172
std::string ociConfigOfContainer(int32_t cd) const
Debugging method to allow you to retrieve the OCI config.json spec used to create the container.
Definition DobbyManager.cpp:2545
bool createAndStartContainer(const ContainerId &id, const std::unique_ptr< DobbyContainer > &container, const std::list< int > &files)
Creates and attempts to start the container.
Definition DobbyManager.cpp:694
bool onPostHaltHook(const std::unique_ptr< DobbyContainer > &container)
Called at the post-halt stage of container startup.
Definition DobbyManager.cpp:2761
void setupSystem()
Configures the linux system for enabling features needed for runc.
Definition DobbyManager.cpp:153
bool createAndStart(const ContainerId &id, const std::unique_ptr< DobbyContainer > &container, const std::list< int > &files)
Create and start a container. Set up and capture logs from all container hooks if an RDK logging plug...
Definition DobbyManager.cpp:549
std::list< std::pair< int32_t, ContainerId > > listContainers() const
Returns a list of all the containers.
Definition DobbyManager.cpp:2351
void setupWorkspace(const std::shared_ptr< IDobbyEnv > &env)
Configures the workspace directory.
Definition DobbyManager.cpp:208
bool customiseConfig(const std::shared_ptr< DobbyConfig > &config, const std::string &command, const std::string &displaySocket, const std::vector< std::string > &envVars)
Updates the container config with custom options provided by the start command.
Definition DobbyManager.cpp:634
bool onPreCreationHook(const std::unique_ptr< DobbyContainer > &container)
Called at the pre-create stage of container startup.
Definition DobbyManager.cpp:2724
std::shared_ptr< IDobbyRdkLoggingPlugin > GetContainerLogger(const std::unique_ptr< DobbyContainer > &container)
Get the instance of the logging plugin for the current container (if one is loaded)
Definition DobbyManager.cpp:522
void onChildExit()
Called when we detect a child process has terminated.
Definition DobbyManager.cpp:3098
bool stopContainer(int32_t cd, bool withPrejudice)
Stops a running container.
Definition DobbyManager.cpp:1310
int32_t stateOfContainer(int32_t cd) const
Returns the state of a given container.
Definition DobbyManager.cpp:2376
bool onPostInstallationHook(const std::unique_ptr< DobbyContainer > &container)
Called at the post-installation stage of container startup.
Definition DobbyManager.cpp:2677
bool hibernateContainer(int32_t cd, const std::string &options)
Dumps a running container's processes.
Definition DobbyManager.cpp:1545
void handleContainerTerminate(const ContainerId &id, const std::unique_ptr< DobbyContainer > &container, const int status)
Perform all the necessary cleanup and run plugins required when a container has terminated.
Definition DobbyManager.cpp:3001
void startRuncMonitorThread()
Starts a thread that monitors for SIGCHILD signals.
Definition DobbyManager.cpp:3240
bool pauseContainer(int32_t cd)
Freezes a running container.
Definition DobbyManager.cpp:1430
bool invalidContainerCleanupTask()
Task that will try and cleanup invalid/unknown state containers periodically - if the container can b...
Definition DobbyManager.cpp:3357
bool removeAnnotation(int32_t cd, const std::string &key)
removes a key-value pair annotation from a running container
Definition DobbyManager.cpp:1844
Stores the start state of the container.
Definition DobbyStartState.h:49
Interface that exports the environment of the daemon to plugins.
Definition IDobbyEnv.h:46
Interface provided to the library at startup, contains the configuration options for Dobby.
Definition IDobbySettings.h:50
Definition DobbyRunC.h:67