lengyuexuexuan opened a new issue, #2210:
URL: https://github.com/apache/incubator-pegasus/issues/2210

   ## Bug Report
   
   1. What did you do?
   There are two places that may cause this issus.
   The first is copying prepare_list.
       1. copy prepare_list
           1. 
https://github.com/apache/incubator-pegasus/blob/a875cb4261730a5eb5408bb79688ff447cb47135/src/replica/split/replica_split_manager.cpp#L305-L308
           2. 
https://github.com/apache/incubator-pegasus/blob/a875cb4261730a5eb5408bb79688ff447cb47135/src/replica/prepare_list.cpp#L52-L57
           3. During the process of copying the prepare_list, write operations 
were not stopped, so mutation_cache and last_commit_decree will continue to 
grow.
           4. Since last_commit_decree is copied later, it is possible for 
last_committed_decree to be greater than the actual committed_decree in the 
prepare_list.
           5. Therefore, this may lead to data loss. 
       2. plog append
           1. 
https://github.com/apache/incubator-pegasus/blob/a875cb4261730a5eb5408bb79688ff447cb47135/src/replica/split/replica_split_manager.cpp#L370-L378
           2. 
https://github.com/apache/incubator-pegasus/blob/a875cb4261730a5eb5408bb79688ff447cb47135/src/replica/split/replica_split_manager.cpp#L1359-L1366
           3. Currently, when the child replicates mutations, there are also 
asynchronous writes coming from the client, and both operations will perform 
plog append.
           4. The plog does not have a method to distinguish the order.
   2. soulution
       1. For the first issue, it can be resolved by copying the mutation_cache 
again after copying the last_commited_decree.
       2. For the second issue, there is currently no good solution in mind.
       3. Stopping client writes before the copy_prepare_list process seems 
like a good approach to prevent conflicts and ensure consistency.
       4. By stopping client writes before the copy_prepare_list process, you 
can address both of the issues.
   3. Here is the test for the write-stop duration
     
   数据量 1M
   | 分片数量     | 单分片阻写时间(min) | 单分片阻写时间(max) | 单分片阻写时间(avg) | 总体阻写时间 |
   
|--------------|---------------------|---------------------|---------------------|--------------|
   | 32->64       | 1.1s                | 2.1s                | 1.9s            
    | 85s          |
   | 64->128      | 1.5s                | 61s                 | 4.2s            
    | 83s          |
   | 128->256     | 1.3s                | 5.9s                | 3.2s            
    | 85s          |
   | 256->512     | 1.3s                | 32s                 | 3.1s            
    | 89s          |
   | 512->1024    | 1.3s                | 60s                 | 7.1s            
    | 110s         |
   
   
   数据量 172G
   | 分片数量     | 单分片阻写时间(min) | 单分片阻写时间(max) | 单分片阻写时间(avg) | 总体阻写时间 |
   
|--------------|---------------------|---------------------|---------------------|--------------|
   | 64->128      | 1.2s                | 121.5s              | 20.9s           
    | 141s         |
   | 128->256     | 1.8s                | 81.5s               | 14.9s           
    | 122s         |
   | 256->512     | 2s                  | 66.1s               | 11s             
    | 144s         |
   | 512->1024    | (内存被打满 OOM)    |                     |                     
|              |
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to