aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/storage/zenstorageserver.h
blob: 456447a2af63ef5f7b21c363c16d61a11951fdf7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "zenserver.h"

#include <zenhttp/auth/authmgr.h>
#include <zenhttp/auth/authservice.h>
#include <zenhttp/httpapiservice.h>
#include <zenhttp/httptest.h>
#include <zenstore/cache/structuredcachestore.h>
#include <zenstore/gc.h>
#include <zenstore/projectstore.h>

#include "admin/admin.h"
#include "buildstore/httpbuildstore.h"
#include "cache/httpstructuredcache.h"
#include "diag/diagsvcs.h"
#include "frontend/frontend.h"
#include "objectstore/objectstore.h"
#include "projectstore/httpprojectstore.h"
#include "stats/statsreporter.h"
#include "upstream/upstream.h"
#include "vfs/vfsservice.h"
#include "workspaces/httpworkspaces.h"

#if ZEN_WITH_COMPUTE_SERVICES
#	include <zencompute/httpfunctionservice.h>
#endif

namespace zen {

class ZenStorageServer : public ZenServerBase
{
	ZenStorageServer& operator=(ZenStorageServer&&) = delete;
	ZenStorageServer(ZenStorageServer&&)			= delete;

public:
	ZenStorageServer();
	~ZenStorageServer();

	int	 Initialize(const ZenStorageServerConfig& ServerOptions, ZenServerState::ZenServerEntry* ServerEntry);
	void Run();
	void Cleanup();

private:
	void InitializeState(const ZenStorageServerConfig& ServerOptions);
	void InitializeStructuredCache(const ZenStorageServerConfig& ServerOptions);
	void Flush();

	std::string		   m_StartupScrubOptions;
	CbObject		   m_RootManifest;
	asio::steady_timer m_StateMarkerTimer{m_IoContext};

	void EnqueueStateMarkerTimer();
	void CheckStateMarker();

	std::unique_ptr<AuthMgr>		 m_AuthMgr;
	std::unique_ptr<HttpAuthService> m_AuthService;
	void							 InitializeAuthentication(const ZenStorageServerConfig& ServerOptions);

	void InitializeServices(const ZenStorageServerConfig& ServerOptions);
	void RegisterServices();

	HttpStatsService				  m_StatsService;
	std::unique_ptr<JobQueue>		  m_JobQueue;
	GcManager						  m_GcManager;
	GcScheduler						  m_GcScheduler{m_GcManager};
	std::unique_ptr<CidStore>		  m_CidStore;
	Ref<ZenCacheStore>				  m_CacheStore;
	std::unique_ptr<OpenProcessCache> m_OpenProcessCache;
	HttpTestService					  m_TestService;
	std::unique_ptr<CidStore>		  m_BuildCidStore;
	std::unique_ptr<BuildStore>		  m_BuildStore;

#if ZEN_WITH_TESTS
	HttpTestingService m_TestingService;
#endif

	RefPtr<ProjectStore>						m_ProjectStore;
	std::unique_ptr<VfsServiceImpl>				m_VfsServiceImpl;
	std::unique_ptr<HttpProjectService>			m_HttpProjectService;
	std::unique_ptr<Workspaces>					m_Workspaces;
	std::unique_ptr<HttpWorkspacesService>		m_HttpWorkspacesService;
	std::unique_ptr<UpstreamCache>				m_UpstreamCache;
	std::unique_ptr<HttpUpstreamService>		m_UpstreamService;
	std::unique_ptr<HttpStructuredCacheService> m_StructuredCacheService;
	std::unique_ptr<HttpFrontendService>		m_FrontendService;
	std::unique_ptr<HttpObjectStoreService>		m_ObjStoreService;
	std::unique_ptr<HttpBuildStoreService>		m_BuildStoreService;
	std::unique_ptr<VfsService>					m_VfsService;
	std::unique_ptr<HttpAdminService>			m_AdminService;
	std::unique_ptr<HttpApiService>				m_ApiService;

#if ZEN_WITH_COMPUTE_SERVICES
	std::unique_ptr<compute::HttpFunctionService> m_HttpFunctionService;
#endif
};

struct ZenStorageServerConfigurator;

class ZenStorageServerMain : public ZenServerMain
{
public:
	ZenStorageServerMain(ZenStorageServerConfig& ServerOptions);
	~ZenStorageServerMain();

	virtual void DoRun(ZenServerState::ZenServerEntry* Entry) override;
	virtual void InitializeLogging() override;

	ZenStorageServerMain(const ZenStorageServerMain&) = delete;
	ZenStorageServerMain& operator=(const ZenStorageServerMain&) = delete;

	typedef ZenStorageServerConfig		 Config;
	typedef ZenStorageServerConfigurator Configurator;

private:
	ZenStorageServerConfig& m_ServerOptions;
};

}  // namespace zen