blob: b742102a53e49da7929767f55301856b28c569da (
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
|
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include <zenhttp/httpserver.h>
#include <zenhttp/httpstats.h>
#include <zenhttp/httpstatus.h>
#include <zenstore/cidstore.h>
#include <zentelemetry/stats.h>
namespace zen {
class AuthMgr;
class JobQueue;
class OpenProcessCache;
class ProjectStore;
class TransferThreadWorkers;
//////////////////////////////////////////////////////////////////////////
//
// {project} a project identifier
// {target} a variation of the project, typically a build target
// {lsn} oplog entry sequence number
//
// /prj/{project}
// /prj/{project}/oplog/{target}
// /prj/{project}/oplog/{target}/{lsn}
//
// oplog entry
//
// id: {id}
// key: {}
// meta: {}
// data: []
// refs:
//
class HttpProjectService : public HttpService, public IHttpStatusProvider, public IHttpStatsProvider
{
public:
HttpProjectService(CidStore& Store,
ProjectStore* InProjectStore,
HttpStatusService& StatusService,
HttpStatsService& StatsService,
AuthMgr& AuthMgr,
OpenProcessCache& InOpenProcessCache,
JobQueue& InJobQueue);
~HttpProjectService();
virtual const char* BaseUri() const override;
virtual void HandleRequest(HttpServerRequest& Request) override;
virtual void HandleStatsRequest(HttpServerRequest& Request) override;
virtual void HandleStatusRequest(HttpServerRequest& Request) override;
private:
struct ProjectStats
{
std::atomic_uint64_t ProjectReadCount{};
std::atomic_uint64_t ProjectWriteCount{};
std::atomic_uint64_t ProjectDeleteCount{};
std::atomic_uint64_t OpLogReadCount{};
std::atomic_uint64_t OpLogWriteCount{};
std::atomic_uint64_t OpLogDeleteCount{};
std::atomic_uint64_t OpHitCount{};
std::atomic_uint64_t OpMissCount{};
std::atomic_uint64_t OpWriteCount{};
std::atomic_uint64_t ChunkHitCount{};
std::atomic_uint64_t ChunkMissCount{};
std::atomic_uint64_t ChunkWriteCount{};
std::atomic_uint64_t RequestCount{};
std::atomic_uint64_t BadRequestCount{};
};
void HandleProjectListRequest(HttpRouterRequest& Req);
void HandleChunkBatchRequest(HttpRouterRequest& Req);
void HandleFilesRequest(HttpRouterRequest& Req);
void HandleChunkInfosRequest(HttpRouterRequest& Req);
void HandleChunkInfoRequest(HttpRouterRequest& Req);
void HandleChunkByIdRequest(HttpRouterRequest& Req);
void HandleChunkByCidRequest(HttpRouterRequest& Req);
void HandleOplogOpPrepRequest(HttpRouterRequest& Req);
void HandleOplogOpNewRequest(HttpRouterRequest& Req);
void HandleOplogValidateRequest(HttpRouterRequest& Req);
void HandleOpLogOpRequest(HttpRouterRequest& Req);
void HandleOpLogRequest(HttpRouterRequest& Req);
void HandleOpLogEntriesRequest(HttpRouterRequest& Req);
void HandleProjectRequest(HttpRouterRequest& Req);
void HandleOplogSaveRequest(HttpRouterRequest& Req);
void HandleOplogLoadRequest(HttpRouterRequest& Req);
void HandleRpcRequest(HttpRouterRequest& Req);
void HandleDetailsRequest(HttpRouterRequest& Req);
void HandleProjectDetailsRequest(HttpRouterRequest& Req);
void HandleOplogDetailsRequest(HttpRouterRequest& Req);
void HandleOplogOpDetailsRequest(HttpRouterRequest& Req);
inline LoggerRef Log() { return m_Log; }
LoggerRef m_Log;
CidStore& m_CidStore;
HttpRequestRouter m_Router;
Ref<ProjectStore> m_ProjectStore;
HttpStatusService& m_StatusService;
HttpStatsService& m_StatsService;
AuthMgr& m_AuthMgr;
OpenProcessCache& m_OpenProcessCache;
JobQueue& m_JobQueue;
ProjectStats m_ProjectStats;
metrics::OperationTiming m_HttpRequests;
RwLock m_ThreadWorkersLock;
Ref<TransferThreadWorkers> m_ThreadWorkers;
Ref<TransferThreadWorkers> GetThreadWorkers(bool BoostWorkers, bool SingleThreaded);
};
} // namespace zen
|