8#include "Definitions.h"
9#include "DatabaseHandler.h"
10#include "Statistics.h"
18#define PROJECT_DATA_SIZE 9
19#define METHOD_DATA_MIN_SIZE 5
20#define HEX_CHARS "0123456789abcdef"
21#define UUID_REGEX "[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}"
22#define HASHES_MAX_SIZE 1000
23#define FILES_MAX_SIZE 500
168 ProjectIn requestToProject(std::string request);
179 MethodIn dataEntryToMethod(std::string dataEntry);
191 std::vector<Hash> requestToHashes(std::string request);
198 bool isValidHash(Hash hash);
209 std::string methodsToString(std::vector<MethodOut> methods,
char dataDelimiter,
char methodDelimiter);
220 std::string projectsToString(std::vector<ProjectOut> projects,
char dataDelimiter,
char projectDelimiter);
227 std::vector<MethodOut> getMethods(std::vector<Hash> hashes);
236 std::vector<ProjectOut> getProjects(std::queue<std::pair<ProjectID, Version>> keys);
243 std::vector<ProjectOut> getPrevProjects(std::queue<ProjectID> projectQueue);
251 std::vector<MethodOut> singleHashToMethodsThread(std::queue<Hash> &hashes, std::mutex &queueLock);
259 std::vector<ProjectOut> singleSearchProjectThread(std::queue<std::pair<ProjectID, Version>> &projectKeyQueue,
260 std::mutex &queueLock);
269 std::vector<ProjectOut> singlePrevProjectThread(std::queue<ProjectID> &projectIDs, std::mutex &queueLock);
281 void handleUploadThreads(
ProjectIn project, std::queue<MethodIn> methodQueue,
bool newProject,
282 ProjectOut prevProject, std::vector<File> unchangedFiles);
293 void singleUploadThread(std::queue<MethodIn> &methods, std::mutex &queueLock,
ProjectIn project,
294 long long prevVersion,
long long parserVersion,
bool newProject);
305 std::vector<File> unchangedFiles);
318 singleUpdateUnchangedFilesThread(std::queue<std::pair<std::vector<Hash>, std::vector<File>>> &hashFiles,
319 std::mutex &queueLock,
ProjectIn project,
long long prevVersion);
329 std::string authorsToString(std::vector<std::pair<Author, AuthorID>> authors);
336 std::vector<std::pair<Author, AuthorID>> getAuthors(std::vector<AuthorID> authorIDs);
344 std::vector<std::pair<Author, AuthorID>> singleIDToAuthorThread(std::queue<AuthorID> &authorIDs,
345 std::mutex &queueLock);
352 std::vector<std::pair<MethodID, AuthorID>> getMethodsByAuthor(std::vector<AuthorID> authorIDs);
360 std::vector<std::pair<MethodID, AuthorID>> singleAuthorToMethodsThread(std::queue<AuthorID> &authorIDs,
361 std::mutex &queueLock);
371 std::string methodIDsToString(std::vector<std::pair<MethodID, AuthorID>> methods);
381 std::tuple<> connectWithRetry(std::string ip,
int port);
388 bool tryUploadProjectWithRetry(
ProjectIn project);
401 std::tuple<> addMethodWithRetry(
MethodIn method,
ProjectIn project,
long long prevVersion,
long long parserVersion,
412 ProjectOut getPrevProjectWithRetry(ProjectID projectID);
425 std::vector<Hash> updateUnchangedFilesWithRetry(std::pair<std::vector<Hash>, std::vector<File>> hashFile,
426 ProjectIn project,
long long prevVersion);
435 std::vector<MethodOut> hashToMethodsWithRetry(Hash hash);
445 ProjectOut searchForProjectWithRetry(ProjectID projectID, Version version);
452 Author idToAuthorWithRetry(AuthorID
id);
459 std::vector<MethodID> authorToMethodsWithRetry(AuthorID authorID);
470 template <
class T> std::vector<std::vector<T>> toChunks(std::vector<T> list,
int chunkSize)
472 std::vector<T> currentChunk = {};
473 std::vector<std::vector<T>> chunks = {};
474 for (T element : list)
476 currentChunk.push_back(element);
477 if (currentChunk.size() >= chunkSize)
479 chunks.push_back(currentChunk);
480 currentChunk.clear();
483 if (currentChunk.size() > 0)
485 chunks.push_back(currentChunk);
501 template <
class T1,
class T2>
502 std::queue<std::pair<std::vector<T1>, std::vector<T2>>> cartesianProductQueue(std::vector<std::vector<T1>> listT1,
503 std::vector<std::vector<T2>> listT2)
505 std::queue<std::pair<std::vector<T1>, std::vector<T2>>> pairQueue;
506 for (std::vector<T1> elemT1 : listT1)
508 for (std::vector<T2> elemT2 : listT2)
510 pairQueue.push(std::make_pair(elemT1, elemT2));
Handles interaction with database.
Definition: DatabaseHandler.h:23
Handles requests towards database.
Definition: DatabaseRequestHandler.h:29
std::string handleExtractProjectsRequest(std::string request)
Handles requests wanting to obtain project data from the database given their projectID and version.
Definition: DatabaseRequestHandlerProject.cpp:364
std::string handleCheckUploadRequest(std::string request, std::string client)
Handles requests wanting to first check for matches with existing methods in other projects,...
Definition: DatabaseRequestHandlerProject.cpp:16
std::string handleGetAuthorRequest(std::string request)
Handles a requests for retrieving the authors by the given IDs.
Definition: DatabaseRequestHandlerAuthor.cpp:50
std::string handlePrevProjectsRequest(std::string request)
Handles requests wanting to obtain project data from a the database from a previous version given the...
Definition: DatabaseRequestHandlerProject.cpp:404
std::string handleUploadRequest(std::string request, std::string client)
Handles requests which want to add one project with their corresponding methods to the database.
Definition: DatabaseRequestHandlerProject.cpp:58
std::string getExtension(std::string file)
Retrieves the extension from the passed file name.
Definition: DatabaseRequestHandlerMethod.cpp:126
std::string handleGetMethodsByAuthorRequest(std::string request)
Handles requests wanting to obtain methods with certain authors.
Definition: DatabaseRequestHandlerMethod.cpp:271
std::string handleCheckRequest(std::string request)
Handles requests wanting to obtain methods with certain hashes.
Definition: DatabaseRequestHandlerMethod.cpp:132
Stores the Prometheus statistics variables.
Definition: Statistics.h:35
Represents the data of an author.
Definition: Types.h:26
Represents the relevant data of a method to be put in the database.
Definition: Types.h:50
Represents the relevant data of a project when it is put into the database.
Definition: Types.h:94
Represents the relevant data of a project when it is returned to user. Difference with ProjectIn: aut...
Definition: Types.h:112