@Override public SyncRequest getRequest() { final long actionLogMaxOffset = storage.getMaxActionLogOffset(); return new SyncRequest(SyncType.action.getCode(), 0, actionLogMaxOffset); } }
private void waitUntilSyncDone() { final CheckpointManager checkpointManager = storage.getCheckpointManager(); final long messageCheckpointOffset = checkpointManager.getMessageCheckpointOffset(); final long actionCheckpointOffset = checkpointManager.getActionCheckpointOffset(); while (true) { final long maxMessageOffset = storage.getMaxMessageOffset(); final long maxActionLogOffset = storage.getMaxActionLogOffset(); if (maxMessageOffset >= messageCheckpointOffset && maxActionLogOffset >= actionCheckpointOffset) { return; } LOG.info("waiting log sync done ..."); try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException ignore) { LOG.debug("sleep interrupted"); } } }
@Override public SyncRequest getRequest() { long messageLogMaxOffset = storage.getMaxMessageOffset(); long actionLogMaxOffset = storage.getMaxActionLogOffset(); return new SyncRequest(SyncType.heartbeat.getCode(), messageLogMaxOffset, actionLogMaxOffset); } }
@Override public void process(SyncRequestEntry requestEntry) { final ChannelHandlerContext ctx = requestEntry.getCtx(); final long messageLogMaxOffset = storage.getMaxMessageOffset(); final long actionLogMaxOffset = storage.getMaxActionLogOffset(); slaveMessageLogLag = messageLogMaxOffset - requestEntry.getSyncRequest().getMessageLogOffset(); slaveActionLogLag = actionLogMaxOffset - requestEntry.getSyncRequest().getActionLogOffset(); final HeartbeatPayloadHolder payloadHolder = new HeartbeatPayloadHolder(messageLogMaxOffset, actionLogMaxOffset); final Datagram datagram = RemotingBuilder.buildResponseDatagram(CommandCode.SUCCESS, requestEntry.getRequestHeader(), payloadHolder); ctx.writeAndFlush(datagram); }