As I understand the num_tokens setting, it makes Cassandra do the following pseudocode when a new node is added:

for 1...num_tokens do
   my_token = rand(0, 2^128-1)
   next_token = min(tokens in cluster where token > my_token)
   my_range = (my_token, next_token - 1)
done

Now the new node owns num_tokens chunks of keys that previously belonged to other nodes.

My point is, with 1 node in the cluster, the ring is divided into num_tokens ranges. With N nodes, the ring is divided into N*num_tokens. Correct? The docs do not make this clear for me.

And another point: the tokens are randomly chosen, so the ranges of keys are not uniform, although with enough nodes in the cluster there probably won't be any really large ranges. Correct?