)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9f8c7f78f30618649066d85b296659c26536e531","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, cinder has a interface set volume readonly. It just set"},{"line_number":10,"context_line":"volume metadata readonly as True or false. But if the user attach"},{"line_number":11,"context_line":"the volume to a host manually, the volume readonly cann\u0027t be controled."},{"line_number":12,"context_line":"So, the BP will implement to set the readonly properties to backend"},{"line_number":13,"context_line":"driver."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_96ec29bc","line":11,"range":{"start_line":11,"start_character":51,"end_line":11,"end_character":55},"updated":"2016-07-07 14:49:14.000000000","message":"typo","commit_id":"fa98cd68dd299b69552281a55c7d741b76431fb3"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"6aaed27dea88408fa637515e4282c70244817adf","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, cinder has a interface set volume readonly. It just set"},{"line_number":10,"context_line":"volume metadata readonly as True or false. But if the user attach"},{"line_number":11,"context_line":"the volume to a host manually, the volume readonly cann\u0027t be controled."},{"line_number":12,"context_line":"So, the BP will implement to set the readonly properties to backend"},{"line_number":13,"context_line":"driver."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_4aaf962b","line":11,"range":{"start_line":11,"start_character":51,"end_line":11,"end_character":55},"in_reply_to":"1aa78d24_96ec29bc","updated":"2016-07-08 02:29:50.000000000","message":"@Michal,Thank you! I will fix it.","commit_id":"fa98cd68dd299b69552281a55c7d741b76431fb3"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9f8c7f78f30618649066d85b296659c26536e531","unresolved":false,"context_lines":[{"line_number":12,"context_line":"So, the BP will implement to set the readonly properties to backend"},{"line_number":13,"context_line":"driver."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The scheme: volume driver provide an interface \"update_readonly_flag\""},{"line_number":16,"context_line":"to set the volume ro/rw mode. When the user sets volume readonly as"},{"line_number":17,"context_line":"True or false, the readonly flag will be set to backend driver by the"},{"line_number":18,"context_line":"interface \"update_readonly_flag\". So, if the volume dirver implemented"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_36345548","line":15,"range":{"start_line":15,"start_character":26,"end_line":15,"end_character":33},"updated":"2016-07-07 14:49:14.000000000","message":"provides","commit_id":"fa98cd68dd299b69552281a55c7d741b76431fb3"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"6aaed27dea88408fa637515e4282c70244817adf","unresolved":false,"context_lines":[{"line_number":12,"context_line":"So, the BP will implement to set the readonly properties to backend"},{"line_number":13,"context_line":"driver."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The scheme: volume driver provide an interface \"update_readonly_flag\""},{"line_number":16,"context_line":"to set the volume ro/rw mode. When the user sets volume readonly as"},{"line_number":17,"context_line":"True or false, the readonly flag will be set to backend driver by the"},{"line_number":18,"context_line":"interface \"update_readonly_flag\". So, if the volume dirver implemented"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1aa78d24_0a6c6e07","line":15,"range":{"start_line":15,"start_character":26,"end_line":15,"end_character":33},"in_reply_to":"1aa78d24_36345548","updated":"2016-07-08 02:29:50.000000000","message":"@Michal, Thanks! I will fix it at once.","commit_id":"fa98cd68dd299b69552281a55c7d741b76431fb3"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5e43aed7f45a7f8d165d6d811b4d83c5dc699def","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"support volume driver set readonly"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, cinder has a interface set volume readonly. It just set"},{"line_number":10,"context_line":"volume metadata readonly as True or false. But if the user attach"},{"line_number":11,"context_line":"the volume to a host manually, the volume readonly flag isn\u0027t"},{"line_number":12,"context_line":"controled. So, the BP will implement to set the readonly properties"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1aa78d24_02518ed8","line":9,"range":{"start_line":9,"start_character":22,"end_line":9,"end_character":53},"updated":"2016-07-11 13:48:18.000000000","message":"an interface to set volume readonly flag","commit_id":"19c7195c5aa8046d0ba24b6e3484c5dbb2d64e73"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"b36163ff1507b702e3dd1b49b066281ba656eb16","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"support volume driver set readonly"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, cinder has a interface set volume readonly. It just set"},{"line_number":10,"context_line":"volume metadata readonly as True or false. But if the user attach"},{"line_number":11,"context_line":"the volume to a host manually, the volume readonly flag isn\u0027t"},{"line_number":12,"context_line":"controled. So, the BP will implement to set the readonly properties"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1aa78d24_e170a074","line":9,"range":{"start_line":9,"start_character":22,"end_line":9,"end_character":53},"in_reply_to":"1aa78d24_02518ed8","updated":"2016-07-12 02:25:36.000000000","message":"Done","commit_id":"19c7195c5aa8046d0ba24b6e3484c5dbb2d64e73"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5e43aed7f45a7f8d165d6d811b4d83c5dc699def","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Currently, cinder has a interface set volume readonly. It just set"},{"line_number":10,"context_line":"volume metadata readonly as True or false. But if the user attach"},{"line_number":11,"context_line":"the volume to a host manually, the volume readonly flag isn\u0027t"},{"line_number":12,"context_line":"controled. So, the BP will implement to set the readonly properties"},{"line_number":13,"context_line":"to backend driver."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The scheme: volume driver provides an interface \"update_readonly_flag\""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1aa78d24_825bbef5","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":9},"updated":"2016-07-11 13:48:18.000000000","message":"controlled","commit_id":"19c7195c5aa8046d0ba24b6e3484c5dbb2d64e73"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"b36163ff1507b702e3dd1b49b066281ba656eb16","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Currently, cinder has a interface set volume readonly. It just set"},{"line_number":10,"context_line":"volume metadata readonly as True or false. But if the user attach"},{"line_number":11,"context_line":"the volume to a host manually, the volume readonly flag isn\u0027t"},{"line_number":12,"context_line":"controled. So, the BP will implement to set the readonly properties"},{"line_number":13,"context_line":"to backend driver."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The scheme: volume driver provides an interface \"update_readonly_flag\""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1aa78d24_416a5482","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":9},"in_reply_to":"1aa78d24_825bbef5","updated":"2016-07-12 02:25:36.000000000","message":"Done","commit_id":"19c7195c5aa8046d0ba24b6e3484c5dbb2d64e73"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5e43aed7f45a7f8d165d6d811b4d83c5dc699def","unresolved":false,"context_lines":[{"line_number":10,"context_line":"volume metadata readonly as True or false. But if the user attach"},{"line_number":11,"context_line":"the volume to a host manually, the volume readonly flag isn\u0027t"},{"line_number":12,"context_line":"controled. So, the BP will implement to set the readonly properties"},{"line_number":13,"context_line":"to backend driver."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The scheme: volume driver provides an interface \"update_readonly_flag\""},{"line_number":16,"context_line":"to set the volume ro/rw mode. When the user sets volume readonly as"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1aa78d24_226daa98","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":2},"updated":"2016-07-11 13:48:18.000000000","message":"through the","commit_id":"19c7195c5aa8046d0ba24b6e3484c5dbb2d64e73"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"b36163ff1507b702e3dd1b49b066281ba656eb16","unresolved":false,"context_lines":[{"line_number":10,"context_line":"volume metadata readonly as True or false. But if the user attach"},{"line_number":11,"context_line":"the volume to a host manually, the volume readonly flag isn\u0027t"},{"line_number":12,"context_line":"controled. So, the BP will implement to set the readonly properties"},{"line_number":13,"context_line":"to backend driver."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The scheme: volume driver provides an interface \"update_readonly_flag\""},{"line_number":16,"context_line":"to set the volume ro/rw mode. When the user sets volume readonly as"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1aa78d24_216748b8","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":2},"in_reply_to":"1aa78d24_226daa98","updated":"2016-07-12 02:25:36.000000000","message":"Done","commit_id":"19c7195c5aa8046d0ba24b6e3484c5dbb2d64e73"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5e43aed7f45a7f8d165d6d811b4d83c5dc699def","unresolved":false,"context_lines":[{"line_number":15,"context_line":"The scheme: volume driver provides an interface \"update_readonly_flag\""},{"line_number":16,"context_line":"to set the volume ro/rw mode. When the user sets volume readonly as"},{"line_number":17,"context_line":"True or false, the readonly flag will be set to backend driver by the"},{"line_number":18,"context_line":"interface \"update_readonly_flag\". So, if the volume dirver implemented"},{"line_number":19,"context_line":"the interface, the volume\u0027s ro/rw mode will be controled by volume driver."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I0146ec329f167c45efd2488a271896c003699862"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1aa78d24_e2f9e2c9","line":18,"range":{"start_line":18,"start_character":52,"end_line":18,"end_character":58},"updated":"2016-07-11 13:48:18.000000000","message":"driver","commit_id":"19c7195c5aa8046d0ba24b6e3484c5dbb2d64e73"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"b36163ff1507b702e3dd1b49b066281ba656eb16","unresolved":false,"context_lines":[{"line_number":15,"context_line":"The scheme: volume driver provides an interface \"update_readonly_flag\""},{"line_number":16,"context_line":"to set the volume ro/rw mode. When the user sets volume readonly as"},{"line_number":17,"context_line":"True or false, the readonly flag will be set to backend driver by the"},{"line_number":18,"context_line":"interface \"update_readonly_flag\". So, if the volume dirver implemented"},{"line_number":19,"context_line":"the interface, the volume\u0027s ro/rw mode will be controled by volume driver."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I0146ec329f167c45efd2488a271896c003699862"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1aa78d24_4101b4ae","line":18,"range":{"start_line":18,"start_character":52,"end_line":18,"end_character":58},"in_reply_to":"1aa78d24_e2f9e2c9","updated":"2016-07-12 02:25:36.000000000","message":"@Michal, Thank you very much for your patient and careful review. I will fix it at once.","commit_id":"19c7195c5aa8046d0ba24b6e3484c5dbb2d64e73"},{"author":{"_account_id":13203,"name":"Wilson Liu","email":"295988511@qq.com","username":"Bob-OpenStack"},"change_message_id":"f38f200383c8352ad3e83ff52da9f7bdebbe23ff","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     zhengyao1 \u003czheng.yao1@zte.com.cn\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-15 19:39:56 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"support volume driver set readonly"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, cinder has an interface to set volume readonly flag. It"},{"line_number":10,"context_line":"just sets volume metadata readonly as True or false. But if the user"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"dada55a8_be780dfa","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":1},"updated":"2016-07-18 01:17:04.000000000","message":"\u0027s\u0027 should be capital.","commit_id":"2a3a32eab00128efea1865339181dee7f5148c6f"},{"author":{"_account_id":17717,"name":"liuke","email":"liuke2@huawei.com","username":"liuke"},"change_message_id":"7419d11718465035077fac712763c6982232d800","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Support volume driver set readonly"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, cinder has an interface to set volume readonly flag. It"},{"line_number":10,"context_line":"just sets volume metadata readonly as True or false. But if the user"},{"line_number":11,"context_line":"attach the volume to a host manually, the volume readonly flag isn\u0027t"},{"line_number":12,"context_line":"controlled. So, the BP will implement to set the readonly properties"},{"line_number":13,"context_line":"through the backend driver."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"dada55a8_72f9a94d","line":10,"range":{"start_line":10,"start_character":38,"end_line":10,"end_character":51},"updated":"2016-07-18 03:18:58.000000000","message":"\u0027False\u0027 replace \u0027false\u0027","commit_id":"c93a83bc917f8d0b5fe7b575790d18265c556d63"},{"author":{"_account_id":17717,"name":"liuke","email":"liuke2@huawei.com","username":"liuke"},"change_message_id":"7419d11718465035077fac712763c6982232d800","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The scheme: volume driver provides an interface \"update_readonly_flag\""},{"line_number":16,"context_line":"to set the volume ro/rw mode. When the user sets volume readonly as"},{"line_number":17,"context_line":"True or false, the readonly flag will be set to backend driver by the"},{"line_number":18,"context_line":"interface \"update_readonly_flag\". So, if the volume driver implemented"},{"line_number":19,"context_line":"the interface, the volume\u0027s ro/rw mode will be controlled by volume"},{"line_number":20,"context_line":"driver."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"dada55a8_f55c63ef","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":13},"updated":"2016-07-18 03:18:58.000000000","message":"\u0027False\u0027 replace \u0027false\u0027","commit_id":"c93a83bc917f8d0b5fe7b575790d18265c556d63"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"8acf9a5b509507b3ed52ec6727106caf2039abf2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     zhengyao1 \u003czheng.yao1@zte.com.cn\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-09-19 15:37:04 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"support volume driver set readonly"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, cinder has an interface to set volume readonly flag. It"},{"line_number":10,"context_line":"just sets volume metadata readonly as True or False. But if the user"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"7a8ec9b2_55a9d922","line":7,"updated":"2016-09-19 11:05:46.000000000","message":"Please, start commit message from an upper-case letter","commit_id":"1e5e9d6ee938a5dad5d61f46cec402fb7927314c"}],"cinder/tests/unit/test_volume.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"58106483d9ef11ed503bc193c11b7e09970e8c54","unresolved":false,"context_lines":[{"line_number":4326,"context_line":""},{"line_number":4327,"context_line":"        # Confirming converted filter value against invalid value"},{"line_number":4328,"context_line":"        self.assertTrue(filters[\u0027bootable\u0027])"},{"line_number":4329,"context_line":""},{"line_number":4330,"context_line":"    @mock.patch(\u0027cinder.volume.rpcapi.VolumeAPI.update_readonly_flag\u0027)"},{"line_number":4331,"context_line":"    def test_update_volume_readonly_flag(self, mock_rpc_update):"},{"line_number":4332,"context_line":"        \"\"\"Test volume readonly flag can be updated at API level.\"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"9a89bdaa_a3d37037","line":4329,"updated":"2016-09-06 09:23:20.000000000","message":"-1: There\u0027s no test for when we get NotImplemented exception","commit_id":"5f588047c736cbab224901b5d8459eaa415e460c"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"5b9f57d8327b6f4ffcc3714e20a0973977d9ba16","unresolved":false,"context_lines":[{"line_number":4326,"context_line":""},{"line_number":4327,"context_line":"        # Confirming converted filter value against invalid value"},{"line_number":4328,"context_line":"        self.assertTrue(filters[\u0027bootable\u0027])"},{"line_number":4329,"context_line":""},{"line_number":4330,"context_line":"    @mock.patch(\u0027cinder.volume.rpcapi.VolumeAPI.update_readonly_flag\u0027)"},{"line_number":4331,"context_line":"    def test_update_volume_readonly_flag(self, mock_rpc_update):"},{"line_number":4332,"context_line":"        \"\"\"Test volume readonly flag can be updated at API level.\"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"9a89bdaa_db01063a","line":4329,"in_reply_to":"9a89bdaa_a3d37037","updated":"2016-09-07 03:24:15.000000000","message":"Done","commit_id":"5f588047c736cbab224901b5d8459eaa415e460c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"58106483d9ef11ed503bc193c11b7e09970e8c54","unresolved":false,"context_lines":[{"line_number":4353,"context_line":""},{"line_number":4354,"context_line":"        # works when volume in \u0027available\u0027 status"},{"line_number":4355,"context_line":"        volume_api.update_readonly_flag(self.context, volume, False)"},{"line_number":4356,"context_line":"        mock_rpc_update.called_once_with(self.context, volume, False)"},{"line_number":4357,"context_line":"        volume.refresh()"},{"line_number":4358,"context_line":"        self.assertEqual(\u0027available\u0027, volume.status)"},{"line_number":4359,"context_line":"        admin_metadata \u003d volume.volume_admin_metadata"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a89bdaa_c3ecf42b","line":4356,"updated":"2016-09-06 09:23:20.000000000","message":"nit: We should call it with True as well, you can use ddt in this test to test with both values.","commit_id":"5f588047c736cbab224901b5d8459eaa415e460c"}],"cinder/tests/unit/test_volume_rpcapi.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5e43aed7f45a7f8d165d6d811b4d83c5dc699def","unresolved":false,"context_lines":[{"line_number":512,"context_line":"                              volume\u003dself.fake_volume_obj,"},{"line_number":513,"context_line":"                              version\u003d\u00272.0\u0027)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    @ddt.data(\u00272.3\u0027)"},{"line_number":516,"context_line":"    @mock.patch(\u0027oslo_messaging.RPCClient.can_send_version\u0027)"},{"line_number":517,"context_line":"    def test_update_readonly_flag(self, version, can_send_version):"},{"line_number":518,"context_line":"        can_send_version.side_effect \u003d lambda x: x \u003d\u003d version"}],"source_content_type":"text/x-python","patch_set":5,"id":"1aa78d24_5fbc0d6c","line":515,"range":{"start_line":515,"start_character":0,"end_line":515,"end_character":20},"updated":"2016-07-11 13:48:18.000000000","message":"Can we also add a test that will check if update_readonly_flag raises in case of can_send_version mocked to return False?","commit_id":"19c7195c5aa8046d0ba24b6e3484c5dbb2d64e73"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"b36163ff1507b702e3dd1b49b066281ba656eb16","unresolved":false,"context_lines":[{"line_number":512,"context_line":"                              volume\u003dself.fake_volume_obj,"},{"line_number":513,"context_line":"                              version\u003d\u00272.0\u0027)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    @ddt.data(\u00272.3\u0027)"},{"line_number":516,"context_line":"    @mock.patch(\u0027oslo_messaging.RPCClient.can_send_version\u0027)"},{"line_number":517,"context_line":"    def test_update_readonly_flag(self, version, can_send_version):"},{"line_number":518,"context_line":"        can_send_version.side_effect \u003d lambda x: x \u003d\u003d version"}],"source_content_type":"text/x-python","patch_set":5,"id":"1aa78d24_81d43c20","line":515,"range":{"start_line":515,"start_character":0,"end_line":515,"end_character":20},"in_reply_to":"1aa78d24_5fbc0d6c","updated":"2016-07-12 02:25:36.000000000","message":"@Michal, Yes. I will add a test case as your said. Thanks.","commit_id":"19c7195c5aa8046d0ba24b6e3484c5dbb2d64e73"},{"author":{"_account_id":17717,"name":"liuke","email":"liuke2@huawei.com","username":"liuke"},"change_message_id":"7419d11718465035077fac712763c6982232d800","unresolved":false,"context_lines":[{"line_number":521,"context_line":"                              volume\u003dself.fake_volume_obj,"},{"line_number":522,"context_line":"                              flag\u003dFalse,"},{"line_number":523,"context_line":"                              version\u003d\u00272.3\u0027)"},{"line_number":524,"context_line":"        mock_can_send_version.assert_called_once_with(\u00272.3\u0027)"},{"line_number":525,"context_line":"        mock_can_send_version.return_value \u003d False"},{"line_number":526,"context_line":"        self.assertRaises(exception.ServiceTooOld, self._test_volume_api,"},{"line_number":527,"context_line":"                          \u0027update_readonly_flag\u0027, rpc_method\u003d\u0027call\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"dada55a8_5520cf49","line":524,"range":{"start_line":524,"start_character":55,"end_line":524,"end_character":58},"updated":"2016-07-18 03:18:58.000000000","message":"You can use the constant RPC_API_VERSION defined in rpcapi module","commit_id":"c93a83bc917f8d0b5fe7b575790d18265c556d63"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"e94d929f1decafd9e4674eed32a8d303679ff8e5","unresolved":false,"context_lines":[{"line_number":521,"context_line":"                              volume\u003dself.fake_volume_obj,"},{"line_number":522,"context_line":"                              flag\u003dFalse,"},{"line_number":523,"context_line":"                              version\u003d\u00272.3\u0027)"},{"line_number":524,"context_line":"        mock_can_send_version.assert_called_once_with(\u00272.3\u0027)"},{"line_number":525,"context_line":"        mock_can_send_version.return_value \u003d False"},{"line_number":526,"context_line":"        self.assertRaises(exception.ServiceTooOld, self._test_volume_api,"},{"line_number":527,"context_line":"                          \u0027update_readonly_flag\u0027, rpc_method\u003d\u0027call\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"dada55a8_d7be7ed3","line":524,"range":{"start_line":524,"start_character":55,"end_line":524,"end_character":58},"in_reply_to":"dada55a8_5520cf49","updated":"2016-07-18 08:40:18.000000000","message":"No, please don\u0027t do that. We need to specify version explicitly as that constant will get change with every RPC version bump.","commit_id":"c93a83bc917f8d0b5fe7b575790d18265c556d63"}],"cinder/volume/api.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"32f8f90d225c91a57fc0b59a8d7bebb6584ef547","unresolved":false,"context_lines":[{"line_number":1364,"context_line":"                    \u0027%(vol_status)s.\u0027) % {\u0027vol_id\u0027: volume[\u0027id\u0027],"},{"line_number":1365,"context_line":"                                          \u0027vol_status\u0027: volume[\u0027status\u0027]}"},{"line_number":1366,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":1367,"context_line":"        self.volume_rpcapi.update_readonly_flag(context, volume, flag)"},{"line_number":1368,"context_line":"        self.update_volume_admin_metadata(context.elevated(), volume,"},{"line_number":1369,"context_line":"                                          {\u0027readonly\u0027: six.text_type(flag)})"},{"line_number":1370,"context_line":"        LOG.info(_LI(\"Update readonly setting on volume \""}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_acfbad46","line":1367,"range":{"start_line":1367,"start_character":8,"end_line":1367,"end_character":70},"updated":"2016-07-08 08:55:09.000000000","message":"Would it be easy to do to only send RPC call if flag was actually toggled True-\u003eFalse or False-\u003eTrue and not in False-\u003eFalse or True-\u003eTrue cases?","commit_id":"8478db2e82ef3768a43a24435284821dc7a801d1"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"cbda5e846a408065a974964fd63545c1a1218a2e","unresolved":false,"context_lines":[{"line_number":1364,"context_line":"                    \u0027%(vol_status)s.\u0027) % {\u0027vol_id\u0027: volume[\u0027id\u0027],"},{"line_number":1365,"context_line":"                                          \u0027vol_status\u0027: volume[\u0027status\u0027]}"},{"line_number":1366,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":1367,"context_line":"        self.volume_rpcapi.update_readonly_flag(context, volume, flag)"},{"line_number":1368,"context_line":"        self.update_volume_admin_metadata(context.elevated(), volume,"},{"line_number":1369,"context_line":"                                          {\u0027readonly\u0027: six.text_type(flag)})"},{"line_number":1370,"context_line":"        LOG.info(_LI(\"Update readonly setting on volume \""}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_92ed28f2","line":1367,"range":{"start_line":1367,"start_character":8,"end_line":1367,"end_character":70},"in_reply_to":"1aa78d24_acfbad46","updated":"2016-07-08 09:21:17.000000000","message":"@Michal, It\u0027s not easy to send RPC just in the flag changed case. We do not know the last flag. If we get from the volume metadata, but maybe not accurate. In this case, for legacy volume, it was set readonly flag in metadata only, but the backend driver can not become effective. So, If the user set\nreadonly again, it will not become effective forever. Thanks!","commit_id":"8478db2e82ef3768a43a24435284821dc7a801d1"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"7b150e39618850be4ada36e13cc2bf9ce2842227","unresolved":false,"context_lines":[{"line_number":1367,"context_line":"        try:"},{"line_number":1368,"context_line":"            self.volume_rpcapi.update_readonly_flag(context, volume, flag)"},{"line_number":1369,"context_line":"        except exception.ServiceTooOld as ex:"},{"line_number":1370,"context_line":"            msg \u003d _(\u0027Backend driver Can not set volume %(volume)s readonly\u0027"},{"line_number":1371,"context_line":"                    \u0027flag for reason: %(ex)s.\u0027) % {\u0027volume\u0027: volume[\u0027id\u0027],"},{"line_number":1372,"context_line":"                                                   \u0027ex\u0027: ex}"},{"line_number":1373,"context_line":"            LOG.warning(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_20d3b905","line":1370,"updated":"2016-07-12 07:47:39.000000000","message":"Since this is warning message, please use _LW(\"..\").","commit_id":"37a17a1c51657aca9408fcec79aea54da76e8667"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"7b150e39618850be4ada36e13cc2bf9ce2842227","unresolved":false,"context_lines":[{"line_number":1367,"context_line":"        try:"},{"line_number":1368,"context_line":"            self.volume_rpcapi.update_readonly_flag(context, volume, flag)"},{"line_number":1369,"context_line":"        except exception.ServiceTooOld as ex:"},{"line_number":1370,"context_line":"            msg \u003d _(\u0027Backend driver Can not set volume %(volume)s readonly\u0027"},{"line_number":1371,"context_line":"                    \u0027flag for reason: %(ex)s.\u0027) % {\u0027volume\u0027: volume[\u0027id\u0027],"},{"line_number":1372,"context_line":"                                                   \u0027ex\u0027: ex}"},{"line_number":1373,"context_line":"            LOG.warning(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_c000f568","line":1370,"range":{"start_line":1370,"start_character":66,"end_line":1370,"end_character":74},"updated":"2016-07-12 07:47:39.000000000","message":"nit: need a space after read-only","commit_id":"37a17a1c51657aca9408fcec79aea54da76e8667"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"76ea78bdd5dd18e2fdfc0aa62d76dda422e437d3","unresolved":false,"context_lines":[{"line_number":1367,"context_line":"        try:"},{"line_number":1368,"context_line":"            self.volume_rpcapi.update_readonly_flag(context, volume, flag)"},{"line_number":1369,"context_line":"        except exception.ServiceTooOld as ex:"},{"line_number":1370,"context_line":"            msg \u003d _(\u0027Backend driver Can not set volume %(volume)s readonly\u0027"},{"line_number":1371,"context_line":"                    \u0027flag for reason: %(ex)s.\u0027) % {\u0027volume\u0027: volume[\u0027id\u0027],"},{"line_number":1372,"context_line":"                                                   \u0027ex\u0027: ex}"},{"line_number":1373,"context_line":"            LOG.warning(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_1bc6ec99","line":1370,"in_reply_to":"1aa78d24_20d3b905","updated":"2016-07-12 07:59:49.000000000","message":"@Vipin, Thanks a lot! I will fix it.","commit_id":"37a17a1c51657aca9408fcec79aea54da76e8667"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"76ea78bdd5dd18e2fdfc0aa62d76dda422e437d3","unresolved":false,"context_lines":[{"line_number":1367,"context_line":"        try:"},{"line_number":1368,"context_line":"            self.volume_rpcapi.update_readonly_flag(context, volume, flag)"},{"line_number":1369,"context_line":"        except exception.ServiceTooOld as ex:"},{"line_number":1370,"context_line":"            msg \u003d _(\u0027Backend driver Can not set volume %(volume)s readonly\u0027"},{"line_number":1371,"context_line":"                    \u0027flag for reason: %(ex)s.\u0027) % {\u0027volume\u0027: volume[\u0027id\u0027],"},{"line_number":1372,"context_line":"                                                   \u0027ex\u0027: ex}"},{"line_number":1373,"context_line":"            LOG.warning(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_5bbcf405","line":1370,"range":{"start_line":1370,"start_character":66,"end_line":1370,"end_character":74},"in_reply_to":"1aa78d24_c000f568","updated":"2016-07-12 07:59:49.000000000","message":"Done","commit_id":"37a17a1c51657aca9408fcec79aea54da76e8667"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"7b150e39618850be4ada36e13cc2bf9ce2842227","unresolved":false,"context_lines":[{"line_number":1370,"context_line":"            msg \u003d _(\u0027Backend driver Can not set volume %(volume)s readonly\u0027"},{"line_number":1371,"context_line":"                    \u0027flag for reason: %(ex)s.\u0027) % {\u0027volume\u0027: volume[\u0027id\u0027],"},{"line_number":1372,"context_line":"                                                   \u0027ex\u0027: ex}"},{"line_number":1373,"context_line":"            LOG.warning(msg)"},{"line_number":1374,"context_line":"        self.update_volume_admin_metadata(context.elevated(), volume,"},{"line_number":1375,"context_line":"                                          {\u0027readonly\u0027: six.text_type(flag)})"},{"line_number":1376,"context_line":"        LOG.info(_LI(\"Update readonly setting on volume \""}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_0025dd07","line":1373,"range":{"start_line":1373,"start_character":24,"end_line":1373,"end_character":27},"updated":"2016-07-12 07:47:39.000000000","message":"It is better to use LOG.warning(_LW(format_string), args) so that it would skip string string concatenation if warning log level is not enabled.","commit_id":"37a17a1c51657aca9408fcec79aea54da76e8667"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"76ea78bdd5dd18e2fdfc0aa62d76dda422e437d3","unresolved":false,"context_lines":[{"line_number":1370,"context_line":"            msg \u003d _(\u0027Backend driver Can not set volume %(volume)s readonly\u0027"},{"line_number":1371,"context_line":"                    \u0027flag for reason: %(ex)s.\u0027) % {\u0027volume\u0027: volume[\u0027id\u0027],"},{"line_number":1372,"context_line":"                                                   \u0027ex\u0027: ex}"},{"line_number":1373,"context_line":"            LOG.warning(msg)"},{"line_number":1374,"context_line":"        self.update_volume_admin_metadata(context.elevated(), volume,"},{"line_number":1375,"context_line":"                                          {\u0027readonly\u0027: six.text_type(flag)})"},{"line_number":1376,"context_line":"        LOG.info(_LI(\"Update readonly setting on volume \""}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_1b4d4c3e","line":1373,"range":{"start_line":1373,"start_character":24,"end_line":1373,"end_character":27},"in_reply_to":"1aa78d24_0025dd07","updated":"2016-07-12 07:59:49.000000000","message":"@Vipin, Thanks a lot! I will fix it.","commit_id":"37a17a1c51657aca9408fcec79aea54da76e8667"},{"author":{"_account_id":17742,"name":"liucheng","email":"liucheng20@huawei.com","username":"liucheng"},"change_message_id":"90377d3d0bdb66ff1e44adfe72b9f56548b1196d","unresolved":false,"context_lines":[{"line_number":1367,"context_line":"        try:"},{"line_number":1368,"context_line":"            self.volume_rpcapi.update_readonly_flag(context, volume, flag)"},{"line_number":1369,"context_line":"        except exception.ServiceTooOld as ex:"},{"line_number":1370,"context_line":"            msg \u003d _LW(\u0027Backend driver Can not set volume %(volume)s readonly \u0027"},{"line_number":1371,"context_line":"                      \u0027flag for reason: %(ex)s.\u0027)"},{"line_number":1372,"context_line":"            LOG.warning(msg, {\u0027volume\u0027: volume[\u0027id\u0027], \u0027ex\u0027: ex})"},{"line_number":1373,"context_line":"        self.update_volume_admin_metadata(context.elevated(), volume,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_47521f14","line":1370,"range":{"start_line":1370,"start_character":38,"end_line":1370,"end_character":41},"updated":"2016-07-13 06:59:25.000000000","message":"s/Can/can.","commit_id":"83473326fc08e059054a3ce6b076e24c16367064"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"9023b47e67f4b0c8c56f7f6cc26bed9ec3843b83","unresolved":false,"context_lines":[{"line_number":1367,"context_line":"        try:"},{"line_number":1368,"context_line":"            self.volume_rpcapi.update_readonly_flag(context, volume, flag)"},{"line_number":1369,"context_line":"        except exception.ServiceTooOld as ex:"},{"line_number":1370,"context_line":"            msg \u003d _LW(\u0027Backend driver Can not set volume %(volume)s readonly \u0027"},{"line_number":1371,"context_line":"                      \u0027flag for reason: %(ex)s.\u0027)"},{"line_number":1372,"context_line":"            LOG.warning(msg, {\u0027volume\u0027: volume[\u0027id\u0027], \u0027ex\u0027: ex})"},{"line_number":1373,"context_line":"        self.update_volume_admin_metadata(context.elevated(), volume,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_23d5c3b6","line":1370,"range":{"start_line":1370,"start_character":38,"end_line":1370,"end_character":41},"in_reply_to":"1aa78d24_47521f14","updated":"2016-07-15 10:09:45.000000000","message":"Done","commit_id":"83473326fc08e059054a3ce6b076e24c16367064"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b0d80d6601adc34bf78717cad6499bdf57fdf584","unresolved":false,"context_lines":[{"line_number":1443,"context_line":"        except exception.ServiceTooOld as ex:"},{"line_number":1444,"context_line":"            msg \u003d _LW(\u0027Backend driver can not set volume %(volume)s readonly \u0027"},{"line_number":1445,"context_line":"                      \u0027flag for reason: %(ex)s.\u0027)"},{"line_number":1446,"context_line":"            LOG.warning(msg, {\u0027volume\u0027: volume[\u0027id\u0027], \u0027ex\u0027: ex})"},{"line_number":1447,"context_line":"        self.update_volume_admin_metadata(context.elevated(), volume,"},{"line_number":1448,"context_line":"                                          {\u0027readonly\u0027: six.text_type(flag)})"},{"line_number":1449,"context_line":"        LOG.info(_LI(\"Update readonly setting on volume \""}],"source_content_type":"text/x-python","patch_set":20,"id":"9a89bdaa_89afa6e2","line":1446,"updated":"2016-09-05 02:33:11.000000000","message":"NotImplemented should be caught and log here as well.","commit_id":"fa54a8a1b5beb57df0407a5765ef7b87e11b59c1"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"690b3c5e3e100de9ca23c0538693ae0b6fd7ce1c","unresolved":false,"context_lines":[{"line_number":1443,"context_line":"        except exception.ServiceTooOld as ex:"},{"line_number":1444,"context_line":"            msg \u003d _LW(\u0027Backend driver can not set volume %(volume)s readonly \u0027"},{"line_number":1445,"context_line":"                      \u0027flag for reason: %(ex)s.\u0027)"},{"line_number":1446,"context_line":"            LOG.warning(msg, {\u0027volume\u0027: volume[\u0027id\u0027], \u0027ex\u0027: ex})"},{"line_number":1447,"context_line":"        self.update_volume_admin_metadata(context.elevated(), volume,"},{"line_number":1448,"context_line":"                                          {\u0027readonly\u0027: six.text_type(flag)})"},{"line_number":1449,"context_line":"        LOG.info(_LI(\"Update readonly setting on volume \""}],"source_content_type":"text/x-python","patch_set":20,"id":"9a89bdaa_7eabf189","line":1446,"in_reply_to":"9a89bdaa_89afa6e2","updated":"2016-09-05 06:26:02.000000000","message":"Thanks a lot! I will fix it at once.","commit_id":"fa54a8a1b5beb57df0407a5765ef7b87e11b59c1"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"58106483d9ef11ed503bc193c11b7e09970e8c54","unresolved":false,"context_lines":[{"line_number":1442,"context_line":"            self.volume_rpcapi.update_readonly_flag(context, volume, flag)"},{"line_number":1443,"context_line":"        except NotImplementedError:"},{"line_number":1444,"context_line":"            msg \u003d _LW(\u0027Backend driver does not implement update_readonly_flag \u0027"},{"line_number":1445,"context_line":"                      \u0027function, can not set volume %(volume)s \u0027"},{"line_number":1446,"context_line":"                      \u0027readonly flag.\u0027)"},{"line_number":1447,"context_line":"            LOG.warning(msg, {\u0027volume\u0027: volume[\u0027id\u0027]})"},{"line_number":1448,"context_line":"        self.update_volume_admin_metadata(context.elevated(), volume,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a89bdaa_f8f603f8","line":1445,"range":{"start_line":1445,"start_character":33,"end_line":1445,"end_character":40},"updated":"2016-09-06 09:23:20.000000000","message":"nit: cannot is most commonly used in cases like this","commit_id":"5f588047c736cbab224901b5d8459eaa415e460c"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"f39ef7108078d621f5cc77ab406f508d1c5ba048","unresolved":false,"context_lines":[{"line_number":1442,"context_line":"            self.volume_rpcapi.update_readonly_flag(context, volume, flag)"},{"line_number":1443,"context_line":"        except NotImplementedError:"},{"line_number":1444,"context_line":"            msg \u003d _LW(\u0027Backend driver does not implement update_readonly_flag \u0027"},{"line_number":1445,"context_line":"                      \u0027function, can not set volume %(volume)s \u0027"},{"line_number":1446,"context_line":"                      \u0027readonly flag.\u0027)"},{"line_number":1447,"context_line":"            LOG.warning(msg, {\u0027volume\u0027: volume[\u0027id\u0027]})"},{"line_number":1448,"context_line":"        self.update_volume_admin_metadata(context.elevated(), volume,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a89bdaa_7b81dac2","line":1445,"range":{"start_line":1445,"start_character":33,"end_line":1445,"end_character":40},"in_reply_to":"9a89bdaa_f8f603f8","updated":"2016-09-07 03:22:12.000000000","message":"Done","commit_id":"5f588047c736cbab224901b5d8459eaa415e460c"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"438a55efe6b3a8ecccc58969ff8c80835989fe98","unresolved":false,"context_lines":[{"line_number":1444,"context_line":"            msg \u003d _LW(\u0027Backend driver does not implement update_readonly_flag \u0027"},{"line_number":1445,"context_line":"                      \u0027function, can not set volume %(volume)s \u0027"},{"line_number":1446,"context_line":"                      \u0027readonly flag.\u0027)"},{"line_number":1447,"context_line":"            LOG.warning(msg, {\u0027volume\u0027: volume[\u0027id\u0027]})"},{"line_number":1448,"context_line":"        self.update_volume_admin_metadata(context.elevated(), volume,"},{"line_number":1449,"context_line":"                                          {\u0027readonly\u0027: six.text_type(flag)})"},{"line_number":1450,"context_line":"        LOG.info(_LI(\"Update readonly setting on volume \""}],"source_content_type":"text/x-python","patch_set":23,"id":"9a89bdaa_36588932","line":1447,"updated":"2016-09-06 03:14:58.000000000","message":"We can catch a messagin exception here if needed.","commit_id":"5f588047c736cbab224901b5d8459eaa415e460c"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"f39ef7108078d621f5cc77ab406f508d1c5ba048","unresolved":false,"context_lines":[{"line_number":1444,"context_line":"            msg \u003d _LW(\u0027Backend driver does not implement update_readonly_flag \u0027"},{"line_number":1445,"context_line":"                      \u0027function, can not set volume %(volume)s \u0027"},{"line_number":1446,"context_line":"                      \u0027readonly flag.\u0027)"},{"line_number":1447,"context_line":"            LOG.warning(msg, {\u0027volume\u0027: volume[\u0027id\u0027]})"},{"line_number":1448,"context_line":"        self.update_volume_admin_metadata(context.elevated(), volume,"},{"line_number":1449,"context_line":"                                          {\u0027readonly\u0027: six.text_type(flag)})"},{"line_number":1450,"context_line":"        LOG.info(_LI(\"Update readonly setting on volume \""}],"source_content_type":"text/x-python","patch_set":23,"id":"9a89bdaa_9b869ed9","line":1447,"in_reply_to":"9a89bdaa_36588932","updated":"2016-09-07 03:22:12.000000000","message":"Done","commit_id":"5f588047c736cbab224901b5d8459eaa415e460c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"720de15d4d782a8ee1ceacfa0ff2b0a4022aaf80","unresolved":false,"context_lines":[{"line_number":1444,"context_line":"            msg \u003d _LW(\u0027Backend driver does not implement update_readonly_flag \u0027"},{"line_number":1445,"context_line":"                      \u0027function, can not set volume %(volume)s \u0027"},{"line_number":1446,"context_line":"                      \u0027readonly flag.\u0027)"},{"line_number":1447,"context_line":"            LOG.warning(msg, {\u0027volume\u0027: volume[\u0027id\u0027]})"},{"line_number":1448,"context_line":"        self.update_volume_admin_metadata(context.elevated(), volume,"},{"line_number":1449,"context_line":"                                          {\u0027readonly\u0027: six.text_type(flag)})"},{"line_number":1450,"context_line":"        LOG.info(_LI(\"Update readonly setting on volume \""}],"source_content_type":"text/x-python","patch_set":23,"id":"9a89bdaa_fc418e0c","line":1447,"in_reply_to":"9a89bdaa_36588932","updated":"2016-09-06 11:14:21.000000000","message":"Good point, that way would even be more pythonic.","commit_id":"5f588047c736cbab224901b5d8459eaa415e460c"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"f39ef7108078d621f5cc77ab406f508d1c5ba048","unresolved":false,"context_lines":[{"line_number":1444,"context_line":"            msg \u003d _LW(\u0027Backend driver does not implement update_readonly_flag \u0027"},{"line_number":1445,"context_line":"                      \u0027function, can not set volume %(volume)s \u0027"},{"line_number":1446,"context_line":"                      \u0027readonly flag.\u0027)"},{"line_number":1447,"context_line":"            LOG.warning(msg, {\u0027volume\u0027: volume[\u0027id\u0027]})"},{"line_number":1448,"context_line":"        self.update_volume_admin_metadata(context.elevated(), volume,"},{"line_number":1449,"context_line":"                                          {\u0027readonly\u0027: six.text_type(flag)})"},{"line_number":1450,"context_line":"        LOG.info(_LI(\"Update readonly setting on volume \""}],"source_content_type":"text/x-python","patch_set":23,"id":"9a89bdaa_db6ca637","line":1447,"in_reply_to":"9a89bdaa_fc418e0c","updated":"2016-09-07 03:22:12.000000000","message":"Done","commit_id":"5f588047c736cbab224901b5d8459eaa415e460c"}],"cinder/volume/driver.py":[{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b0d80d6601adc34bf78717cad6499bdf57fdf584","unresolved":false,"context_lines":[{"line_number":1921,"context_line":"                     ro. If flag is False, the volume will be set rw."},{"line_number":1922,"context_line":"        \"\"\""},{"line_number":1923,"context_line":""},{"line_number":1924,"context_line":"        pass"},{"line_number":1925,"context_line":""},{"line_number":1926,"context_line":""},{"line_number":1927,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a89bdaa_c9b9ae30","line":1924,"updated":"2016-09-05 02:33:11.000000000","message":"The default should not be \u0027pass\u0027, instead it\u0027d be rasing NotImplemetedError().","commit_id":"fa54a8a1b5beb57df0407a5765ef7b87e11b59c1"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"690b3c5e3e100de9ca23c0538693ae0b6fd7ce1c","unresolved":false,"context_lines":[{"line_number":1921,"context_line":"                     ro. If flag is False, the volume will be set rw."},{"line_number":1922,"context_line":"        \"\"\""},{"line_number":1923,"context_line":""},{"line_number":1924,"context_line":"        pass"},{"line_number":1925,"context_line":""},{"line_number":1926,"context_line":""},{"line_number":1927,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a89bdaa_3ea169aa","line":1924,"in_reply_to":"9a89bdaa_c9b9ae30","updated":"2016-09-05 06:26:02.000000000","message":"Thank you! I will fix it.","commit_id":"fa54a8a1b5beb57df0407a5765ef7b87e11b59c1"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"58106483d9ef11ed503bc193c11b7e09970e8c54","unresolved":false,"context_lines":[{"line_number":1916,"context_line":"    def update_readonly_flag(self, volume, flag):"},{"line_number":1917,"context_line":"        \"\"\"Update the volume ro/rw flag."},{"line_number":1918,"context_line":""},{"line_number":1919,"context_line":"        :param volume: The volume to be set"},{"line_number":1920,"context_line":"        :param flag: True|False If flag is True, the volume will be set"},{"line_number":1921,"context_line":"                     ro. If flag is False, the volume will be set rw."},{"line_number":1922,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"9a89bdaa_f8ea83ab","line":1919,"updated":"2016-09-06 09:23:20.000000000","message":"nit: It would be good to mention this is an OVO instance.","commit_id":"5f588047c736cbab224901b5d8459eaa415e460c"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"5b9f57d8327b6f4ffcc3714e20a0973977d9ba16","unresolved":false,"context_lines":[{"line_number":1916,"context_line":"    def update_readonly_flag(self, volume, flag):"},{"line_number":1917,"context_line":"        \"\"\"Update the volume ro/rw flag."},{"line_number":1918,"context_line":""},{"line_number":1919,"context_line":"        :param volume: The volume to be set"},{"line_number":1920,"context_line":"        :param flag: True|False If flag is True, the volume will be set"},{"line_number":1921,"context_line":"                     ro. If flag is False, the volume will be set rw."},{"line_number":1922,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"9a89bdaa_5b9c160f","line":1919,"in_reply_to":"9a89bdaa_f8ea83ab","updated":"2016-09-07 03:24:15.000000000","message":"Done","commit_id":"5f588047c736cbab224901b5d8459eaa415e460c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"58106483d9ef11ed503bc193c11b7e09970e8c54","unresolved":false,"context_lines":[{"line_number":1920,"context_line":"        :param flag: True|False If flag is True, the volume will be set"},{"line_number":1921,"context_line":"                     ro. If flag is False, the volume will be set rw."},{"line_number":1922,"context_line":"        \"\"\""},{"line_number":1923,"context_line":""},{"line_number":1924,"context_line":"        raise NotImplementedError()"},{"line_number":1925,"context_line":""},{"line_number":1926,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"9a89bdaa_b8071b80","line":1923,"updated":"2016-09-06 09:23:20.000000000","message":"nit: Unnecessary empty line, all other methods in the file don\u0027t add this line.","commit_id":"5f588047c736cbab224901b5d8459eaa415e460c"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"5b9f57d8327b6f4ffcc3714e20a0973977d9ba16","unresolved":false,"context_lines":[{"line_number":1920,"context_line":"        :param flag: True|False If flag is True, the volume will be set"},{"line_number":1921,"context_line":"                     ro. If flag is False, the volume will be set rw."},{"line_number":1922,"context_line":"        \"\"\""},{"line_number":1923,"context_line":""},{"line_number":1924,"context_line":"        raise NotImplementedError()"},{"line_number":1925,"context_line":""},{"line_number":1926,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"9a89bdaa_1bf8ce48","line":1923,"in_reply_to":"9a89bdaa_b8071b80","updated":"2016-09-07 03:24:15.000000000","message":"Done","commit_id":"5f588047c736cbab224901b5d8459eaa415e460c"}],"cinder/volume/manager.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"8acf9a5b509507b3ed52ec6727106caf2039abf2","unresolved":false,"context_lines":[{"line_number":4348,"context_line":"        secure_enabled \u003d self.driver.secure_file_operations_enabled()"},{"line_number":4349,"context_line":"        return secure_enabled"},{"line_number":4350,"context_line":""},{"line_number":4351,"context_line":"    def update_readonly_flag(self, context, volume, flag):"},{"line_number":4352,"context_line":"        \"\"\"Set the volume ro/rw in backend storage.\"\"\""},{"line_number":4353,"context_line":"        self._update_readonly_flag(volume, flag)"},{"line_number":4354,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"7a8ec9b2_f8581c33","line":4351,"updated":"2016-09-19 11:05:46.000000000","message":"Please, add tests for this new method","commit_id":"1e5e9d6ee938a5dad5d61f46cec402fb7927314c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"8acf9a5b509507b3ed52ec6727106caf2039abf2","unresolved":false,"context_lines":[{"line_number":4350,"context_line":""},{"line_number":4351,"context_line":"    def update_readonly_flag(self, context, volume, flag):"},{"line_number":4352,"context_line":"        \"\"\"Set the volume ro/rw in backend storage.\"\"\""},{"line_number":4353,"context_line":"        self._update_readonly_flag(volume, flag)"},{"line_number":4354,"context_line":""},{"line_number":4355,"context_line":"    def _update_readonly_flag(self, volume, flag):"},{"line_number":4356,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a8ec9b2_b5369d00","line":4353,"updated":"2016-09-19 11:05:46.000000000","message":"Do we really need _update_readonly_flag method?","commit_id":"1e5e9d6ee938a5dad5d61f46cec402fb7927314c"}],"cinder/volume/rpcapi.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9f8c7f78f30618649066d85b296659c26536e531","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        2.0  - Remove 1.x compatibility"},{"line_number":102,"context_line":"        2.1  - Add get_manageable_volumes() and get_manageable_snapshots()."},{"line_number":103,"context_line":"        2.2 - Adds support for sending objects over RPC in manage_existing()."},{"line_number":104,"context_line":"        2.3 - Adds support for sending objects over RPC in"},{"line_number":105,"context_line":"              update_readonly_flag()."},{"line_number":106,"context_line":"    \"\"\""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    RPC_API_VERSION \u003d \u00272.3\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_d6e231d4","line":105,"range":{"start_line":104,"start_character":15,"end_line":105,"end_character":37},"updated":"2016-07-07 14:49:14.000000000","message":"This isn\u0027t really accurate description of what feature you\u0027re adding.","commit_id":"fa98cd68dd299b69552281a55c7d741b76431fb3"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9f8c7f78f30618649066d85b296659c26536e531","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                          sort_dirs\u003dsort_dirs)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def update_readonly_flag(self, ctxt, volume, flag):"},{"line_number":326,"context_line":"        cctxt \u003d self._get_cctxt(volume[\u0027host\u0027], \u00272.3\u0027)"},{"line_number":327,"context_line":"        return cctxt.call(ctxt, \u0027update_readonly_flag\u0027,"},{"line_number":328,"context_line":"                          volume_id\u003dvolume[\u0027id\u0027], flag\u003dflag)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_16b2f9e4","line":326,"range":{"start_line":326,"start_character":8,"end_line":326,"end_character":54},"updated":"2016-07-07 14:49:14.000000000","message":"You need to check if you can send such message with self.client.can_send_version(\u00272.3\u0027). In case of negative response just raise and handle the exception in the places you\u0027re invoking this method. Example patch doing that [1].\n\n[1] https://review.openstack.org/#/c/264982/10/cinder/volume/rpcapi.py@165","commit_id":"fa98cd68dd299b69552281a55c7d741b76431fb3"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"6aaed27dea88408fa637515e4282c70244817adf","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                          sort_dirs\u003dsort_dirs)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def update_readonly_flag(self, ctxt, volume, flag):"},{"line_number":326,"context_line":"        cctxt \u003d self._get_cctxt(volume[\u0027host\u0027], \u00272.3\u0027)"},{"line_number":327,"context_line":"        return cctxt.call(ctxt, \u0027update_readonly_flag\u0027,"},{"line_number":328,"context_line":"                          volume_id\u003dvolume[\u0027id\u0027], flag\u003dflag)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_cdfd600a","line":326,"range":{"start_line":326,"start_character":8,"end_line":326,"end_character":54},"in_reply_to":"1aa78d24_16b2f9e4","updated":"2016-07-08 02:29:50.000000000","message":"@Michal, Thanks a lot! That\u0027s really much more better for RPC compatibility. I will fix it. Thank you very much!","commit_id":"fa98cd68dd299b69552281a55c7d741b76431fb3"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9f8c7f78f30618649066d85b296659c26536e531","unresolved":false,"context_lines":[{"line_number":325,"context_line":"    def update_readonly_flag(self, ctxt, volume, flag):"},{"line_number":326,"context_line":"        cctxt \u003d self._get_cctxt(volume[\u0027host\u0027], \u00272.3\u0027)"},{"line_number":327,"context_line":"        return cctxt.call(ctxt, \u0027update_readonly_flag\u0027,"},{"line_number":328,"context_line":"                          volume_id\u003dvolume[\u0027id\u0027], flag\u003dflag)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_b60205b2","line":328,"range":{"start_line":328,"start_character":36,"end_line":328,"end_character":47},"updated":"2016-07-07 14:49:14.000000000","message":"Can we pass whole volume object here like in other methods?","commit_id":"fa98cd68dd299b69552281a55c7d741b76431fb3"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"6aaed27dea88408fa637515e4282c70244817adf","unresolved":false,"context_lines":[{"line_number":325,"context_line":"    def update_readonly_flag(self, ctxt, volume, flag):"},{"line_number":326,"context_line":"        cctxt \u003d self._get_cctxt(volume[\u0027host\u0027], \u00272.3\u0027)"},{"line_number":327,"context_line":"        return cctxt.call(ctxt, \u0027update_readonly_flag\u0027,"},{"line_number":328,"context_line":"                          volume_id\u003dvolume[\u0027id\u0027], flag\u003dflag)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1aa78d24_ed23fca5","line":328,"range":{"start_line":328,"start_character":36,"end_line":328,"end_character":47},"in_reply_to":"1aa78d24_b60205b2","updated":"2016-07-08 02:29:50.000000000","message":"@Michal, Yes. We can pass whole volume object here. I will fix it. Thanks a lot!","commit_id":"fa98cd68dd299b69552281a55c7d741b76431fb3"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"4afc246d9ddd7aa70ef6643a1b2ca38c8410f6cd","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        2.0  - Remove 1.x compatibility"},{"line_number":102,"context_line":"        2.1  - Add get_manageable_volumes() and get_manageable_snapshots()."},{"line_number":103,"context_line":"        2.2 - Adds support for sending objects over RPC in manage_existing()."},{"line_number":104,"context_line":"        2.3 - Adds support for sending objects over RPC in"},{"line_number":105,"context_line":"              update_readonly_flag() to set backend driver readonly flag."},{"line_number":106,"context_line":"    \"\"\""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    RPC_API_VERSION \u003d \u00272.3\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_cce0b9cf","line":105,"range":{"start_line":104,"start_character":14,"end_line":105,"end_character":73},"updated":"2016-07-08 08:50:56.000000000","message":"Please reword this to:\n\n Add update_readonly_flag() to set backend driver readonly flag.","commit_id":"8478db2e82ef3768a43a24435284821dc7a801d1"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"990cbe5a99de53cc21c661b3092c3c6f95716549","unresolved":false,"context_lines":[{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def update_readonly_flag(self, ctxt, volume, flag):"},{"line_number":326,"context_line":"        version \u003d \u00272.3\u0027"},{"line_number":327,"context_line":"        if not self.client.can_send_version(\u00272.3\u0027):"},{"line_number":328,"context_line":"            version \u003d \u00272.0\u0027"},{"line_number":329,"context_line":"        cctxt \u003d self._get_cctxt(volume.host, version)"},{"line_number":330,"context_line":"        return cctxt.call(ctxt, \u0027update_readonly_flag\u0027,"},{"line_number":331,"context_line":"                          volume\u003dvolume, flag\u003dflag)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_e6b956cd","line":328,"range":{"start_line":327,"start_character":7,"end_line":328,"end_character":27},"updated":"2016-07-08 08:07:10.000000000","message":"We can not send 2.3 version, but we still send it....\nI think we should raise an exception here.","commit_id":"8478db2e82ef3768a43a24435284821dc7a801d1"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"cbda5e846a408065a974964fd63545c1a1218a2e","unresolved":false,"context_lines":[{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def update_readonly_flag(self, ctxt, volume, flag):"},{"line_number":326,"context_line":"        version \u003d \u00272.3\u0027"},{"line_number":327,"context_line":"        if not self.client.can_send_version(\u00272.3\u0027):"},{"line_number":328,"context_line":"            version \u003d \u00272.0\u0027"},{"line_number":329,"context_line":"        cctxt \u003d self._get_cctxt(volume.host, version)"},{"line_number":330,"context_line":"        return cctxt.call(ctxt, \u0027update_readonly_flag\u0027,"},{"line_number":331,"context_line":"                          volume\u003dvolume, flag\u003dflag)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_d7a4c2ba","line":328,"range":{"start_line":327,"start_character":7,"end_line":328,"end_character":27},"in_reply_to":"1aa78d24_0cb801e5","updated":"2016-07-08 09:21:17.000000000","message":"@Michal, Thanks for your kind of review. I will fix it.","commit_id":"8478db2e82ef3768a43a24435284821dc7a801d1"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"cbda5e846a408065a974964fd63545c1a1218a2e","unresolved":false,"context_lines":[{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def update_readonly_flag(self, ctxt, volume, flag):"},{"line_number":326,"context_line":"        version \u003d \u00272.3\u0027"},{"line_number":327,"context_line":"        if not self.client.can_send_version(\u00272.3\u0027):"},{"line_number":328,"context_line":"            version \u003d \u00272.0\u0027"},{"line_number":329,"context_line":"        cctxt \u003d self._get_cctxt(volume.host, version)"},{"line_number":330,"context_line":"        return cctxt.call(ctxt, \u0027update_readonly_flag\u0027,"},{"line_number":331,"context_line":"                          volume\u003dvolume, flag\u003dflag)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_b76bf684","line":328,"range":{"start_line":327,"start_character":7,"end_line":328,"end_character":27},"in_reply_to":"1aa78d24_e6b956cd","updated":"2016-07-08 09:21:17.000000000","message":"@Shufeng, Thanks a lot! I will fix it at once.","commit_id":"8478db2e82ef3768a43a24435284821dc7a801d1"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"4afc246d9ddd7aa70ef6643a1b2ca38c8410f6cd","unresolved":false,"context_lines":[{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def update_readonly_flag(self, ctxt, volume, flag):"},{"line_number":326,"context_line":"        version \u003d \u00272.3\u0027"},{"line_number":327,"context_line":"        if not self.client.can_send_version(\u00272.3\u0027):"},{"line_number":328,"context_line":"            version \u003d \u00272.0\u0027"},{"line_number":329,"context_line":"        cctxt \u003d self._get_cctxt(volume.host, version)"},{"line_number":330,"context_line":"        return cctxt.call(ctxt, \u0027update_readonly_flag\u0027,"},{"line_number":331,"context_line":"                          volume\u003dvolume, flag\u003dflag)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_0cb801e5","line":328,"range":{"start_line":327,"start_character":7,"end_line":328,"end_character":27},"in_reply_to":"1aa78d24_e6b956cd","updated":"2016-07-08 08:50:56.000000000","message":"Yup, in 2.0 the call is not supported, so we should raise and handle the exception in API layer (by logging a  warning and ignoring it probably - we will mimic old behavior).\n\nThis could happen only during Mitaka-\u003eNewton upgrade, so it would be a short window.","commit_id":"8478db2e82ef3768a43a24435284821dc7a801d1"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6b6343b4bf3f24125fea2ca6aea6a938b2db1bdd","unresolved":false,"context_lines":[{"line_number":372,"context_line":"                    \u0027cinder-volumes?\u0027)"},{"line_number":373,"context_line":"            raise exception.ServiceTooOld(msg)"},{"line_number":374,"context_line":"        cctxt \u003d self._get_cctxt(volume.host, version)"},{"line_number":375,"context_line":"        return cctxt.call(ctxt, \u0027update_readonly_flag\u0027,"},{"line_number":376,"context_line":"                          volume\u003dvolume, flag\u003dflag)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa7ab95a_9223e1a6","line":375,"range":{"start_line":375,"start_character":21,"end_line":375,"end_character":25},"updated":"2016-08-29 12:56:24.000000000","message":"Oh, I\u0027ve just noticed that. You\u0027re not using the result of this RPC method, so this should be asynchronous RPC cast, not call.","commit_id":"f1f66f93987f2cd5cb2339b21dc6a8f9631042e5"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"d742a1353e040bc93d6f3ae9725086f284896873","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    \"\"\""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    RPC_API_VERSION \u003d \u00272.7\u0027"},{"line_number":115,"context_line":"    TOPIC \u003d CONF.volume_topic"},{"line_number":116,"context_line":"    BINARY \u003d \u0027cinder-volume\u0027"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def _compat_ver(self, current, *legacy):"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa7ab95a_1514ff41","line":115,"range":{"start_line":115,"start_character":0,"end_line":115,"end_character":29},"updated":"2016-09-02 10:16:56.000000000","message":"Tests are failing, because you\u0027ve made a mistake when rebasing the patch This line should be left as:\n\n TOPIC \u003d constants.VOLUME_TOPIC","commit_id":"100a66b2080b746e52ec62787aa50730ae7fbc21"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b0d80d6601adc34bf78717cad6499bdf57fdf584","unresolved":false,"context_lines":[{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def update_readonly_flag(self, ctxt, volume, flag):"},{"line_number":387,"context_line":"        version \u003d \u00272.7\u0027"},{"line_number":388,"context_line":"        if not self.client.can_send_version(version):"},{"line_number":389,"context_line":"            msg \u003d _(\u0027One of cinder-volume services is too old to accept such \u0027"},{"line_number":390,"context_line":"                    \u0027request. Are you running mixed Mitaka-Newton \u0027"},{"line_number":391,"context_line":"                    \u0027cinder-volumes?\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a89bdaa_a9ac6aee","line":388,"updated":"2016-09-05 02:33:11.000000000","message":"This is not necessary, existing mechanism can already take care of that.","commit_id":"fa54a8a1b5beb57df0407a5765ef7b87e11b59c1"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"01e7b723491c132925eb3b3a787f6c14b449963b","unresolved":false,"context_lines":[{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def update_readonly_flag(self, ctxt, volume, flag):"},{"line_number":387,"context_line":"        version \u003d \u00272.7\u0027"},{"line_number":388,"context_line":"        if not self.client.can_send_version(version):"},{"line_number":389,"context_line":"            msg \u003d _(\u0027One of cinder-volume services is too old to accept such \u0027"},{"line_number":390,"context_line":"                    \u0027request. Are you running mixed Mitaka-Newton \u0027"},{"line_number":391,"context_line":"                    \u0027cinder-volumes?\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a89bdaa_a720094b","line":388,"updated":"2016-09-05 09:03:57.000000000","message":"Well, I guess \u0027request message version is incompatible\u0027 maybe a bit more ambiguous than the version here, but doesn\u0027t that always translate to mixed deployment in real deployment?  IMHO, the version here doesn\u0027t seem to provide much value helping deployer, and \u0027Mitaka-Newton\u0027 specifically is inaccurate, it should be \u0027pre-Newton \u0026 Newton\u0027 now and soon to be \u0027pre-Newton \u0026 post-Newton\u0027 once O branch is open.  \u0027pre-newton \u0026 post-newton\u0027 doesn\u0027t seem helpful to me.","commit_id":"fa54a8a1b5beb57df0407a5765ef7b87e11b59c1"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"f0d9a17afaa02bfbda151ebb62e6942671c45f1a","unresolved":false,"context_lines":[{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def update_readonly_flag(self, ctxt, volume, flag):"},{"line_number":387,"context_line":"        version \u003d \u00272.7\u0027"},{"line_number":388,"context_line":"        if not self.client.can_send_version(version):"},{"line_number":389,"context_line":"            msg \u003d _(\u0027One of cinder-volume services is too old to accept such \u0027"},{"line_number":390,"context_line":"                    \u0027request. Are you running mixed Mitaka-Newton \u0027"},{"line_number":391,"context_line":"                    \u0027cinder-volumes?\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a89bdaa_1e5f0f42","line":388,"in_reply_to":"9a89bdaa_a720094b","updated":"2016-09-06 09:39:32.000000000","message":"@Michal，@Huang Zhiteng, the exception msg changed as:\nmsg \u003d _(\u0027One of cinder-volume services is too old \u0027\n        \u0027to accept such request. There are still \u0027\n        \u0027cinder-volume services running pre-Newton.\u0027)\nWhen the exception happened, it may be better to be explicit with the error log. When the openstack version is upgraded, the mixed deployment scenario exists. Like this, It may be helpful to user. Thanks a lot!","commit_id":"fa54a8a1b5beb57df0407a5765ef7b87e11b59c1"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f783e544444736eb5f23dfeacd2fdc77829b0162","unresolved":false,"context_lines":[{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def update_readonly_flag(self, ctxt, volume, flag):"},{"line_number":387,"context_line":"        version \u003d \u00272.7\u0027"},{"line_number":388,"context_line":"        if not self.client.can_send_version(version):"},{"line_number":389,"context_line":"            msg \u003d _(\u0027One of cinder-volume services is too old to accept such \u0027"},{"line_number":390,"context_line":"                    \u0027request. Are you running mixed Mitaka-Newton \u0027"},{"line_number":391,"context_line":"                    \u0027cinder-volumes?\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a89bdaa_35c6e467","line":388,"in_reply_to":"9a89bdaa_a9ac6aee","updated":"2016-09-05 08:15:45.000000000","message":"I disagree, without that the RPC call will fail with an ambiguous error when some c-vols don\u0027t support the call. I think it\u0027s better to be explicit with the error log.","commit_id":"fa54a8a1b5beb57df0407a5765ef7b87e11b59c1"}],"releasenotes/notes/support-volume-driver-set-readonly-83457a9e1c9da68a.yaml":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5e43aed7f45a7f8d165d6d811b4d83c5dc699def","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - the feature will implement to set the readonly properties to backend driver."},{"line_number":4,"context_line":"    volume driver will should provide an interface \"update_readonly_flag\" to set"},{"line_number":5,"context_line":"    the volume ro/rw mode."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"1aa78d24_6237b2b0","line":5,"range":{"start_line":3,"start_character":0,"end_line":5,"end_character":26},"updated":"2016-07-11 13:48:18.000000000","message":"I think we can reword it to:\n\n  - From now on update_readonly_flag will also call the volume driver\n    to set volume ro/rw mode on the backend itself. update_readonly_flag\n    method is added to driver interface.","commit_id":"19c7195c5aa8046d0ba24b6e3484c5dbb2d64e73"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"b36163ff1507b702e3dd1b49b066281ba656eb16","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - the feature will implement to set the readonly properties to backend driver."},{"line_number":4,"context_line":"    volume driver will should provide an interface \"update_readonly_flag\" to set"},{"line_number":5,"context_line":"    the volume ro/rw mode."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"1aa78d24_41bc1406","line":5,"range":{"start_line":3,"start_character":0,"end_line":5,"end_character":26},"in_reply_to":"1aa78d24_6237b2b0","updated":"2016-07-12 02:25:36.000000000","message":"@Michal, Thanks a lot! I will fix it.","commit_id":"19c7195c5aa8046d0ba24b6e3484c5dbb2d64e73"},{"author":{"_account_id":17742,"name":"liucheng","email":"liucheng20@huawei.com","username":"liucheng"},"change_message_id":"90377d3d0bdb66ff1e44adfe72b9f56548b1196d","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - From now on update_readonly_flag will also call the volume driver"},{"line_number":4,"context_line":"    to set volume ro/rw mode on the backend itself. update_readonly_flag"},{"line_number":5,"context_line":"    method is added to driver interface. "}],"source_content_type":"text/x-yaml","patch_set":9,"id":"1aa78d24_e7dfcb66","line":5,"range":{"start_line":5,"start_character":40,"end_line":5,"end_character":41},"updated":"2016-07-13 06:59:25.000000000","message":"Redundant space.","commit_id":"83473326fc08e059054a3ce6b076e24c16367064"},{"author":{"_account_id":12382,"name":"YaoZheng","email":"zheng.yao1@zte.com.cn","username":"YaoZheng"},"change_message_id":"9023b47e67f4b0c8c56f7f6cc26bed9ec3843b83","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - From now on update_readonly_flag will also call the volume driver"},{"line_number":4,"context_line":"    to set volume ro/rw mode on the backend itself. update_readonly_flag"},{"line_number":5,"context_line":"    method is added to driver interface. "}],"source_content_type":"text/x-yaml","patch_set":9,"id":"1aa78d24_63486bb4","line":5,"range":{"start_line":5,"start_character":40,"end_line":5,"end_character":41},"in_reply_to":"1aa78d24_e7dfcb66","updated":"2016-07-15 10:09:45.000000000","message":"Done","commit_id":"83473326fc08e059054a3ce6b076e24c16367064"}]}
