)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"e48fb00d7f9396b407cba0fff0b334431e99d24c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"and implements required set of features for OpenStack Icehouse release,"},{"line_number":11,"context_line":"using the features of these storage products. It allows IBM® SONAS®"},{"line_number":12,"context_line":"and Storwize® V7000 Unified filers to host storage for OpenStack"},{"line_number":13,"context_line":"environment by integrating with Openstack Cinder service."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I0d630bf7e69454b88e9d1e93b4099631f6138204"},{"line_number":16,"context_line":"Implements: blueprint ibm-nas-volume-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"AAAAUH%2F%2BXKo%3D","line":13,"updated":"2014-01-27 18:18:36.000000000","message":"Since you are adding config options we need to have a \u0027DocImpact\u0027 note in here.","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"eeccc0dd82d734812c3d80cce0cf966d1e394f96","unresolved":false,"context_lines":[{"line_number":15,"context_line":"DocImpact"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I0d630bf7e69454b88e9d1e93b4099631f6138204"},{"line_number":18,"context_line":"Implements: blueprint ibm-nas-volume-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"AAAAUX%2F%2BfmM%3D","line":18,"updated":"2014-02-20 21:34:12.000000000","message":"Can you file a bug and add the driver certification results to the defect and add a\n\nRelated-Bug: #\u003cbug id\u003e","commit_id":"0640cb91c1f4eb4965ceae4ced8e2589e4765177"}],"cinder/tests/test_ibmnas.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f0968e851470fc3c8fc40b745997229b74c4c162","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 IBM Corp. All Rights Reserved"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Ft2E%3D","line":1,"updated":"2014-01-09 09:16:56.000000000","message":"Should not have \u0027All Rights Reserved\u0027","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"b7d72a6e55addcba6623a6266dc5a70f82e8897b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 IBM Corp. All Rights Reserved"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Ftu0%3D","line":1,"in_reply_to":"AAAAUH%2F%2Ft2E%3D","updated":"2014-01-09 10:18:00.000000000","message":"Done","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"cbffef905d5804984b37bdfbdab480eedbb6dff5","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        snapshot.name \u003d \u0027snapshot-123\u0027"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        mock.drv.create_snapshot.return_value \u003d None"},{"line_number":284,"context_line":"        self.assertEqual(None, mock.drv.create_snapshot(snapshot))"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def test_delete_snapshot(self):"},{"line_number":287,"context_line":"        \"\"\"delete snapshot simple test case.\"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BWsU%3D","line":284,"updated":"2014-01-27 19:05:48.000000000","message":"I\u0027m not convinced this test is doing anything... it seems that you can modify the above volume and snapshot dicts, or code in the real create_snapshot, and this will not fail.  (For example, stick a raise at the beginning of create_snapshot() in ibmnas.py.)\n\nAm I missing something here?","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"1267418c4c2ef9b3f2eb43d3d87f0c542e6a215e","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        snapshot.name \u003d \u0027snapshot-123\u0027"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        mock.drv.create_snapshot.return_value \u003d None"},{"line_number":284,"context_line":"        self.assertEqual(None, mock.drv.create_snapshot(snapshot))"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def test_delete_snapshot(self):"},{"line_number":287,"context_line":"        \"\"\"delete snapshot simple test case.\"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BKkc%3D","line":284,"in_reply_to":"AAAAUH%2F%2BWsU%3D","updated":"2014-01-29 15:01:05.000000000","message":"Updated this and some of the other tests accordingly.","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0aafb9f1de0971e11aa187b3cd11a78d4b8e15f7","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    def test_get_provider_location(self):"},{"line_number":117,"context_line":"        \"\"\"check provider location for given volume id.\"\"\""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        drv \u003d self._driver"},{"line_number":120,"context_line":"        mock \u003d self._mock"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        volume \u003d FakeEnv()"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAU3%2F%2F4fY%3D","line":119,"updated":"2014-02-24 10:01:37.000000000","message":"drv is never used.","commit_id":"ab2f60a08f3adb87472bef44e876675ec56b9048"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0aafb9f1de0971e11aa187b3cd11a78d4b8e15f7","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    def test_get_export_path(self):"},{"line_number":130,"context_line":"        \"\"\"check export path for the given volume.\"\"\""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        drv \u003d self._driver"},{"line_number":133,"context_line":"        mock \u003d self._mock"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        volume \u003d FakeEnv()"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAU3%2F%2F4fU%3D","line":132,"updated":"2014-02-24 10:01:37.000000000","message":"drv is never used.","commit_id":"ab2f60a08f3adb87472bef44e876675ec56b9048"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0aafb9f1de0971e11aa187b3cd11a78d4b8e15f7","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        self.assertEqual(True, mock.drv._run_ssh()."},{"line_number":153,"context_line":"                         drv._execute()."},{"line_number":154,"context_line":"                         drv._create_ibmnas_snap(self.TEST_VOLUME_PATH,"},{"line_number":155,"context_line":"                         self.TEST_SNAP_PATH,"},{"line_number":156,"context_line":"                         self.TEST_MNT_POINT))"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def test_create_ibmnas_snap_no_mount_point_provided(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAU3%2F%2F4fM%3D","line":155,"updated":"2014-02-24 10:01:37.000000000","message":"under-indented","commit_id":"ab2f60a08f3adb87472bef44e876675ec56b9048"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0aafb9f1de0971e11aa187b3cd11a78d4b8e15f7","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        self.assertEqual(None, mock.drv._run_ssh()."},{"line_number":168,"context_line":"                         drv._execute()."},{"line_number":169,"context_line":"                         drv._create_ibmnas_snap(self.TEST_VOLUME_PATH,"},{"line_number":170,"context_line":"                         self.TEST_SNAP_PATH,"},{"line_number":171,"context_line":"                         None))"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_create_ibmnas_copy(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAU3%2F%2F4fA%3D","line":170,"updated":"2014-02-24 10:01:37.000000000","message":"under-indented","commit_id":"ab2f60a08f3adb87472bef44e876675ec56b9048"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"d606d31577cba817c26c024cfbd72368bc281d00","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Tests for the IBM NAS family (SONAS, Storwize V7000 Unified)."},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from mock import Mock"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from oslo.config import cfg"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAU3%2F%2F4WM%3D","line":23,"updated":"2014-02-24 10:40:37.000000000","message":"Mock is a class. Imports should just be modules.","commit_id":"2cd99f85d26c2253369f5f612fb97517267ab471"}],"cinder/volume/drivers/ibm/ibmnas.py":[{"author":{"_account_id":7689,"name":"Bill Owen","email":"billowen@us.ibm.com","username":"billowen"},"change_message_id":"28d554c88dbab3b512e9786fe9fbf026b5bf92d3","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    \"\"\""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    driver_volume_type \u003d \u0027nfs\u0027"},{"line_number":59,"context_line":"    volume_backend_name \u003d \u0027IBMNAS_NFS\u0027"},{"line_number":60,"context_line":"    VERSION \u003d VERSION"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def __init__(self, execute\u003dutils.execute, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F9n6s%3D","line":59,"updated":"2014-02-05 15:38:25.000000000","message":"Is this used anywhere?","commit_id":"f9db792834e67094d253d554bc1e68d5f7dae94b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"15409eafc59843dbd172a278ebcde19154888232","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    \"\"\""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    driver_volume_type \u003d \u0027nfs\u0027"},{"line_number":59,"context_line":"    volume_backend_name \u003d \u0027IBMNAS_NFS\u0027"},{"line_number":60,"context_line":"    VERSION \u003d VERSION"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def __init__(self, execute\u003dutils.execute, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F9kTw%3D","line":59,"updated":"2014-02-06 00:35:35.000000000","message":"It doesn\u0027t look like it is used.  I am thinking they intended to use it at line 114.","commit_id":"f9db792834e67094d253d554bc1e68d5f7dae94b"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"5e4e14993ee16a66649e2c5d14157694c06ae617","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUX%2F%2B7DQ%3D","line":1,"updated":"2014-02-18 07:38:20.000000000","message":"2014","commit_id":"341078f7be9416bff9e9fb1b63ef907597a4467a"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"5e4e14993ee16a66649e2c5d14157694c06ae617","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# Authors:"},{"line_number":15,"context_line":"#   Nilesh Bhosale \u003cnilesh.bhosale@in.ibm.com\u003e"},{"line_number":16,"context_line":"#   Sasikanth Eda \u003csasikanth.eda@in.ibm.com\u003e"},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":"IBM NAS Volume Driver."},{"line_number":19,"context_line":"Currently, it supports the following IBM Storage Systems:"},{"line_number":20,"context_line":"1. IBM Scale Out NAS (SONAS)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUX%2F%2B7C4%3D","line":17,"updated":"2014-02-18 07:38:20.000000000","message":"an empty line would help readability","commit_id":"341078f7be9416bff9e9fb1b63ef907597a4467a"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"5e4e14993ee16a66649e2c5d14157694c06ae617","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            raise exception.InvalidInput("},{"line_number":91,"context_line":"                reason\u003d_(\u0027Password or SSH private key is required for \u0027"},{"line_number":92,"context_line":"                         \u0027authentication: set either nas_password or \u0027"},{"line_number":93,"context_line":"                         \u0027nas_private_key option\u0027))"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def _get_provider_location(self, volume_id):"},{"line_number":96,"context_line":"        \"\"\"Returns provider location for given volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUX%2F%2B7Aw%3D","line":93,"updated":"2014-02-18 07:38:20.000000000","message":"Ending in a dot would improve readability","commit_id":"341078f7be9416bff9e9fb1b63ef907597a4467a"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"5e4e14993ee16a66649e2c5d14157694c06ae617","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def _get_provider_location(self, volume_id):"},{"line_number":96,"context_line":"        \"\"\"Returns provider location for given volume.\"\"\""},{"line_number":97,"context_line":"        LOG.debug(_(\"Enter _get_provider_location: volume_id %s\") % volume_id)"},{"line_number":98,"context_line":"        volume \u003d self.db.volume_get(self._context, volume_id)"},{"line_number":99,"context_line":"        LOG.debug(\"Exit _get_provider_location\")"},{"line_number":100,"context_line":"        return volume[\u0027provider_location\u0027]"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUX%2F%2B6%2FQ%3D","line":97,"updated":"2014-02-18 07:38:20.000000000","message":"No need for internationalizing debug logs now. Also, two debug logs in a method which makes a single db call is slightly superfluous IMO","commit_id":"341078f7be9416bff9e9fb1b63ef907597a4467a"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"5e4e14993ee16a66649e2c5d14157694c06ae617","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _get_export_path(self, volume_id):"},{"line_number":103,"context_line":"        \"\"\"Returns NFS export path for the given volume.\"\"\""},{"line_number":104,"context_line":"        LOG.debug(_(\"Enter _get_export_path: volume_id %s\") % volume_id)"},{"line_number":105,"context_line":"        return self._get_provider_location(volume_id).split(\u0027:\u0027)[1]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def _update_volume_stats(self):"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUX%2F%2B6%2B0%3D","line":104,"updated":"2014-02-18 07:38:20.000000000","message":"Forgot to remove this log msg?","commit_id":"341078f7be9416bff9e9fb1b63ef907597a4467a"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"71009fcd154b4e5df29aae8e22e421a676a232ad","unresolved":false,"context_lines":[{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":5,"context_line":"#    a copy of the License at"},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":8,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAU3%2F%2F4D0%3D","line":5,"updated":"2014-02-24 10:56:38.000000000","message":"mount_path is None when this method is called by create_volume_from_snapshot()","commit_id":"ab2f60a08f3adb87472bef44e876675ec56b9048"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0aafb9f1de0971e11aa187b3cd11a78d4b8e15f7","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        \"\"\"Create volume clones and snapshots.\"\"\""},{"line_number":136,"context_line":"        LOG.debug(_(\"Enter _create_ibmnas_snap: src %(src)s, dest %(dest)s\")"},{"line_number":137,"context_line":"                  % {\u0027src\u0027: str(src), \u0027dest\u0027: str(dest)})"},{"line_number":138,"context_line":"        if mount_path !\u003d None:"},{"line_number":139,"context_line":"            tmp_file_path \u003d dest + \u0027.snap\u0027"},{"line_number":140,"context_line":"            ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, dest, \u0027-s\u0027, src, \u0027-t\u0027, tmp_file_path]"},{"line_number":141,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAU3%2F%2F4j4%3D","line":138,"updated":"2014-02-24 10:01:37.000000000","message":"mount_path is not None","commit_id":"ab2f60a08f3adb87472bef44e876675ec56b9048"},{"author":{"_account_id":6094,"name":"Navneet Singh","email":"navsinghnitd@gmail.com","username":"singn"},"change_message_id":"f214188d79484a2cbac5b36f3330ffecb6bdf4ea","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAU3%2F%2Fpeo%3D","line":1,"updated":"2014-02-25 13:43:02.000000000","message":"Is the copyright year correct?","commit_id":"2e323ba7b154c6bdb76a4c018e99004dabcb8420"},{"author":{"_account_id":6094,"name":"Navneet Singh","email":"navsinghnitd@gmail.com","username":"singn"},"change_message_id":"f214188d79484a2cbac5b36f3330ffecb6bdf4ea","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                         \u0027authentication: set either nas_password or \u0027"},{"line_number":93,"context_line":"                         \u0027nas_private_key option\u0027))"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def _get_provider_location(self, volume_id):"},{"line_number":96,"context_line":"        \"\"\"Returns provider location for given volume.\"\"\""},{"line_number":97,"context_line":"        LOG.debug(_(\"Enter _get_provider_location: volume_id %s\") % volume_id)"},{"line_number":98,"context_line":"        volume \u003d self.db.volume_get(self._context, volume_id)"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAU3%2F%2Fpe0%3D","line":95,"updated":"2014-02-25 13:43:02.000000000","message":"Same as below.","commit_id":"2e323ba7b154c6bdb76a4c018e99004dabcb8420"},{"author":{"_account_id":6094,"name":"Navneet Singh","email":"navsinghnitd@gmail.com","username":"singn"},"change_message_id":"f214188d79484a2cbac5b36f3330ffecb6bdf4ea","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        LOG.debug(\"Exit _get_provider_location\")"},{"line_number":100,"context_line":"        return volume[\u0027provider_location\u0027]"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _get_export_path(self, volume_id):"},{"line_number":103,"context_line":"        \"\"\"Returns NFS export path for the given volume.\"\"\""},{"line_number":104,"context_line":"        LOG.debug(_(\"Enter _get_export_path: volume_id %s\") % volume_id)"},{"line_number":105,"context_line":"        return self._get_provider_location(volume_id).split(\u0027:\u0027)[1]"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAU3%2F%2FpfM%3D","line":102,"updated":"2014-02-25 13:43:02.000000000","message":"This method seems common to netapp.NfsDriver. The right thing to do would be to get the common methods in the nfs.NfsDriver and inherit it.","commit_id":"2e323ba7b154c6bdb76a4c018e99004dabcb8420"},{"author":{"_account_id":6094,"name":"Navneet Singh","email":"navsinghnitd@gmail.com","username":"singn"},"change_message_id":"f214188d79484a2cbac5b36f3330ffecb6bdf4ea","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                     \u0027skipping.\u0027), volume[\u0027name\u0027])"},{"line_number":246,"context_line":"            return"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        export_path \u003d self._get_export_path(volume[\u0027id\u0027])"},{"line_number":249,"context_line":"        volume_name \u003d volume[\u0027name\u0027]"},{"line_number":250,"context_line":"        volume_path \u003d os.path.join(export_path, volume_name)"},{"line_number":251,"context_line":"        mount_point \u003d os.path.dirname(self.local_path(volume))"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAU3%2F%2Fpis%3D","line":248,"updated":"2014-02-25 13:43:02.000000000","message":"Why do we need a db call here, we already have volume instance?","commit_id":"2e323ba7b154c6bdb76a4c018e99004dabcb8420"}],"cinder/volume/drivers/ibmnas.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"83a8ed3ced9deeb533f9e67c61cfb07becf58d29","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright IBM Corp. 2013 All Rights Reserved"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F4BU%3D","line":1,"updated":"2013-12-28 19:33:38.000000000","message":"Please remove this line","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"691c09774a029b0d0e33854230380e9c46058e79","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright IBM Corp. 2013 All Rights Reserved"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F2p8%3D","line":1,"in_reply_to":"AAAAT3%2F%2F4BU%3D","updated":"2014-01-01 11:19:16.000000000","message":"All the drivers have this as the first line. Does this get inserted automatically after the commit? I have removed it anyway as per your suggestion.","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"83a8ed3ced9deeb533f9e67c61cfb07becf58d29","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright IBM Corp. 2013 All Rights Reserved"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F4BM%3D","line":3,"updated":"2013-12-28 19:33:38.000000000","message":"should be:\n\nCopyright 2013 IBM Corp.","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"691c09774a029b0d0e33854230380e9c46058e79","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright IBM Corp. 2013 All Rights Reserved"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FzLg%3D","line":3,"in_reply_to":"AAAAT3%2F%2F4BM%3D","updated":"2014-01-01 11:19:16.000000000","message":"Done","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"83a8ed3ced9deeb533f9e67c61cfb07becf58d29","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright IBM Corp. 2013 All Rights Reserved"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":8,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F4BI%3D","line":5,"updated":"2013-12-28 19:33:38.000000000","message":"Remove this line","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"691c09774a029b0d0e33854230380e9c46058e79","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright IBM Corp. 2013 All Rights Reserved"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":8,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FzLk%3D","line":5,"in_reply_to":"AAAAT3%2F%2F4BI%3D","updated":"2014-01-01 11:19:16.000000000","message":"Done","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"83a8ed3ced9deeb533f9e67c61cfb07becf58d29","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"ibmnas_opts \u003d ["},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027nas_ip\u0027,"},{"line_number":54,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":55,"context_line":"               help\u003d\u0027IP address of IBM NAS System\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F4Ag%3D","line":52,"updated":"2013-12-28 19:33:38.000000000","message":"These config options are generic, but included in your driver.  Maybe move to nfs.py?","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"691c09774a029b0d0e33854230380e9c46058e79","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"ibmnas_opts \u003d ["},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027nas_ip\u0027,"},{"line_number":54,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":55,"context_line":"               help\u003d\u0027IP address of IBM NAS System\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F2pQ%3D","line":52,"in_reply_to":"AAAAT3%2F%2F4Ag%3D","updated":"2014-01-01 11:19:16.000000000","message":"I agree, but currently this is not used in nfs driver, it does not ssh to the NAS appliance to perform any operation. It might look forced there, hence not addressing this comment at the moment, let me know if you still think otherwise.","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"83a8ed3ced9deeb533f9e67c61cfb07becf58d29","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        self.configuration.san_ssh_port \u003d self.configuration.nas_ssh_port"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def set_execute(self, execute):"},{"line_number":95,"context_line":"        self._execute \u003d utils.execute"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def do_setup(self, context):"},{"line_number":98,"context_line":"        \"\"\"Any initialization, the volume driver does while starting.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F4AA%3D","line":95,"updated":"2013-12-28 19:33:38.000000000","message":"Not necessary - you get the same value from inheritance, don\u0027t you?","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"691c09774a029b0d0e33854230380e9c46058e79","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        self.configuration.san_ssh_port \u003d self.configuration.nas_ssh_port"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def set_execute(self, execute):"},{"line_number":95,"context_line":"        self._execute \u003d utils.execute"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def do_setup(self, context):"},{"line_number":98,"context_line":"        \"\"\"Any initialization, the volume driver does while starting.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F2fk%3D","line":95,"in_reply_to":"AAAAT3%2F%2F4AA%3D","updated":"2014-01-01 11:19:16.000000000","message":"The NFS Driver uses execute from cinder.openstack.common-\u003eprocessutils, whereas I need to use it from utils. Hence, this is intentional override. The IBM NAS driver fails to start if I remove this code.","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"83a8ed3ced9deeb533f9e67c61cfb07becf58d29","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    def _get_provider_location(self, volume_id):"},{"line_number":121,"context_line":"        \"\"\"Returns provider location for given volume.\"\"\""},{"line_number":122,"context_line":"        volume \u003d self.db.volume_get(self._context, volume_id)"},{"line_number":123,"context_line":"        return volume.provider_location"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def _get_export_path(self, volume_id):"},{"line_number":126,"context_line":"        \"\"\"Returns NFS export path for the given volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3%2F8%3D","line":123,"updated":"2013-12-28 19:33:38.000000000","message":"volume[\u0027provider_location\u0027]","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"691c09774a029b0d0e33854230380e9c46058e79","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    def _get_provider_location(self, volume_id):"},{"line_number":121,"context_line":"        \"\"\"Returns provider location for given volume.\"\"\""},{"line_number":122,"context_line":"        volume \u003d self.db.volume_get(self._context, volume_id)"},{"line_number":123,"context_line":"        return volume.provider_location"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def _get_export_path(self, volume_id):"},{"line_number":126,"context_line":"        \"\"\"Returns NFS export path for the given volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FzLo%3D","line":123,"in_reply_to":"AAAAT3%2F%2F3%2F8%3D","updated":"2014-01-01 11:19:16.000000000","message":"Done","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"19030a6966042142c26e16eaeffe9303b1179810","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        return self._get_provider_location(volume_id).split(\u0027:\u0027)[1]"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _create_ibmnas_snap(self, src, dest, mount_path):"},{"line_number":130,"context_line":"        \"\"\"Create volume clones and snapshots using IBM NAS Storage system"},{"line_number":131,"context_line":"        functionalities."},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        if mount_path !\u003d None:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3qA%3D","line":130,"updated":"2013-12-29 08:39:04.000000000","message":"Docstring should be one line or multiline - see \u0027docstrings\u0027 section here: http://docs.openstack.org/developer/hacking/","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"691c09774a029b0d0e33854230380e9c46058e79","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        return self._get_provider_location(volume_id).split(\u0027:\u0027)[1]"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _create_ibmnas_snap(self, src, dest, mount_path):"},{"line_number":130,"context_line":"        \"\"\"Create volume clones and snapshots using IBM NAS Storage system"},{"line_number":131,"context_line":"        functionalities."},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        if mount_path !\u003d None:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FzLs%3D","line":130,"in_reply_to":"AAAAT3%2F%2F3qA%3D","updated":"2014-01-01 11:19:16.000000000","message":"Done","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"19030a6966042142c26e16eaeffe9303b1179810","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        if mount_path !\u003d None:"},{"line_number":134,"context_line":"            tmp_file_path \u003d dest + \u0027.snap\u0027"},{"line_number":135,"context_line":"            ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, dest, \u0027-s\u0027, src, \u0027-t\u0027, tmp_file_path]"},{"line_number":136,"context_line":"            raw \u003d self._run_ssh(ssh_cmd)"},{"line_number":137,"context_line":"            #Now remove the tmp file"},{"line_number":138,"context_line":"            tmp_file_local_path \u003d os.path.join(mount_path,"},{"line_number":139,"context_line":"                                               os.path.basename(tmp_file_path))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3qc%3D","line":136,"updated":"2013-12-29 08:39:04.000000000","message":"\u0027raw\u0027 is not used\n\nalso, try/except?  check for success?  handle failures?","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"691c09774a029b0d0e33854230380e9c46058e79","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        if mount_path !\u003d None:"},{"line_number":134,"context_line":"            tmp_file_path \u003d dest + \u0027.snap\u0027"},{"line_number":135,"context_line":"            ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, dest, \u0027-s\u0027, src, \u0027-t\u0027, tmp_file_path]"},{"line_number":136,"context_line":"            raw \u003d self._run_ssh(ssh_cmd)"},{"line_number":137,"context_line":"            #Now remove the tmp file"},{"line_number":138,"context_line":"            tmp_file_local_path \u003d os.path.join(mount_path,"},{"line_number":139,"context_line":"                                               os.path.basename(tmp_file_path))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FxsU%3D","line":136,"in_reply_to":"AAAAT3%2F%2F3qc%3D","updated":"2014-01-01 11:19:16.000000000","message":"Done","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"19030a6966042142c26e16eaeffe9303b1179810","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            self._execute(\u0027rm\u0027, \u0027-f\u0027, tmp_file_local_path, run_as_root\u003dTrue)"},{"line_number":141,"context_line":"        else:"},{"line_number":142,"context_line":"            ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-s\u0027, src, \u0027-t\u0027, dest]"},{"line_number":143,"context_line":"            raw \u003d self._run_ssh(ssh_cmd)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def _create_ibmnas_copy(self, src, dest, snap):"},{"line_number":146,"context_line":"        \"\"\"Create a cloned volume, parent and the clone both remain writable."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3p0%3D","line":143,"updated":"2013-12-29 08:39:04.000000000","message":"try/except?","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"691c09774a029b0d0e33854230380e9c46058e79","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            self._execute(\u0027rm\u0027, \u0027-f\u0027, tmp_file_local_path, run_as_root\u003dTrue)"},{"line_number":141,"context_line":"        else:"},{"line_number":142,"context_line":"            ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-s\u0027, src, \u0027-t\u0027, dest]"},{"line_number":143,"context_line":"            raw \u003d self._run_ssh(ssh_cmd)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def _create_ibmnas_copy(self, src, dest, snap):"},{"line_number":146,"context_line":"        \"\"\"Create a cloned volume, parent and the clone both remain writable."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2Fxsc%3D","line":143,"in_reply_to":"AAAAT3%2F%2F3p0%3D","updated":"2014-01-01 11:19:16.000000000","message":"Done","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"19030a6966042142c26e16eaeffe9303b1179810","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            raw \u003d self._run_ssh(ssh_cmd)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def _create_ibmnas_copy(self, src, dest, snap):"},{"line_number":146,"context_line":"        \"\"\"Create a cloned volume, parent and the clone both remain writable."},{"line_number":147,"context_line":"        \"\"\""},{"line_number":148,"context_line":"        ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, snap, \u0027-s\u0027, src, \u0027-t\u0027, dest]"},{"line_number":149,"context_line":"        raw \u003d self._run_ssh(ssh_cmd)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3p4%3D","line":146,"updated":"2013-12-29 08:39:04.000000000","message":"Docstring issue, same as above","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"691c09774a029b0d0e33854230380e9c46058e79","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            raw \u003d self._run_ssh(ssh_cmd)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def _create_ibmnas_copy(self, src, dest, snap):"},{"line_number":146,"context_line":"        \"\"\"Create a cloned volume, parent and the clone both remain writable."},{"line_number":147,"context_line":"        \"\"\""},{"line_number":148,"context_line":"        ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, snap, \u0027-s\u0027, src, \u0027-t\u0027, dest]"},{"line_number":149,"context_line":"        raw \u003d self._run_ssh(ssh_cmd)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FzLw%3D","line":146,"in_reply_to":"AAAAT3%2F%2F3p4%3D","updated":"2014-01-01 11:19:16.000000000","message":"Done","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"19030a6966042142c26e16eaeffe9303b1179810","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        \"\"\"Create a cloned volume, parent and the clone both remain writable."},{"line_number":147,"context_line":"        \"\"\""},{"line_number":148,"context_line":"        ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, snap, \u0027-s\u0027, src, \u0027-t\u0027, dest]"},{"line_number":149,"context_line":"        raw \u003d self._run_ssh(ssh_cmd)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def _resize_volume_file(self, path, new_size):"},{"line_number":152,"context_line":"        \"\"\"Resize the image file on share to new size.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3qY%3D","line":149,"updated":"2013-12-29 08:39:04.000000000","message":"\u0027raw\u0027 is not used","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"691c09774a029b0d0e33854230380e9c46058e79","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        \"\"\"Create a cloned volume, parent and the clone both remain writable."},{"line_number":147,"context_line":"        \"\"\""},{"line_number":148,"context_line":"        ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, snap, \u0027-s\u0027, src, \u0027-t\u0027, dest]"},{"line_number":149,"context_line":"        raw \u003d self._run_ssh(ssh_cmd)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def _resize_volume_file(self, path, new_size):"},{"line_number":152,"context_line":"        \"\"\"Resize the image file on share to new size.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2Fxsg%3D","line":149,"in_reply_to":"AAAAT3%2F%2F3qY%3D","updated":"2014-01-01 11:19:16.000000000","message":"Done","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"19030a6966042142c26e16eaeffe9303b1179810","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        (out, err) \u003d self._run_ssh(ssh_cmd, check_exit_code\u003dFalse)"},{"line_number":192,"context_line":"        fparent \u003d None"},{"line_number":193,"context_line":"        reInode \u003d re.compile("},{"line_number":194,"context_line":"            \u0027.*\\s+(?:yes|no)\\s+\\d+\\s+(?P\u003cinode\u003e\\d+)\u0027, re.M | re.S)"},{"line_number":195,"context_line":"        match \u003d reInode.match(out)"},{"line_number":196,"context_line":"        if match:"},{"line_number":197,"context_line":"            inode \u003d match.group(\u0027inode\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3qg%3D","line":194,"updated":"2013-12-29 08:39:04.000000000","message":"should prefix this regular expression with \u0027r\u0027 for raw string notation (http://docs.python.org/2/library/re.html)","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"691c09774a029b0d0e33854230380e9c46058e79","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        (out, err) \u003d self._run_ssh(ssh_cmd, check_exit_code\u003dFalse)"},{"line_number":192,"context_line":"        fparent \u003d None"},{"line_number":193,"context_line":"        reInode \u003d re.compile("},{"line_number":194,"context_line":"            \u0027.*\\s+(?:yes|no)\\s+\\d+\\s+(?P\u003cinode\u003e\\d+)\u0027, re.M | re.S)"},{"line_number":195,"context_line":"        match \u003d reInode.match(out)"},{"line_number":196,"context_line":"        if match:"},{"line_number":197,"context_line":"            inode \u003d match.group(\u0027inode\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FzL0%3D","line":194,"in_reply_to":"AAAAT3%2F%2F3qg%3D","updated":"2014-01-01 11:19:16.000000000","message":"Done","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"19030a6966042142c26e16eaeffe9303b1179810","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        Extends the volume if the new volume size is more than"},{"line_number":288,"context_line":"        the source volume size."},{"line_number":289,"context_line":"        \"\"\""},{"line_number":290,"context_line":"        vol_size \u003d volume.size"},{"line_number":291,"context_line":"        src_vol_size \u003d src_vref.size"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        export_path \u003d self._get_export_path(src_vref[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3qM%3D","line":290,"updated":"2013-12-29 08:39:04.000000000","message":"This is variable never used","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"691c09774a029b0d0e33854230380e9c46058e79","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        Extends the volume if the new volume size is more than"},{"line_number":288,"context_line":"        the source volume size."},{"line_number":289,"context_line":"        \"\"\""},{"line_number":290,"context_line":"        vol_size \u003d volume.size"},{"line_number":291,"context_line":"        src_vol_size \u003d src_vref.size"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        export_path \u003d self._get_export_path(src_vref[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FzMA%3D","line":290,"in_reply_to":"AAAAT3%2F%2F3qM%3D","updated":"2014-01-01 11:19:16.000000000","message":"Done","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"19030a6966042142c26e16eaeffe9303b1179810","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        the source volume size."},{"line_number":289,"context_line":"        \"\"\""},{"line_number":290,"context_line":"        vol_size \u003d volume.size"},{"line_number":291,"context_line":"        src_vol_size \u003d src_vref.size"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        export_path \u003d self._get_export_path(src_vref[\u0027id\u0027])"},{"line_number":294,"context_line":"        src_vol_path \u003d os.path.join(export_path, src_vref[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F3qI%3D","line":291,"updated":"2013-12-29 08:39:04.000000000","message":"This is variable never used","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"691c09774a029b0d0e33854230380e9c46058e79","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        the source volume size."},{"line_number":289,"context_line":"        \"\"\""},{"line_number":290,"context_line":"        vol_size \u003d volume.size"},{"line_number":291,"context_line":"        src_vol_size \u003d src_vref.size"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        export_path \u003d self._get_export_path(src_vref[\u0027id\u0027])"},{"line_number":294,"context_line":"        src_vol_path \u003d os.path.join(export_path, src_vref[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FzL8%3D","line":291,"in_reply_to":"AAAAT3%2F%2F3qI%3D","updated":"2014-01-01 11:19:16.000000000","message":"Done","commit_id":"1d8f179fee8993e2d973983a4daff49662118f52"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"cf4799107e4a9dd5381177a716b2bf48117281e0","unresolved":false,"context_lines":[{"line_number":46,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"ibmnas_opts \u003d ["},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027nas_ip\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":51,"context_line":"               help\u003d\u0027IP address of IBM NAS System\u0027),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027nas_login\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F%2Fbc%3D","line":49,"updated":"2014-01-04 16:09:06.000000000","message":"Please name these options as \"ibmnas_\" rather than \"nas_\" so it is clear which driver they belong to.","commit_id":"1b82de6e49924f551a2b7e465edb9ba0917cf344"},{"author":{"_account_id":1773,"name":"oliver-leahy-l","email":"oliver.leahy@hpe.com","username":"oliver-leahy-l"},"change_message_id":"3cc65607980046b69aefbb60863af56c296fb347","unresolved":false,"context_lines":[{"line_number":46,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"ibmnas_opts \u003d ["},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027nas_ip\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":51,"context_line":"               help\u003d\u0027IP address of IBM NAS System\u0027),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027nas_login\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F9Dg%3D","line":49,"in_reply_to":"AAAAUH%2F%2F%2FUs%3D","updated":"2014-01-06 09:21:01.000000000","message":"In that case are the help strings misleading? And it is confusing that these are here rather than in nfs.py, so that other drivers can import them.","commit_id":"1b82de6e49924f551a2b7e465edb9ba0917cf344"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"33c32f83deddd9183429da837a095319945fa2c8","unresolved":false,"context_lines":[{"line_number":46,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"ibmnas_opts \u003d ["},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027nas_ip\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":51,"context_line":"               help\u003d\u0027IP address of IBM NAS System\u0027),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027nas_login\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F%2FUs%3D","line":49,"in_reply_to":"AAAAUH%2F%2F%2Fbc%3D","updated":"2014-01-04 18:26:39.000000000","message":"In fact, it is intentionally named to be generic as \u0027nas_\u0027 instead of \u0027ibmnas_\u0027 since this would be useful to the drivers for other NAS filers as well. Currently, the vanilla NFS Driver does not use this since it does not execute any commands connecting to the remote NAS system over SSH. But, other NAS drivers may need this like the IBM NAS driver.","commit_id":"1b82de6e49924f551a2b7e465edb9ba0917cf344"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"bfb432e2b430b934abf4eff6f25375fb7876f0ec","unresolved":false,"context_lines":[{"line_number":46,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"ibmnas_opts \u003d ["},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027nas_ip\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":51,"context_line":"               help\u003d\u0027IP address of IBM NAS System\u0027),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027nas_login\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F840%3D","line":49,"in_reply_to":"AAAAUH%2F%2F9Dg%3D","updated":"2014-01-06 10:05:10.000000000","message":"Ok, agree. I will move this code to nfs.py, so that other drivers deriving from the NFS driver can also make benefit.","commit_id":"1b82de6e49924f551a2b7e465edb9ba0917cf344"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f0968e851470fc3c8fc40b745997229b74c4c162","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 IBM Corp. All Rights Reserved"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Ft2I%3D","line":1,"updated":"2014-01-09 09:16:56.000000000","message":"Should not have \u0027All Rights Reserved\u0027","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"b7d72a6e55addcba6623a6266dc5a70f82e8897b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 IBM Corp. All Rights Reserved"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Ftus%3D","line":1,"in_reply_to":"AAAAUH%2F%2Ft2I%3D","updated":"2014-01-09 10:18:00.000000000","message":"Done","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f0968e851470fc3c8fc40b745997229b74c4c162","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        \"\"\"Ensure that the flags are set properly.\"\"\""},{"line_number":79,"context_line":"        LOG.debug(_(\u0027Enter: check_for_setup_error\u0027))"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        required_flags \u003d [\u0027nas_ip\u0027, \u0027nas_ssh_port\u0027, \u0027nas_login\u0027]"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        for flag in required_flags:"},{"line_number":84,"context_line":"            if not self.configuration.safe_get(flag):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FuAw%3D","line":81,"updated":"2014-01-09 09:16:56.000000000","message":"What about all the config options inherited from nfs.py?  Check that you got valid values for everything?  This seems to be incomplete.","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"8c10e7fe8bc1f48661221e0f7ef9d64a715f2fe8","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        \"\"\"Ensure that the flags are set properly.\"\"\""},{"line_number":79,"context_line":"        LOG.debug(_(\u0027Enter: check_for_setup_error\u0027))"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        required_flags \u003d [\u0027nas_ip\u0027, \u0027nas_ssh_port\u0027, \u0027nas_login\u0027]"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        for flag in required_flags:"},{"line_number":84,"context_line":"            if not self.configuration.safe_get(flag):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FiSA%3D","line":81,"in_reply_to":"AAAAUH%2F%2FpaY%3D","updated":"2014-01-12 08:22:27.000000000","message":"OK","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"44bc356c23a25b639275da299d2f7105a9eefa1a","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        \"\"\"Ensure that the flags are set properly.\"\"\""},{"line_number":79,"context_line":"        LOG.debug(_(\u0027Enter: check_for_setup_error\u0027))"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        required_flags \u003d [\u0027nas_ip\u0027, \u0027nas_ssh_port\u0027, \u0027nas_login\u0027]"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        for flag in required_flags:"},{"line_number":84,"context_line":"            if not self.configuration.safe_get(flag):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FpaY%3D","line":81,"in_reply_to":"AAAAUH%2F%2FuAw%3D","updated":"2014-01-10 07:13:48.000000000","message":"Other config parameters like \u0027nfs_shares_config\u0027, \u0027nfs_oversub_ratio\u0027, \u0027nfs_used_ratio\u0027 etc. are checked in do_setup() function defined in nfs.py. I do not think we need to recheck those here.","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f0968e851470fc3c8fc40b745997229b74c4c162","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            tmp_file_path \u003d dest + \u0027.snap\u0027"},{"line_number":108,"context_line":"            ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, dest, \u0027-s\u0027, src, \u0027-t\u0027, tmp_file_path]"},{"line_number":109,"context_line":"            try:"},{"line_number":110,"context_line":"                self._run_ssh(ssh_cmd)"},{"line_number":111,"context_line":"            except Exception as e:"},{"line_number":112,"context_line":"                LOG.error(_(\"Failed in _create_ibmnas_snap during \""},{"line_number":113,"context_line":"                            \"create_snapshot. Error: %s\") % e.stderr)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Ft%2Bk%3D","line":110,"updated":"2014-01-09 09:16:56.000000000","message":"Check out/err?","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"cc7d6cb44470ab61fe5abbb6623bb82cc553cf15","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            tmp_file_path \u003d dest + \u0027.snap\u0027"},{"line_number":108,"context_line":"            ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, dest, \u0027-s\u0027, src, \u0027-t\u0027, tmp_file_path]"},{"line_number":109,"context_line":"            try:"},{"line_number":110,"context_line":"                self._run_ssh(ssh_cmd)"},{"line_number":111,"context_line":"            except Exception as e:"},{"line_number":112,"context_line":"                LOG.error(_(\"Failed in _create_ibmnas_snap during \""},{"line_number":113,"context_line":"                            \"create_snapshot. Error: %s\") % e.stderr)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Fgqw%3D","line":110,"in_reply_to":"AAAAUH%2F%2FiR0%3D","updated":"2014-01-13 08:31:05.000000000","message":"Any exit_code other than \u00270\u0027 is an error for all the NAS CLI commands used in the driver. The the _run_ssh() method from san.py, which is used here, already checks for the exit_code (check_exit_code\u003dTrue) and raises an exception if it is not \u00270\u0027. \nIf the exit_code is \u00270\u0027, meaning the CLI ran successfully, we do not need to do any further processing or parsing/sanity check of the output, except in case of the \u0027lsclone\u0027 CLI, where we are already capturing the output and processing it further. Thus, I do not think any more checks are required here.","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"8c10e7fe8bc1f48661221e0f7ef9d64a715f2fe8","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            tmp_file_path \u003d dest + \u0027.snap\u0027"},{"line_number":108,"context_line":"            ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, dest, \u0027-s\u0027, src, \u0027-t\u0027, tmp_file_path]"},{"line_number":109,"context_line":"            try:"},{"line_number":110,"context_line":"                self._run_ssh(ssh_cmd)"},{"line_number":111,"context_line":"            except Exception as e:"},{"line_number":112,"context_line":"                LOG.error(_(\"Failed in _create_ibmnas_snap during \""},{"line_number":113,"context_line":"                            \"create_snapshot. Error: %s\") % e.stderr)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FiR0%3D","line":110,"in_reply_to":"AAAAUH%2F%2FpZI%3D","updated":"2014-01-12 08:22:27.000000000","message":"If the command succeeds, you should probably do a sanity check on the output to be safe.  If it fails, you should raise VolumeBackendAPIException with an appropriate message.","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"44bc356c23a25b639275da299d2f7105a9eefa1a","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            tmp_file_path \u003d dest + \u0027.snap\u0027"},{"line_number":108,"context_line":"            ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, dest, \u0027-s\u0027, src, \u0027-t\u0027, tmp_file_path]"},{"line_number":109,"context_line":"            try:"},{"line_number":110,"context_line":"                self._run_ssh(ssh_cmd)"},{"line_number":111,"context_line":"            except Exception as e:"},{"line_number":112,"context_line":"                LOG.error(_(\"Failed in _create_ibmnas_snap during \""},{"line_number":113,"context_line":"                            \"create_snapshot. Error: %s\") % e.stderr)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FpZI%3D","line":110,"in_reply_to":"AAAAUH%2F%2Ft%2Bk%3D","updated":"2014-01-10 07:13:48.000000000","message":"The _run_ssh() function defined in san/san.py (please take a look), does all the required error handling and raises appropriate exceptions, here we are just reraising the same, with more appropriate error log. Do you still think we should enhance this further?","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f0968e851470fc3c8fc40b745997229b74c4c162","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, dest, \u0027-s\u0027, src, \u0027-t\u0027, tmp_file_path]"},{"line_number":109,"context_line":"            try:"},{"line_number":110,"context_line":"                self._run_ssh(ssh_cmd)"},{"line_number":111,"context_line":"            except Exception as e:"},{"line_number":112,"context_line":"                LOG.error(_(\"Failed in _create_ibmnas_snap during \""},{"line_number":113,"context_line":"                            \"create_snapshot. Error: %s\") % e.stderr)"},{"line_number":114,"context_line":"                raise exception.VolumeBackendAPIException(data\u003de.stderr)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FuAQ%3D","line":111,"updated":"2014-01-09 09:16:56.000000000","message":"Don\u0027t use Exception - too generic.  I think you want processutils.ProcessExecutionError","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"cc7d6cb44470ab61fe5abbb6623bb82cc553cf15","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, dest, \u0027-s\u0027, src, \u0027-t\u0027, tmp_file_path]"},{"line_number":109,"context_line":"            try:"},{"line_number":110,"context_line":"                self._run_ssh(ssh_cmd)"},{"line_number":111,"context_line":"            except Exception as e:"},{"line_number":112,"context_line":"                LOG.error(_(\"Failed in _create_ibmnas_snap during \""},{"line_number":113,"context_line":"                            \"create_snapshot. Error: %s\") % e.stderr)"},{"line_number":114,"context_line":"                raise exception.VolumeBackendAPIException(data\u003de.stderr)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FguY%3D","line":111,"in_reply_to":"AAAAUH%2F%2FiR8%3D","updated":"2014-01-13 08:31:05.000000000","message":"Agree, changing it accordingly.","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"8c10e7fe8bc1f48661221e0f7ef9d64a715f2fe8","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, dest, \u0027-s\u0027, src, \u0027-t\u0027, tmp_file_path]"},{"line_number":109,"context_line":"            try:"},{"line_number":110,"context_line":"                self._run_ssh(ssh_cmd)"},{"line_number":111,"context_line":"            except Exception as e:"},{"line_number":112,"context_line":"                LOG.error(_(\"Failed in _create_ibmnas_snap during \""},{"line_number":113,"context_line":"                            \"create_snapshot. Error: %s\") % e.stderr)"},{"line_number":114,"context_line":"                raise exception.VolumeBackendAPIException(data\u003de.stderr)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FiR8%3D","line":111,"in_reply_to":"AAAAUH%2F%2FpYY%3D","updated":"2014-01-12 08:22:27.000000000","message":"_run_ssh will only raise processutils.ProcessExecutionError as far as I can see","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"44bc356c23a25b639275da299d2f7105a9eefa1a","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, dest, \u0027-s\u0027, src, \u0027-t\u0027, tmp_file_path]"},{"line_number":109,"context_line":"            try:"},{"line_number":110,"context_line":"                self._run_ssh(ssh_cmd)"},{"line_number":111,"context_line":"            except Exception as e:"},{"line_number":112,"context_line":"                LOG.error(_(\"Failed in _create_ibmnas_snap during \""},{"line_number":113,"context_line":"                            \"create_snapshot. Error: %s\") % e.stderr)"},{"line_number":114,"context_line":"                raise exception.VolumeBackendAPIException(data\u003de.stderr)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FpYY%3D","line":111,"in_reply_to":"AAAAUH%2F%2FuAQ%3D","updated":"2014-01-10 07:13:48.000000000","message":"Want to catch whatever exception raised by _run_ssh() defined in san.py.","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f0968e851470fc3c8fc40b745997229b74c4c162","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        else:"},{"line_number":121,"context_line":"            ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-s\u0027, src, \u0027-t\u0027, dest]"},{"line_number":122,"context_line":"            try:"},{"line_number":123,"context_line":"                self._run_ssh(ssh_cmd)"},{"line_number":124,"context_line":"            except Exception as e:"},{"line_number":125,"context_line":"                LOG.error(_(\"Failed in _create_ibmnas_snap during \""},{"line_number":126,"context_line":"                            \"create_volume_from_snapshot. Error: %s\") %"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Ft%2Bc%3D","line":123,"updated":"2014-01-09 09:16:56.000000000","message":"Check out/err?","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"44bc356c23a25b639275da299d2f7105a9eefa1a","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        else:"},{"line_number":121,"context_line":"            ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-s\u0027, src, \u0027-t\u0027, dest]"},{"line_number":122,"context_line":"            try:"},{"line_number":123,"context_line":"                self._run_ssh(ssh_cmd)"},{"line_number":124,"context_line":"            except Exception as e:"},{"line_number":125,"context_line":"                LOG.error(_(\"Failed in _create_ibmnas_snap during \""},{"line_number":126,"context_line":"                            \"create_volume_from_snapshot. Error: %s\") %"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FpYI%3D","line":123,"in_reply_to":"AAAAUH%2F%2Ft%2Bc%3D","updated":"2014-01-10 07:13:48.000000000","message":"As explained above.","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f0968e851470fc3c8fc40b745997229b74c4c162","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        \"\"\"Create a cloned volume, parent \u0026 the clone both remain writable.\"\"\""},{"line_number":132,"context_line":"        ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, snap, \u0027-s\u0027, src, \u0027-t\u0027, dest]"},{"line_number":133,"context_line":"        try:"},{"line_number":134,"context_line":"            self._run_ssh(ssh_cmd)"},{"line_number":135,"context_line":"        except Exception as e:"},{"line_number":136,"context_line":"            LOG.error(_(\"Failed in _create_ibmnas_copy. Error: %s\") % e.stderr)"},{"line_number":137,"context_line":"            raise exception.VolumeBackendAPIException(data\u003de.stderr)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Ft%2BY%3D","line":134,"updated":"2014-01-09 09:16:56.000000000","message":"Check out/err?","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"44bc356c23a25b639275da299d2f7105a9eefa1a","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        \"\"\"Create a cloned volume, parent \u0026 the clone both remain writable.\"\"\""},{"line_number":132,"context_line":"        ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, snap, \u0027-s\u0027, src, \u0027-t\u0027, dest]"},{"line_number":133,"context_line":"        try:"},{"line_number":134,"context_line":"            self._run_ssh(ssh_cmd)"},{"line_number":135,"context_line":"        except Exception as e:"},{"line_number":136,"context_line":"            LOG.error(_(\"Failed in _create_ibmnas_copy. Error: %s\") % e.stderr)"},{"line_number":137,"context_line":"            raise exception.VolumeBackendAPIException(data\u003de.stderr)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FpYE%3D","line":134,"in_reply_to":"AAAAUH%2F%2Ft%2BY%3D","updated":"2014-01-10 07:13:48.000000000","message":"As explained above.","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f0968e851470fc3c8fc40b745997229b74c4c162","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, snap, \u0027-s\u0027, src, \u0027-t\u0027, dest]"},{"line_number":133,"context_line":"        try:"},{"line_number":134,"context_line":"            self._run_ssh(ssh_cmd)"},{"line_number":135,"context_line":"        except Exception as e:"},{"line_number":136,"context_line":"            LOG.error(_(\"Failed in _create_ibmnas_copy. Error: %s\") % e.stderr)"},{"line_number":137,"context_line":"            raise exception.VolumeBackendAPIException(data\u003de.stderr)"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Ft%2FM%3D","line":135,"updated":"2014-01-09 09:16:56.000000000","message":"Same as above","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"44bc356c23a25b639275da299d2f7105a9eefa1a","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        ssh_cmd \u003d [\u0027mkclone\u0027, \u0027-p\u0027, snap, \u0027-s\u0027, src, \u0027-t\u0027, dest]"},{"line_number":133,"context_line":"        try:"},{"line_number":134,"context_line":"            self._run_ssh(ssh_cmd)"},{"line_number":135,"context_line":"        except Exception as e:"},{"line_number":136,"context_line":"            LOG.error(_(\"Failed in _create_ibmnas_copy. Error: %s\") % e.stderr)"},{"line_number":137,"context_line":"            raise exception.VolumeBackendAPIException(data\u003de.stderr)"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FpX8%3D","line":135,"in_reply_to":"AAAAUH%2F%2Ft%2FM%3D","updated":"2014-01-10 07:13:48.000000000","message":"As explained above.","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f0968e851470fc3c8fc40b745997229b74c4c162","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        LOG.debug(_(\u0027Checking file for resize\u0027))"},{"line_number":142,"context_line":"        if self._is_file_size_equal(path, new_size):"},{"line_number":143,"context_line":"            return True"},{"line_number":144,"context_line":"        else:"},{"line_number":145,"context_line":"            LOG.info(_(\u0027Resizing file to %sG\u0027), new_size)"},{"line_number":146,"context_line":"            data \u003d image_utils.qemu_img_info(path)"},{"line_number":147,"context_line":"            image_fmt \u003d data.file_format"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Ft%2BI%3D","line":144,"updated":"2014-01-09 09:16:56.000000000","message":"No need for this \u0027else\u0027","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"44bc356c23a25b639275da299d2f7105a9eefa1a","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        LOG.debug(_(\u0027Checking file for resize\u0027))"},{"line_number":142,"context_line":"        if self._is_file_size_equal(path, new_size):"},{"line_number":143,"context_line":"            return True"},{"line_number":144,"context_line":"        else:"},{"line_number":145,"context_line":"            LOG.info(_(\u0027Resizing file to %sG\u0027), new_size)"},{"line_number":146,"context_line":"            data \u003d image_utils.qemu_img_info(path)"},{"line_number":147,"context_line":"            image_fmt \u003d data.file_format"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FpAU%3D","line":144,"in_reply_to":"AAAAUH%2F%2Ft%2BI%3D","updated":"2014-01-10 07:13:48.000000000","message":"Thought it will save some compute cycles, removed now as per your suggestion.","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f0968e851470fc3c8fc40b745997229b74c4c162","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            data \u003d image_utils.qemu_img_info(path)"},{"line_number":147,"context_line":"            image_fmt \u003d data.file_format"},{"line_number":148,"context_line":"            LOG.debug(\u0027image_fmt \u003d %s\u0027 % str(image_fmt))"},{"line_number":149,"context_line":"            if image_fmt not in [\u0027raw\u0027, \u0027qcow2\u0027]:"},{"line_number":150,"context_line":"                msg \u003d _(\u0027Unrecognized image format: %s\u0027)"},{"line_number":151,"context_line":"                raise exception.InvalidVolume(msg % image_fmt)"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Ft90%3D","line":149,"updated":"2014-01-09 09:16:56.000000000","message":"Why must the image be raw or qcow2?  Why not let image_utils.resize_image try to resize it?","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"44bc356c23a25b639275da299d2f7105a9eefa1a","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            data \u003d image_utils.qemu_img_info(path)"},{"line_number":147,"context_line":"            image_fmt \u003d data.file_format"},{"line_number":148,"context_line":"            LOG.debug(\u0027image_fmt \u003d %s\u0027 % str(image_fmt))"},{"line_number":149,"context_line":"            if image_fmt not in [\u0027raw\u0027, \u0027qcow2\u0027]:"},{"line_number":150,"context_line":"                msg \u003d _(\u0027Unrecognized image format: %s\u0027)"},{"line_number":151,"context_line":"                raise exception.InvalidVolume(msg % image_fmt)"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FpAI%3D","line":149,"in_reply_to":"AAAAUH%2F%2Ft90%3D","updated":"2014-01-10 07:13:48.000000000","message":"Agree, removed this check.","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f0968e851470fc3c8fc40b745997229b74c4c162","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dexc.stderr)"},{"line_number":161,"context_line":"            return True"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def _is_file_size_equal(self, path, size):"},{"line_number":164,"context_line":"        \"\"\"Checks if file size at path is equal to size.\"\"\""},{"line_number":165,"context_line":"        data \u003d image_utils.qemu_img_info(path)"},{"line_number":166,"context_line":"        virt_size \u003d data.virtual_size / units.GiB"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Ft%2Bw%3D","line":163,"updated":"2014-01-09 09:16:56.000000000","message":"Suggest changing this method to be a function","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"44bc356c23a25b639275da299d2f7105a9eefa1a","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dexc.stderr)"},{"line_number":161,"context_line":"            return True"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def _is_file_size_equal(self, path, size):"},{"line_number":164,"context_line":"        \"\"\"Checks if file size at path is equal to size.\"\"\""},{"line_number":165,"context_line":"        data \u003d image_utils.qemu_img_info(path)"},{"line_number":166,"context_line":"        virt_size \u003d data.virtual_size / units.GiB"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Fo%2FM%3D","line":163,"in_reply_to":"AAAAUH%2F%2Ft%2Bw%3D","updated":"2014-01-10 07:13:48.000000000","message":"Removed this method, since it is no more required now after removing this check from _resize_volume_file()","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f0968e851470fc3c8fc40b745997229b74c4c162","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        ssh_cmd \u003d [\u0027lsclone\u0027, fchild]"},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            (out, err) \u003d self._run_ssh(ssh_cmd, check_exit_code\u003dFalse)"},{"line_number":182,"context_line":"        except Exception as e:"},{"line_number":183,"context_line":"            LOG.error(_(\"Failed in _delete_snapfiles. Error: %s\") % e.stderr)"},{"line_number":184,"context_line":"            raise exception.VolumeBackendAPIException(data\u003de.stderr)"},{"line_number":185,"context_line":"        fparent \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Ft2c%3D","line":182,"updated":"2014-01-09 09:16:56.000000000","message":"Same as above","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"44bc356c23a25b639275da299d2f7105a9eefa1a","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        ssh_cmd \u003d [\u0027lsclone\u0027, fchild]"},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            (out, err) \u003d self._run_ssh(ssh_cmd, check_exit_code\u003dFalse)"},{"line_number":182,"context_line":"        except Exception as e:"},{"line_number":183,"context_line":"            LOG.error(_(\"Failed in _delete_snapfiles. Error: %s\") % e.stderr)"},{"line_number":184,"context_line":"            raise exception.VolumeBackendAPIException(data\u003de.stderr)"},{"line_number":185,"context_line":"        fparent \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FpXw%3D","line":182,"in_reply_to":"AAAAUH%2F%2Ft2c%3D","updated":"2014-01-10 07:13:48.000000000","message":"As explained above.","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f0968e851470fc3c8fc40b745997229b74c4c162","unresolved":false,"context_lines":[{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        # There is no need to check for volume references on this snapshot"},{"line_number":202,"context_line":"        # because \u0027rm -f\u0027 itself serves as a simple and implicit check. If the"},{"line_number":203,"context_line":"        # parent is referenced by another volume, GPFS doesn\u0027t allow deleting"},{"line_number":204,"context_line":"        # it. \u0027rm -f\u0027 silently fails and the subsequent check on the path"},{"line_number":205,"context_line":"        # indicates whether there are any volumes derived from that snapshot."},{"line_number":206,"context_line":"        # If there are such volumes, we quit recursion and let the other"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Ft3U%3D","line":203,"updated":"2014-01-09 09:16:56.000000000","message":"GPFS?","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"44bc356c23a25b639275da299d2f7105a9eefa1a","unresolved":false,"context_lines":[{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        # There is no need to check for volume references on this snapshot"},{"line_number":202,"context_line":"        # because \u0027rm -f\u0027 itself serves as a simple and implicit check. If the"},{"line_number":203,"context_line":"        # parent is referenced by another volume, GPFS doesn\u0027t allow deleting"},{"line_number":204,"context_line":"        # it. \u0027rm -f\u0027 silently fails and the subsequent check on the path"},{"line_number":205,"context_line":"        # indicates whether there are any volumes derived from that snapshot."},{"line_number":206,"context_line":"        # If there are such volumes, we quit recursion and let the other"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FpXY%3D","line":203,"in_reply_to":"AAAAUH%2F%2Ft3U%3D","updated":"2014-01-10 07:13:48.000000000","message":"It is known that the IBM NAS products are based on GPFS, hence I used the term here. I can easily change it to something like \"... the \u0027system\u0027 doesn\u0027t allow ...\"","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f0968e851470fc3c8fc40b745997229b74c4c162","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            return"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        export_path \u003d self._get_export_path(volume[\u0027id\u0027])"},{"line_number":224,"context_line":"        volume_name \u003d CONF.volume_name_template % volume[\u0027id\u0027]"},{"line_number":225,"context_line":"        volume_path \u003d os.path.join(export_path, volume_name)"},{"line_number":226,"context_line":"        mount_point \u003d os.path.dirname(self.local_path(volume))"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Ft9U%3D","line":224,"updated":"2014-01-09 09:16:56.000000000","message":"This is wrong - should use volume[\u0027name\u0027]","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"8c10e7fe8bc1f48661221e0f7ef9d64a715f2fe8","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            return"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        export_path \u003d self._get_export_path(volume[\u0027id\u0027])"},{"line_number":224,"context_line":"        volume_name \u003d CONF.volume_name_template % volume[\u0027id\u0027]"},{"line_number":225,"context_line":"        volume_path \u003d os.path.join(export_path, volume_name)"},{"line_number":226,"context_line":"        mount_point \u003d os.path.dirname(self.local_path(volume))"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FiRs%3D","line":224,"in_reply_to":"AAAAUH%2F%2FpHE%3D","updated":"2014-01-12 08:22:27.000000000","message":"Yes, the config option shouldn\u0027t be changed.  But this is wrong because volume[\u0027name\u0027] is based on template and name_id, not id.  Safer to use [\u0027name\u0027] - it\u0027s there for a reason.","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"44bc356c23a25b639275da299d2f7105a9eefa1a","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            return"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        export_path \u003d self._get_export_path(volume[\u0027id\u0027])"},{"line_number":224,"context_line":"        volume_name \u003d CONF.volume_name_template % volume[\u0027id\u0027]"},{"line_number":225,"context_line":"        volume_path \u003d os.path.join(export_path, volume_name)"},{"line_number":226,"context_line":"        mount_point \u003d os.path.dirname(self.local_path(volume))"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FpHE%3D","line":224,"in_reply_to":"AAAAUH%2F%2Ft9U%3D","updated":"2014-01-10 07:13:48.000000000","message":"IMO, this is not wrong but it is same as using volume[\u0027name\u0027]. I will change it to  volume[\u0027name\u0027] anyway. But, what both these approaches have issues with is ... if some volumes are created with one \u0027volume_name_template\u0027 (say default \u0027volume-%s\u0027) and then the \u0027volume_name_template\u0027 is changed to say \u0027myvol-%s\u0027 and few more volumes are created. Then user tries to delete all the volumes .. only the new ones will get deleted since the old ones will have file name prefixed with \u0027volume-\u0027. I think this is an issue with all the volume drivers.","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f0968e851470fc3c8fc40b745997229b74c4c162","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        export_path \u003d self._get_export_path(src_vref[\u0027id\u0027])"},{"line_number":284,"context_line":"        src_vol_path \u003d os.path.join(export_path, src_vref[\u0027name\u0027])"},{"line_number":285,"context_line":"        dest_vol_path \u003d os.path.join(export_path, volume[\u0027name\u0027])"},{"line_number":286,"context_line":"        snap_file_name \u003d CONF.volume_name_template % volume[\u0027id\u0027]"},{"line_number":287,"context_line":"        snap_file_name \u003d snap_file_name + \u0027.snap\u0027"},{"line_number":288,"context_line":"        snap_file_path \u003d os.path.join(export_path, snap_file_name)"},{"line_number":289,"context_line":"        self._create_ibmnas_copy(src_vol_path, dest_vol_path, snap_file_path)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Ft9Q%3D","line":286,"updated":"2014-01-09 09:16:56.000000000","message":"This is wrong - should use volume[\u0027name\u0027]","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"44bc356c23a25b639275da299d2f7105a9eefa1a","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        export_path \u003d self._get_export_path(src_vref[\u0027id\u0027])"},{"line_number":284,"context_line":"        src_vol_path \u003d os.path.join(export_path, src_vref[\u0027name\u0027])"},{"line_number":285,"context_line":"        dest_vol_path \u003d os.path.join(export_path, volume[\u0027name\u0027])"},{"line_number":286,"context_line":"        snap_file_name \u003d CONF.volume_name_template % volume[\u0027id\u0027]"},{"line_number":287,"context_line":"        snap_file_name \u003d snap_file_name + \u0027.snap\u0027"},{"line_number":288,"context_line":"        snap_file_path \u003d os.path.join(export_path, snap_file_name)"},{"line_number":289,"context_line":"        self._create_ibmnas_copy(src_vol_path, dest_vol_path, snap_file_path)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FpHA%3D","line":286,"in_reply_to":"AAAAUH%2F%2Ft9Q%3D","updated":"2014-01-10 07:13:48.000000000","message":"As explained above, but I will change it as per your suggestion.","commit_id":"b197d0544c50432a6ab8cf5e9c6ddfd2ccf64e96"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"c17b838facb35055cc4f30b6885e3e694bb6d3d6","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class IBMNAS_NFSDriver(nfs.NfsDriver, san.SanDriver):"},{"line_number":50,"context_line":"    \"\"\"IBM NAS NFS based cinder driver. Creates file on NFS share for using it"},{"line_number":51,"context_line":"    as block device on hypervisor."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    driver_volume_type \u003d \u0027nfs\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FiSo%3D","line":51,"updated":"2014-01-12 08:22:56.000000000","message":"Add version history here, such as:\n\n    Version history:\n    1.0 - Initial driver","commit_id":"29c77520ba6c6f5a07dceef5d552a198aba8c428"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"074230ad6181ea1d813fbb3d811110d40f02b697","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class IBMNAS_NFSDriver(nfs.NfsDriver, san.SanDriver):"},{"line_number":50,"context_line":"    \"\"\"IBM NAS NFS based cinder driver. Creates file on NFS share for using it"},{"line_number":51,"context_line":"    as block device on hypervisor."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    driver_volume_type \u003d \u0027nfs\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FhuU%3D","line":51,"in_reply_to":"AAAAUH%2F%2FiSo%3D","updated":"2014-01-12 15:54:38.000000000","message":"Done","commit_id":"29c77520ba6c6f5a07dceef5d552a198aba8c428"},{"author":{"_account_id":9836,"name":"Sandeep Patil","email":"sandeep.patil@in.ibm.com"},"change_message_id":"67947786aba96b2a601dbe2c542497b2da1bea5a","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        \"\"\"Ensure that the flags are set properly.\"\"\""},{"line_number":81,"context_line":"        LOG.debug(_(\u0027Enter: check_for_setup_error\u0027))"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        required_flags \u003d [\u0027nas_ip\u0027, \u0027nas_ssh_port\u0027, \u0027nas_login\u0027]"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        for flag in required_flags:"},{"line_number":86,"context_line":"            if not self.configuration.safe_get(flag):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2Fg04%3D","line":83,"updated":"2014-01-13 04:40:05.000000000","message":"\"nas_ip\" should not restrict to take only IP address of the NAS box , but also the hostname of the NAS box - for hostname are commanly used as opposed to IP address which are more susceptible to change.","commit_id":"3be7ae02ce2180fff82e8678619ccb2aa7011cf5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"7b4cc0c4ddac52e4ae8d03c32e7a149699dd376b","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        \"\"\"Ensure that the flags are set properly.\"\"\""},{"line_number":81,"context_line":"        LOG.debug(_(\u0027Enter: check_for_setup_error\u0027))"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        required_flags \u003d [\u0027nas_ip\u0027, \u0027nas_ssh_port\u0027, \u0027nas_login\u0027]"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        for flag in required_flags:"},{"line_number":86,"context_line":"            if not self.configuration.safe_get(flag):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2FgwY%3D","line":83,"in_reply_to":"AAAAUH%2F%2Fg04%3D","updated":"2014-01-13 05:44:05.000000000","message":"It\u0027s fine this way IMO.  See my comment in the sample config,","commit_id":"3be7ae02ce2180fff82e8678619ccb2aa7011cf5"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"5d254eccda2c36bff47f929378aaf877ff4f22fa","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        \"\"\"Ensure that the flags are set properly.\"\"\""},{"line_number":81,"context_line":"        LOG.debug(_(\u0027Enter: check_for_setup_error\u0027))"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        required_flags \u003d [\u0027nas_ip\u0027, \u0027nas_ssh_port\u0027, \u0027nas_login\u0027]"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        for flag in required_flags:"},{"line_number":86,"context_line":"            if not self.configuration.safe_get(flag):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2FgTM%3D","line":83,"in_reply_to":"AAAAUH%2F%2FgwY%3D","updated":"2014-01-13 08:34:08.000000000","message":"Incorporated in patch 10, as per Avishay\u0027s comments.","commit_id":"3be7ae02ce2180fff82e8678619ccb2aa7011cf5"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"6c92b51183bf2f68a01c87b8d2763559aa99ffc9","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class IBMNAS_NFSDriver(nfs.NfsDriver, san.SanDriver):"},{"line_number":50,"context_line":"    \"\"\"IBM NAS NFS based cinder driver. Creates file on NFS share for using it"},{"line_number":51,"context_line":"    as block device on hypervisor."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FfY4%3D","line":50,"updated":"2014-01-13 11:40:07.000000000","message":"First line should end with a dot. \"Creates file..\" can be moved to a next line after keeping a line blank.","commit_id":"a16f6731967c4df079db3d35c26ffe6ac55ed1d8"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"29731a715001ec3d7bcb5160d65d9e5b1f683ba5","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class IBMNAS_NFSDriver(nfs.NfsDriver, san.SanDriver):"},{"line_number":50,"context_line":"    \"\"\"IBM NAS NFS based cinder driver. Creates file on NFS share for using it"},{"line_number":51,"context_line":"    as block device on hypervisor."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FeqQ%3D","line":50,"in_reply_to":"AAAAUH%2F%2FfY4%3D","updated":"2014-01-13 14:07:42.000000000","message":"Done","commit_id":"a16f6731967c4df079db3d35c26ffe6ac55ed1d8"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"6c92b51183bf2f68a01c87b8d2763559aa99ffc9","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def check_for_setup_error(self):"},{"line_number":80,"context_line":"        \"\"\"Ensure that the flags are set properly.\"\"\""},{"line_number":81,"context_line":"        LOG.debug(_(\u0027Enter: check_for_setup_error\u0027))"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        required_flags \u003d [\u0027nas_ip\u0027, \u0027nas_ssh_port\u0027, \u0027nas_login\u0027]"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FfYc%3D","line":81,"updated":"2014-01-13 11:40:07.000000000","message":"left it in here by mistake?","commit_id":"a16f6731967c4df079db3d35c26ffe6ac55ed1d8"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"29731a715001ec3d7bcb5160d65d9e5b1f683ba5","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def check_for_setup_error(self):"},{"line_number":80,"context_line":"        \"\"\"Ensure that the flags are set properly.\"\"\""},{"line_number":81,"context_line":"        LOG.debug(_(\u0027Enter: check_for_setup_error\u0027))"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        required_flags \u003d [\u0027nas_ip\u0027, \u0027nas_ssh_port\u0027, \u0027nas_login\u0027]"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FesE%3D","line":81,"in_reply_to":"AAAAUH%2F%2FfYc%3D","updated":"2014-01-13 14:07:42.000000000","message":"removed.","commit_id":"a16f6731967c4df079db3d35c26ffe6ac55ed1d8"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"6c92b51183bf2f68a01c87b8d2763559aa99ffc9","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":248,"context_line":"        \"\"\"Creates a volume from an existing volume snapshot"},{"line_number":249,"context_line":"        Extends the volume if the volume size is more than the snapshot size."},{"line_number":250,"context_line":"        \"\"\""},{"line_number":251,"context_line":"        export_path \u003d self._get_export_path(snapshot[\u0027volume_id\u0027])"},{"line_number":252,"context_line":"        snapshot_path \u003d os.path.join(export_path, snapshot.name)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FfX8%3D","line":249,"updated":"2014-01-13 11:40:07.000000000","message":"empty line here","commit_id":"a16f6731967c4df079db3d35c26ffe6ac55ed1d8"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"29731a715001ec3d7bcb5160d65d9e5b1f683ba5","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":248,"context_line":"        \"\"\"Creates a volume from an existing volume snapshot"},{"line_number":249,"context_line":"        Extends the volume if the volume size is more than the snapshot size."},{"line_number":250,"context_line":"        \"\"\""},{"line_number":251,"context_line":"        export_path \u003d self._get_export_path(snapshot[\u0027volume_id\u0027])"},{"line_number":252,"context_line":"        snapshot_path \u003d os.path.join(export_path, snapshot.name)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2Fe2A%3D","line":249,"in_reply_to":"AAAAUH%2F%2FfX8%3D","updated":"2014-01-13 14:07:42.000000000","message":"Done","commit_id":"a16f6731967c4df079db3d35c26ffe6ac55ed1d8"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"6c92b51183bf2f68a01c87b8d2763559aa99ffc9","unresolved":false,"context_lines":[{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":265,"context_line":"        \"\"\"Creates a clone of the specified volume."},{"line_number":266,"context_line":"        Extends the volume if the new volume size is more than"},{"line_number":267,"context_line":"        the source volume size."},{"line_number":268,"context_line":"        \"\"\""},{"line_number":269,"context_line":"        export_path \u003d self._get_export_path(src_vref[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FfX4%3D","line":266,"updated":"2014-01-13 11:40:07.000000000","message":"empty line here","commit_id":"a16f6731967c4df079db3d35c26ffe6ac55ed1d8"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"29731a715001ec3d7bcb5160d65d9e5b1f683ba5","unresolved":false,"context_lines":[{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":265,"context_line":"        \"\"\"Creates a clone of the specified volume."},{"line_number":266,"context_line":"        Extends the volume if the new volume size is more than"},{"line_number":267,"context_line":"        the source volume size."},{"line_number":268,"context_line":"        \"\"\""},{"line_number":269,"context_line":"        export_path \u003d self._get_export_path(src_vref[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FesM%3D","line":266,"in_reply_to":"AAAAUH%2F%2FfX4%3D","updated":"2014-01-13 14:07:42.000000000","message":"Done","commit_id":"a16f6731967c4df079db3d35c26ffe6ac55ed1d8"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"e48fb00d7f9396b407cba0fff0b334431e99d24c","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    Creates file on NFS share for using it as block device on hypervisor."},{"line_number":53,"context_line":"    Version history:"},{"line_number":54,"context_line":"    1.0 - Initial driver"},{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    driver_volume_type \u003d \u0027nfs\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BXO8%3D","line":54,"updated":"2014-01-27 18:18:36.000000000","message":"This is inconsistent with the version you have above.  Thinking this should be 1.0.0.","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"1267418c4c2ef9b3f2eb43d3d87f0c542e6a215e","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    Creates file on NFS share for using it as block device on hypervisor."},{"line_number":53,"context_line":"    Version history:"},{"line_number":54,"context_line":"    1.0 - Initial driver"},{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    driver_volume_type \u003d \u0027nfs\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BTNc%3D","line":54,"in_reply_to":"AAAAUH%2F%2BXO8%3D","updated":"2014-01-29 15:01:05.000000000","message":"Done","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"e48fb00d7f9396b407cba0fff0b334431e99d24c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        self._execute \u003d utils.execute"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def do_setup(self, context):"},{"line_number":75,"context_line":"        \"\"\"Any initialization, the volume driver does while starting.\"\"\""},{"line_number":76,"context_line":"        super(IBMNAS_NFSDriver, self).do_setup(context)"},{"line_number":77,"context_line":"        self._context \u003d context"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BXLM%3D","line":75,"updated":"2014-01-27 18:18:36.000000000","message":"Don\u0027t need a \u0027,\u0027 here.","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"1267418c4c2ef9b3f2eb43d3d87f0c542e6a215e","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        self._execute \u003d utils.execute"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def do_setup(self, context):"},{"line_number":75,"context_line":"        \"\"\"Any initialization, the volume driver does while starting.\"\"\""},{"line_number":76,"context_line":"        super(IBMNAS_NFSDriver, self).do_setup(context)"},{"line_number":77,"context_line":"        self._context \u003d context"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BTNU%3D","line":75,"in_reply_to":"AAAAUH%2F%2BXLM%3D","updated":"2014-01-29 15:01:05.000000000","message":"Done","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"e48fb00d7f9396b407cba0fff0b334431e99d24c","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                         \u0027nas_private_key option\u0027))"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def _get_provider_location(self, volume_id):"},{"line_number":96,"context_line":"        \"\"\"Returns provider location for given volume.\"\"\""},{"line_number":97,"context_line":"        volume \u003d self.db.volume_get(self._context, volume_id)"},{"line_number":98,"context_line":"        return volume[\u0027provider_location\u0027]"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BXLw%3D","line":96,"updated":"2014-01-27 18:18:36.000000000","message":"Suggest adding LOG.debug _(\"enter _get_provider_location: volume_id %s\" % volume_id\")\n\nAs well as an exit at the end of the function.  This is consistent with what the storewize_svc driver does and it greatly helps debug issues.\n\nPlease apply this to all the internal functions.","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"1267418c4c2ef9b3f2eb43d3d87f0c542e6a215e","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                         \u0027nas_private_key option\u0027))"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def _get_provider_location(self, volume_id):"},{"line_number":96,"context_line":"        \"\"\"Returns provider location for given volume.\"\"\""},{"line_number":97,"context_line":"        volume \u003d self.db.volume_get(self._context, volume_id)"},{"line_number":98,"context_line":"        return volume[\u0027provider_location\u0027]"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BSco%3D","line":96,"in_reply_to":"AAAAUH%2F%2BXLw%3D","updated":"2014-01-29 15:01:05.000000000","message":"Done","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"e48fb00d7f9396b407cba0fff0b334431e99d24c","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        \"\"\"Deletes a logical volume.\"\"\""},{"line_number":202,"context_line":"        if not volume[\u0027provider_location\u0027]:"},{"line_number":203,"context_line":"            LOG.warn(_(\u0027Volume %s does not have provider_location specified, \u0027"},{"line_number":204,"context_line":"                     \u0027skipping\u0027), volume[\u0027name\u0027])"},{"line_number":205,"context_line":"            return"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        export_path \u003d self._get_export_path(volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BXN0%3D","line":204,"updated":"2014-01-27 18:18:36.000000000","message":"Suggest finishing this \u0027.\u0027 .","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"1267418c4c2ef9b3f2eb43d3d87f0c542e6a215e","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        \"\"\"Deletes a logical volume.\"\"\""},{"line_number":202,"context_line":"        if not volume[\u0027provider_location\u0027]:"},{"line_number":203,"context_line":"            LOG.warn(_(\u0027Volume %s does not have provider_location specified, \u0027"},{"line_number":204,"context_line":"                     \u0027skipping\u0027), volume[\u0027name\u0027])"},{"line_number":205,"context_line":"            return"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        export_path \u003d self._get_export_path(volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BScI%3D","line":204,"in_reply_to":"AAAAUH%2F%2BXN0%3D","updated":"2014-01-29 15:01:05.000000000","message":"Done","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"}],"cinder/volume/drivers/nfs.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"c17b838facb35055cc4f30b6885e3e694bb6d3d6","unresolved":false,"context_lines":[{"line_number":63,"context_line":"nas_opts \u003d ["},{"line_number":64,"context_line":"    cfg.StrOpt(\u0027nas_ip\u0027,"},{"line_number":65,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":66,"context_line":"               help\u003d\u0027IP address of NAS System\u0027),"},{"line_number":67,"context_line":"    cfg.StrOpt(\u0027nas_login\u0027,"},{"line_number":68,"context_line":"               default\u003d\u0027admin\u0027,"},{"line_number":69,"context_line":"               help\u003d\u0027User name to connect to NAS System\u0027),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FiS4%3D","line":66,"updated":"2014-01-12 08:22:56.000000000","message":"system should be with lower-case s","commit_id":"29c77520ba6c6f5a07dceef5d552a198aba8c428"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"074230ad6181ea1d813fbb3d811110d40f02b697","unresolved":false,"context_lines":[{"line_number":63,"context_line":"nas_opts \u003d ["},{"line_number":64,"context_line":"    cfg.StrOpt(\u0027nas_ip\u0027,"},{"line_number":65,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":66,"context_line":"               help\u003d\u0027IP address of NAS System\u0027),"},{"line_number":67,"context_line":"    cfg.StrOpt(\u0027nas_login\u0027,"},{"line_number":68,"context_line":"               default\u003d\u0027admin\u0027,"},{"line_number":69,"context_line":"               help\u003d\u0027User name to connect to NAS System\u0027),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Fhuk%3D","line":66,"in_reply_to":"AAAAUH%2F%2FiS4%3D","updated":"2014-01-12 15:54:38.000000000","message":"Done","commit_id":"29c77520ba6c6f5a07dceef5d552a198aba8c428"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"c17b838facb35055cc4f30b6885e3e694bb6d3d6","unresolved":false,"context_lines":[{"line_number":66,"context_line":"               help\u003d\u0027IP address of NAS System\u0027),"},{"line_number":67,"context_line":"    cfg.StrOpt(\u0027nas_login\u0027,"},{"line_number":68,"context_line":"               default\u003d\u0027admin\u0027,"},{"line_number":69,"context_line":"               help\u003d\u0027User name to connect to NAS System\u0027),"},{"line_number":70,"context_line":"    cfg.StrOpt(\u0027nas_password\u0027,"},{"line_number":71,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":72,"context_line":"               help\u003d\u0027Password to connect to NAS System\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FiS0%3D","line":69,"updated":"2014-01-12 08:22:56.000000000","message":"ditto","commit_id":"29c77520ba6c6f5a07dceef5d552a198aba8c428"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"074230ad6181ea1d813fbb3d811110d40f02b697","unresolved":false,"context_lines":[{"line_number":66,"context_line":"               help\u003d\u0027IP address of NAS System\u0027),"},{"line_number":67,"context_line":"    cfg.StrOpt(\u0027nas_login\u0027,"},{"line_number":68,"context_line":"               default\u003d\u0027admin\u0027,"},{"line_number":69,"context_line":"               help\u003d\u0027User name to connect to NAS System\u0027),"},{"line_number":70,"context_line":"    cfg.StrOpt(\u0027nas_password\u0027,"},{"line_number":71,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":72,"context_line":"               help\u003d\u0027Password to connect to NAS System\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Fhug%3D","line":69,"in_reply_to":"AAAAUH%2F%2FiS0%3D","updated":"2014-01-12 15:54:38.000000000","message":"Done","commit_id":"29c77520ba6c6f5a07dceef5d552a198aba8c428"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"c17b838facb35055cc4f30b6885e3e694bb6d3d6","unresolved":false,"context_lines":[{"line_number":69,"context_line":"               help\u003d\u0027User name to connect to NAS System\u0027),"},{"line_number":70,"context_line":"    cfg.StrOpt(\u0027nas_password\u0027,"},{"line_number":71,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":72,"context_line":"               help\u003d\u0027Password to connect to NAS System\u0027,"},{"line_number":73,"context_line":"               secret\u003dTrue),"},{"line_number":74,"context_line":"    cfg.IntOpt(\u0027nas_ssh_port\u0027,"},{"line_number":75,"context_line":"               default\u003d22,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FiSw%3D","line":72,"updated":"2014-01-12 08:22:56.000000000","message":"ditto","commit_id":"29c77520ba6c6f5a07dceef5d552a198aba8c428"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"074230ad6181ea1d813fbb3d811110d40f02b697","unresolved":false,"context_lines":[{"line_number":69,"context_line":"               help\u003d\u0027User name to connect to NAS System\u0027),"},{"line_number":70,"context_line":"    cfg.StrOpt(\u0027nas_password\u0027,"},{"line_number":71,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":72,"context_line":"               help\u003d\u0027Password to connect to NAS System\u0027,"},{"line_number":73,"context_line":"               secret\u003dTrue),"},{"line_number":74,"context_line":"    cfg.IntOpt(\u0027nas_ssh_port\u0027,"},{"line_number":75,"context_line":"               default\u003d22,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Fhuc%3D","line":72,"in_reply_to":"AAAAUH%2F%2FiSw%3D","updated":"2014-01-12 15:54:38.000000000","message":"Done","commit_id":"29c77520ba6c6f5a07dceef5d552a198aba8c428"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"c17b838facb35055cc4f30b6885e3e694bb6d3d6","unresolved":false,"context_lines":[{"line_number":73,"context_line":"               secret\u003dTrue),"},{"line_number":74,"context_line":"    cfg.IntOpt(\u0027nas_ssh_port\u0027,"},{"line_number":75,"context_line":"               default\u003d22,"},{"line_number":76,"context_line":"               help\u003d\u0027User name to connect to NAS System\u0027),"},{"line_number":77,"context_line":"    cfg.StrOpt(\u0027nas_private_key\u0027,"},{"line_number":78,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":79,"context_line":"               help\u003d\u0027Filename of private key to use for SSH authentication\u0027),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FiSs%3D","line":76,"updated":"2014-01-12 08:22:56.000000000","message":"ditto","commit_id":"29c77520ba6c6f5a07dceef5d552a198aba8c428"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"074230ad6181ea1d813fbb3d811110d40f02b697","unresolved":false,"context_lines":[{"line_number":73,"context_line":"               secret\u003dTrue),"},{"line_number":74,"context_line":"    cfg.IntOpt(\u0027nas_ssh_port\u0027,"},{"line_number":75,"context_line":"               default\u003d22,"},{"line_number":76,"context_line":"               help\u003d\u0027User name to connect to NAS System\u0027),"},{"line_number":77,"context_line":"    cfg.StrOpt(\u0027nas_private_key\u0027,"},{"line_number":78,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":79,"context_line":"               help\u003d\u0027Filename of private key to use for SSH authentication\u0027),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FhuY%3D","line":76,"in_reply_to":"AAAAUH%2F%2FiSs%3D","updated":"2014-01-12 15:54:38.000000000","message":"Done","commit_id":"29c77520ba6c6f5a07dceef5d552a198aba8c428"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"e48fb00d7f9396b407cba0fff0b334431e99d24c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"nas_opts \u003d ["},{"line_number":64,"context_line":"    cfg.StrOpt(\u0027nas_ip\u0027,"},{"line_number":65,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":66,"context_line":"               help\u003d\u0027IP address or Hostname of NAS system\u0027),"},{"line_number":67,"context_line":"    cfg.StrOpt(\u0027nas_login\u0027,"},{"line_number":68,"context_line":"               default\u003d\u0027admin\u0027,"},{"line_number":69,"context_line":"               help\u003d\u0027User name to connect to NAS system\u0027),"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BXLI%3D","line":66,"updated":"2014-01-27 18:18:36.000000000","message":"Please end this with \u0027.\u0027 .","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"1267418c4c2ef9b3f2eb43d3d87f0c542e6a215e","unresolved":false,"context_lines":[{"line_number":63,"context_line":"nas_opts \u003d ["},{"line_number":64,"context_line":"    cfg.StrOpt(\u0027nas_ip\u0027,"},{"line_number":65,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":66,"context_line":"               help\u003d\u0027IP address or Hostname of NAS system\u0027),"},{"line_number":67,"context_line":"    cfg.StrOpt(\u0027nas_login\u0027,"},{"line_number":68,"context_line":"               default\u003d\u0027admin\u0027,"},{"line_number":69,"context_line":"               help\u003d\u0027User name to connect to NAS system\u0027),"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BKkI%3D","line":66,"in_reply_to":"AAAAUH%2F%2BXLI%3D","updated":"2014-01-29 15:01:05.000000000","message":"Missed to make these changes in patch #17 I think these are minor and I will take care in a subsequent  patch.","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"e48fb00d7f9396b407cba0fff0b334431e99d24c","unresolved":false,"context_lines":[{"line_number":66,"context_line":"               help\u003d\u0027IP address or Hostname of NAS system\u0027),"},{"line_number":67,"context_line":"    cfg.StrOpt(\u0027nas_login\u0027,"},{"line_number":68,"context_line":"               default\u003d\u0027admin\u0027,"},{"line_number":69,"context_line":"               help\u003d\u0027User name to connect to NAS system\u0027),"},{"line_number":70,"context_line":"    cfg.StrOpt(\u0027nas_password\u0027,"},{"line_number":71,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":72,"context_line":"               help\u003d\u0027Password to connect to NAS system\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BXLE%3D","line":69,"updated":"2014-01-27 18:18:36.000000000","message":"Please end this with \u0027.\u0027 .","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"e48fb00d7f9396b407cba0fff0b334431e99d24c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"               help\u003d\u0027User name to connect to NAS system\u0027),"},{"line_number":70,"context_line":"    cfg.StrOpt(\u0027nas_password\u0027,"},{"line_number":71,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":72,"context_line":"               help\u003d\u0027Password to connect to NAS system\u0027,"},{"line_number":73,"context_line":"               secret\u003dTrue),"},{"line_number":74,"context_line":"    cfg.IntOpt(\u0027nas_ssh_port\u0027,"},{"line_number":75,"context_line":"               default\u003d22,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BXLA%3D","line":72,"updated":"2014-01-27 18:18:36.000000000","message":"Please end this with \u0027.\u0027 .","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"e48fb00d7f9396b407cba0fff0b334431e99d24c","unresolved":false,"context_lines":[{"line_number":73,"context_line":"               secret\u003dTrue),"},{"line_number":74,"context_line":"    cfg.IntOpt(\u0027nas_ssh_port\u0027,"},{"line_number":75,"context_line":"               default\u003d22,"},{"line_number":76,"context_line":"               help\u003d\u0027User name to connect to NAS system\u0027),"},{"line_number":77,"context_line":"    cfg.StrOpt(\u0027nas_private_key\u0027,"},{"line_number":78,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":79,"context_line":"               help\u003d\u0027Filename of private key to use for SSH authentication\u0027),"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BXK8%3D","line":76,"updated":"2014-01-27 18:18:36.000000000","message":"Please end this with \u0027.\u0027 .","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"e48fb00d7f9396b407cba0fff0b334431e99d24c","unresolved":false,"context_lines":[{"line_number":76,"context_line":"               help\u003d\u0027User name to connect to NAS system\u0027),"},{"line_number":77,"context_line":"    cfg.StrOpt(\u0027nas_private_key\u0027,"},{"line_number":78,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":79,"context_line":"               help\u003d\u0027Filename of private key to use for SSH authentication\u0027),"},{"line_number":80,"context_line":"]"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BXK4%3D","line":79,"updated":"2014-01-27 18:18:36.000000000","message":"Please end this with \u0027.\u0027 .","commit_id":"8cf1b6f9a1aecd870847f078c796d70e79fa756b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"15409eafc59843dbd172a278ebcde19154888232","unresolved":false,"context_lines":[{"line_number":73,"context_line":"               secret\u003dTrue),"},{"line_number":74,"context_line":"    cfg.IntOpt(\u0027nas_ssh_port\u0027,"},{"line_number":75,"context_line":"               default\u003d22,"},{"line_number":76,"context_line":"               help\u003d\u0027User name to connect to NAS system.\u0027),"},{"line_number":77,"context_line":"    cfg.StrOpt(\u0027nas_private_key\u0027,"},{"line_number":78,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":79,"context_line":"               help\u003d\u0027Filename of private key to use for SSH authentication.\u0027),"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F9kS4%3D","line":76,"updated":"2014-02-06 00:35:35.000000000","message":"Wrong help text.  This should be \"ssh port to use to connect to NAS system.\"","commit_id":"f9db792834e67094d253d554bc1e68d5f7dae94b"}],"etc/cinder/cinder.conf.sample":[{"author":{"_account_id":8278,"name":"Dazhao Yu","email":"dazhaoyu@gmail.com","username":"Dazhao"},"change_message_id":"6cff587f7b32e4ced1e42e8ea20e1e750464f59f","unresolved":false,"context_lines":[{"line_number":1257,"context_line":"# Options defined in cinder.volume.drivers.ibmnas"},{"line_number":1258,"context_line":"#"},{"line_number":1259,"context_line":""},{"line_number":1260,"context_line":"# IP address of IBM NAS System (string value)"},{"line_number":1261,"context_line":"#nas_ip\u003d"},{"line_number":1262,"context_line":""},{"line_number":1263,"context_line":"# User name to connect to IBM NAS System (string value)"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"AAAAUH%2F%2F9AI%3D","line":1260,"updated":"2014-01-06 09:27:15.000000000","message":"Please remove \u0027IBM\u0027 string, because I think other NAS system also can use this driver.","commit_id":"1b82de6e49924f551a2b7e465edb9ba0917cf344"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"bfb432e2b430b934abf4eff6f25375fb7876f0ec","unresolved":false,"context_lines":[{"line_number":1257,"context_line":"# Options defined in cinder.volume.drivers.ibmnas"},{"line_number":1258,"context_line":"#"},{"line_number":1259,"context_line":""},{"line_number":1260,"context_line":"# IP address of IBM NAS System (string value)"},{"line_number":1261,"context_line":"#nas_ip\u003d"},{"line_number":1262,"context_line":""},{"line_number":1263,"context_line":"# User name to connect to IBM NAS System (string value)"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"AAAAUH%2F%2F85U%3D","line":1260,"in_reply_to":"AAAAUH%2F%2F9AI%3D","updated":"2014-01-06 10:05:10.000000000","message":"Agree, I will make this change and move the code reading these parameters from ibmnas.py to nfs.py so that other drivers deriving from the NFS driver can also make use.","commit_id":"1b82de6e49924f551a2b7e465edb9ba0917cf344"},{"author":{"_account_id":9836,"name":"Sandeep Patil","email":"sandeep.patil@in.ibm.com"},"change_message_id":"67947786aba96b2a601dbe2c542497b2da1bea5a","unresolved":false,"context_lines":[{"line_number":1457,"context_line":"# Options defined in cinder.volume.drivers.nfs"},{"line_number":1458,"context_line":"#"},{"line_number":1459,"context_line":""},{"line_number":1460,"context_line":"# IP address of NAS system (string value)"},{"line_number":1461,"context_line":"#nas_ip\u003d"},{"line_number":1462,"context_line":""},{"line_number":1463,"context_line":"# User name to connect to NAS system (string value)"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"AAAAUH%2F%2Fg1U%3D","line":1460,"updated":"2014-01-13 04:40:05.000000000","message":"Instead of IP, it should be NAS host name - as IP can failover.\nOr atleast it should accept both hostname of the NAS and/or IP address.","commit_id":"3be7ae02ce2180fff82e8678619ccb2aa7011cf5"},{"author":{"_account_id":9067,"name":"Nilesh Bhosale","email":"nilesh.bhosale@in.ibm.com","username":"nileshbhosale"},"change_message_id":"5d254eccda2c36bff47f929378aaf877ff4f22fa","unresolved":false,"context_lines":[{"line_number":1457,"context_line":"# Options defined in cinder.volume.drivers.nfs"},{"line_number":1458,"context_line":"#"},{"line_number":1459,"context_line":""},{"line_number":1460,"context_line":"# IP address of NAS system (string value)"},{"line_number":1461,"context_line":"#nas_ip\u003d"},{"line_number":1462,"context_line":""},{"line_number":1463,"context_line":"# User name to connect to NAS system (string value)"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"AAAAUH%2F%2FgTc%3D","line":1460,"in_reply_to":"AAAAUH%2F%2Fg1U%3D","updated":"2014-01-13 08:34:08.000000000","message":"Incorporated as per Avishay\u0027s suggestion in patch 10.","commit_id":"3be7ae02ce2180fff82e8678619ccb2aa7011cf5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"7b4cc0c4ddac52e4ae8d03c32e7a149699dd376b","unresolved":false,"context_lines":[{"line_number":1457,"context_line":"# Options defined in cinder.volume.drivers.nfs"},{"line_number":1458,"context_line":"#"},{"line_number":1459,"context_line":""},{"line_number":1460,"context_line":"# IP address of NAS system (string value)"},{"line_number":1461,"context_line":"#nas_ip\u003d"},{"line_number":1462,"context_line":""},{"line_number":1463,"context_line":"# User name to connect to NAS system (string value)"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"AAAAUH%2F%2Fgwk%3D","line":1460,"in_reply_to":"AAAAUH%2F%2Fg1U%3D","updated":"2014-01-13 05:44:05.000000000","message":"Yes, \"Hostame or IP address of NAS system\".  I think we can keep the option name nas_ip for simplicity and compatibility with san_ip.","commit_id":"3be7ae02ce2180fff82e8678619ccb2aa7011cf5"}]}
