#ifndef APP_H_ #define APP_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class App : public AbstractApp { public: enum AppCode { NO_ERROR = 0, INVALID_CONFIG = 1, INITIALIZATION_ERROR = 2, RUNTIME_ERROR = 3 }; App(int argc, char** argv); virtual void run() override; virtual void stopComponents() override; virtual void handleComponentException(std::exception& e) override; virtual void handleNetworkInterfaceFailure(const std::string& devname) override; private: int appResult; int argc; char** argv; LockFD pidFileLockFD; std::unique_ptr targetMapper; std::unique_ptr cfg; std::unique_ptr netFilter; std::unique_ptr tcpOnlyFilter; std::unique_ptr netMessageFactory; NicListCapabilities localNicCaps; std::shared_ptr localNode; std::unique_ptr tsdb; std::unique_ptr workQueue; std::unique_ptr mgmtNodes; std::unique_ptr metaNodes; std::unique_ptr storageNodes; std::unique_ptr metaBuddyGroupMapper; std::unique_ptr storageBuddyGroupMapper; std::unique_ptr nodeListRequestor; std::unique_ptr statsCollector; std::unique_ptr cleanUp; std::list> workerList; void printOrLogError(const std::string& text) const; void runNormal(); void initDataObjects(); void initComponents(); void startComponents(); void joinComponents(); void initWorkers(); void startWorkers(); void stopWorkers(); void joinWorkers(); void initLocalNodeInfo(); void logInfos(); void daemonize(); public: NodeStoreServers* getServerStoreFromType(NodeType nodeType) { switch (nodeType) { case NODETYPE_Meta: return metaNodes.get(); case NODETYPE_Storage: return storageNodes.get(); case NODETYPE_Mgmt: return mgmtNodes.get(); default: return nullptr; } } virtual ICommonConfig* getCommonConfig() const override { return cfg.get(); } virtual NetFilter* getNetFilter() const override { return netFilter.get(); } virtual NetFilter* getTcpOnlyFilter() const override { return tcpOnlyFilter.get(); } virtual AbstractNetMessageFactory* getNetMessageFactory() const override { return netMessageFactory.get(); } std::shared_ptr getLocalNode() { return localNode; } Config* getConfig() { return cfg.get(); } MultiWorkQueue *getWorkQueue() { return workQueue.get(); } NodeStoreMetaEx *getMetaNodes() { return metaNodes.get(); } NodeStoreStorageEx *getStorageNodes() { return storageNodes.get(); } NodeStoreMgmtEx *getMgmtNodes() { return mgmtNodes.get(); } TSDatabase *getTSDB() { return tsdb.get(); } TargetMapper* getTargetMapper() { return targetMapper.get(); } MirrorBuddyGroupMapper* getMetaBuddyGroupMapper() { return metaBuddyGroupMapper.get(); } MirrorBuddyGroupMapper* getStorageBuddyGroupMapper() { return storageBuddyGroupMapper.get(); } int getAppResult() { return appResult; } }; #endif /*APP_H_*/