private void HandleReplicateNextPage(StorageMessageUnion wrapper,
                                             MessageStreamWriter <StorageMessageUnion> writer)
        {
            var replicationResult = replication.ReplicateNextPage(
                wrapper.ReplicateNextPageRequest.ReplicationEndpoint.GetNodeEndpoint(),
                wrapper.ReplicateNextPageRequest.Type == ReplicationType.Backup ? Internal.ReplicationType.Backup : Internal.ReplicationType.Ownership,
                wrapper.ReplicateNextPageRequest.Segment
                );

            writer.Write(new StorageMessageUnion.Builder
            {
                Type = StorageMessageType.ReplicateNextPageResponse,
                ReplicateNextPageResponse = new ReplicateNextPageResponseMessage.Builder()
                {
                    Done = replicationResult.Done,
                    RemoveRequestsList =
                    {
                        replicationResult.RemoveRequests.Select(x => x.GetRemoveRequest()),
                    },
                    PutRequestsList =
                    {
                        replicationResult.PutRequests.Select(x => x.GetPutRequest())
                    }
                }.Build()
            }.Build());
        }
        private void HandlePut(StorageMessageUnion wrapper,
                               int topologyVersion,
                               MessageStreamWriter <StorageMessageUnion> writer)
        {
            var puts    = wrapper.PutRequestsList.Select(x => x.GetPutRequest()).ToArray();
            var results = storage.Put(topologyVersion, puts);

            writer.Write(new StorageMessageUnion.Builder
            {
                Type             = StorageMessageType.PutResponses,
                TopologyVersion  = topologyVersion,
                PutResponsesList =
                {
                    results.Select(x => x.GetPutResponse())
                }
            }.Build());
        }
        private void HandleAssignEmpty(StorageMessageUnion wrapper,
                                       MessageStreamWriter <StorageMessageUnion> writer)
        {
            var segments = replication.AssignAllEmptySegments(
                wrapper.AssignAllEmptySegmentsRequest.ReplicationEndpoint.GetNodeEndpoint(),
                wrapper.AssignAllEmptySegmentsRequest.Type == ReplicationType.Backup ? Internal.ReplicationType.Backup : Internal.ReplicationType.Ownership,
                wrapper.AssignAllEmptySegmentsRequest.SegmentsList.ToArray()
                );

            writer.Write(new StorageMessageUnion.Builder
            {
                Type = StorageMessageType.AssignAllEmptySegmentsResponse,
                AssignAllEmptySegmentsResponse = new AssignAllEmptySegmentsResponseMessage.Builder
                {
                    AssignedSegmentsList = { segments }
                }.Build()
            }.Build());
        }
        private void HandleGet(StorageMessageUnion wrapper,
                               int topologyVersion,
                               MessageStreamWriter <StorageMessageUnion> writer)
        {
            var values = storage.Get(topologyVersion,
                                     wrapper.GetRequestsList.Select(x => x.GetGetRequest()).ToArray()
                                     );
            var reply = new StorageMessageUnion.Builder
            {
                Type             = StorageMessageType.GetResponses,
                TopologyVersion  = wrapper.TopologyVersion,
                GetResponsesList =
                {
                    values.Select(x => x.GetGetResponse())
                }
            };

            writer.Write(reply.Build());
        }
        private void HandleRemove(StorageMessageUnion wrapper,
                                  int topologyVersion,
                                  MessageStreamWriter <StorageMessageUnion> writer)
        {
            var requests = wrapper.RemoveRequestsList.Select(x => x.GetRemoveRequest()).ToArray();
            var removed  = storage.Remove(topologyVersion, requests);

            writer.Write(new StorageMessageUnion.Builder
            {
                Type               = StorageMessageType.RemoveResponses,
                TopologyVersion    = topologyVersion,
                RemoveResponesList =
                {
                    removed.Select(x => new RemoveResponseMessage.Builder
                    {
                        WasRemoved = x
                    }.Build())
                }
            }.Build());
        }
 private void HandleReplicateNextPage(StorageMessageUnion wrapper,
     MessageStreamWriter<StorageMessageUnion> writer)
 {
     var replicationResult = replication.ReplicateNextPage(
         wrapper.ReplicateNextPageRequest.ReplicationEndpoint.GetNodeEndpoint(),
         wrapper.ReplicateNextPageRequest.Type == ReplicationType.Backup ? Internal.ReplicationType.Backup : Internal.ReplicationType.Ownership,
         wrapper.ReplicateNextPageRequest.Segment
         );
     writer.Write(new StorageMessageUnion.Builder
     {
         Type = StorageMessageType.ReplicateNextPageResponse,
         ReplicateNextPageResponse = new ReplicateNextPageResponseMessage.Builder()
         {
             Done = replicationResult.Done,
             RemoveRequestsList =
                 {
                     replicationResult.RemoveRequests.Select(x=>x.GetRemoveRequest()),
                 },
             PutRequestsList =
                 {
                     replicationResult.PutRequests.Select(x=>x.GetPutRequest())
                 }
         }.Build()
     }.Build());
 }
 private void HandleRemove(StorageMessageUnion wrapper,
     int topologyVersion,
     MessageStreamWriter<StorageMessageUnion> writer)
 {
     var requests = wrapper.RemoveRequestsList.Select(x => x.GetRemoveRequest()).ToArray();
     var removed = storage.Remove(topologyVersion, requests);
     writer.Write(new StorageMessageUnion.Builder
     {
         Type = StorageMessageType.RemoveResponses,
         TopologyVersion = topologyVersion,
         RemoveResponesList =
             {
                 removed.Select(x => new RemoveResponseMessage.Builder
                 {
                     WasRemoved = x
                 }.Build())
             }
     }.Build());
 }
 private void HandlePut(StorageMessageUnion wrapper,
     int topologyVersion,
     MessageStreamWriter<StorageMessageUnion> writer)
 {
     var puts = wrapper.PutRequestsList.Select(x => x.GetPutRequest()).ToArray();
     var results = storage.Put(topologyVersion, puts);
     writer.Write(new StorageMessageUnion.Builder
     {
         Type = StorageMessageType.PutResponses,
         TopologyVersion = topologyVersion,
         PutResponsesList =
             {
                 results.Select(x=>x.GetPutResponse())
             }
     }.Build());
 }
 private void HandleGet(StorageMessageUnion wrapper,
     int topologyVersion,
     MessageStreamWriter<StorageMessageUnion> writer)
 {
     var values = storage.Get(topologyVersion,
         wrapper.GetRequestsList.Select(x => x.GetGetRequest()).ToArray()
         );
     var reply = new StorageMessageUnion.Builder
     {
         Type = StorageMessageType.GetResponses,
         TopologyVersion = wrapper.TopologyVersion,
         GetResponsesList =
             {
                 values.Select(x=> x.GetGetResponse())
             }
     };
     writer.Write(reply.Build());
 }
 private void HandleAssignEmpty(StorageMessageUnion wrapper,
     MessageStreamWriter<StorageMessageUnion> writer)
 {
     var segments = replication.AssignAllEmptySegments(
         wrapper.AssignAllEmptySegmentsRequest.ReplicationEndpoint.GetNodeEndpoint(),
         wrapper.AssignAllEmptySegmentsRequest.Type == ReplicationType.Backup ? Internal.ReplicationType.Backup : Internal.ReplicationType.Ownership,
         wrapper.AssignAllEmptySegmentsRequest.SegmentsList.ToArray()
         );
     writer.Write(new StorageMessageUnion.Builder
     {
         Type = StorageMessageType.AssignAllEmptySegmentsResponse,
         AssignAllEmptySegmentsResponse = new AssignAllEmptySegmentsResponseMessage.Builder
         {
             AssignedSegmentsList = { segments }
         }.Build()
     }.Build());
 }