)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":22664,"name":"William Durairaj","email":"william.dur.sandanaraj@hpe.com","username":"william.durairaj"},"change_message_id":"934de458e848d69409162d5c2c38d294087a3ede","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     raghavendrat \u003craghavendra.tilay@hpe.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-01-30 23:33:33 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"3PAR : Creation of volume from snapshot"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A new extra spec has been added on the volume."},{"line_number":10,"context_line":"Name - hpe3par:convert_to_base"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fdfeff1_0a564607","line":7,"updated":"2019-01-31 09:44:59.000000000","message":"This can read as \"3PAR: Provide capability to create volume as either as a snapshot/independent copy\"","commit_id":"2a3ccf79d4f2f6377eb8f1eeaa40f56f556178ff"},{"author":{"_account_id":22664,"name":"William Durairaj","email":"william.dur.sandanaraj@hpe.com","username":"william.durairaj"},"change_message_id":"934de458e848d69409162d5c2c38d294087a3ede","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Name - hpe3par:convert_to_base"},{"line_number":11,"context_line":"Value - True/False; defaults to True"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"True: Volume (from snapshot) is created independently i.e HOS8 behavior"},{"line_number":14,"context_line":"False: Volume (from snapshot) is created as child of snapshot i.e HOS5 behavior"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Idda5512d8e35da401ee232524ec1d1fcd03bf9e2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fdfeff1_8a49d660","line":13,"updated":"2019-01-31 09:44:59.000000000","message":"HOS8 -- Remove references, since this is on a community cinder code.","commit_id":"2a3ccf79d4f2f6377eb8f1eeaa40f56f556178ff"},{"author":{"_account_id":22664,"name":"William Durairaj","email":"william.dur.sandanaraj@hpe.com","username":"william.durairaj"},"change_message_id":"934de458e848d69409162d5c2c38d294087a3ede","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"True: Volume (from snapshot) is created independently i.e HOS8 behavior"},{"line_number":14,"context_line":"False: Volume (from snapshot) is created as child of snapshot i.e HOS5 behavior"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Idda5512d8e35da401ee232524ec1d1fcd03bf9e2"},{"line_number":17,"context_line":"Closes-Bug: #1814027"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fdfeff1_2a722aae","line":15,"updated":"2019-01-31 09:44:59.000000000","message":"Same as above.","commit_id":"2a3ccf79d4f2f6377eb8f1eeaa40f56f556178ff"},{"author":{"_account_id":23601,"name":"michael","display_name":"michael-mcaleer","email":"Michael.Mcaleer@dell.com","username":"michael-mcaleer"},"change_message_id":"0303039b6293224e1e58b4e75bba434da95b99c4","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     raghavendrat \u003craghavendra.tilay@hpe.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-02-14 02:57:45 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"3PAR: Provide capability to create volume either as a snapshot/independent copy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A new extra spec has been added on the volume."},{"line_number":10,"context_line":"Name - hpe3par:convert_to_base"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9fdfeff1_accddf66","line":7,"updated":"2019-02-14 16:04:06.000000000","message":"Commit message doesn\u0027t conform to message structure standards:\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure\n\nThere should be wrapping on all lines after the first at 72 characters.","commit_id":"8c38bbe0f20ad1ab6e86dc8675203e2513daf636"}],"cinder/tests/unit/volume/drivers/hpe/test_hpe3par.py":[{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"aeca1e0cc4e0b8b175008e6820d032e17595b0d7","unresolved":false,"context_lines":[{"line_number":3551,"context_line":"                self.standard_logout)"},{"line_number":3552,"context_line":""},{"line_number":3553,"context_line":"    @mock.patch.object(volume_types, \u0027get_volume_type\u0027)"},{"line_number":3554,"context_line":"    def test_create_volume_from_snapshot_hos5(self, _mock_volume_types):"},{"line_number":3555,"context_line":"        # setup_mock_client drive with default configuration"},{"line_number":3556,"context_line":"        # and return the mock HTTP 3PAR client"},{"line_number":3557,"context_line":"        mock_client \u003d self.setup_driver()"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_29858acf","line":3554,"range":{"start_line":3554,"start_character":41,"end_line":3554,"end_character":45},"updated":"2019-02-13 01:52:27.000000000","message":"nit: Could you change this to the real means of this test? otherwise, it makes me confused.","commit_id":"eb659af1a2c852e921f5cebb9cd2d4754f65175a"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"aeca1e0cc4e0b8b175008e6820d032e17595b0d7","unresolved":false,"context_lines":[{"line_number":3590,"context_line":"                self.standard_logout)"},{"line_number":3591,"context_line":""},{"line_number":3592,"context_line":"    @mock.patch.object(volume_types, \u0027get_volume_type\u0027)"},{"line_number":3593,"context_line":"    def test_create_volume_from_snapshot_hos8(self, _mock_volume_types):"},{"line_number":3594,"context_line":"        # setup_mock_client drive with default configuration"},{"line_number":3595,"context_line":"        # and return the mock HTTP 3PAR client"},{"line_number":3596,"context_line":"        conf \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_e953026a","line":3593,"range":{"start_line":3593,"start_character":41,"end_line":3593,"end_character":45},"updated":"2019-02-13 01:52:27.000000000","message":"ditto","commit_id":"eb659af1a2c852e921f5cebb9cd2d4754f65175a"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"aeca1e0cc4e0b8b175008e6820d032e17595b0d7","unresolved":false,"context_lines":[{"line_number":3644,"context_line":"                self.standard_logout)"},{"line_number":3645,"context_line":""},{"line_number":3646,"context_line":"    @mock.patch.object(volume_types, \u0027get_volume_type\u0027)"},{"line_number":3647,"context_line":"    def test_create_volume_from_snapshot_hos5_and_extend("},{"line_number":3648,"context_line":"            self, _mock_volume_types):"},{"line_number":3649,"context_line":"        # setup_mock_client drive with default configuration"},{"line_number":3650,"context_line":"        # and return the mock HTTP 3PAR client"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_894cb6c8","line":3647,"range":{"start_line":3647,"start_character":41,"end_line":3647,"end_character":45},"updated":"2019-02-13 01:52:27.000000000","message":"ditto","commit_id":"eb659af1a2c852e921f5cebb9cd2d4754f65175a"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"aeca1e0cc4e0b8b175008e6820d032e17595b0d7","unresolved":false,"context_lines":[{"line_number":3701,"context_line":"                self.standard_logout)"},{"line_number":3702,"context_line":""},{"line_number":3703,"context_line":"    @mock.patch.object(volume_types, \u0027get_volume_type\u0027)"},{"line_number":3704,"context_line":"    def test_create_volume_from_snapshot_hos8_and_extend("},{"line_number":3705,"context_line":"            self, _mock_volume_types):"},{"line_number":3706,"context_line":"        # setup_mock_client drive with default configuration"},{"line_number":3707,"context_line":"        # and return the mock HTTP 3PAR client"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_a9497ab7","line":3704,"range":{"start_line":3704,"start_character":41,"end_line":3704,"end_character":45},"updated":"2019-02-13 01:52:27.000000000","message":"ditto","commit_id":"eb659af1a2c852e921f5cebb9cd2d4754f65175a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"28c7fc1a6fe8950d7cf87b578987e8ac8781b7f1","unresolved":false,"context_lines":[{"line_number":3509,"context_line":"        # setup_mock_client drive with default configuration"},{"line_number":3510,"context_line":"        # and return the mock HTTP 3PAR client"},{"line_number":3511,"context_line":"        mock_client \u003d self.setup_driver()"},{"line_number":3512,"context_line":"        _mock_volume_types.return_value \u003d {"},{"line_number":3513,"context_line":"            \u0027name\u0027: \u0027hos\u0027,"},{"line_number":3514,"context_line":"            \u0027extra_specs\u0027: {"},{"line_number":3515,"context_line":"                \u0027convert_to_base\u0027: False,"},{"line_number":3516,"context_line":"                \u0027volume_type\u0027: self.volume_type_hos}}"},{"line_number":3517,"context_line":"        with mock.patch.object(hpecommon.HPE3PARCommon,"},{"line_number":3518,"context_line":"                               \u0027_create_client\u0027) as mock_create_client:"},{"line_number":3519,"context_line":"            mock_create_client.return_value \u003d mock_client"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fce034c_14513fd9","line":3516,"range":{"start_line":3512,"start_character":8,"end_line":3516,"end_character":53},"updated":"2019-04-12 05:54:14.000000000","message":"this doesn\u0027t seem right,\nshouldn\u0027t this be\n_mock_volume_types \u003d self.volume_type_hos\nthis code generates volume type with redundant parameters \u0027name\u0027 and \u0027convert_to_base\u0027\n\nor\n\nthe volume_type_hos dict needs to be modified to hold only extra_specs values.","commit_id":"575199b42f33f53a12cc73c0dfc126fe61e9b478"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ffd9cc8df7393e85d1fc652c58360405c9919940","unresolved":false,"context_lines":[{"line_number":3509,"context_line":"        # setup_mock_client drive with default configuration"},{"line_number":3510,"context_line":"        # and return the mock HTTP 3PAR client"},{"line_number":3511,"context_line":"        mock_client \u003d self.setup_driver()"},{"line_number":3512,"context_line":"        _mock_volume_types.return_value \u003d {"},{"line_number":3513,"context_line":"            \u0027name\u0027: \u0027hos\u0027,"},{"line_number":3514,"context_line":"            \u0027extra_specs\u0027: {"},{"line_number":3515,"context_line":"                \u0027convert_to_base\u0027: False,"},{"line_number":3516,"context_line":"                \u0027volume_type\u0027: self.volume_type_hos}}"},{"line_number":3517,"context_line":"        with mock.patch.object(hpecommon.HPE3PARCommon,"},{"line_number":3518,"context_line":"                               \u0027_create_client\u0027) as mock_create_client:"},{"line_number":3519,"context_line":"            mock_create_client.return_value \u003d mock_client"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fce034c_7459a3fc","line":3516,"range":{"start_line":3512,"start_character":8,"end_line":3516,"end_character":53},"in_reply_to":"3fce034c_14513fd9","updated":"2019-04-12 05:56:42.000000000","message":"Refer to the api-ref guide[1] for API response parameters and structure\n[1] https://developer.openstack.org/api-ref/block-storage/v3/?expanded\u003dshow-volume-type-detail-detail#show-volume-type-detail","commit_id":"575199b42f33f53a12cc73c0dfc126fe61e9b478"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f6728359604f53e125922d1d949a75064bec9974","unresolved":false,"context_lines":[{"line_number":3509,"context_line":"        # setup_mock_client drive with default configuration"},{"line_number":3510,"context_line":"        # and return the mock HTTP 3PAR client"},{"line_number":3511,"context_line":"        mock_client \u003d self.setup_driver()"},{"line_number":3512,"context_line":"        volume_type_hos \u003d self.volume_type_hos"},{"line_number":3513,"context_line":"        volume_type_hos[\u0027extra_specs\u0027][\u0027convert_to_base\u0027] \u003d False"},{"line_number":3514,"context_line":"        _mock_volume_types.return_value \u003d volume_type_hos"},{"line_number":3515,"context_line":""},{"line_number":3516,"context_line":"        with mock.patch.object(hpecommon.HPE3PARCommon,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fce034c_1f7e33e4","line":3513,"range":{"start_line":3512,"start_character":0,"end_line":3513,"end_character":65},"updated":"2019-04-12 13:57:34.000000000","message":"these lines are not required since we\u0027ve False as default value","commit_id":"d06e9a6652be9c88c649640b0bc1623346ebfc72"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f6728359604f53e125922d1d949a75064bec9974","unresolved":false,"context_lines":[{"line_number":3511,"context_line":"        mock_client \u003d self.setup_driver()"},{"line_number":3512,"context_line":"        volume_type_hos \u003d self.volume_type_hos"},{"line_number":3513,"context_line":"        volume_type_hos[\u0027extra_specs\u0027][\u0027convert_to_base\u0027] \u003d False"},{"line_number":3514,"context_line":"        _mock_volume_types.return_value \u003d volume_type_hos"},{"line_number":3515,"context_line":""},{"line_number":3516,"context_line":"        with mock.patch.object(hpecommon.HPE3PARCommon,"},{"line_number":3517,"context_line":"                               \u0027_create_client\u0027) as mock_create_client:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fce034c_5f735b16","line":3514,"range":{"start_line":3514,"start_character":42,"end_line":3514,"end_character":57},"updated":"2019-04-12 13:57:34.000000000","message":"self.volume_type_hos","commit_id":"d06e9a6652be9c88c649640b0bc1623346ebfc72"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f6728359604f53e125922d1d949a75064bec9974","unresolved":false,"context_lines":[{"line_number":3535,"context_line":"                    \u0027oss-L4I73ONuTci9Fd4ceij-MQ\u0027,"},{"line_number":3536,"context_line":"                    {"},{"line_number":3537,"context_line":"                        \u0027comment\u0027: comment,"},{"line_number":3538,"context_line":"                        \u0027readOnly\u0027: False})]"},{"line_number":3539,"context_line":""},{"line_number":3540,"context_line":"            mock_client.assert_has_calls("},{"line_number":3541,"context_line":"                self.standard_login +"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fce034c_3f4f6fbe","line":3538,"range":{"start_line":3538,"start_character":36,"end_line":3538,"end_character":41},"updated":"2019-04-12 13:57:34.000000000","message":"i think child snapshots are readonly.\nshouldn\u0027t this be True?","commit_id":"d06e9a6652be9c88c649640b0bc1623346ebfc72"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"42a18a24e0e07ba0e2beae3d31cb5f32d14b4b11","unresolved":false,"context_lines":[{"line_number":3535,"context_line":"                    \u0027oss-L4I73ONuTci9Fd4ceij-MQ\u0027,"},{"line_number":3536,"context_line":"                    {"},{"line_number":3537,"context_line":"                        \u0027comment\u0027: comment,"},{"line_number":3538,"context_line":"                        \u0027readOnly\u0027: False})]"},{"line_number":3539,"context_line":""},{"line_number":3540,"context_line":"            mock_client.assert_has_calls("},{"line_number":3541,"context_line":"                self.standard_login +"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fce034c_c5b53cf0","line":3538,"range":{"start_line":3538,"start_character":36,"end_line":3538,"end_character":41},"in_reply_to":"3fce034c_3f4f6fbe","updated":"2019-04-12 14:47:55.000000000","message":"Ignore this. I misinterpreted the info read in hpe3par docs.","commit_id":"d06e9a6652be9c88c649640b0bc1623346ebfc72"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f6728359604f53e125922d1d949a75064bec9974","unresolved":false,"context_lines":[{"line_number":3606,"context_line":"            \u0027getVolume.return_value\u0027: {}"},{"line_number":3607,"context_line":"        }"},{"line_number":3608,"context_line":"        mock_client \u003d self.setup_driver(mock_conf\u003dconf)"},{"line_number":3609,"context_line":"        volume_type_hos \u003d self.volume_type_hos"},{"line_number":3610,"context_line":"        volume_type_hos[\u0027extra_specs\u0027][\u0027convert_to_base\u0027] \u003d False"},{"line_number":3611,"context_line":"        _mock_volume_types.return_value \u003d volume_type_hos"},{"line_number":3612,"context_line":"        with mock.patch.object(hpecommon.HPE3PARCommon,"},{"line_number":3613,"context_line":"                               \u0027_create_client\u0027) as mock_create_client:"},{"line_number":3614,"context_line":"            mock_create_client.return_value \u003d mock_client"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fce034c_1f9ab313","line":3611,"range":{"start_line":3609,"start_character":8,"end_line":3611,"end_character":57},"updated":"2019-04-12 13:57:34.000000000","message":"same","commit_id":"d06e9a6652be9c88c649640b0bc1623346ebfc72"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f6728359604f53e125922d1d949a75064bec9974","unresolved":false,"context_lines":[{"line_number":3635,"context_line":"                    \u0027oss-L4I73ONuTci9Fd4ceij-MQ\u0027,"},{"line_number":3636,"context_line":"                    {"},{"line_number":3637,"context_line":"                        \u0027comment\u0027: comment,"},{"line_number":3638,"context_line":"                        \u0027readOnly\u0027: False}),"},{"line_number":3639,"context_line":"                mock.call.copyVolume("},{"line_number":3640,"context_line":"                    osv_matcher, omv_matcher, HPE3PAR_CPG, mock.ANY),"},{"line_number":3641,"context_line":"                mock.call.getTask(mock.ANY),"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fce034c_ff624716","line":3638,"range":{"start_line":3638,"start_character":24,"end_line":3638,"end_character":41},"updated":"2019-04-12 13:57:34.000000000","message":"same","commit_id":"d06e9a6652be9c88c649640b0bc1623346ebfc72"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"77f05ad14efb5b7b3efa5a8df68d2b0ba4f38b64","unresolved":false,"context_lines":[{"line_number":3509,"context_line":"        # setup_mock_client drive with default configuration"},{"line_number":3510,"context_line":"        # and return the mock HTTP 3PAR client"},{"line_number":3511,"context_line":"        mock_client \u003d self.setup_driver()"},{"line_number":3512,"context_line":"        volume_type_hos \u003d self.volume_type_hos"},{"line_number":3513,"context_line":"        volume_type_hos[\u0027extra_specs\u0027][\u0027convert_to_base\u0027] \u003d False"},{"line_number":3514,"context_line":"        _mock_volume_types.return_value \u003d volume_type_hos"},{"line_number":3515,"context_line":""},{"line_number":3516,"context_line":"        with mock.patch.object(hpecommon.HPE3PARCommon,"}],"source_content_type":"text/x-python","patch_set":14,"id":"ffb9cba7_3490c443","line":3513,"range":{"start_line":3512,"start_character":0,"end_line":3513,"end_character":65},"updated":"2019-04-25 13:38:00.000000000","message":"i still feel these lines are redundant. if there is a strong reason behind keeping this redundancy then please share the details.","commit_id":"f8084991284acfd8e0cd80ed456a83bcec6d5dcc"}],"cinder/volume/drivers/hpe/hpe_3par_common.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"57311867f38b23abc8df0f3bf5188f2c718d3a5b","unresolved":false,"context_lines":[{"line_number":2085,"context_line":"            self._get_key_value(hpe3par_keys, \u0027group_replication\u0027))"},{"line_number":2086,"context_line":""},{"line_number":2087,"context_line":"        # by default, follow HOS8 behaviour i.e convert_to_base is True"},{"line_number":2088,"context_line":"        convert_to_base \u003d self._get_key_value(hpe3par_keys, \u0027convert_to_base\u0027, \u0027True\u0027)"},{"line_number":2089,"context_line":""},{"line_number":2090,"context_line":"        # if provisioning is not set use thin"},{"line_number":2091,"context_line":"        default_prov \u003d self.valid_prov_values[0]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_d9225eb9","line":2088,"range":{"start_line":2088,"start_character":79,"end_line":2088,"end_character":85},"updated":"2019-01-31 08:38:21.000000000","message":"This can be used without quotes","commit_id":"2a3ccf79d4f2f6377eb8f1eeaa40f56f556178ff"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"cbd4d91faad135c12368ebf7c49f81e1012c19d2","unresolved":false,"context_lines":[{"line_number":2085,"context_line":"            self._get_key_value(hpe3par_keys, \u0027group_replication\u0027))"},{"line_number":2086,"context_line":""},{"line_number":2087,"context_line":"        # by default, follow HOS8 behaviour i.e convert_to_base is True"},{"line_number":2088,"context_line":"        convert_to_base \u003d self._get_key_value(hpe3par_keys, \u0027convert_to_base\u0027, \u0027True\u0027)"},{"line_number":2089,"context_line":""},{"line_number":2090,"context_line":"        # if provisioning is not set use thin"},{"line_number":2091,"context_line":"        default_prov \u003d self.valid_prov_values[0]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_3d2fcd88","line":2088,"range":{"start_line":2088,"start_character":79,"end_line":2088,"end_character":85},"in_reply_to":"9fdfeff1_aa2ffa85","updated":"2019-01-31 14:37:59.000000000","message":"I would still pretty much suggest converting the string value to boolean (if it isn\u0027t much effort) for a clean code,\nconvert_to_base \u003d self._get_key_value(hpe3par_keys, \u0027convert_to_base\u0027, True)\nif convert_to_base \u003d\u003d \u0027True\u0027 or convert_to_base \u003d\u003d \u0027true\u0027:\n    convert_to_base \u003d True\nelse:\n    convert_to_base \u003d False","commit_id":"2a3ccf79d4f2f6377eb8f1eeaa40f56f556178ff"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"8d74964da19437e38ff34de3c9e9b810020a7ff5","unresolved":false,"context_lines":[{"line_number":2085,"context_line":"            self._get_key_value(hpe3par_keys, \u0027group_replication\u0027))"},{"line_number":2086,"context_line":""},{"line_number":2087,"context_line":"        # by default, follow HOS8 behaviour i.e convert_to_base is True"},{"line_number":2088,"context_line":"        convert_to_base \u003d self._get_key_value(hpe3par_keys, \u0027convert_to_base\u0027, \u0027True\u0027)"},{"line_number":2089,"context_line":""},{"line_number":2090,"context_line":"        # if provisioning is not set use thin"},{"line_number":2091,"context_line":"        default_prov \u003d self.valid_prov_values[0]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_aa2ffa85","line":2088,"range":{"start_line":2088,"start_character":79,"end_line":2088,"end_character":85},"in_reply_to":"9fdfeff1_d9225eb9","updated":"2019-01-31 09:45:11.000000000","message":"In case end-user sets extra spec via GUI, it will appear as string value. So quotes have been used.","commit_id":"2a3ccf79d4f2f6377eb8f1eeaa40f56f556178ff"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"57311867f38b23abc8df0f3bf5188f2c718d3a5b","unresolved":false,"context_lines":[{"line_number":2627,"context_line":""},{"line_number":2628,"context_line":"            self.client.createSnapshot(volume_name, snap_name, optional)"},{"line_number":2629,"context_line":""},{"line_number":2630,"context_line":"            convert_to_base \u003d self._get_key_value(hpe3par_keys, \u0027convert_to_base\u0027, \u0027True\u0027)"},{"line_number":2631,"context_line":"            LOG.debug(\"convert_to_base: \" + convert_to_base)"},{"line_number":2632,"context_line":"            if convert_to_base.lower() \u003d\u003d \u0027true\u0027:"},{"line_number":2633,"context_line":"                # Convert snapshot volume to base volume type"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_7906d222","line":2630,"range":{"start_line":2630,"start_character":83,"end_line":2630,"end_character":89},"updated":"2019-01-31 08:38:21.000000000","message":"Ditto","commit_id":"2a3ccf79d4f2f6377eb8f1eeaa40f56f556178ff"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"57311867f38b23abc8df0f3bf5188f2c718d3a5b","unresolved":false,"context_lines":[{"line_number":2629,"context_line":""},{"line_number":2630,"context_line":"            convert_to_base \u003d self._get_key_value(hpe3par_keys, \u0027convert_to_base\u0027, \u0027True\u0027)"},{"line_number":2631,"context_line":"            LOG.debug(\"convert_to_base: \" + convert_to_base)"},{"line_number":2632,"context_line":"            if convert_to_base.lower() \u003d\u003d \u0027true\u0027:"},{"line_number":2633,"context_line":"                # Convert snapshot volume to base volume type"},{"line_number":2634,"context_line":"                LOG.debug(\u0027Converting to base volume type: %s.\u0027,"},{"line_number":2635,"context_line":"                          volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_14218d9f","line":2632,"range":{"start_line":2632,"start_character":12,"end_line":2632,"end_character":49},"updated":"2019-01-31 08:38:21.000000000","message":"why do we need to store the value as string and convert to lowercase here when we can directly use boolean types?","commit_id":"2a3ccf79d4f2f6377eb8f1eeaa40f56f556178ff"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"9f106b8bd45db70bf13888bfb7ce75329230589f","unresolved":false,"context_lines":[{"line_number":2629,"context_line":""},{"line_number":2630,"context_line":"            convert_to_base \u003d self._get_key_value(hpe3par_keys, \u0027convert_to_base\u0027, \u0027True\u0027)"},{"line_number":2631,"context_line":"            LOG.debug(\"convert_to_base: \" + convert_to_base)"},{"line_number":2632,"context_line":"            if convert_to_base.lower() \u003d\u003d \u0027true\u0027:"},{"line_number":2633,"context_line":"                # Convert snapshot volume to base volume type"},{"line_number":2634,"context_line":"                LOG.debug(\u0027Converting to base volume type: %s.\u0027,"},{"line_number":2635,"context_line":"                          volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_ea718277","line":2632,"range":{"start_line":2632,"start_character":12,"end_line":2632,"end_character":49},"in_reply_to":"9fdfeff1_14218d9f","updated":"2019-01-31 09:53:17.000000000","message":"Reason for using string value instead of boolean is addressed earlier [replied to comment at line 2088].\nHere conversion to lowercase is done because, end-user can specify value in either uppercase or lowercase.","commit_id":"2a3ccf79d4f2f6377eb8f1eeaa40f56f556178ff"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"57311867f38b23abc8df0f3bf5188f2c718d3a5b","unresolved":false,"context_lines":[{"line_number":2638,"context_line":"                LOG.debug(\"volume is created as child of snapshot\")"},{"line_number":2639,"context_line":""},{"line_number":2640,"context_line":"            # Grow the snapshot if needed"},{"line_number":2641,"context_line":"            growth_size \u003d volume[\u0027size\u0027] - snapshot[\u0027volume_size\u0027]"},{"line_number":2642,"context_line":"            if growth_size \u003e 0:"},{"line_number":2643,"context_line":"                try:"},{"line_number":2644,"context_line":"                    LOG.debug(\"Size of volume is greater than snapshot\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_1440ad06","line":2641,"range":{"start_line":2641,"start_character":12,"end_line":2641,"end_character":23},"updated":"2019-01-31 08:38:21.000000000","message":"just out of curiosity, where is the handling when this value turns to be negative?","commit_id":"2a3ccf79d4f2f6377eb8f1eeaa40f56f556178ff"},{"author":{"_account_id":22664,"name":"William Durairaj","email":"william.dur.sandanaraj@hpe.com","username":"william.durairaj"},"change_message_id":"ab8cf8a9fd19552a0552a4cee1ad5e295f8f9a50","unresolved":false,"context_lines":[{"line_number":2638,"context_line":"                LOG.debug(\"volume is created as child of snapshot\")"},{"line_number":2639,"context_line":""},{"line_number":2640,"context_line":"            # Grow the snapshot if needed"},{"line_number":2641,"context_line":"            growth_size \u003d volume[\u0027size\u0027] - snapshot[\u0027volume_size\u0027]"},{"line_number":2642,"context_line":"            if growth_size \u003e 0:"},{"line_number":2643,"context_line":"                try:"},{"line_number":2644,"context_line":"                    LOG.debug(\"Size of volume is greater than snapshot\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_ea950288","line":2641,"range":{"start_line":2641,"start_character":12,"end_line":2641,"end_character":23},"in_reply_to":"9fdfeff1_1440ad06","updated":"2019-01-31 09:47:43.000000000","message":"Snapshot volume size will be always equivalent to the base volume in 3PAR. So, the \"growth_size\" will not return negative value.","commit_id":"2a3ccf79d4f2f6377eb8f1eeaa40f56f556178ff"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"57311867f38b23abc8df0f3bf5188f2c718d3a5b","unresolved":false,"context_lines":[{"line_number":2642,"context_line":"            if growth_size \u003e 0:"},{"line_number":2643,"context_line":"                try:"},{"line_number":2644,"context_line":"                    LOG.debug(\"Size of volume is greater than snapshot\")"},{"line_number":2645,"context_line":"                    if convert_to_base.lower() \u003d\u003d \u0027false\u0027:"},{"line_number":2646,"context_line":"                        # Convert snapshot volume to base volume type"},{"line_number":2647,"context_line":"                        LOG.debug(\u0027Converting to base volume type: %s.\u0027,"},{"line_number":2648,"context_line":"                                  volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_d4430541","line":2645,"range":{"start_line":2645,"start_character":23,"end_line":2645,"end_character":57},"updated":"2019-01-31 08:38:21.000000000","message":"ditto","commit_id":"2a3ccf79d4f2f6377eb8f1eeaa40f56f556178ff"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ce7b9188a493454b06a95885787fb0ea2ed534ac","unresolved":false,"context_lines":[{"line_number":2086,"context_line":""},{"line_number":2087,"context_line":"        # by default, set convert_to_base to True"},{"line_number":2088,"context_line":"        convert_to_base \u003d self._get_key_value("},{"line_number":2089,"context_line":"            hpe3par_keys, \u0027convert_to_base\u0027, \u0027True\u0027)"},{"line_number":2090,"context_line":"        if isinstance(convert_to_base, six.string_types):"},{"line_number":2091,"context_line":"            if convert_to_base.lower() \u003d\u003d \u0027true\u0027:"},{"line_number":2092,"context_line":"                convert_to_base \u003d True"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_9c2a687c","line":2089,"range":{"start_line":2089,"start_character":45,"end_line":2089,"end_character":51},"updated":"2019-02-01 13:36:26.000000000","message":"since we\u0027re doing a string instance check in the next line, this can be also changed to True(boolean)","commit_id":"c634c8e1b7f3a6f9c146019ff26ae1d6c974d64c"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"ce7b9188a493454b06a95885787fb0ea2ed534ac","unresolved":false,"context_lines":[{"line_number":2633,"context_line":"            self.client.createSnapshot(volume_name, snap_name, optional)"},{"line_number":2634,"context_line":""},{"line_number":2635,"context_line":"            convert_to_base \u003d self._get_key_value("},{"line_number":2636,"context_line":"                hpe3par_keys, \u0027convert_to_base\u0027, \u0027True\u0027)"},{"line_number":2637,"context_line":"            if isinstance(convert_to_base, six.string_types):"},{"line_number":2638,"context_line":"                if convert_to_base.lower() \u003d\u003d \u0027true\u0027:"},{"line_number":2639,"context_line":"                    convert_to_base \u003d True"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_1c3e78c0","line":2636,"range":{"start_line":2636,"start_character":49,"end_line":2636,"end_character":55},"updated":"2019-02-01 13:36:26.000000000","message":"ditto","commit_id":"c634c8e1b7f3a6f9c146019ff26ae1d6c974d64c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c94d7c65d4f154cc5049d753fc2710bd3477efec","unresolved":false,"context_lines":[{"line_number":2085,"context_line":"            self._get_key_value(hpe3par_keys, \u0027group_replication\u0027))"},{"line_number":2086,"context_line":""},{"line_number":2087,"context_line":"        # by default, set convert_to_base to True"},{"line_number":2088,"context_line":"        convert_to_base \u003d self._get_key_value("},{"line_number":2089,"context_line":"            hpe3par_keys, \u0027convert_to_base\u0027, True)"},{"line_number":2090,"context_line":"        if isinstance(convert_to_base, six.string_types):"},{"line_number":2091,"context_line":"            if convert_to_base.lower() \u003d\u003d \u0027true\u0027:"},{"line_number":2092,"context_line":"                convert_to_base \u003d True"},{"line_number":2093,"context_line":"            else:"},{"line_number":2094,"context_line":"                convert_to_base \u003d False"},{"line_number":2095,"context_line":""},{"line_number":2096,"context_line":"        # if provisioning is not set use thin"},{"line_number":2097,"context_line":"        default_prov \u003d self.valid_prov_values[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_4b9b3872","line":2094,"range":{"start_line":2088,"start_character":0,"end_line":2094,"end_character":39},"updated":"2019-02-12 10:11:20.000000000","message":"You should use `cinder.utils.get_bool_param`:\n\n  convert_to_base \u003d utils.get_bool_param(hpe3par_keys or {}, \n                                         \u0027convert_to_base\u0027,\n                                         True)","commit_id":"eb659af1a2c852e921f5cebb9cd2d4754f65175a"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"aeca1e0cc4e0b8b175008e6820d032e17595b0d7","unresolved":false,"context_lines":[{"line_number":2085,"context_line":"            self._get_key_value(hpe3par_keys, \u0027group_replication\u0027))"},{"line_number":2086,"context_line":""},{"line_number":2087,"context_line":"        # by default, set convert_to_base to True"},{"line_number":2088,"context_line":"        convert_to_base \u003d self._get_key_value("},{"line_number":2089,"context_line":"            hpe3par_keys, \u0027convert_to_base\u0027, True)"},{"line_number":2090,"context_line":"        if isinstance(convert_to_base, six.string_types):"},{"line_number":2091,"context_line":"            if convert_to_base.lower() \u003d\u003d \u0027true\u0027:"},{"line_number":2092,"context_line":"                convert_to_base \u003d True"},{"line_number":2093,"context_line":"            else:"},{"line_number":2094,"context_line":"                convert_to_base \u003d False"},{"line_number":2095,"context_line":""},{"line_number":2096,"context_line":"        # if provisioning is not set use thin"},{"line_number":2097,"context_line":"        default_prov \u003d self.valid_prov_values[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_69cdd22f","line":2094,"range":{"start_line":2088,"start_character":0,"end_line":2094,"end_character":39},"in_reply_to":"9fdfeff1_4b9b3872","updated":"2019-02-13 01:52:27.000000000","message":"++","commit_id":"eb659af1a2c852e921f5cebb9cd2d4754f65175a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c94d7c65d4f154cc5049d753fc2710bd3477efec","unresolved":false,"context_lines":[{"line_number":2632,"context_line":""},{"line_number":2633,"context_line":"            self.client.createSnapshot(volume_name, snap_name, optional)"},{"line_number":2634,"context_line":""},{"line_number":2635,"context_line":"            # by default, set convert_to_base to True"},{"line_number":2636,"context_line":"            convert_to_base \u003d self._get_key_value("},{"line_number":2637,"context_line":"                hpe3par_keys, \u0027convert_to_base\u0027, True)"},{"line_number":2638,"context_line":"            if isinstance(convert_to_base, six.string_types):"},{"line_number":2639,"context_line":"                if convert_to_base.lower() \u003d\u003d \u0027true\u0027:"},{"line_number":2640,"context_line":"                    convert_to_base \u003d True"},{"line_number":2641,"context_line":"                else:"},{"line_number":2642,"context_line":"                    convert_to_base \u003d False"},{"line_number":2643,"context_line":"            LOG.debug(\"convert_to_base: \" + str(convert_to_base))"},{"line_number":2644,"context_line":""},{"line_number":2645,"context_line":"            if convert_to_base:"},{"line_number":2646,"context_line":"                # Convert snapshot volume to base volume type"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_6b715c44","line":2643,"range":{"start_line":2635,"start_character":0,"end_line":2643,"end_character":65},"updated":"2019-02-12 10:11:20.000000000","message":"Same as above, better use `get_bool_param`","commit_id":"eb659af1a2c852e921f5cebb9cd2d4754f65175a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c94d7c65d4f154cc5049d753fc2710bd3477efec","unresolved":false,"context_lines":[{"line_number":2655,"context_line":"            if growth_size \u003e 0:"},{"line_number":2656,"context_line":"                try:"},{"line_number":2657,"context_line":"                    LOG.debug(\"Size of volume is greater than snapshot\")"},{"line_number":2658,"context_line":"                    if not convert_to_base:"},{"line_number":2659,"context_line":"                        # Convert snapshot volume to base volume type"},{"line_number":2660,"context_line":"                        LOG.debug(\u0027Converting to base volume type: %s.\u0027,"},{"line_number":2661,"context_line":"                                  volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_cb0ac877","line":2658,"updated":"2019-02-12 10:11:20.000000000","message":"nit: Wouldn\u0027t it be clearer to change add the growth_size check to the code above so we only have one call to convert to base?\n\nie:\n\n  if growth_size \u003e 0 or convert_to_base:\n      LOG.debug(...)\n      model_update \u003d self._convert_to_base_volume(volume)\n  else:\n      LOG.debug(...)\n\n  if growth_size \u003e 0:\n      growth_size_mib ...\n      self.client.growVolume","commit_id":"eb659af1a2c852e921f5cebb9cd2d4754f65175a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c94d7c65d4f154cc5049d753fc2710bd3477efec","unresolved":false,"context_lines":[{"line_number":2658,"context_line":"                    if not convert_to_base:"},{"line_number":2659,"context_line":"                        # Convert snapshot volume to base volume type"},{"line_number":2660,"context_line":"                        LOG.debug(\u0027Converting to base volume type: %s.\u0027,"},{"line_number":2661,"context_line":"                                  volume[\u0027id\u0027])"},{"line_number":2662,"context_line":"                        model_update \u003d self._convert_to_base_volume(volume)"},{"line_number":2663,"context_line":""},{"line_number":2664,"context_line":"                    growth_size_mib \u003d growth_size * units.Gi / units.Mi"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_6ba63cae","line":2661,"updated":"2019-02-12 10:11:20.000000000","message":"nit: Volume should be an OVO, so we should be using attributes instead: `volume.id`","commit_id":"eb659af1a2c852e921f5cebb9cd2d4754f65175a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"80f2cf5efbcd35985857397758f76b4d6e63d48b","unresolved":false,"context_lines":[{"line_number":2640,"context_line":"                    convert_to_base \u003d True"},{"line_number":2641,"context_line":"                else:"},{"line_number":2642,"context_line":"                    convert_to_base \u003d False"},{"line_number":2643,"context_line":"            LOG.debug(\"convert_to_base: \" + str(convert_to_base))"},{"line_number":2644,"context_line":""},{"line_number":2645,"context_line":"            growth_size \u003d volume[\u0027size\u0027] - snapshot[\u0027volume_size\u0027]"},{"line_number":2646,"context_line":"            LOG.debug(\"growth_size: \" + str(growth_size))"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fdfeff1_1ee43f3b","line":2643,"range":{"start_line":2643,"start_character":22,"end_line":2643,"end_character":63},"updated":"2019-02-15 09:57:50.000000000","message":"we prefer name substitution over string concat,\ncan we write it as \nLOG.debug(\"convert_to_base: %(convert)s\" % {\"convert\": convert_to_base})","commit_id":"e240da74219f7350b785f4813887299b36b07866"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"80f2cf5efbcd35985857397758f76b4d6e63d48b","unresolved":false,"context_lines":[{"line_number":2646,"context_line":"            LOG.debug(\"growth_size: \" + str(growth_size))"},{"line_number":2647,"context_line":"            if growth_size \u003e 0 or convert_to_base:"},{"line_number":2648,"context_line":"                # Convert snapshot volume to base volume type"},{"line_number":2649,"context_line":"                LOG.debug(\u0027Converting to base volume type: %s.\u0027,"},{"line_number":2650,"context_line":"                          volume[\u0027id\u0027])"},{"line_number":2651,"context_line":"                model_update \u003d self._convert_to_base_volume(volume)"},{"line_number":2652,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fdfeff1_beddf341","line":2649,"range":{"start_line":2649,"start_character":59,"end_line":2649,"end_character":62},"updated":"2019-02-15 09:57:50.000000000","message":"same as above.","commit_id":"e240da74219f7350b785f4813887299b36b07866"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"80f2cf5efbcd35985857397758f76b4d6e63d48b","unresolved":false,"context_lines":[{"line_number":2647,"context_line":"            if growth_size \u003e 0 or convert_to_base:"},{"line_number":2648,"context_line":"                # Convert snapshot volume to base volume type"},{"line_number":2649,"context_line":"                LOG.debug(\u0027Converting to base volume type: %s.\u0027,"},{"line_number":2650,"context_line":"                          volume[\u0027id\u0027])"},{"line_number":2651,"context_line":"                model_update \u003d self._convert_to_base_volume(volume)"},{"line_number":2652,"context_line":"            else:"},{"line_number":2653,"context_line":"                LOG.debug(\"volume is created as child of snapshot\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fdfeff1_3ee903e2","line":2650,"range":{"start_line":2650,"start_character":26,"end_line":2650,"end_character":38},"updated":"2019-02-15 09:57:50.000000000","message":"volume.id","commit_id":"e240da74219f7350b785f4813887299b36b07866"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"146b100fa664497ca6624529e752b7cc1bc8cfda","unresolved":false,"context_lines":[{"line_number":2086,"context_line":""},{"line_number":2087,"context_line":"        # by default, set convert_to_base to True"},{"line_number":2088,"context_line":"        convert_to_base \u003d self._get_key_value("},{"line_number":2089,"context_line":"            hpe3par_keys, \u0027convert_to_base\u0027, True)"},{"line_number":2090,"context_line":"        if isinstance(convert_to_base, six.string_types):"},{"line_number":2091,"context_line":"            if convert_to_base.lower() \u003d\u003d \u0027true\u0027:"},{"line_number":2092,"context_line":"                convert_to_base \u003d True"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fdfeff1_c883b3ca","line":2089,"updated":"2019-02-25 12:41:43.000000000","message":"Shouldn\u0027t this be set to False, to maintain the same capability as it is today.   Converting every snapshot to base takes a long time.","commit_id":"e242bf045228117569ec71463cb72d554eed664b"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"fb1c961c89afdeb3849dc84b75e536a402fd3874","unresolved":false,"context_lines":[{"line_number":2086,"context_line":""},{"line_number":2087,"context_line":"        # by default, set convert_to_base to True"},{"line_number":2088,"context_line":"        convert_to_base \u003d self._get_key_value("},{"line_number":2089,"context_line":"            hpe3par_keys, \u0027convert_to_base\u0027, True)"},{"line_number":2090,"context_line":"        if isinstance(convert_to_base, six.string_types):"},{"line_number":2091,"context_line":"            if convert_to_base.lower() \u003d\u003d \u0027true\u0027:"},{"line_number":2092,"context_line":"                convert_to_base \u003d True"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fdfeff1_9e8e252c","line":2089,"in_reply_to":"9fdfeff1_54d3da01","updated":"2019-02-26 14:26:02.000000000","message":"3par cloning creates a base volume by default and is independent.  snapshots are not supposed to be.\nThere is no way to clone quickly on the 3par, as it requires copying the entire volume bit for bit on the array, hence the need to keep this value to False by default.   The 3PAR has the ability to do a background operation to clone, but it can only do a few of those per array at a time, and isn\u0027t \u0027cloudy\u0027.   The safest thing to do is what the 3PAR driver always has done, which is to not do create a base volume during snapshot, which is instant, then if a user wants an independant volume, is to actually clone a snap/volume.  This change will end up causing more problems than it fixes on the 3PAR.","commit_id":"e242bf045228117569ec71463cb72d554eed664b"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"445b7d317deca070c9e2c07ebaa39213f152104a","unresolved":false,"context_lines":[{"line_number":2086,"context_line":""},{"line_number":2087,"context_line":"        # by default, set convert_to_base to True"},{"line_number":2088,"context_line":"        convert_to_base \u003d self._get_key_value("},{"line_number":2089,"context_line":"            hpe3par_keys, \u0027convert_to_base\u0027, True)"},{"line_number":2090,"context_line":"        if isinstance(convert_to_base, six.string_types):"},{"line_number":2091,"context_line":"            if convert_to_base.lower() \u003d\u003d \u0027true\u0027:"},{"line_number":2092,"context_line":"                convert_to_base \u003d True"}],"source_content_type":"text/x-python","patch_set":10,"id":"5fc1f717_d8cbee1b","line":2089,"in_reply_to":"9fdfeff1_54d3da01","updated":"2019-03-06 17:11:49.000000000","message":"There is no \u0027fast\u0027 way to clone an entire volume on the 3PAR.  It\u0027s a bit for bit operation that takes a long time, and there are only so many of them that can happen at once.  So, you really want to avoid it at all costs.","commit_id":"e242bf045228117569ec71463cb72d554eed664b"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"1225aaa8ba048688a58a413a3ca100185658b986","unresolved":false,"context_lines":[{"line_number":2086,"context_line":""},{"line_number":2087,"context_line":"        # by default, set convert_to_base to True"},{"line_number":2088,"context_line":"        convert_to_base \u003d self._get_key_value("},{"line_number":2089,"context_line":"            hpe3par_keys, \u0027convert_to_base\u0027, True)"},{"line_number":2090,"context_line":"        if isinstance(convert_to_base, six.string_types):"},{"line_number":2091,"context_line":"            if convert_to_base.lower() \u003d\u003d \u0027true\u0027:"},{"line_number":2092,"context_line":"                convert_to_base \u003d True"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fdfeff1_54d3da01","line":2089,"in_reply_to":"9fdfeff1_c883b3ca","updated":"2019-02-25 15:33:50.000000000","message":"No, it needs to be set to true to maintain the expected semantics of Cinder volumes.  (That you can clone them and delete them independently.)\n\nHaving to opt-in to a higher performing behavior with the default being that clone/delete operations work as expected is the better of the two options there.\n\nBut, is this really the best that can be done in this driver?  Is there some way to clone quickly and separate the dependency between the clones afterward?","commit_id":"e242bf045228117569ec71463cb72d554eed664b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0e536dc7824a1449a3d2bd902202fb7606f51f61","unresolved":false,"context_lines":[{"line_number":2647,"context_line":"            LOG.debug(\"growth_size: %(size)s\", {\u0027size\u0027: growth_size})"},{"line_number":2648,"context_line":"            if growth_size \u003e 0 or convert_to_base:"},{"line_number":2649,"context_line":"                # Convert snapshot volume to base volume type"},{"line_number":2650,"context_line":"                LOG.debug(\u0027Converting to base volume type: %s.\u0027,"},{"line_number":2651,"context_line":"                          volume[\u0027id\u0027])"},{"line_number":2652,"context_line":"                model_update \u003d self._convert_to_base_volume(volume)"},{"line_number":2653,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9fdfeff1_e4cc2d6b","line":2650,"range":{"start_line":2650,"start_character":59,"end_line":2650,"end_character":62},"updated":"2019-02-18 10:43:41.000000000","message":"if you plan to do an update, kindly do the substitution here too.","commit_id":"e242bf045228117569ec71463cb72d554eed664b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"7c2777e5e3d460c7f0d91caafa45d5de5a2435f9","unresolved":false,"context_lines":[{"line_number":2086,"context_line":""},{"line_number":2087,"context_line":"        # by default, set convert_to_base to True"},{"line_number":2088,"context_line":"        convert_to_base \u003d self._get_key_value("},{"line_number":2089,"context_line":"            hpe3par_keys, \u0027convert_to_base\u0027, True)"},{"line_number":2090,"context_line":"        if isinstance(convert_to_base, six.string_types):"},{"line_number":2091,"context_line":"            if convert_to_base.lower() \u003d\u003d \u0027true\u0027:"},{"line_number":2092,"context_line":"                convert_to_base \u003d True"}],"source_content_type":"text/x-python","patch_set":11,"id":"5fc1f717_37342ede","line":2089,"range":{"start_line":2089,"start_character":45,"end_line":2089,"end_character":49},"updated":"2019-04-04 17:50:15.000000000","message":"if the decoupling is now done at delete time, shouldn\u0027t this be False here or am i missing something?","commit_id":"c363de9bcd47f94f60d6ba489903f2ae83a5264b"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"9cc5059345526a1b3ff5cefab1756bc5c5e5979e","unresolved":false,"context_lines":[{"line_number":2639,"context_line":"                if convert_to_base.lower() \u003d\u003d \u0027true\u0027:"},{"line_number":2640,"context_line":"                    convert_to_base \u003d True"},{"line_number":2641,"context_line":"                else:"},{"line_number":2642,"context_line":"                    convert_to_base \u003d False"},{"line_number":2643,"context_line":"            LOG.debug(\"convert_to_base: %(convert)s\","},{"line_number":2644,"context_line":"                      {\u0027convert\u0027: convert_to_base})"},{"line_number":2645,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3fce034c_25663d53","line":2642,"updated":"2019-04-16 23:27:26.000000000","message":"I would refactor this boolean enforcement into a separate function, as this is done at line 2090 as well.   \n\nconvert_to_base \u003d self._get_boolean_key_value(hpe3par_keys, \u0027convert_to_base\u0027, False)","commit_id":"d06e9a6652be9c88c649640b0bc1623346ebfc72"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"7e1b7f2394272fd31eaebdd783d197fbcea54a5b","unresolved":false,"context_lines":[{"line_number":1800,"context_line":"            hpe3par_keys, key, default)"},{"line_number":1801,"context_line":"        if isinstance(value, six.string_types):"},{"line_number":1802,"context_line":"            if value.lower() \u003d\u003d \u0027true\u0027:"},{"line_number":1803,"context_line":"                value \u003d True"},{"line_number":1804,"context_line":"            else:"},{"line_number":1805,"context_line":"                value \u003d False"},{"line_number":1806,"context_line":"        return value"},{"line_number":1807,"context_line":""},{"line_number":1808,"context_line":"    def _get_qos_value(self, qos, key, default\u003dNone):"},{"line_number":1809,"context_line":"        if key in qos:"}],"source_content_type":"text/x-python","patch_set":14,"id":"ffb9cba7_f400ec69","line":1806,"range":{"start_line":1803,"start_character":0,"end_line":1806,"end_character":20},"updated":"2019-04-25 13:41:58.000000000","message":"this could also be optimized,\n            if value.lower() \u003d\u003d \u0027true\u0027:\n                return True\n            else:\n                return False","commit_id":"f8084991284acfd8e0cd80ed456a83bcec6d5dcc"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"7e1b7f2394272fd31eaebdd783d197fbcea54a5b","unresolved":false,"context_lines":[{"line_number":2096,"context_line":""},{"line_number":2097,"context_line":"        # by default, set convert_to_base to False"},{"line_number":2098,"context_line":"        convert_to_base \u003d self._get_boolean_key_value("},{"line_number":2099,"context_line":"            hpe3par_keys, \u0027convert_to_base\u0027, False)"},{"line_number":2100,"context_line":""},{"line_number":2101,"context_line":"        # if provisioning is not set use thin"},{"line_number":2102,"context_line":"        default_prov \u003d self.valid_prov_values[0]"}],"source_content_type":"text/x-python","patch_set":14,"id":"ffb9cba7_94ef30af","line":2099,"range":{"start_line":2099,"start_character":43,"end_line":2099,"end_character":50},"updated":"2019-04-25 13:41:58.000000000","message":"no need to pass this","commit_id":"f8084991284acfd8e0cd80ed456a83bcec6d5dcc"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"7e1b7f2394272fd31eaebdd783d197fbcea54a5b","unresolved":false,"context_lines":[{"line_number":2639,"context_line":""},{"line_number":2640,"context_line":"            # by default, set convert_to_base to False"},{"line_number":2641,"context_line":"            convert_to_base \u003d self._get_boolean_key_value("},{"line_number":2642,"context_line":"                hpe3par_keys, \u0027convert_to_base\u0027, False)"},{"line_number":2643,"context_line":""},{"line_number":2644,"context_line":"            LOG.debug(\"convert_to_base: %(convert)s\","},{"line_number":2645,"context_line":"                      {\u0027convert\u0027: convert_to_base})"}],"source_content_type":"text/x-python","patch_set":14,"id":"ffb9cba7_342c4401","line":2642,"range":{"start_line":2642,"start_character":47,"end_line":2642,"end_character":54},"updated":"2019-04-25 13:41:58.000000000","message":"same","commit_id":"f8084991284acfd8e0cd80ed456a83bcec6d5dcc"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"c1e0352cf184f5b0c03be03274ebf4d88885be69","unresolved":false,"context_lines":[{"line_number":2978,"context_line":""},{"line_number":2979,"context_line":"                        LOG.debug(\u0027Converting to base volume type: \u0027"},{"line_number":2980,"context_line":"                                  \u0027%(id)s.\u0027, {\u0027id\u0027: v2[\u0027id\u0027]})"},{"line_number":2981,"context_line":"                        self._convert_to_base_volume(v2)"},{"line_number":2982,"context_line":""},{"line_number":2983,"context_line":"                try:"},{"line_number":2984,"context_line":"                    self.client.deleteVolume(snap_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ffb9cba7_7422bc02","line":2981,"updated":"2019-04-25 13:42:43.000000000","message":"are you sure this doesn\u0027t lead to timeouts with large volumes?","commit_id":"f8084991284acfd8e0cd80ed456a83bcec6d5dcc"}]}
