Hello Ammar,
I am sorry to hear that you had a hard time understanding why the driver was throwing a NoNodeAvailableException.
One thing that strikes me in your case is that not only one, but all nodes are busy. Even if we change the exception type that is being thrown, this wouldn't solve the root problem: either your application is generating way too many requests, or your cluster is heavily undersized. I suggest that you spend some time tuning both the driver and the cluster accordingly.
I agree however that a NoNodeAvailableException is not very self-explanatory. I think we could improve this by recording an error for the node when session#getChannel returns null, and only then skip to the next one.
Would you be willing to contribute a PR for this? If so, please start by creating a Jira here [2] and I would provide you with some guidance there.
Thanks,
Alex Dutra