)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fe05319d6500aa33d0465f43bc63e0d4f4978219","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Provide HP 3PAR array iSCSI driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The blueprint is here"},{"line_number":10,"context_line":"https://blueprints.launchpad.net/cinder/+spec/hp3par-volume-driver"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"We have the driver broken into 2 files:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAM3%2F%2F8x0%3D","line":9,"updated":"2012-12-19 10:55:15.000000000","message":"Syntax should be: \"Implements blueprint hp3par-volume-driver\"","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"}],"cinder/tests/test_hp3par_iscsi.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"Unit tests for OpenStack Cinder volume driver"},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import base64"},{"line_number":23,"context_line":"from cinder import exception"},{"line_number":24,"context_line":"import cinder.flags"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8ac%3D","line":21,"updated":"2012-12-19 18:26:03.000000000","message":"import order is not compliant with hacking: https://github.com/openstack/cinder/blob/master/HACKING.rst","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7b7745b36bda6bb17fef4ffe2afbce20918fb705","unresolved":false,"context_lines":[{"line_number":19,"context_line":"Unit tests for OpenStack Cinder volume driver"},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import base64"},{"line_number":23,"context_line":"from cinder import exception"},{"line_number":24,"context_line":"import cinder.flags"},{"line_number":25,"context_line":"from cinder.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8O8%3D","line":22,"updated":"2012-12-19 18:52:35.000000000","message":"base64 never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7b7745b36bda6bb17fef4ffe2afbce20918fb705","unresolved":false,"context_lines":[{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import base64"},{"line_number":23,"context_line":"from cinder import exception"},{"line_number":24,"context_line":"import cinder.flags"},{"line_number":25,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":26,"context_line":"import cinder.test"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8O4%3D","line":23,"updated":"2012-12-19 18:52:35.000000000","message":"cinder.exception never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7b7745b36bda6bb17fef4ffe2afbce20918fb705","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":26,"context_line":"import cinder.test"},{"line_number":27,"context_line":"from cinder.volume.drivers.san.hp import hp_3par_iscsi as hpdriver"},{"line_number":28,"context_line":"from hp3parclient import exceptions as hpexceptions"},{"line_number":29,"context_line":"import pprint"},{"line_number":30,"context_line":"import urllib2"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8O0%3D","line":28,"updated":"2012-12-19 18:52:35.000000000","message":"pprint never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7b7745b36bda6bb17fef4ffe2afbce20918fb705","unresolved":false,"context_lines":[{"line_number":26,"context_line":"import cinder.test"},{"line_number":27,"context_line":"from cinder.volume.drivers.san.hp import hp_3par_iscsi as hpdriver"},{"line_number":28,"context_line":"from hp3parclient import exceptions as hpexceptions"},{"line_number":29,"context_line":"import pprint"},{"line_number":30,"context_line":"import urllib2"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"FLAGS \u003d cinder.flags.FLAGS"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8Os%3D","line":29,"updated":"2012-12-19 18:52:35.000000000","message":"urllib2 never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7b7745b36bda6bb17fef4ffe2afbce20918fb705","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        self.assertEquals(self.VOLUME_3PAR_NAME, vlun[\u0027volumeName\u0027])"},{"line_number":417,"context_line":"        self.assertEquals(self.FAKE_HOST, vlun[\u0027hostname\u0027])"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    def test_terminate_connection(self):"},{"line_number":420,"context_line":"        result \u003d self.driver.terminate_connection(self.volume,"},{"line_number":421,"context_line":"                                                  self.connector, True)"},{"line_number":422,"context_line":"        # vlun should be gone."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8Ok%3D","line":419,"updated":"2012-12-19 18:52:35.000000000","message":"result is never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"96af813f71433b9f9818ef83226309163a0f50b4","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from hp3parclient import exceptions as hpexceptions"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from cinder import exception"},{"line_number":25,"context_line":"import cinder.flags"},{"line_number":26,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":27,"context_line":"import cinder.test"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F7Jw%3D","line":24,"updated":"2012-12-20 17:28:03.000000000","message":"No used","commit_id":"dc414803ec5a871119998198d9cdb5606407a4fc"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"96af813f71433b9f9818ef83226309163a0f50b4","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        raise hpexceptions.HTTPNotFound(msg)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"class TestHP3PARDriver(cinder.test.TestCase):"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    TARGET_IQN \u003d \"iqn.2000-05.com.3pardata:21810002ac00383d\""},{"line_number":253,"context_line":"    VOLUME_NAME \u003d \"volume-d03338a9-9115-48a3-8dfc-35cdfcdc15a7\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F7JU%3D","line":250,"updated":"2012-12-20 17:28:03.000000000","message":"You\u0027ve imported cinder.test, so all you need here is test.TestCase (nit pick I know :) )","commit_id":"dc414803ec5a871119998198d9cdb5606407a4fc"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"aa64fcdfca5d91b524a25db44e09b9a9be58b8cc","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def fake_create_client(self):"},{"line_number":333,"context_line":"        return FakeHP3ParClient(FLAGS.hp3par_api_url)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def fake_iscsi_discover_target_iqn(self, ip_address):"},{"line_number":336,"context_line":"        return self.TARGET_IQN"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F5Pk%3D","line":334,"updated":"2012-12-24 03:21:22.000000000","message":"redefined on 355","commit_id":"19c7da492402fda4c75afbb4e5a2ae147d24244d"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ff6cc969020df03b997eb60cc2ae5f2e43c1792f","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def fake_create_client(self):"},{"line_number":333,"context_line":"        return FakeHP3ParClient(FLAGS.hp3par_api_url)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def fake_iscsi_discover_target_iqn(self, ip_address):"},{"line_number":336,"context_line":"        return self.TARGET_IQN"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1%2BM%3D","line":334,"in_reply_to":"AAAAM3%2F%2F5Pk%3D","updated":"2013-01-02 18:54:49.000000000","message":"Fixed this one.","commit_id":"19c7da492402fda4c75afbb4e5a2ae147d24244d"}],"cinder/volume/drivers/san/hp/hp_3par_common.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Volume driver common utilities for HP 3PAR Storage array"},{"line_number":22,"context_line":"This driver requires 3.1.2+ of the 3Par"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"\"\"\""},{"line_number":25,"context_line":"import base64"},{"line_number":26,"context_line":"from cinder import exception"},{"line_number":27,"context_line":"from cinder import flags"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8U4%3D","line":24,"updated":"2012-12-19 18:26:03.000000000","message":"import order not complaint with hacking: https://github.com/openstack/cinder/blob/master/HACKING.rst","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                        return self._ssh_execute(ssh, command,"},{"line_number":222,"context_line":"                                                 check_exit_code\u003dcheck_exit)"},{"line_number":223,"context_line":"                    except Exception as e:"},{"line_number":224,"context_line":"                        LOG.error(e)"},{"line_number":225,"context_line":"                        greenthread.sleep(random.randint(20, 500) / 100.0)"},{"line_number":226,"context_line":"                raise paramiko.SSHException(_(\"SSH Command failed after \""},{"line_number":227,"context_line":"                                              \"\u0027%(total_attempts)r\u0027 attempts\""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8Ts%3D","line":224,"updated":"2012-12-19 18:26:03.000000000","message":"Missing import for eventlet.greenthread?","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fe05319d6500aa33d0465f43bc63e0d4f4978219","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    except Exception as e:"},{"line_number":224,"context_line":"                        LOG.error(e)"},{"line_number":225,"context_line":"                        greenthread.sleep(random.randint(20, 500) / 100.0)"},{"line_number":226,"context_line":"                raise paramiko.SSHException(_(\"SSH Command failed after \""},{"line_number":227,"context_line":"                                              \"\u0027%(total_attempts)r\u0027 attempts\""},{"line_number":228,"context_line":"                                              \": \u0027%(command)s\u0027\"), locals())"},{"line_number":229,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8xQ%3D","line":226,"updated":"2012-12-19 10:55:15.000000000","message":"paramiko is not imported?","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fe05319d6500aa33d0465f43bc63e0d4f4978219","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            LOG.error(_(\"Error running ssh command: %s\") % command)"},{"line_number":231,"context_line":"            raise e"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def _delete_3par_host(self, hostname):"},{"line_number":234,"context_line":"        res \u003d self._cli_run(\u0027removehost %s\u0027 % hostname, None)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def _safe_hostname(self, hostname):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8xI%3D","line":233,"updated":"2012-12-19 10:55:15.000000000","message":"Function not called","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        \"\"\""},{"line_number":241,"context_line":"        try:"},{"line_number":242,"context_line":"            index \u003d hostname.index(\u0027.\u0027)"},{"line_number":243,"context_line":"        except ValueError as ex:"},{"line_number":244,"context_line":"            # couldn\u0027t find it"},{"line_number":245,"context_line":"            index \u003d len(hostname)"},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8Tc%3D","line":243,"updated":"2012-12-19 18:26:03.000000000","message":"ex is never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fe05319d6500aa33d0465f43bc63e0d4f4978219","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        # Linux kernel can only do 256 as max ID per target"},{"line_number":348,"context_line":"        lun_id \u003d randint(0, 255)"},{"line_number":349,"context_line":"        volume_name \u003d self._get_3par_vol_name(volume[\u0027name\u0027])"},{"line_number":350,"context_line":"        client.createVLUN(volume_name, lun_id, host[\u0027name\u0027])"},{"line_number":351,"context_line":"        return client.getVLUN(volume_name)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    def delete_vlun(self, volume, connector, client):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8xE%3D","line":350,"updated":"2012-12-19 10:55:15.000000000","message":"What about handling the error where the lun_id is already used?","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        return client.getVLUN(volume_name)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    def delete_vlun(self, volume, connector, client):"},{"line_number":354,"context_line":"        hostname \u003d self._safe_hostname(connector[\u0027host\u0027])"},{"line_number":355,"context_line":"        host \u003d self._get_3par_host(hostname)"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        volume_name \u003d self._get_3par_vol_name(volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8TQ%3D","line":354,"updated":"2012-12-19 18:26:03.000000000","message":"host never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":379,"context_line":"            client.createVolume(volume_name, FLAGS.hp3par_cpg,"},{"line_number":380,"context_line":"                                capacity, extras)"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        except hpexceptions.HTTPConflict as ex:"},{"line_number":383,"context_line":"            raise exception.Duplicate(_(\"Volume (%s) already exists on array\")"},{"line_number":384,"context_line":"                                      % volume_name)"},{"line_number":385,"context_line":"        except hpexceptions.HTTPBadRequest as ex:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8TA%3D","line":382,"updated":"2012-12-19 18:26:03.000000000","message":"ex never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        except hpexceptions.HTTPConflict as ex:"},{"line_number":383,"context_line":"            raise exception.Duplicate(_(\"Volume (%s) already exists on array\")"},{"line_number":384,"context_line":"                                      % volume_name)"},{"line_number":385,"context_line":"        except hpexceptions.HTTPBadRequest as ex:"},{"line_number":386,"context_line":"            LOG.error(str(ex))"},{"line_number":387,"context_line":"            raise exception.Invalid(ex.get_description())"},{"line_number":388,"context_line":"        except Exception as ex:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8S4%3D","line":385,"updated":"2012-12-19 18:26:03.000000000","message":"ex never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":426,"context_line":"                        \u0027readOnly\u0027: False}"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"            client.createSnapshot(vol_name, snap_name, optional)"},{"line_number":429,"context_line":"        except hpexceptions.HTTPForbidden as ex:"},{"line_number":430,"context_line":"            raise exception.NotAuthorized()"},{"line_number":431,"context_line":"        except hpexceptions.HTTPNotFound as ex:"},{"line_number":432,"context_line":"            raise exception.NotFound()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8Ss%3D","line":429,"updated":"2012-12-19 18:26:03.000000000","message":"ex never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":428,"context_line":"            client.createSnapshot(vol_name, snap_name, optional)"},{"line_number":429,"context_line":"        except hpexceptions.HTTPForbidden as ex:"},{"line_number":430,"context_line":"            raise exception.NotAuthorized()"},{"line_number":431,"context_line":"        except hpexceptions.HTTPNotFound as ex:"},{"line_number":432,"context_line":"            raise exception.NotFound()"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    @lockutils.synchronized(\u00273par\u0027, \u0027cinder-\u0027, True)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8So%3D","line":431,"updated":"2012-12-19 18:26:03.000000000","message":"ex never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                optional[\u0027retentionHours\u0027] \u003d FLAGS.hp3par_snapshot_retention"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"            client.createSnapshot(snap_name, vol_name, optional)"},{"line_number":456,"context_line":"        except hpexceptions.HTTPForbidden as ex:"},{"line_number":457,"context_line":"            raise exception.NotAuthorized()"},{"line_number":458,"context_line":"        except hpexceptions.HTTPNotFound as ex:"},{"line_number":459,"context_line":"            raise exception.NotFound()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8Sk%3D","line":456,"updated":"2012-12-19 18:26:03.000000000","message":"ex never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":455,"context_line":"            client.createSnapshot(snap_name, vol_name, optional)"},{"line_number":456,"context_line":"        except hpexceptions.HTTPForbidden as ex:"},{"line_number":457,"context_line":"            raise exception.NotAuthorized()"},{"line_number":458,"context_line":"        except hpexceptions.HTTPNotFound as ex:"},{"line_number":459,"context_line":"            raise exception.NotFound()"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    @lockutils.synchronized(\u00273par\u0027, \u0027cinder-\u0027, True)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8Sg%3D","line":458,"updated":"2012-12-19 18:26:03.000000000","message":"ex never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":466,"context_line":"        try:"},{"line_number":467,"context_line":"            snap_name \u003d self._get_3par_snap_name(snapshot.name)"},{"line_number":468,"context_line":"            client.deleteVolume(snap_name)"},{"line_number":469,"context_line":"        except hpexceptions.HTTPForbidden as ex:"},{"line_number":470,"context_line":"            raise exception.NotAuthorized()"},{"line_number":471,"context_line":"        except hpexceptions.HTTPNotFound as ex:"},{"line_number":472,"context_line":"            raise exception.NotFound()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8Sc%3D","line":469,"updated":"2012-12-19 18:26:03.000000000","message":"ex never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":468,"context_line":"            client.deleteVolume(snap_name)"},{"line_number":469,"context_line":"        except hpexceptions.HTTPForbidden as ex:"},{"line_number":470,"context_line":"            raise exception.NotAuthorized()"},{"line_number":471,"context_line":"        except hpexceptions.HTTPNotFound as ex:"},{"line_number":472,"context_line":"            raise exception.NotFound()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8SU%3D","line":471,"updated":"2012-12-19 18:26:03.000000000","message":"ex never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"96af813f71433b9f9818ef83226309163a0f50b4","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                                                 check_exit_code\u003dcheck_exit)"},{"line_number":226,"context_line":"                    except Exception as e:"},{"line_number":227,"context_line":"                        LOG.error(e)"},{"line_number":228,"context_line":"                        greenthread.sleep(random.randint(20, 500) / 100.0)"},{"line_number":229,"context_line":"                raise paramiko.SSHException(_(\"SSH Command failed after \""},{"line_number":230,"context_line":"                                              \"\u0027%(total_attempts)r\u0027 attempts\""},{"line_number":231,"context_line":"                                              \": \u0027%(command)s\u0027\"), locals())"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F7H8%3D","line":228,"updated":"2012-12-20 17:28:03.000000000","message":"You\u0027ve imported randint, so no need for random.randint.","commit_id":"dc414803ec5a871119998198d9cdb5606407a4fc"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"00bcff9a427e26e2aa22cb1d4f754c165f9cf716","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"hp3par_opts \u003d ["},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027hp3par_api_url\u0027,"},{"line_number":47,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":48,"context_line":"               help\u003d\"3PAR WSAPI Server Url like \""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F5as%3D","line":45,"updated":"2012-12-23 08:49:06.000000000","message":"As I mentioned in my previous review, there are already generic config options for many of these - why add new ones?  For example: hp3par_api_uri -\u003e san_ip (may be a stretch) ; hp3par_username -\u003e san_login ; hp3par_password -\u003e san_password ; hp3par_debug -\u003e debug (if Cinder debug is enabled, turn on yours as well)","commit_id":"19c7da492402fda4c75afbb4e5a2ae147d24244d"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d25dc9beec2cd8c3cb56e60156fc8358bd2f5315","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"hp3par_opts \u003d ["},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027hp3par_api_url\u0027,"},{"line_number":47,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":48,"context_line":"               help\u003d\"3PAR WSAPI Server Url like \""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F4kU%3D","line":45,"in_reply_to":"AAAAM3%2F%2F5as%3D","updated":"2013-01-02 17:56:13.000000000","message":"The san_* entries are different.   They are for ssh connections.  The hp3par_* are for the HTTP Connections and can and most likely are very different values.   The debug option is only for the rest client and I don\u0027t necessarily want this on when cinder debugging is on.","commit_id":"19c7da492402fda4c75afbb4e5a2ae147d24244d"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"aa64fcdfca5d91b524a25db44e09b9a9be58b8cc","unresolved":false,"context_lines":[{"line_number":233,"context_line":"            LOG.error(_(\"Error running ssh command: %s\") % command)"},{"line_number":234,"context_line":"            raise e"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def _delete_3par_host(self, hostname):"},{"line_number":237,"context_line":"        res \u003d self._cli_run(\u0027removehost %s\u0027 % hostname, None)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def _create_3par_vlun(self, volume, hostname):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F5Pg%3D","line":236,"updated":"2012-12-24 03:21:22.000000000","message":"res never used","commit_id":"19c7da492402fda4c75afbb4e5a2ae147d24244d"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d25dc9beec2cd8c3cb56e60156fc8358bd2f5315","unresolved":false,"context_lines":[{"line_number":233,"context_line":"            LOG.error(_(\"Error running ssh command: %s\") % command)"},{"line_number":234,"context_line":"            raise e"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def _delete_3par_host(self, hostname):"},{"line_number":237,"context_line":"        res \u003d self._cli_run(\u0027removehost %s\u0027 % hostname, None)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def _create_3par_vlun(self, volume, hostname):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F4kQ%3D","line":236,"in_reply_to":"AAAAM3%2F%2F5Pg%3D","updated":"2013-01-02 17:56:13.000000000","message":"This is used in delete_vlun","commit_id":"19c7da492402fda4c75afbb4e5a2ae147d24244d"}],"cinder/volume/drivers/san/hp/hp_3par_iscsi.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":22,"context_line":"This driver requires 3.1.2 firmware on"},{"line_number":23,"context_line":"the 3Par array"},{"line_number":24,"context_line":"\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from cinder import exception"},{"line_number":27,"context_line":"from cinder import flags"},{"line_number":28,"context_line":"from cinder.openstack.common import lockutils"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8U0%3D","line":25,"updated":"2012-12-19 18:26:03.000000000","message":"import order not complaint with hacking: https://github.com/openstack/cinder/blob/master/HACKING.rst","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fe05319d6500aa33d0465f43bc63e0d4f4978219","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        # get the target_iqn on the 3par interface."},{"line_number":152,"context_line":"        target_iqn \u003d self._iscsi_discover_target_iqn(FLAGS.iscsi_ip_address)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        # we have to make sure we have a host"},{"line_number":155,"context_line":"        host \u003d self._create_host(volume, connector)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8xk%3D","line":152,"updated":"2012-12-19 10:55:15.000000000","message":"Running iscsiadm from the cinder node seems wrong.  Can\u0027t you get the target_iqn via the 3PAR management API?  Does this have to do with the comment above about needing a valid iSCSI session?","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fe05319d6500aa33d0465f43bc63e0d4f4978219","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        \"\"\""},{"line_number":173,"context_line":"        Driver entry point to unattach a volume from an instance."},{"line_number":174,"context_line":"        \"\"\""},{"line_number":175,"context_line":"        self.common.delete_vlun(volume, connector, self.client)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def _iscsi_discover_target_iqn(self, remote_ip):"},{"line_number":178,"context_line":"        (out, _err) \u003d self._execute(\u0027iscsiadm\u0027, \u0027-m\u0027, \u0027discovery\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8xM%3D","line":175,"updated":"2012-12-19 10:55:15.000000000","message":"Do you want to delete the host if it is no longer used?","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def _create_3par_iscsi_host(self, hostname, iscsi_iqn, domain):"},{"line_number":186,"context_line":"        cmd \u003d \u0027createhost -iscsi -persona 1 -domain %s %s %s\u0027 % \\"},{"line_number":187,"context_line":"              (domain, hostname, iscsi_iqn)"},{"line_number":188,"context_line":"        out \u003d self.common._cli_run(cmd, None)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def _modify_3par_iscsi_host(self, hostname, iscsi_iqn):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8SE%3D","line":187,"updated":"2012-12-19 18:26:03.000000000","message":"out never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    def _modify_3par_iscsi_host(self, hostname, iscsi_iqn):"},{"line_number":191,"context_line":"        # when using -add, you can not send the persona or domain options"},{"line_number":192,"context_line":"        out \u003d self.common._cli_run(\u0027createhost -iscsi -add %s %s\u0027"},{"line_number":193,"context_line":"                                   % (hostname, iscsi_iqn), None)"},{"line_number":194,"context_line":"        LOG.debug(\"OUTPUT \u003d \\n%s\" % (pprint.pformat(out)))"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def _create_host(self, volume, connector):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8Ro%3D","line":193,"updated":"2012-12-19 18:26:03.000000000","message":"pprint is never installed.","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7b7745b36bda6bb17fef4ffe2afbce20918fb705","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    def _modify_3par_iscsi_host(self, hostname, iscsi_iqn):"},{"line_number":191,"context_line":"        # when using -add, you can not send the persona or domain options"},{"line_number":192,"context_line":"        out \u003d self.common._cli_run(\u0027createhost -iscsi -add %s %s\u0027"},{"line_number":193,"context_line":"                                   % (hostname, iscsi_iqn), None)"},{"line_number":194,"context_line":"        LOG.debug(\"OUTPUT \u003d \\n%s\" % (pprint.pformat(out)))"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def _create_host(self, volume, connector):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8Oo%3D","line":193,"in_reply_to":"AAAAM3%2F%2F8Ro%3D","updated":"2012-12-19 18:52:35.000000000","message":"Disregard, being silly. duh stdlib","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            if not host[\u0027iSCSIPaths\u0027]:"},{"line_number":207,"context_line":"                self._modify_3par_iscsi_host(hostname, connector[\u0027initiator\u0027])"},{"line_number":208,"context_line":"                host \u003d self.common._get_3par_host(hostname)"},{"line_number":209,"context_line":"        except hpexceptions.HTTPNotFound as ex:"},{"line_number":210,"context_line":"            # host doesn\u0027t exist, we have to create it"},{"line_number":211,"context_line":"            self._create_3par_iscsi_host(hostname, connector[\u0027initiator\u0027],"},{"line_number":212,"context_line":"                                         FLAGS.hp3par_domain)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2F8RY%3D","line":209,"updated":"2012-12-19 18:26:03.000000000","message":"ex never used","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"96af813f71433b9f9818ef83226309163a0f50b4","unresolved":false,"context_lines":[{"line_number":142,"context_line":"          * Get the 3PAR iSCSI iqn"},{"line_number":143,"context_line":"          * Create a host on the 3par"},{"line_number":144,"context_line":"          * create vlun on the 3par"},{"line_number":145,"context_line":"        \"\"\""},{"line_number":146,"context_line":"        # get the target_iqn on the 3par interface."},{"line_number":147,"context_line":"        target_iqn \u003d self._iscsi_discover_target_iqn(FLAGS.iscsi_ip_address)"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F7Fs%3D","line":145,"updated":"2012-12-20 17:28:03.000000000","message":"Just a thought...  If you don\u0027t have the capability to get this from the 3par system and have to do the scan, you could always just use _do_iscsi_discovery from the base Driver class maybe?","commit_id":"dc414803ec5a871119998198d9cdb5606407a4fc"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"96af813f71433b9f9818ef83226309163a0f50b4","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        Driver entry point to unattach a volume from an instance."},{"line_number":169,"context_line":"        \"\"\""},{"line_number":170,"context_line":"        self.common.delete_vlun(volume, connector, self.client)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _iscsi_discover_target_iqn(self, remote_ip):"},{"line_number":173,"context_line":"        (out, _err) \u003d self._execute(\u0027iscsiadm\u0027, \u0027-m\u0027, \u0027discovery\u0027,"},{"line_number":174,"context_line":"                                    \u0027-t\u0027, \u0027sendtargets\u0027, \u0027-p\u0027, remote_ip,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F7FY%3D","line":171,"updated":"2012-12-20 17:28:03.000000000","message":"There\u0027s a number of things here I think you could inherit to make your life a bit easier but I\u0027ll leave that up to you.  \n\nI\u0027m not crazy about this method of discovery (queries on the system to build iqn etc)  but if it\u0027s the only option available then so be it.  :)","commit_id":"dc414803ec5a871119998198d9cdb5606407a4fc"}],"etc/cinder/cinder.conf.sample":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fe05319d6500aa33d0465f43bc63e0d4f4978219","unresolved":false,"context_lines":[{"line_number":824,"context_line":""},{"line_number":825,"context_line":"######## defined in cinder.volume.drivers.san.hp.hp_3par_common ########"},{"line_number":826,"context_line":""},{"line_number":827,"context_line":"# hp3par_api_url\u003d\u003cNone\u003e"},{"line_number":828,"context_line":"#### (StrOpt)  3PAR WSAPI Server Url like https://\u003c3par ip\u003e:8080/api/v1"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"# hp3par_username\u003d\u003cNone\u003e"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAAM3%2F%2F8x8%3D","line":827,"updated":"2012-12-19 10:55:15.000000000","message":"Rather than adding so many new options, why not use existing ones?  For example:\nhp3par_api_uri -\u003e san_ip (may be a stretch) ; \nhp3par_username -\u003e san_login ; \nhp3par_password -\u003e san_password ; \nhp3par_debug -\u003e debug (if Cinder debug is enabled, turn on yours as well)","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"}],"tools/test-requires":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fe05319d6500aa33d0465f43bc63e0d4f4978219","unresolved":false,"context_lines":[{"line_number":11,"context_line":"pylint\u003d\u003d0.25.2"},{"line_number":12,"context_line":"sphinx\u003e\u003d1.1.2"},{"line_number":13,"context_line":"MySQL-python"},{"line_number":14,"context_line":"hp3parclient\u003e\u003d1.0.0"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAAM3%2F%2F8x4%3D","line":14,"updated":"2012-12-19 10:55:15.000000000","message":"Most will test using the fake client - is it necessary that everyone will install this?","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5ee2ac796312b698a46bd476b35fc513cfd963cb","unresolved":false,"context_lines":[{"line_number":11,"context_line":"pylint\u003d\u003d0.25.2"},{"line_number":12,"context_line":"sphinx\u003e\u003d1.1.2"},{"line_number":13,"context_line":"MySQL-python"},{"line_number":14,"context_line":"hp3parclient\u003e\u003d1.0.0"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAAM3%2F%2F8Uo%3D","line":14,"in_reply_to":"AAAAM3%2F%2F8x4%3D","updated":"2012-12-19 18:26:03.000000000","message":"After today\u0027s meeting I feel this is a lot more doable in dev env. However, it should be up to vendor to make the experience of deployment easy for the user outside of cinder as the rest of us are doing.","commit_id":"95f9705ca0e7de53e2a5801058b0ef62de79bb68"}]}
