不为失败找理由,要为成功找方法。

关于es中同步检查点的执行疑问

Elasticsearch | 作者 Charele | 发布于2021年10月03日 | 阅读数:1479

每个分片都会起一个AsyncGlobalCheckpointTask后台线程,用来同步副分片的全局检查点,
(其他类似的线程,就是我们比较熟悉的1秒1次的refresh:-)
 
看下它的说明:
Background task that syncs the global checkpoint to replicas.
 
1 它的执行:
final boolean asyncDurability = indexSettings().getTranslogDurability() == Translog.Durability.ASYNC;
 
if (stats.getMaxSeqNo() == stats.getGlobalCheckpoint() || asyncDurability) {
...
这里的意思是说如果日志持久化格式是ASYNC的,就有可能继续执行
(究竟最后能不能执行还要看下面的判断,这不是重点,至少它并没拒绝ASYNC)
 
2 它的最后执行:
    private void maybeSyncTranslog(final IndexShard indexShard) throws IOException {
        if (indexShard.getTranslogDurability() == Translog.Durability.REQUEST &&
            indexShard.getLastSyncedGlobalCheckpoint() < indexShard.getLastKnownGlobalCheckpoint()) {
            indexShard.sync();
        }
    }
最后它说只有REQUEST方式的才可以执行,
ASYNC方式是不可以的!如果是这样,为什么不在1处就显式地拒绝ASYNC呢???
已邀请:

要回复问题请先登录注册