예제 #1
0
파일: Pusher.cs 프로젝트: nordseth/Nibbler
        private async Task FakePullAndMount(ManifestV2Layer layer)
        {
            _logger.LogDebug($"Mount failed, trying to fake pull and retry {_baseImageName} {layer.digest}");

            try
            {
                var blobStream = await _registry.DownloadBlob(_baseImageName, layer.digest);

                await blobStream.CopyToAsync(System.IO.Stream.Null);
            }
            catch (Exception ex)
            {
                _logger.LogDebug(ex, $"Fake pull failed");
                throw;
            }

            await _registry.MountBlob(_targetImageName, layer.digest, _baseImageName);
        }
예제 #2
0
파일: Pusher.cs 프로젝트: nordseth/Nibbler
 private async Task MountLayer(ManifestV2Layer layer)
 {
     try
     {
         await _registry.MountBlob(_targetImageName, layer.digest, _baseImageName);
     }
     catch
     {
         if (FakePullAndRetryMount)
         {
             await FakePullAndMount(layer);
         }
         else
         {
             throw;
         }
     }
 }
예제 #3
0
파일: Pusher.cs 프로젝트: nordseth/Nibbler
        public async Task PushConfig(ManifestV2Layer config, Func <System.IO.Stream> configStream)
        {
            await RetryHelper.Retry(_retryUpload, _logger,
                                    async() =>
            {
                var uploadUri = await GetUploadUri();
                _logger.LogDebug($"uploading config.");

                using (var stream = configStream())
                {
                    if (_chunckSize > 0)
                    {
                        await _registry.UploadBlobChuncks(uploadUri, config.digest, stream, _chunckSize);
                    }
                    else
                    {
                        await _registry.UploadBlob(uploadUri, config.digest, stream, config.size);
                    }
                }
            });
        }
예제 #4
0
파일: Pusher.cs 프로젝트: nordseth/Nibbler
        private async Task CopyLayer(ManifestV2Layer layer, string baseImageName, Registry baseRegistry)
        {
            await RetryHelper.Retry(_retryUpload, _logger,
                                    async() =>
            {
                var uploadUri = await GetUploadUri();
                _logger.LogDebug($"copy layer from {baseRegistry.BaseUri}{baseImageName} - {layer.digest}, {layer.size} bytes.");

                using (var stream = await baseRegistry.DownloadBlob(baseImageName, layer.digest))
                {
                    if (_chunckSize > 0)
                    {
                        await _registry.UploadBlobChuncks(uploadUri, layer.digest, stream, _chunckSize);
                    }
                    else
                    {
                        await _registry.UploadBlob(uploadUri, layer.digest, stream, layer.size);
                    }
                }
            });
        }
예제 #5
0
        private static async Task CopyBlobIfNeeded(string imageName, Registry source, Registry dest, string uploadUri, ManifestV2Layer layer)
        {
            var exist = await dest.BlobExists(imageName, layer.digest);

            Console.WriteLine($"{layer.digest} - {layer.mediaType} - {layer.size} = {exist.HasValue}");
            if (!exist.HasValue)
            {
                Console.WriteLine($"Copying layer: {layer.digest} - {layer.mediaType} - {layer.size}");
                var blob = await source.DownloadBlob(imageName, layer.digest);

                await dest.UploadBlobChuncks(uploadUri, layer.digest, blob, 10000);

                Console.WriteLine($"Done copying layer: {layer.digest} to {uploadUri}");
            }
        }