Thank you Yifan for the details. I have a related question:  when we issue
a command to remove a node A from the ring,  there could be a time that
some node B thinks node A is removed, but some node C still thinks node A
is in the ring and could reach node A.  What happens if node C sends a
write request to node A during this time?  Is it possible to happen?

Thanks
Han


On Wed, Jan 27, 2021 at 5:48 PM Yifan Cai <yc25c...@gmail.com> wrote:

> Your thoughts regarding Gossip are correct. There could be a time that
> nodes in the cluster hold different views of the ring locally.
>
> In the case of bootstrapping,
> 1. The joining node updates its status to BOOT before streaming data and
> waits for a certain delay in order to populate the update in the cluster.
> 2. The replica nodes calculate the pending ranges, and the joining node
> can get new writes for the token ranges, meanwhile data streaming is
> on-going.
> 3. When the other nodes learn the joining node has finished bootstrapping
> via gossip (after some delay), the new node starts to serve the read as
> well.
>
> (I was wrong about not getting any client traffic earlier. The joining
> node accepts write, but no read)
>
> - Yifan
>
> On Tue, Jan 26, 2021 at 11:36 AM Han <keepsim...@gmail.com> wrote:
>
>>
>>>> I'm particularly trying to understand the fault-tolerant part of
>>>> updating Token Ring state on every node
>>>
>>> The new node only joins the ring (updates the rings state) when the data
>>> streaming (bootstrapping) is successful. Otherwise, the existing ring
>>> remains as is, the joining node remains in JOINING state, and it won't get
>>> any client traffic. If I understand the question correctly.
>>>
>>
>> Thanks Yifan for your response.
>>
>> The ring state update is propagated via gossip, so it is "eventually
>> consistent".  This means there is a time period when some existing node has
>> the new token ring but other existing nodes still have the old ring info,
>> right?  Is it true that other operations (e.g. replications) are still
>> going on between nodes, even when their local token rings info are not
>> consistent?
>>
>> From the new node point of view,  even when it is successful, at the end
>> of `StorageService::joinTokenRing`, it is possible that some existing nodes
>> have not updated their token ring yet, is this correct?
>>
>> Thanks
>> Han
>>
>>
>>
>>>
>>> Hopefully, the answers help.
>>>
>>> - Yifan
>>>
>>> On Sun, Jan 24, 2021 at 1:00 PM Han <keepsim...@gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> I wanted to understand how the bootstrapping (add a new node) works. My
>>>> understanding is that the first step is Token Allocation and the new node
>>>> will get a number of tokens.
>>>>
>>>> My question is:
>>>>
>>>> How / when do the existing nodes update their Token Ring state?  and is
>>>> that different between the seed node and non-seed node?
>>>>
>>>> I'm particularly trying to understand the fault-tolerant part of
>>>> updating Token Ring state on every node, but couldn't find relevant info by
>>>> searching.
>>>>
>>>> Any info or pointers are appreciated.
>>>>
>>>> Thanks!
>>>> Han
>>>>
>>>>

Reply via email to