From 86fba4e87abb6a3ae3e67f411c4377378eb7adde Mon Sep 17 00:00:00 2001 From: ravinsp <33562092+ravinsp@users.noreply.github.com> Date: Sat, 24 Oct 2020 06:39:07 +0530 Subject: [PATCH] Updated hpws binary to fix multi-threaded read/write. --- src/comm/comm_session.cpp | 1 - src/hpws/hpws.hpp | 261 +++++++++++++++++++------------------- test/bin/hpws | Bin 58200 -> 58544 bytes 3 files changed, 131 insertions(+), 131 deletions(-) diff --git a/src/comm/comm_session.cpp b/src/comm/comm_session.cpp index afec3d35..d01889cc 100644 --- a/src/comm/comm_session.cpp +++ b/src/comm/comm_session.cpp @@ -179,7 +179,6 @@ namespace comm if (out_msg_queue.try_dequeue(msg_to_send)) { process_outbound_message(msg_to_send); - util::sleep(1); } else { diff --git a/src/hpws/hpws.hpp b/src/hpws/hpws.hpp index 004f2137..03703de3 100644 --- a/src/hpws/hpws.hpp +++ b/src/hpws/hpws.hpp @@ -69,32 +69,27 @@ namespace hpws uint32_t max_buffer_size; bool moved = false; addr_t endpoint; - std::string get; // the get req this websocket was opened with - int control_line_fd; + std::string get; // the get req this websocket was opened with + int control_line_fd[2]; // see below in client constructor int buffer_fd[4]; // 0 1 - in buffers, 2 3 - out buffers int buffer_lock[2] = {0, 0}; // this records if buffers 2 and 3 have been sent out awaiting an ack or not void *buffer[4]; - int pending_read[2] = {0, 0}; // if we receive a read message in a non-read function we place the pending size - // here in position 0 if buffer 0 and position 1 if buffer 1, then when read is - // called we return immediately with the content - // to prevent pending buffers becoming out of order a read counter is kept incrementing for each read - // and when there are pending reads the counter at the time of the read is inserted into this array - uint64_t pending_read_counter[2] = {0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL}; - uint64_t read_counter = 0; // private constructor client( std::string_view get, addr_t endpoint, - int control_line_fd, + int control_line_fd_0, // hpws -> hpcore [ hpws sends bufs to us over this line ] + int control_line_fd_1, // hpcore -> hpws [ we send bufs to hpws over this line ] uint32_t max_buffer_size, pid_t child_pid, int buffer_fd[4], void *buffer[4]) : endpoint(endpoint), - control_line_fd(control_line_fd), max_buffer_size(max_buffer_size), child_pid(child_pid), get(get) { + control_line_fd[0] = control_line_fd_0; + control_line_fd[1] = control_line_fd_1; for (int i = 0; i < 4; ++i) { this->buffer[i] = buffer[i]; @@ -113,23 +108,19 @@ namespace hpws client(client &&old) : child_pid(old.child_pid), max_buffer_size(old.max_buffer_size), endpoint(old.endpoint), - control_line_fd(old.control_line_fd), get(old.get) { old.moved = true; + for (int i = 0; i <= 1; ++i) + { + this->control_line_fd[i] = old.control_line_fd[i]; + buffer_lock[i] = old.buffer_lock[i]; + } for (int i = 0; i < 4; ++i) { this->buffer[i] = old.buffer[i]; this->buffer_fd[i] = old.buffer_fd[i]; } - - for (int i = 0; i < 2; ++i) - { - buffer_lock[i] = old.buffer_lock[i]; - pending_read[i] = old.pending_read[i]; - pending_read_counter[i] = old.pending_read_counter[i]; - read_counter = old.read_counter; - } } ~client() @@ -151,7 +142,8 @@ namespace hpws close(buffer_fd[i]); } - close(control_line_fd); + close(control_line_fd[0]); + close(control_line_fd[1]); } } @@ -169,38 +161,15 @@ namespace hpws { unsigned char buf[32]; - int bytes_read = 0; - - read_start:; - - // if during writng we got a read message it's queued as a pending read, so process that first - int do_pending_read = -1; - if (pending_read[0] || pending_read[1]) - do_pending_read = (pending_read_counter[0] > pending_read_counter[1] ? 1 : 0); - - if (do_pending_read > -1) + int bytes_read = recv(control_line_fd[0], buf, sizeof(buf), 0); + if (bytes_read < 1) { if (HPWS_DEBUG) - fprintf(stderr, "[HPWS.HPP] pending read from buffer %d\n", do_pending_read); - bytes_read = pending_read[do_pending_read]; - uint32_t len = pending_read[do_pending_read]; - pending_read[do_pending_read] = 0; - pending_read_counter[do_pending_read] = 0xFFFFFFFFFFFFFFFFULL; - return std::string_view{(const char *)(buffer[do_pending_read]), len}; - } - else - { - - bytes_read = recv(control_line_fd, buf, sizeof(buf), 0); - if (bytes_read < 1) { - if (HPWS_DEBUG) - { - perror("recv"); - fprintf(stderr, "[HPWS.HPP] bytes received %d\n", bytes_read); - } - return error{1, "[read] control line could not be read"}; // todo clean up somehow? + perror("recv"); + fprintf(stderr, "[HPWS.HPP] bytes received %d\n", bytes_read); } + return error{1, "[read] control line could not be read"}; // todo clean up somehow? } switch (buf[0]) @@ -212,8 +181,7 @@ namespace hpws if (bytes_read != 6) return error{3, "invalid buffer in 'o' command sent by hpws"}; - ++read_counter; - // there's a pending buffer for us + uint32_t len = 0; DECODE_O_SIZE(buf, len); @@ -233,36 +201,35 @@ namespace hpws } return std::string_view{(const char *)(buffer[bufno]), len}; } - case 'a': - { - if (bytes_read != 2) - return error{4, "received an ack longer than 2 bytes"}; - int bufno = buf[1] - '0'; - if (!(bufno == 0 || bufno == 1)) - return error{5, "received an ack with an invalid buffer, expecting 0 or 1"}; - // unlock the buffer - buffer_lock[bufno] = 0; - goto read_start; - } case 'c': + { return error{1000, "ws closed"}; + } default: + { fprintf(stderr, "[HPWS.HPP] read unknown control message 1: `%.*s`\n", bytes_read, buf); return error{2, "unknown control line command was sent by hpws"}; } + } } std::optional write(std::string_view to_write) { + if (HPWS_DEBUG) + fprintf(stderr, "[HPWS.HPP] write called for message: `%.*s`\n", + (int)to_write.size(), to_write.data()); + // check if we have any free buffers if (buffer_lock[0] && buffer_lock[1]) { + if (HPWS_DEBUG) + fprintf(stderr, "[HPWS.HPP] no free buffers while writing, waiting for an ack on control_line_fd[1]=%d\n", control_line_fd[1]); + // no free buffers, wait for a ack unsigned char buf[32]; int bytes_read = 0; - write_start:; - bytes_read = recv(control_line_fd, buf, sizeof(buf), 0); + bytes_read = recv(control_line_fd[1], buf, sizeof(buf), 0); if (bytes_read < 1) { perror("recv"); @@ -271,21 +238,6 @@ namespace hpws switch (buf[0]) { - case 'o': - { - if (bytes_read != 6) - return error{3, "invalid buffer in 'o' command sent by hpws"}; - ++read_counter; - uint32_t len = 0; - DECODE_O_SIZE(buf, len); - - int bufno = buf[1] - '0'; - if (bufno != 0 && bufno != 1) - return error{3, "invalid buffer in 'o' command sent by hpws"}; - pending_read[bufno] = len; - pending_read_counter[bufno] = read_counter; - goto write_start; - } case 'a': { if (bytes_read != 2) @@ -319,7 +271,11 @@ namespace hpws char buf[6] = {'o', (char)('0' + (bufno - 2)), 0, 0, 0, 0}; ENCODE_O_SIZE(buf, len); - if (::write(control_line_fd, buf, 6) != 6) + if (HPWS_DEBUG) + fprintf(stderr, "[HPWS.HPP] writing 'o' to control_line_fd[1]=%d\n", + control_line_fd[1]); + + if (::write(control_line_fd[1], buf, 6) != 6) return error{6, "could not write o message to control line"}; return std::nullopt; @@ -330,7 +286,7 @@ namespace hpws char msg[2] = {'a', '0'}; if (from_read.data() == buffer[1]) msg[1]++; - if (send(control_line_fd, msg, 2, 0) < 2) + if (send(control_line_fd[0], msg, 2, 0) < 2) return error{10, "could not send ack down control line"}; return std::nullopt; } @@ -354,14 +310,17 @@ namespace hpws int error_code = -1; const char *error_msg = NULL; - int fd[2] = {-1, -1}; + int fd[4] = {-1, -1, -1, -1}; // 0,1 are hpws->hpcore, 2,3 are hpcore->hpws int pid = -1; - int count_args = 12 + argv.size(); + int count_args = 14 + argv.size(); char const **argv_pass = NULL; if (socketpair(AF_UNIX, SOCK_SEQPACKET, 0, fd)) HPWS_CONNECT_ERROR(100, "could not create unix domain socket pair"); + if (socketpair(AF_UNIX, SOCK_SEQPACKET, 0, fd + 2)) + HPWS_CONNECT_ERROR(101, "could not create unix domain socket pair"); + // construct the arguments char shm_size[32]; @@ -372,6 +331,12 @@ namespace hpws if (snprintf(port_str, 6, "%d", port) <= 0) HPWS_CONNECT_ERROR(91, "couldn't write port to string"); + char cfd1[10]; + char cfd2[10]; + + snprintf(cfd1, 10, "%d", fd[1]); + snprintf(cfd2, 10, "%d", fd[3]); + argv_pass = reinterpret_cast(alloca(sizeof(char *) * count_args)); { @@ -385,7 +350,9 @@ namespace hpws argv_pass[upto++] = "--port"; argv_pass[upto++] = port_str; argv_pass[upto++] = "--cntlfd"; - argv_pass[upto++] = "3"; + argv_pass[upto++] = cfd1; + argv_pass[upto++] = "--cntlfd2"; + argv_pass[upto++] = cfd2; argv_pass[upto++] = "--get"; argv_pass[upto++] = get.data(); for (std::string_view &arg : argv) @@ -401,22 +368,27 @@ namespace hpws // --- PARENT close(fd[1]); + close(fd[3]); - int child_fd = fd[0]; + int child_fd[2] = {fd[0], fd[2]}; - int flags = fcntl(child_fd, F_GETFD, NULL); - if (flags < 0) + int flags[2] = { + fcntl(child_fd[0], F_GETFD, NULL), + fcntl(child_fd[1], F_GETFD, NULL)}; + + if (flags[0] < 0 || flags[1] < 0) HPWS_CONNECT_ERROR(101, "could not get flags from unix domain socket"); - flags |= FD_CLOEXEC; - if (fcntl(child_fd, F_SETFD, flags)) + flags[0] |= FD_CLOEXEC; + flags[1] |= FD_CLOEXEC; + if (fcntl(child_fd[0], F_SETFD, flags[0]) || fcntl(child_fd[1], F_SETFD, flags[1])) HPWS_CONNECT_ERROR(102, "could notset flags for unix domain socket"); // we will set a timeout and wait for the initial startup message from hpws client mode struct pollfd pfd; int ret; - pfd.fd = child_fd; + pfd.fd = child_fd[0]; // we receive setup events on control line 0 (hpws->hpcore) pfd.events = POLLIN; ret = poll(&pfd, 1, HPWS_LONG_TIMEOUT); // default= 1500 ms timeout @@ -430,7 +402,7 @@ namespace hpws addr_t child_addr; int bytes_read = - recv(child_fd, (unsigned char *)(&child_addr), sizeof(child_addr), 0); + recv(child_fd[0], (unsigned char *)(&child_addr), sizeof(child_addr), 0); if (bytes_read < sizeof(child_addr)) HPWS_CONNECT_ERROR(202, "received message on control line was not sizeof(addr_t)"); @@ -449,7 +421,7 @@ namespace hpws child_msg.msg_controllen = sizeof(cmsgbuf); int bytes_read = - recvmsg(child_fd, &child_msg, 0); + recvmsg(child_fd[0], &child_msg, 0); struct cmsghdr *cmsg = CMSG_FIRSTHDR(&child_msg); if (cmsg == NULL || cmsg->cmsg_type != SCM_RIGHTS) HPWS_CONNECT_ERROR(203, "non-scm_rights message sent on accept child control line"); @@ -466,24 +438,35 @@ namespace hpws } } - if (HPWS_DEBUG) - fprintf(stderr, "[HPWS.HPP] waiting for 'r'\n"); + for (int i = 0; i <= 1; ++i) + { + if (HPWS_DEBUG) + fprintf(stderr, "[HPWS.HPP] waiting for 'r' on child_fd[%d]=%d\n", i, child_fd[i]); - // now we wait for a 'r' ready message or for the socket/client to die - ret = poll(&pfd, 1, HPWS_LONG_TIMEOUT); // default= 1500 ms timeout + pfd.fd = child_fd[i]; + // now we wait for a 'r' ready message or for the socket/client to die + ret = poll(&pfd, 1, HPWS_LONG_TIMEOUT); // default= 1500 ms timeout - char rbuf[1]; - bytes_read = recv(fd[0], rbuf, sizeof(rbuf), 0); - if (bytes_read < 1) - HPWS_CONNECT_ERROR(2, "nil message sent by hpws on startup"); + char rbuf[2]; + bytes_read = recv(child_fd[i], rbuf, sizeof(rbuf), 0); + if (bytes_read < 1) + HPWS_CONNECT_ERROR(2, "nil message sent by hpws on startup"); - if (rbuf[0] != 'r') - HPWS_CONNECT_ERROR(3, "unexpected content in message sent by hpws client mode on startup"); + if (rbuf[0] != 'r') + HPWS_CONNECT_ERROR(3, "unexpected content in message sent by hpws client mode on startup"); + + if (rbuf[1] != '0' + i) + HPWS_CONNECT_ERROR(4, "received wrong r message on control fd"); + + if (HPWS_DEBUG) + fprintf(stderr, "[HPWS.HPP] received 'r%c' on child_fd[%d]=%d\n", rbuf[1], i, child_fd[i]); + } return client{ get, child_addr, - child_fd, + child_fd[0], + child_fd[1], max_buffer_size, pid, buffer_fd, @@ -497,10 +480,16 @@ namespace hpws fork_child_init(); close(fd[0]); + close(fd[2]); // dup fd[1] into fd 3 - dup2(fd[1], 3); - close(fd[1]); + /*if (dup2(fd[1], 3) == -1) + perror("dup2 fd[1]"); + if (dup2(fd[3], 4) == -1) + perror("dup2 fd[3]"); + */ + // close(fd[1]); + // close(fd[3]); // we're assuming all fds above 3 will have close_exec flag execv(bin_path.data(), (char *const *)argv_pass); @@ -521,10 +510,9 @@ namespace hpws int status; waitpid(pid, &status, 0 /* should we use WNOHANG? */); } - if (fd[0] > 0) - close(fd[0]); - if (fd[1] > 0) - close(fd[1]); + for (int i = 0; i < 4; ++i) + if (fd[i] > 0) + close(fd[i]); return error{error_code, std::string{error_msg}}; } @@ -578,11 +566,11 @@ namespace hpws return error{code, msg}; \ } - int child_fd = -1; + int child_fd[2] = {-1, -1}; { struct msghdr child_msg = {0}; memset(&child_msg, 0, sizeof(child_msg)); - char cmsgbuf[CMSG_SPACE(sizeof(int))]; + char cmsgbuf[CMSG_SPACE(sizeof(int) * 2)]; child_msg.msg_control = cmsgbuf; child_msg.msg_controllen = sizeof(cmsgbuf); @@ -608,15 +596,18 @@ namespace hpws if (cmsg == NULL || cmsg->cmsg_type != SCM_RIGHTS) HPWS_ACCEPT_ERROR(200, "non-scm_rights message sent on master control line"); memcpy(&child_fd, CMSG_DATA(cmsg), sizeof(child_fd)); - if (child_fd < 0) - HPWS_ACCEPT_ERROR(201, "scm_rights passed fd was negative"); + if (child_fd[0] < 0 || child_fd[1] < 0) + HPWS_ACCEPT_ERROR(201, "scm_rights passed fd/s were negative"); + if (HPWS_DEBUG) + fprintf(stderr, "[HPWS.HPP] On accept received SCM: child_fd[0] = %d, child_fd[1] = %d\n", + child_fd[0], child_fd[1]); } // read info from child control line with a timeout struct pollfd pfd; int ret; - pfd.fd = child_fd; + pfd.fd = child_fd[0]; // expect all setup messages on the hpws->hpcore controlfd (0) pfd.events = POLLIN; ret = poll(&pfd, 1, HPWS_SMALL_TIMEOUT); // 1 ms timeout @@ -627,13 +618,13 @@ namespace hpws // first thing we'll receive is the pid of the client // must not use pid_t here since we transfer across IPC channel as a uint32. uint32_t pid = 0; - if (recv(child_fd, (unsigned char *)(&pid), sizeof(pid), 0) < sizeof(pid)) + if (recv(child_fd[0], (unsigned char *)(&pid), sizeof(pid), 0) < sizeof(pid)) HPWS_ACCEPT_ERROR(212, "did not receive expected 4 byte pid of child process on accept"); // second thing we'll receive is IP address structure of the client addr_t buf; int bytes_read = - recv(child_fd, (unsigned char *)(&buf), sizeof(buf), 0); + recv(child_fd[0], (unsigned char *)(&buf), sizeof(buf), 0); if (bytes_read < sizeof(buf)) return error{202, "received message on master control line was not sizeof(sockaddr_in6)"}; @@ -649,7 +640,7 @@ namespace hpws child_msg.msg_controllen = sizeof(cmsgbuf); int bytes_read = - recvmsg(child_fd, &child_msg, 0); + recvmsg(child_fd[0], &child_msg, 0); struct cmsghdr *cmsg = CMSG_FIRSTHDR(&child_msg); if (cmsg == NULL || cmsg->cmsg_type != SCM_RIGHTS) return error{203, "non-scm_rights message sent on accept child control line"}; @@ -666,30 +657,40 @@ namespace hpws } } { - if (HPWS_DEBUG) - fprintf(stderr, "[HPWS.HPP] waiting for 'r' on accept\n"); struct pollfd pfd; int ret; - pfd.fd = child_fd; - pfd.events = POLLIN; - // now we wait for a 'r' ready message or for the socket/client to die - ret = poll(&pfd, 1, HPWS_LONG_TIMEOUT); // default= 1500 ms timeout + for (int i = 0; i <= 1; ++i) + { + if (HPWS_DEBUG) + fprintf(stderr, "[HPWS.HPP] waiting for 'r' on child_fd[%d]=%d accept\n", i, child_fd[i]); + pfd.fd = child_fd[i]; + pfd.events = POLLIN; + // now we wait for a 'r' ready message or for the socket/client to die + ret = poll(&pfd, 1, HPWS_LONG_TIMEOUT); // default= 1500 ms timeout - char rbuf[1]; - bytes_read = recv(child_fd, rbuf, sizeof(rbuf), 0); - if (bytes_read < 1) - HPWS_ACCEPT_ERROR(2, "nil message sent by hpws on startup on accept"); + char rbuf[2]; + bytes_read = recv(child_fd[i], rbuf, sizeof(rbuf), 0); + if (bytes_read < 1) + HPWS_ACCEPT_ERROR(2, "nil message sent by hpws on startup on accept"); - if (rbuf[0] != 'r') - HPWS_ACCEPT_ERROR(3, "unexpected content in message sent by hpws client mode on startup"); + if (rbuf[0] != 'r') + HPWS_ACCEPT_ERROR(3, "unexpected content in message sent by hpws client mode on startup"); + + if (rbuf[1] != '0' + i) + HPWS_ACCEPT_ERROR(4, "received wrong r message on control line fd"); + + if (HPWS_DEBUG) + fprintf(stderr, "[HPWS.HPP] 'r%c' received on child_fd[%d]=%d\n", rbuf[1], i, child_fd[i]); + } } // RH TODO: accept needs a proper child cleanup on failure return client{ "", buf, - child_fd, + child_fd[0], + child_fd[1], max_buffer_size_, (pid_t)pid, buffer_fd, diff --git a/test/bin/hpws b/test/bin/hpws index f078f862e34b444f2fd1989e7fc6d968f004c1fc..3eabf3dc1f88fe57fecfd6a6676c25976c735af8 100755 GIT binary patch literal 58544 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 literal 58200 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