Hi Tsz-Wo,

It seems the key part is 'internal mechanism’. I just checked Ozone and found 
that SCMStateMachine would download snapshot from leader using gRPC. It seems 
that NotifyInstallSnapshot provides great flexibility while leaves the 
challenges of implementation details.

I’ll start a discussion in IoTDB to see if we shall also adopt this mechanism. 
Thanks for your reply!

William


> 2022年10月21日 14:31,Tsz Wo Sze <[email protected]> 写道:
> 
> The leader sends an InstallSnapshotNotification to the new follower.   The 
> new follower will call 
> StateMachine.followerEvent().notifyInstallSnapshotFromLeader(..) [1].  Then, 
> the state machine transfers a snapshot from another node using an internal 
> mechanism.
> 
> [1] 
> https://github.com/apache/ratis/blob/master/ratis-server-api/src/main/java/org/apache/ratis/statemachine/StateMachine.java#L259
>  
> <https://github.com/apache/ratis/blob/master/ratis-server-api/src/main/java/org/apache/ratis/statemachine/StateMachine.java#L259>
> 
> Tsz-Wo
> 
> On Fri, Oct 21, 2022 at 12:21 PM William Song <[email protected] 
> <mailto:[email protected]>> wrote:
> Hi Tsz-Wo,
> 
> If Ozone disables InstallSnapshot, how should leader sync data when a fresh 
> new follower starts up and joins the cluster while the leader does not have 
> the logs before latest snapshot?
> 
> William
> 
>> 2022年10月21日 11:53,Tsz Wo Sze <[email protected] 
>> <mailto:[email protected]>> 写道:
>> 
>> Hi William,
>> 
>> The disk layout of IoTDB looks similar to Ozone.  Unfortunately, it is hard 
>> to have a general mechanism to handle such a complicated layout.  Also, when 
>> the data size is large, we may want to have incremental snapshots instead of 
>> transferring everything.
>> 
>> Does IoTDB have a large snapshot size?  
>> 
>> Ozone disables InstallSnapshot 
>> (raft.server.log.appender.install.snapshot.enabled) and uses 
>> InstallSnapshotNotification.  Then, the leader only notifies followers to 
>> install a snapshot.  The followers use its own mechanism to install a 
>> snapshot.
>> 
>> Currently, Ratis assumes all the directories (raft log, snapshot & tmp) are 
>> under the same root directory.  We may support a more flexible directory 
>> layout (e.g. allowing directories under different roots) if it helps.
>> 
>> Tsz-Wo
>> 
>> 
>> On Thu, Oct 20, 2022 at 9:46 PM William Song <[email protected] 
>> <mailto:[email protected]>> wrote:
>> Hi,
>> 
>> IoTDB StateMachine manages both in-memory states and data files persisted on 
>> disk. These data files are stored in another directory and even in another 
>> disk. When asked to take a snapshot, instead of copying these data files to 
>> the statemachine dir(which consumes lots of unnecessary disk space and 
>> time), statemachine only records absolute paths linking to these files.
>> 
>> When leader installs snapshot to follower, the statemachine will provide the 
>> absolute paths of all data files in FileInfo. The leader seems to assume 
>> that all these files are under statemachine dir, and calculates its relative 
>> path to sm and uses its as filename [1]. This will produce messing relative 
>> paths like ../../../root/disk2/data/a.tsfile.
>> 
>> The receiving follower uses the relative filename to create files holding 
>> the incoming snapshot chunks. As a result, the file may be names as 
>> sm/tmp/snapshot-uuid/../../../root/dik2/data/a.tsfile, sitting outside the 
>> tmp dir. Later the rename operation won’t place these files to the correct 
>> place and the statemachine can’t find the snapshot after InstallSnapshot.
>> 
>> What’s the proper solution to handle this?
>> 
>> Regards,
>> William
>> 
>> 
>> [1] 
>> https://github.com/apache/ratis/blob/75a1071a3c62a5a1a09c356cc1cdf281cc506baf/ratis-server/src/main/java/org/apache/ratis/server/storage/FileChunkReader.java#L55
>>  
>> <https://github.com/apache/ratis/blob/75a1071a3c62a5a1a09c356cc1cdf281cc506baf/ratis-server/src/main/java/org/apache/ratis/server/storage/FileChunkReader.java#L55>
>> 
>> [2] 
>> https://github.com/apache/ratis/blob/75a1071a3c62a5a1a09c356cc1cdf281cc506baf/ratis-server/src/main/java/org/apache/ratis/server/storage/SnapshotManager.java#L90
>>  
>> <https://github.com/apache/ratis/blob/75a1071a3c62a5a1a09c356cc1cdf281cc506baf/ratis-server/src/main/java/org/apache/ratis/server/storage/SnapshotManager.java#L90>
>> 
> 

Reply via email to