]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Timeout triggers failures running tempest for ZFSSA driver.
authorJuan Zuluaga <juan.c.zuluaga@oracle.com>
Tue, 16 Sep 2014 15:09:02 +0000 (11:09 -0400)
committerJuan Zuluaga <juan.c.zuluaga@oracle.com>
Fri, 19 Sep 2014 16:01:42 +0000 (12:01 -0400)
Adding a property to setup the RESTAPI connection timeout with
ZFS Storage Appliance, allow tempest to pass with slower network links.

DocImpact: New config parameter is added to allow configuring timeout value.
Closes-Bug: #1369136

Change-Id: I8de19f56a18106324ed414cf41ee2323de639359

cinder/tests/test_zfssa.py
cinder/volume/drivers/zfssa/restclient.py
cinder/volume/drivers/zfssa/zfssaiscsi.py
cinder/volume/drivers/zfssa/zfssarest.py
etc/cinder/cinder.conf.sample

index c1bd1441e1e2a4060323346537b678f621751a9b..49a55e6f6e460a725f3498b6a4ce053b9cc2a169 100644 (file)
@@ -36,7 +36,7 @@ class FakeZFSSA(object):
     def login(self, user):
         self.user = user
 
-    def set_host(self, host):
+    def set_host(self, host, timeout=None):
         self.host = host
 
     def create_project(self, pool, project, compression, logbias):
@@ -265,6 +265,7 @@ class TestZFSSAISCSIDriver(test.TestCase):
         self.configuration.zfssa_target_password = ''
         self.configuration.zfssa_target_portal = '1.1.1.1:3260'
         self.configuration.zfssa_target_interfaces = 'e1000g0'
+        self.configuration.zfssa_rest_timeout = 60
 
     def test_create_delete_volume(self):
         self.drv.create_volume(self.test_vol)
index e904075c6c78f7118e4e595c84cf2e22c2d95293..1e4122fab2d1810246cf56aa37341900cad36e34 100644 (file)
@@ -276,7 +276,11 @@ class RestClientURL(object):
             try:
                 response = urllib2.urlopen(req, timeout=self.timeout)
             except urllib2.HTTPError as err:
-                LOG.error(_('REST Not Available: %s') % err.code)
+                if err.code == httplib.NOT_FOUND:
+                    LOG.debug('REST Not Found: %s' % err.code)
+                else:
+                    LOG.error(_('REST Not Available: %s') % err.code)
+
                 if err.code == httplib.SERVICE_UNAVAILABLE and \
                    retry < maxreqretries:
                     retry += 1
index b92ba20222b97d120bbea005eeb9bbcb01117e59..ade95d73cf8e17ab912214aecfdfcc3da894c5a8 100644 (file)
@@ -59,7 +59,10 @@ ZFSSA_OPTS = [
     cfg.StrOpt('zfssa_target_portal',
                help='iSCSI target portal (Data-IP:Port, w.x.y.z:3260).'),
     cfg.StrOpt('zfssa_target_interfaces',
-               help='Network interfaces of iSCSI targets. (comma separated)')
+               help='Network interfaces of iSCSI targets. (comma separated)'),
+    cfg.IntOpt('zfssa_rest_timeout',
+               help='REST connection timeout. (seconds)')
+
 ]
 
 CONF.register_opts(ZFSSA_OPTS)
@@ -95,7 +98,7 @@ class ZFSSAISCSIDriver(driver.ISCSIDriver):
         msg = (_('Connecting to host: %s.') % lcfg.san_ip)
         LOG.info(msg)
         self.zfssa = factory_zfssa()
-        self.zfssa.set_host(lcfg.san_ip)
+        self.zfssa.set_host(lcfg.san_ip, timeout=lcfg.zfssa_rest_timeout)
         auth_str = base64.encodestring('%s:%s' %
                                        (lcfg.san_login,
                                         lcfg.san_password))[:-1]
index e64f8edd7dad3e84c4b8be9d4644386cd78c142e..b86294e4cfe93fbc06056955bf43b85896a68891 100644 (file)
@@ -57,10 +57,10 @@ class ZFSSAApi(object):
         return vdata['version']['asn'] == pdata['pool']['asn'] and \
             vdata['version']['nodename'] == pdata['pool']['owner']
 
-    def set_host(self, host):
+    def set_host(self, host, timeout=None):
         self.host = host
         self.url = "https://" + self.host + ":215"
-        self.rclient = restclient.RestClientURL(self.url)
+        self.rclient = restclient.RestClientURL(self.url, timeout=timeout)
 
     def login(self, auth_str):
         """Login to the appliance"""
@@ -375,7 +375,7 @@ class ZFSSAApi(object):
            optional - volblocksize, sparse, compression, logbias
         """
         svc = '/api/storage/v1/pools/' + pool + '/projects/' + \
-            project + '/luns'
+              project + '/luns'
         arg = {
             'name': lun,
             'volsize': volsize,
index 8457febea270c425b360573a98df10edd3cbd10c..4ba44f58e2aa4223707b9c3066c7526fef0f4c2c 100644 (file)
 # (string value)
 #zfssa_target_interfaces=<None>
 
+# REST connection timeout. (seconds) (integer value)
+#zfssa_rest_timeout=<None>
+
 
 #
 # Options defined in cinder.volume.manager