public void Handle(ReplicationMessage.CreateChunk message) { if (_subscriptionId != message.SubscriptionId) { return; } if (_activeChunk != null) { _activeChunk.MarkForDeletion(); _activeChunk = null; } _framer.Reset(); if (message.IsCompletedChunk) { _activeChunk = Db.Manager.CreateTempChunk(message.ChunkHeader, message.FileSize); } else { if (message.ChunkHeader.ChunkStartNumber != Db.Manager.ChunksCount) { ReplicationFail("Received request to create a new ongoing chunk #{0}-{1}, but current chunks count is {2}.", message.ChunkHeader.ChunkStartNumber, message.ChunkHeader.ChunkEndNumber, Db.Manager.ChunksCount); } Db.Manager.AddNewChunk(message.ChunkHeader, message.FileSize); } _subscriptionPos = message.ChunkHeader.ChunkStartPosition; _ackedSubscriptionPos = _subscriptionPos; Bus.Publish(new ReplicationMessage.AckLogPosition(_subscriptionId, _ackedSubscriptionPos)); }
private TcpPackage WrapCreateChunk(ReplicationMessage.CreateChunk msg) { var dto = new ReplicationMessageDto.CreateChunk(msg.LeaderId.ToByteArray(), msg.SubscriptionId.ToByteArray(), msg.ChunkHeader.AsByteArray(), msg.FileSize, msg.IsCompletedChunk); return(new TcpPackage(TcpCommand.CreateChunk, Guid.NewGuid(), dto.Serialize())); }