WL#1835: New SOCK type for communication
Affects: Server-4.1 — Status: Un-Assigned — Priority: Medium
Info: I (Tomas Ulin) did a quick implementation and test of this but dod not get any performance difference. To enable that we can use TCP/IP socket strictly or Unix socket/TCP/IP socket based on best performance we need a new transporter type SOCK. The current type TCP always TCP/IP sockets independent of how the configuration is set-up. The new type will use the most optimal socket implementation for the connection. For local connections on Unix this means that SOCK will use Unix sockets. A description of using Unix sockets is provided here: Instead of using struct sockaddr_in one instead uses struct sockaddr_un. On the client side this means that the code changes slightly: 1) First declare server address=servaddr using struct sockaddr_un instead of struct sockaddr_in 2) Use AF_LOCAL instead of AF_INET in call to socket(..) 3) Set servaddr.sun_family=AF_LOCAL strcpy(servaddr.sun_path, path_string) in sockaddr_un struct before calling connect as usual path_string is the path to file used for the socket communication On the server side it also changes slightly: 1) same as 1) for client side 2) same as 2) for client side 3) unlink(path_string) This is necessary to avoid problems with remaining files. 4) call bind, listen and accept as usual with the struct sockaddr_un reference The socket option TCP_NODELAY is most likely not available on Unix sockets so setting this should not be done for Unix sockets. The server changes affects startTCPServer() and acceptClient() in TCP_Transporter.cpp and client changes affects connectClient() and there are also changes in setSocketOptions(). It should be very easy to simply have a flag with if-statements in those routines or something like that. With union on struct sockaddr_in and struct sockaddr_un it should be possible to use same calls in a few places. The name on the file is proposed to be: /tmp/ndb_sock12to14port10101.sock if communication is set-up between node 12 and node 14 using port 10101
Copyright (c) 2000, 2017, Oracle Corporation and/or its affiliates. All rights reserved.