use of com.ctrip.xpipe.redis.keeper.KeeperRepl in project x-pipe by ctripcorp.
the class PsyncHandler method innerDoHandle.
protected void innerDoHandle(final String[] args, final RedisSlave redisSlave, RedisKeeperServer redisKeeperServer) {
KeeperConfig keeperConfig = redisKeeperServer.getKeeperConfig();
KeeperRepl keeperRepl = redisKeeperServer.getKeeperRepl();
Long offsetRequest = Long.valueOf(args[1]);
String replIdRequest = args[0];
if (replIdRequest.equals("?")) {
doFullSync(redisSlave);
} else if (replIdRequest.equals(keeperRepl.replId()) || (replIdRequest.equals(keeperRepl.replId2()) && offsetRequest <= keeperRepl.secondReplIdOffset())) {
Long beginOffset = keeperRepl.getBeginOffset();
Long endOffset = keeperRepl.getEndOffset();
if (offsetRequest < beginOffset) {
logger.info("[innerDoHandle][offset < beginOffset][begin, end, request]{}, {}, {}", beginOffset, endOffset, offsetRequest);
redisSlave.getRedisKeeperServer().getKeeperMonitor().getKeeperStats().increatePartialSyncError();
doFullSync(redisSlave);
} else if (offsetRequest > endOffset + 1) {
logger.info("[innerDoHandle][wait for offset]{}, {} > {} + 1", redisSlave, offsetRequest, endOffset);
waitForoffset(args, redisSlave, keeperRepl.replId(), offsetRequest);
} else {
if (endOffset - offsetRequest < keeperConfig.getReplicationStoreMaxCommandsToTransferBeforeCreateRdb()) {
doPartialSync(redisSlave, keeperRepl.replId(), offsetRequest);
} else {
logger.info("[innerDoHandle][too much commands to transfer]{} - {} < {}", endOffset, offsetRequest, keeperConfig.getReplicationStoreMaxCommandsToTransferBeforeCreateRdb());
redisSlave.getRedisKeeperServer().getKeeperMonitor().getKeeperStats().increatePartialSyncError();
doFullSync(redisSlave);
}
}
} else {
redisSlave.getRedisKeeperServer().getKeeperMonitor().getKeeperStats().increatePartialSyncError();
doFullSync(redisSlave);
}
}
Aggregations