data: indexer processes

* TaskBuildIndex starts seperate indexer processes and communicates via shared memory
* indexer processes get restarted if they fail
* indexer processes are killed when the app closes or crashes
* added utility class SharedMemory to allocate and access shared memory, providing basic data structures
* added SharedMemoryGarbageCollector for keeping track of running instances and cleaning up shared memory in case of a crash
* show errors for source files that crashed during indexing
* added basic exception handling to task scheduling
* added option to turn off processes and use threads in preferences, but still use shared memory

fortune cookie message = Good news from someone dear is coming soon.
This commit is contained in:
Eberhard Graether
2017-05-04 15:50:59 +02:00
parent 9beea94fd8
commit 706119ebcc
109 changed files with 3351 additions and 1261 deletions
+19 -2
View File
@@ -1,5 +1,6 @@
#include "Application.h"
#include "utility/interprocess/SharedMemoryGarbageCollector.h"
#include "utility/logging/logging.h"
#include "utility/logging/LogManager.h"
#include "utility/messaging/MessageQueue.h"
@@ -8,6 +9,7 @@
#include "utility/scheduling/TaskScheduler.h"
#include "utility/tracing.h"
#include "utility/UserPaths.h"
#include "utility/UUIDUtility.h"
#include "utility/Version.h"
#include "component/view/DialogView.h"
@@ -22,10 +24,14 @@
#include "settings/ProjectSettings.h"
#include "settings/ColorScheme.h"
std::shared_ptr<Application> Application::s_instance;
std::string Application::s_uuid;
void Application::createInstance(
const Version& version, ViewFactory* viewFactory, NetworkFactory* networkFactory
){
Version::setApplicationVersion(version);
SharedMemoryGarbageCollector::createInstance()->run(Application::getUUID());
loadSettings();
TaskScheduler::getInstance();
@@ -69,6 +75,16 @@ void Application::destroyInstance()
s_instance.reset();
}
std::string Application::getUUID()
{
if (!s_uuid.size())
{
s_uuid = UUIDUtility::UUIDtoString(UUIDUtility::getUUID());
}
return s_uuid;
}
void Application::loadSettings()
{
MessageStatus("Load settings: " + UserPaths::getAppSettingsPath().str()).dispatch();
@@ -87,8 +103,6 @@ void Application::loadStyle(const FilePath& colorSchemePath)
GraphViewStyle::loadStyleSettings();
}
std::shared_ptr<Application> Application::s_instance;
Application::Application(bool withGUI)
: m_hasGUI(withGUI)
, m_isInTrial(true)
@@ -100,10 +114,13 @@ Application::~Application()
{
MessageQueue::getInstance()->stopMessageLoop();
TaskScheduler::getInstance()->stopSchedulerLoop();
if (m_hasGUI)
{
m_mainView->saveLayout();
}
SharedMemoryGarbageCollector::getInstance()->stop();
}
const std::shared_ptr<Project> Application::getCurrentProject()