From 727d20466ea3b2efc03f37e61b8c0251f671473e Mon Sep 17 00:00:00 2001 From: MasterRoby3 Date: Fri, 8 Sep 2023 23:07:55 +0200 Subject: [PATCH] Fixed bug on concurrency for incoming connections --- evBuild.out | Bin 94384 -> 106208 bytes event_builder.cxx | 33 +++++++++++++++++++++++++++------ fragment_dataformat.h | 23 +++++++++++++++++++++++ full_event_format.h | 25 ++++++++++++++++++++++++- prov.out | Bin 62672 -> 62776 bytes provider.cxx | 2 +- spawn_clients.sh | 2 +- 7 files changed, 76 insertions(+), 9 deletions(-) diff --git a/evBuild.out b/evBuild.out index 509385dca812d5e995414e05d83e249201770422..aca15c55e973b5ff3acf65dd3d374992f05c8f68 100755 GIT binary patch literal 106208 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 Z9sbyP?K7&|T>Gy*(>?znX^_0_{6F8@Hje-R diff --git a/event_builder.cxx b/event_builder.cxx index 7b109ee..73cceb6 100644 --- a/event_builder.cxx +++ b/event_builder.cxx @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -36,7 +37,7 @@ #define MAX_EVENTS 1024 #define MAX_QUEUE_SIZE 1000 -#define MAX_TIMEOUT_MICROSEC 500000 +#define MAX_TIMEOUT_MICROSEC 50000000 #define READER_THREADS 6 // That's a buffer size of 64 kB, to maximize performance without it being too big, according to testing @@ -44,6 +45,10 @@ int min_fd = MAX_EVENTS + 1; int max_fd = 0; +int exp_num = 0; + +std::mutex conn_mutex; +std::condition_variable conn_cv; int makeSocket() { int sockfd; @@ -159,8 +164,10 @@ void thradizable(int &epoll_fd, int &master_socket, std::array conn_lk(conn_mutex); acceptConnectionEpollStyle(master_socket, epoll_fd); - + conn_lk.unlock(); + conn_cv.notify_all(); } else if ((events[i].events & EPOLLERR) || (events[i].events & EPOLLHUP) || (!(events[i].events & EPOLLIN))) { // Than the client connection is closed, so I close it printf("Closing %d", fd); @@ -216,6 +223,11 @@ void thradizable(int &epoll_fd, int &master_socket, std::array &queues_array, uint32_t &runNumber) { uint32_t counter = 0; while (1) { + std::unique_lock conn_lk(conn_mutex); + while ( (max_fd < min_fd) || (exp_num <= 0) || ((max_fd - min_fd + 1) != exp_num)) { + conn_cv.wait(conn_lk); + } + FullEvent fullEvent; fullEvent.headerSize = 5; fullEvent.runNumber = runNumber; @@ -277,8 +289,12 @@ void builder_thread (std::array &queues_array, uint fullEvent.fragmentsArray[i - min_fd] = fragment; } } + + printFullEvent(fullEvent); lk.unlock(); } + + conn_lk.unlock(); } } @@ -288,11 +304,13 @@ int main(int argc, char const *argv[]) { signal(SIGTERM, term_handler); - if (argc != 2) { - printf("Usage: %s portNumber \n", argv[0]); + if (argc != 4) { + printf("Usage: %s portNumber runNumber numClients\n", argv[0]); exit(EXIT_FAILURE); } int port = atoi(argv[1]); + uint32_t runNumber = atoi(argv[2]); + exp_num = atoi(argv[3]); printf("Start socket port %d\n", port); int master_socket; @@ -339,8 +357,8 @@ int main(int argc, char const *argv[]) { exit(EXIT_FAILURE); } - std::array vT; - std::array thread_flags; + std::array vT; + std::array thread_flags; // Creating the data structure and initialization with max size and timeout ez win std::array queues_array; @@ -353,8 +371,11 @@ int main(int argc, char const *argv[]) { vT[t_i] = std::thread(thradizable, std::ref(epoll_fd), std::ref(master_socket), std::ref(queues_array), std::cref(thread_flags.at(t_i)), t_i); } + std::thread bdth(builder_thread, std::ref(queues_array), std::ref(runNumber)); + //ADD CONSUMER THREAD + bdth.join(); if (close(epoll_fd)) { printf("Failed to close epoll file descriptor"); diff --git a/fragment_dataformat.h b/fragment_dataformat.h index ece7d01..f4664ed 100644 --- a/fragment_dataformat.h +++ b/fragment_dataformat.h @@ -2,6 +2,7 @@ #include #include +#include #include #define FRAGMENT_HEADER_MARKER 0xee1234ee @@ -82,4 +83,26 @@ Fragment decode_fragment(uint32_t *buffer) { return fragment; } +void printFragment(Fragment &fragment) { + printf("NewFrag\n"); + printf("0x%08x", fragment.header.startOfHeaderMarker); + printf("0x%08x", fragment.header.headerSize); + printf("0x%08x", fragment.header.fragmentSize); + printf("0x%08x", fragment.header.sourceIdentifier); + printf("0x%08x", fragment.header.runNumber); + printf("0x%08x", fragment.header.detectorEventNumber); + printf("0x%08x", fragment.header.numberOfStatusElements); + + for (uint32_t i = 0; i < fragment.header.numberOfStatusElements; i++) { + printf("0x%08x", fragment.header.statusElementsArray[i]); + } + + uint32_t payloadSize = fragment.header.fragmentSize - fragment.header.headerSize; + for (uint32_t i = 0; i < payloadSize; i++) { + printf("0x%08x", fragment.payloadElements[i]); + } + + +} + diff --git a/full_event_format.h b/full_event_format.h index fb8583d..4257080 100644 --- a/full_event_format.h +++ b/full_event_format.h @@ -2,6 +2,7 @@ #include "fragment_dataformat.h" #include +#include #define FULL_EVENT_HEADER_MARKER 0xaa1234aa @@ -14,4 +15,26 @@ typedef struct FullEvent { Fragment *fragmentsArray; -}FullEvent; \ No newline at end of file +}FullEvent; + +void printFullEvent(FullEvent &fullEvent) { + printf("0x%08x\n", fullEvent.startOfHeaderMarker); + printf("0x%08x\n", fullEvent.headerSize); + printf("0x%08x\n", fullEvent.eventSize); + printf("0x%08x\n", fullEvent.runNumber); + printf("0x%08x\n", fullEvent.eventNumber); + + printf("\n"); + + + uint32_t remainingPayloadSize = fullEvent.eventSize - fullEvent.headerSize; + uint32_t counter = 0; + while (remainingPayloadSize > 0) { + printFragment(fullEvent.fragmentsArray[counter]); + remainingPayloadSize -= fullEvent.fragmentsArray[counter].header.fragmentSize; + counter++; + printf("\n"); + } + + printf("\n\n\n"); +} \ No newline at end of file diff --git a/prov.out b/prov.out index be6238f956a8ea461e8a7c76c393c80062e9763e..cbb2246b4f8ef407a82fe9149ee5c1899d4081cc 100755 GIT binary patch delta 13907 zcmaJ|3tUxI*5BuFxjaO9hyoV_L_kCYR8TTaP{1pZqM|YQNXvXhhKh=&Ud%@#KG{@O zjOh$DPf$_O)O=M`PTkTBm5kCl-+!OI4qWf|&FuNvf9?NTd+oi~Ui)$H zWg5PB+53abra<3K;Y=?n5?ImZ9)I(w^O3c>&6name;+6-zYpYoN}R{GuCls~4_D$n zs$67kFJG>_)OFnyS#!n+v*aUq5B2ZvmUnd-tgPizTo&?1Qy_10Nl^ZYT7dGN_%F{kS(VMYRAov~{>r~HE#wzn z0(pUJ5uXeUGX*NAxMKc9xxf#Y7n(j%8RKWlI#!Q#dr5VfUpTM&oJTu_H+l}_mUbaF zF#!Azvl1Z)!@umPMeP`C$AW043RBrHa3b^x`1jK0S1?{L)|J}Kx6Jfl%#Fo5*n5*s z*q7_}W|sVby^FNZhk=6m+o=OoS<#tY7=R}mN(~n2bq|(J^%*U%!rGlpr1~7a?#lA1 z{^_n~T^Td67pPv?qs*OQ603PvuYlnN-9#UZRsC5aRC<{mCvmS6pFsB3?NV>pTlsRY zjzMAtjdJl#DT&qW#^3V_2lB4H&EBDDI<*-Nt?OOa3V67s zu#>ga^^YZxSJf1HXpP>X#lrU?LaXQcK~wYwNqPKwc$f6^Wa_RpPSZUamc@g*!j8?4 zA8TDPXalU6wdCK0Ue?k;-@Gnzf-THiveb?VUco%= zf4_%zXjIBdj)FT4ZZ8@#``5pcBE_U@{?V$bYt^{xnm1ZC@3(5abj|WsO?j)v$EK^M zx2hJms{D1$t(rhx)3;TV0S%@o2C5G}CGg?&`}2C~voFmKD^0&|J1_<$l#aDy9*tH#PWSs8 zv$g-CX`7B68jF0guDIb-vQ!L9x4GG$b)=O(45LrPr0t%+@{ZjTM%2Nzb$wC=QcfJE z%>I#1tZKL}a;(;F#fG=8UzKuE)Aq;cW3093VrSm=_Hj+a*lv6Ku9}R-qCPO0Z|
|md)HlZr4FOl_mvOdB)MkjSX)X$jZqPs>Y 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 TDp{My=QQ_M$KT*Pnxp;~vT)p< delta 12777 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 bWw1+GnS4v)^(}*4@Bbv<{0+R}=fM93U^?Aj diff --git a/provider.cxx b/provider.cxx index bd5c602..04cc27c 100644 --- a/provider.cxx +++ b/provider.cxx @@ -68,7 +68,7 @@ int main(int argc, char* argv[]) { std::discrete_distribution discrete_distr({0.9, 0.1}); std::normal_distribution normal_distr(25., 10.); std::uniform_int_distribution unif_int_distib; - std::uniform_real_distribution unif_float_distrib(0.5, 2); + std::uniform_real_distribution unif_float_distrib(2, 5); //commenting all old_style generation //srand (static_cast (42)); diff --git a/spawn_clients.sh b/spawn_clients.sh index 57caa28..d52f3b4 100755 --- a/spawn_clients.sh +++ b/spawn_clients.sh @@ -7,6 +7,6 @@ then for i in $(seq 1 $4); do echo "Spawning provider number $i" - ./prov.out $1 $2 $3 & + ./prov.out $1 $2 $i $3 & done fi