Hi,
Indeed this timeout exception occurs during connection establishment to the cluster, regarding to the stack trace. So, have you set a particular value to SocketOptions.connectTimeoutMillis ? Seems like no, regarding the code you listed. Then the default value for connectionTimeoutMillis is 5000 ms.
Would you have an idea of what are the queries that are causing the node to do such GC work ?
It is possible that, if all clients are simultaneously executing requests producing massive load (and also causing frequent GC collections), the node becomes overloaded, then is not able to respond to new connections within the 5000ms time limit.
Then, I see 2 options that could help. First, increasing the connectionTimeoutMillis to a higher value, this is a bit obvious, and may not solve the potential fact that the server may be misused (see more after).
Other option, your requests produce the high load you expect, and the cluster configuration is ok, but the cluster still gets overloaded by all the requests, causing timeouts for the driver. In that case, it may be reasonable to consider the scalability potential of Cassandra. And add more nodes to your cluster. That could allow both Cassandra and the driver, to distribute the load through the nodes. Then, the nodes would be able to respond to connections from the driver in time.
And for your last question about the 10s, the 10s is a strict limit that doesn't get affected by the network latency. It is the time a node waits for a read request to complete on the Cassandra side, whether the network has high latency or not.
Hope this information can help you a little bit more.
Cheers.