Page 239 - 《软件学报》2021年第10期
P. 239
朱阅岸 等:构建新型高性能与高可用的键值数据库系统 3211
p :第 p 个分片的复制集合;
p 、 p_repl 、 p_ack 、 p_r :分别是第 p 个分片已完成的修改操作集合、复制集合、ack 等待集合与回复
集合;
p :第 p 个分片的批量修改操作;
state ik 1 applicator (,u state ik ) :在重放函数 applicator 的作用下,第 p 个分片的状态从 state ik p 迁移到
p
p
state ik 1 ;
p
( p ):将请求打包,然后使用一个系统调用将其发送到其他节点;
u
针对第 p 个分片的修改操作 u 的 ack 集合;
p
p :第 p 个分片一批修改操作的 ack 集合;
r p :第 p 个分片所有修改操作的待回复集合;
u p : 等待回复的第 p 个分片的修改操作 u;
p :等待回复的第 p 个分片上某一批修改操作 u.
Replication Algorithm. Replicate log record to other storage nodes.
Input: File descriptor fd;
1. Procedure RequestDispatch(fd) /*dispatch a task to certain channel*/
2. while LogStore.IsRunning do
3. {}u i /*receive ith request for pth partition*/
p p p
4. p p {}u i p /*put ith request into pth channel*/
5. increment LSN of replication channel
Input: Set of pth partition requests p ;
1. Procedure ProcessTask( p ) /*process one batch of task*/
2. while p p do
3. p
4. p pick a batch of requests from p p
5. p p p
6. for each u in p do /*processing a batch size k*/
7. state ik 1 applicator (,u state ik p )
p
8. r p r p {} u p /*add u’s reply obj into waiting reply set r p */
u
p
u
9. add ack into u’s ack set in pth replication channel /*local ack*/
p
Input: Set of pth replication requests p ;
1. Procedure replicateSendStage( p )
2. while p p_repl do
3. p pick a batch of requests from { p p_repl }
4. p_repl p_repl p
5. send ( p ) /*pack modification messages and send by one sys call*/
6. foreach u in p do
7. p p /*add u’s ack set into waiting ack set p */
u
u
p
p
Input: Set of pth partition acknowledge p ;
1. Procedure ReplicationRecvAndAckStage( p )