stop image downloads to memory
+ Fixes issue with large images hogging memory + stream image downloads + output to stdout if file not specified Change-Id: Ia01ff9b21a2dac5d0ccf2bd58a8640e88c5cbb36 Story: 2007672 Task: 39776
This commit is contained in:
		@@ -478,7 +478,11 @@ class SaveImage(command.Command):
 | 
			
		||||
        image_client = self.app.client_manager.image
 | 
			
		||||
        image = image_client.find_image(parsed_args.image)
 | 
			
		||||
 | 
			
		||||
        image_client.download_image(image.id, output=parsed_args.file)
 | 
			
		||||
        output_file = parsed_args.file
 | 
			
		||||
        if output_file is None:
 | 
			
		||||
            output_file = getattr(sys.stdout, "buffer", sys.stdout)
 | 
			
		||||
 | 
			
		||||
        image_client.download_image(image.id, stream=True, output=output_file)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SetImage(command.Command):
 | 
			
		||||
 
 | 
			
		||||
@@ -803,7 +803,11 @@ class SaveImage(command.Command):
 | 
			
		||||
        image_client = self.app.client_manager.image
 | 
			
		||||
        image = image_client.find_image(parsed_args.image)
 | 
			
		||||
 | 
			
		||||
        image_client.download_image(image.id, output=parsed_args.file)
 | 
			
		||||
        output_file = parsed_args.file
 | 
			
		||||
        if output_file is None:
 | 
			
		||||
            output_file = getattr(sys.stdout, "buffer", sys.stdout)
 | 
			
		||||
 | 
			
		||||
        image_client.download_image(image.id, stream=True, output=output_file)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SetImage(command.Command):
 | 
			
		||||
 
 | 
			
		||||
@@ -1618,7 +1618,7 @@ class TestImageSave(TestImage):
 | 
			
		||||
 | 
			
		||||
        verifylist = [
 | 
			
		||||
            ('file', '/path/to/file'),
 | 
			
		||||
            ('image', self.image.id)
 | 
			
		||||
            ('image', self.image.id),
 | 
			
		||||
        ]
 | 
			
		||||
        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
 | 
			
		||||
 | 
			
		||||
@@ -1626,6 +1626,7 @@ class TestImageSave(TestImage):
 | 
			
		||||
 | 
			
		||||
        self.client.download_image.assert_called_once_with(
 | 
			
		||||
            self.image.id,
 | 
			
		||||
            stream=True,
 | 
			
		||||
            output='/path/to/file')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,7 @@
 | 
			
		||||
---
 | 
			
		||||
fixes:
 | 
			
		||||
  - Stream image download to avoid buffering data in memory which rapidly
 | 
			
		||||
    exhausts memory resulting in OOM kill or system crash for all but the
 | 
			
		||||
    smallest of images. Fixes https://storyboard.openstack.org/#!/story/2007672
 | 
			
		||||
  - Restore default behavior of 'openstack image save' to send data to stdout
 | 
			
		||||
    Relates to https://storyboard.openstack.org/#!/story/2007672.
 | 
			
		||||
		Reference in New Issue
	
	Block a user