public override void PersistedUploadHandler(PersistedSliceReader request, ErrnoResponseWriter response)
        {
            var dmc      = DynamicMemoryCloud.Instance;
            var uploader = dmc.m_persistent_storage.Upload(request.version, dmc.MyPartitionId, request.lowkey, request.highkey).Result;
            var chunks   = new[] { new ChunkInformation {
                                       lowKey = request.lowkey, highKey = request.highkey, id = request.version
                                   } };
            var thres   = DynamicClusterConfig.Instance.PersistedChunkSizeThreshold;
            var tx_rsps = Global.LocalStorage
                          .Where(cell => _Covered(chunks, cell.CellId))
                          .Segment(thres, cell => cell.CellSize + sizeof(long) + sizeof(int) + sizeof(ushort))
                          .Select(_ => _Upload(_, uploader, thres));

            Task.WhenAll(tx_rsps).Wait();

            response.errno = Errno.E_OK;
        }
        public override void PersistedDownloadHandler(PersistedSliceReader request, ErrnoResponseWriter response)
        {
            var dmc        = DynamicMemoryCloud.Instance;
            var downloader = dmc.m_persistent_storage.Download(request.version, dmc.MyPartitionId, request.lowkey, request.highkey).Result;
            Task <IPersistentDataChunk> dtask = downloader.DownloadAsync();

            while (true)
            {
                var data = dtask?.Result;
                if (data == null)
                {
                    break;              //fetched null from a task, EOF
                }
                // start new download while we load it into memory storage
                var ndtask = downloader.DownloadAsync();
                foreach (var cell in data)
                {
                    Global.LocalStorage.SaveCell(cell.CellId, cell.Buffer, cell.Offset, cell.Length, cell.CellType);
                }
                dtask = ndtask;
            }

            response.errno = Errno.E_OK;
        }