diff options
| -rw-r--r-- | extras/glusterd.vol.in | 2 | ||||
| -rw-r--r-- | rpc/rpc-transport/rdma/src/name.c | 18 | ||||
| -rw-r--r-- | rpc/rpc-transport/rdma/src/rdma.c | 10 | ||||
| -rw-r--r-- | rpc/rpc-transport/socket/src/name.c | 8 | ||||
| -rw-r--r-- | rpc/rpc-transport/socket/src/socket.c | 25 | ||||
| -rw-r--r-- | tests/basic/volfile-sanity.t | 7 | 
6 files changed, 45 insertions, 25 deletions
diff --git a/extras/glusterd.vol.in b/extras/glusterd.vol.in index fe413a9b4ab..e59b17efcac 100644 --- a/extras/glusterd.vol.in +++ b/extras/glusterd.vol.in @@ -5,6 +5,8 @@ volume management      option transport.socket.keepalive-time 10      option transport.socket.keepalive-interval 2      option transport.socket.read-fail-log off +    option transport.socket.listen-port 24007 +    option transport.rdma.listen-port 24008      option ping-timeout 0      option event-threads 1  #   option lock-timer 180 diff --git a/rpc/rpc-transport/rdma/src/name.c b/rpc/rpc-transport/rdma/src/name.c index ea960cba4eb..e7d56fcc1a8 100644 --- a/rpc/rpc-transport/rdma/src/name.c +++ b/rpc/rpc-transport/rdma/src/name.c @@ -365,7 +365,7 @@ af_inet_server_get_local_sockaddr(rpc_transport_t *this, struct sockaddr *addr,  {      struct addrinfo hints, *res = 0;      data_t *listen_port_data = NULL, *listen_host_data = NULL; -    uint16_t listen_port = -1; +    uint16_t listen_port = 0;      char service[NI_MAXSERV], *listen_host = NULL;      dict_t *options = NULL;      int32_t ret = 0; @@ -373,13 +373,14 @@ af_inet_server_get_local_sockaddr(rpc_transport_t *this, struct sockaddr *addr,      options = this->options;      listen_port_data = dict_get(options, "transport.rdma.listen-port"); -    listen_host_data = dict_get(options, "transport.rdma.bind-address"); -      if (listen_port_data) {          listen_port = data_to_uint16(listen_port_data); -    } else { -        listen_port = GF_DEFAULT_RDMA_LISTEN_PORT; +    } +    listen_host_data = dict_get(options, "transport.rdma.bind-address"); +    if (listen_host_data) { +        listen_host = data_to_str(listen_host_data); +    } else {          if (addr->sa_family == AF_INET6) {              struct sockaddr_in6 *in = (struct sockaddr_in6 *)addr;              in->sin6_addr = in6addr_any; @@ -395,13 +396,6 @@ af_inet_server_get_local_sockaddr(rpc_transport_t *this, struct sockaddr *addr,          }      } -    if (listen_port == (uint16_t)-1) -        listen_port = GF_DEFAULT_RDMA_LISTEN_PORT; - -    if (listen_host_data) { -        listen_host = data_to_str(listen_host_data); -    } -      sprintf(service, "%d", listen_port);      memset(&hints, 0, sizeof(hints)); diff --git a/rpc/rpc-transport/rdma/src/rdma.c b/rpc/rpc-transport/rdma/src/rdma.c index 92c9ce95929..d5d93d13481 100644 --- a/rpc/rpc-transport/rdma/src/rdma.c +++ b/rpc/rpc-transport/rdma/src/rdma.c @@ -4670,6 +4670,7 @@ gf_rdma_listen(rpc_transport_t *this)      gf_rdma_peer_t *peer = NULL;      int ret = 0;      gf_rdma_ctx_t *rdma_ctx = NULL; +    cmd_args_t *cmd_args = NULL;      char service[NI_MAXSERV], host[NI_MAXHOST];      int optval = 2; @@ -4725,15 +4726,20 @@ gf_rdma_listen(rpc_transport_t *this)                 RDMA_MSG_RDMA_BIND_ADDR_FAILED, "rdma_bind_addr failed");          goto err;      } -      ret = rdma_listen(peer->cm_id, priv->backlog); -      if (ret != 0) {          gf_msg(this->name, GF_LOG_WARNING, errno, RDMA_MSG_LISTEN_FAILED,                 "rdma_listen failed");          goto err;      } +    cmd_args = &(this->ctx->cmd_args); +    if (!cmd_args->brick_port2) { +        cmd_args->brick_port2 = rdma_get_src_port(peer->cm_id); +        gf_log(this->name, GF_LOG_INFO, +               "process started listening on port (%d)", cmd_args->brick_port2); +    } +      rpc_transport_ref(this);      ret = 0; diff --git a/rpc/rpc-transport/socket/src/name.c b/rpc/rpc-transport/socket/src/name.c index 3194a7cf369..39c0530b08e 100644 --- a/rpc/rpc-transport/socket/src/name.c +++ b/rpc/rpc-transport/socket/src/name.c @@ -357,7 +357,7 @@ af_inet_server_get_local_sockaddr(rpc_transport_t *this, struct sockaddr *addr,  {      struct addrinfo hints, *res = 0, *rp = NULL;      data_t *listen_port_data = NULL, *listen_host_data = NULL; -    uint16_t listen_port = -1; +    uint16_t listen_port = 0;      char service[NI_MAXSERV], *listen_host = NULL;      dict_t *options = NULL;      int32_t ret = 0; @@ -365,15 +365,11 @@ af_inet_server_get_local_sockaddr(rpc_transport_t *this, struct sockaddr *addr,      options = this->options;      listen_port_data = dict_get(options, "transport.socket.listen-port"); -    listen_host_data = dict_get(options, "transport.socket.bind-address"); -      if (listen_port_data) {          listen_port = data_to_uint16(listen_port_data);      } -    if (listen_port == (uint16_t)-1) -        listen_port = GF_DEFAULT_SOCKET_LISTEN_PORT; - +    listen_host_data = dict_get(options, "transport.socket.bind-address");      if (listen_host_data) {          listen_host = data_to_str(listen_host_data);      } else { diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c index dd3e1e91992..06b5af2e5b2 100644 --- a/rpc/rpc-transport/socket/src/socket.c +++ b/rpc/rpc-transport/socket/src/socket.c @@ -861,15 +861,19 @@ static int  __socket_server_bind(rpc_transport_t *this)  {      socket_private_t *priv = NULL; +    glusterfs_ctx_t *ctx = NULL; +    cmd_args_t *cmd_args = NULL; +    struct sockaddr_storage unix_addr = {0};      int ret = -1;      int opt = 1;      int reuse_check_sock = -1; -    struct sockaddr_storage unix_addr = {0};      GF_VALIDATE_OR_GOTO("socket", this, out);      GF_VALIDATE_OR_GOTO("socket", this->private, out);      priv = this->private; +    ctx = this->ctx; +    cmd_args = &ctx->cmd_args;      ret = setsockopt(priv->sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); @@ -901,8 +905,23 @@ __socket_server_bind(rpc_transport_t *this)                 this->myinfo.identifier, strerror(errno));          if (errno == EADDRINUSE) {              gf_log(this->name, GF_LOG_ERROR, "Port is already in use"); - -            ret = -EADDRINUSE; +        } +    } +    if (AF_UNIX != SA(&this->myinfo.sockaddr)->sa_family) { +        if (getsockname(priv->sock, SA(&this->myinfo.sockaddr), +                        &this->myinfo.sockaddr_len) == -1) { +            gf_log(this->name, GF_LOG_WARNING, +                   "getsockname on (%d) failed (%s)", priv->sock, +                   strerror(errno)); +            ret = -1; +            goto out; +        } +        if (!cmd_args->brick_port) { +            cmd_args->brick_port = (int)ntohs( +                ((struct sockaddr_in *)&this->myinfo.sockaddr)->sin_port); +            gf_log(this->name, GF_LOG_INFO, +                   "process started listening on port (%d)", +                   cmd_args->brick_port);          }      } diff --git a/tests/basic/volfile-sanity.t b/tests/basic/volfile-sanity.t index 04d1d2869c2..ef2f9344468 100644 --- a/tests/basic/volfile-sanity.t +++ b/tests/basic/volfile-sanity.t @@ -12,8 +12,11 @@ TEST $CLI volume create $V0  $H0:$B0/${V0}1  killall glusterd -## Mount FUSE with caching disabled (read-write) -TEST $GFS -f /var/lib/glusterd/vols/${V0}/${V0}.${H0}.*.vol +# Client by default tries to connect to port 24007 +# So, start server on that port, and you can see +# client successfully working. +TEST $GFS --xlator-option "${V0}-server.transport.socket.listen-port=24007" \ +     -f /var/lib/glusterd/vols/${V0}/${V0}.${H0}.*.vol  TEST $GFS -f /var/lib/glusterd/vols/${V0}/${V0}.tcp-fuse.vol $M0  TEST $(df -h $M0 | grep -q ${V0})  | 
