From 15a2752d512d7f74b9286e780428b559fe6582dd Mon Sep 17 00:00:00 2001 From: Adriano Rosso Date: Thu, 4 Feb 2016 14:18:17 -0200 Subject: [PATCH] HNAS driver: retry on Connection reset fix When HNAS driver is not using the SSH option and there are lots of exports in the backend, a exception of "Connection reset" is eventually raised in the driver initialization. This patch makes the HNAS driver retries when this exception is raised. Change-Id: Ia6306d5d2d24556135505ddc33174f57c86d8555 Closes-Bug: 1541941 --- cinder/tests/unit/test_hitachi_hnas_backend.py | 10 ++++++++++ cinder/volume/drivers/hitachi/hnas_backend.py | 6 +++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/cinder/tests/unit/test_hitachi_hnas_backend.py b/cinder/tests/unit/test_hitachi_hnas_backend.py index 64f2f672bf9..fe2872653a9 100644 --- a/cinder/tests/unit/test_hitachi_hnas_backend.py +++ b/cinder/tests/unit/test_hitachi_hnas_backend.py @@ -240,6 +240,8 @@ File System : fs1 \n\ File System Mounted : YES \n\ Logical Unit Mounted: No" +HNAS_RESULT27 = "Connection reset" + HNAS_CMDS = { ('ssh', '0.0.0.0', 'supervisor', 'supervisor', 'evsfs', 'list'): @@ -376,6 +378,14 @@ class HDSHNASBendTest(test.TestCase): 'ssh', '0.0.0.0', 'supervisor', 'supervisor', 'df', '-a') + m_utl.side_effect = putils.ProcessExecutionError(stdout='', + stderr=HNAS_RESULT27, + exit_code=255) + self.hnas_bend.drv_configs['ssh_enabled'] = 'False' + self.assertRaises(exception.HNASConnError, self.hnas_bend.run_cmd, + 'ssh', '0.0.0.0', 'supervisor', 'supervisor', + 'df', '-a') + # Test exception throwing when using SSH m_ssh.side_effect = putils.ProcessExecutionError(stdout='', stderr=HNAS_RESULT22, diff --git a/cinder/volume/drivers/hitachi/hnas_backend.py b/cinder/volume/drivers/hitachi/hnas_backend.py index 61877aa2fd8..a72dff9418c 100644 --- a/cinder/volume/drivers/hitachi/hnas_backend.py +++ b/cinder/volume/drivers/hitachi/hnas_backend.py @@ -68,8 +68,12 @@ class HnasBackend(object): LOG.debug("SSC connection error!") msg = _("Failed to establish SSC connection.") raise exception.HNASConnError(msg) + elif 'Connection reset' in e.stderr: + LOG.debug("HNAS connection reset!") + msg = _("HNAS has disconnected SSC") + raise exception.HNASConnError(msg) else: - raise putils.ProcessExecutionError + raise else: if self.drv_configs['cluster_admin_ip0'] is None: