From 5ffe3c73ba8f7705ceac4f50eab8e8f63bb56a15 Mon Sep 17 00:00:00 2001 From: Vipin Balachandran Date: Mon, 7 May 2018 14:23:43 -0700 Subject: [PATCH] Refactor _start_transfer Currently we create an instance of FixedIntervalLoopingCall (to update lease progress) even if the write handle is not of type VmdkWriteHandle. Also, we do not create any progress updater for VmdkReadHandle. Refactoring _start_transfer to create updater only if the handle is of type VmdkHandle. Change-Id: I6e306a5ff453f16e9bdfbd97996206db7db8447e --- oslo_vmware/image_transfer.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/oslo_vmware/image_transfer.py b/oslo_vmware/image_transfer.py index eb6d6c51..fa293858 100644 --- a/oslo_vmware/image_transfer.py +++ b/oslo_vmware/image_transfer.py @@ -40,14 +40,21 @@ NFC_LEASE_UPDATE_PERIOD = 60 # update NFC lease every 60sec. CHUNK_SIZE = 64 * units.Ki # default chunk size for image transfer +def _create_progress_updater(handle): + if isinstance(handle, rw_handles.VmdkHandle): + updater = loopingcall.FixedIntervalLoopingCall(handle.update_progress) + updater.start(interval=NFC_LEASE_UPDATE_PERIOD) + return updater + + def _start_transfer(read_handle, write_handle, timeout_secs): - # write_handle could be an NFC lease, so we need to periodically - # update its progress - update_cb = getattr(write_handle, 'update_progress', lambda: None) - updater = loopingcall.FixedIntervalLoopingCall(update_cb) + # read_handle/write_handle could be an NFC lease, so we need to + # periodically update its progress + read_updater = _create_progress_updater(read_handle) + write_updater = _create_progress_updater(write_handle) + timer = timeout.Timeout(timeout_secs) try: - updater.start(interval=NFC_LEASE_UPDATE_PERIOD) while True: data = read_handle.read(CHUNK_SIZE) if not data: @@ -67,7 +74,10 @@ def _start_transfer(read_handle, write_handle, timeout_secs): raise exceptions.ImageTransferException(msg, excep) finally: timer.cancel() - updater.stop() + if read_updater: + read_updater.stop() + if write_updater: + write_updater.stop() read_handle.close() write_handle.close()