| 220 | } |
| 221 | |
| 222 | void createReplicationBacklog(void) { |
| 223 | serverAssert(g_pserver->repl_backlog == NULL); |
| 224 | if (cserver.repl_backlog_disk_size) { |
| 225 | if (!createDiskBacklog()) { |
| 226 | serverLog(LL_WARNING, "Failed to create disk backlog, will use memory only"); |
| 227 | } |
| 228 | } |
| 229 | if (cserver.force_backlog_disk && g_pserver->repl_backlog_disk != nullptr) { |
| 230 | g_pserver->repl_backlog = g_pserver->repl_backlog_disk; |
| 231 | g_pserver->repl_backlog_size = cserver.repl_backlog_disk_size; |
| 232 | } else { |
| 233 | g_pserver->repl_backlog = (char*)zmalloc(g_pserver->repl_backlog_size, MALLOC_LOCAL); |
| 234 | } |
| 235 | g_pserver->repl_backlog_histlen = 0; |
| 236 | g_pserver->repl_backlog_idx = 0; |
| 237 | g_pserver->repl_backlog_start = g_pserver->master_repl_offset; |
| 238 | |
| 239 | /* We don't have any data inside our buffer, but virtually the first |
| 240 | * byte we have is the next byte that will be generated for the |
| 241 | * replication stream. */ |
| 242 | g_pserver->repl_backlog_off = g_pserver->master_repl_offset+1; |
| 243 | |
| 244 | /* Allow transmission to clients */ |
| 245 | g_pserver->repl_batch_idxStart = 0; |
| 246 | g_pserver->repl_batch_offStart = g_pserver->master_repl_offset; |
| 247 | } |
| 248 | |
| 249 | /* Compute the corresponding index from a replication backlog offset |
| 250 | * Since this computation needs the size of the replication backlog, |
no test coverage detected