Delete package only when the package is updated

Change-Id: I026487258488410d60fd1cba79e694a3c3713979
Story: 2002153
Task: 20000
This commit is contained in:
Lingxian Kong 2018-06-05 18:19:12 +12:00
parent 97481bf291
commit e5ee23d250
2 changed files with 8 additions and 5 deletions

View File

@ -391,6 +391,7 @@ class FunctionsController(rest.RestController):
# Package type function. 'code' and 'entry' make sense only if # Package type function. 'code' and 'entry' make sense only if
# 'package' is provided # 'package' is provided
update_package = False
if (pre_source == constants.PACKAGE_FUNCTION and if (pre_source == constants.PACKAGE_FUNCTION and
values.get('package') is not None): values.get('package') is not None):
if md5sum and md5sum == pre_md5sum: if md5sum and md5sum == pre_md5sum:
@ -410,6 +411,7 @@ class FunctionsController(rest.RestController):
{"md5sum": md5sum, "source": pre_source} {"md5sum": md5sum, "source": pre_source}
) )
values.pop('package') values.pop('package')
update_package = True
# Swift type function # Swift type function
if pre_source == constants.SWIFT_FUNCTION: if pre_source == constants.SWIFT_FUNCTION:
@ -423,8 +425,8 @@ class FunctionsController(rest.RestController):
func_db = db_api.update_function(id, values) func_db = db_api.update_function(id, values)
# Delete function package if needed # Delete the old function package if needed
if pre_md5sum: if update_package:
self.storage_provider.delete(ctx.projectid, id, pre_md5sum) self.storage_provider.delete(ctx.projectid, id, pre_md5sum)
pecan.response.status = 200 pecan.response.status = 200

View File

@ -209,11 +209,11 @@ class TestFunctionController(base.APITest):
resp.json['faultstring'] resp.json['faultstring']
) )
@mock.patch('qinling.storage.file_system.FileSystemStorage.delete')
@mock.patch('qinling.utils.etcd_util.delete_function') @mock.patch('qinling.utils.etcd_util.delete_function')
@mock.patch('qinling.rpc.EngineClient.delete_function') @mock.patch('qinling.rpc.EngineClient.delete_function')
def test_put_cpu_and_memorysize( def test_put_cpu_and_memorysize(self, mock_delete_func, mock_etcd_del,
self, mock_delete_func, mock_etcd_del mock_storage_delete):
):
# Test for updating cpu/mem with good input values. # Test for updating cpu/mem with good input values.
db_func = self.create_function(runtime_id=self.runtime_id) db_func = self.create_function(runtime_id=self.runtime_id)
@ -235,6 +235,7 @@ class TestFunctionController(base.APITest):
) )
mock_delete_func.assert_called_once_with(db_func.id) mock_delete_func.assert_called_once_with(db_func.id)
mock_etcd_del.assert_called_once_with(db_func.id) mock_etcd_del.assert_called_once_with(db_func.id)
self.assertFalse(mock_storage_delete.called)
@mock.patch('qinling.utils.etcd_util.delete_function') @mock.patch('qinling.utils.etcd_util.delete_function')
@mock.patch('qinling.rpc.EngineClient.delete_function') @mock.patch('qinling.rpc.EngineClient.delete_function')