)]}'
{"cinder/tests/unit/fake_driver.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9c828db3ff3fc9ff165d8eca517c6d5283bea803","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        pass"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":36,"context_line":"        # NOTE(thangp): There are several places in the core cinder code where"},{"line_number":37,"context_line":"        # the volume passed through is a dict and not an oslo_versionedobject."},{"line_number":38,"context_line":"        # We need to react appropriately to what type of volume is passed in,"},{"line_number":39,"context_line":"        # until the switch over to oslo_versionedobjects is complete."}],"source_content_type":"text/x-python","patch_set":9,"id":"9a8ffd7b_4eb3b498","line":36,"updated":"2015-11-26 17:01:41.000000000","message":"This wouldn\u0027t be needed once my patch that\u0027s adding aliases to volume object [1] gets merged.I would add this as TODO item instead of a note if you\u0027ll do another patchset.\n\n[1] https://review.openstack.org/#/c/247763/","commit_id":"7f4954fb73e36acff7e29c6ef568d1d6d9a68988"}],"cinder/tests/unit/test_volume.py":[{"author":{"_account_id":14274,"name":"XinXiaohui","email":"xiaohui.xin@intel.com","username":"XinXiaohui"},"change_message_id":"de08ed1a47f7d3155f258829bd83e373e6eb474e","unresolved":false,"context_lines":[{"line_number":2031,"context_line":"                       \u0027_get_target_chap_auth\u0027)"},{"line_number":2032,"context_line":"    @mock.patch.object(db, \u0027volume_admin_metadata_get\u0027)"},{"line_number":2033,"context_line":"    @mock.patch.object(db.sqlalchemy.api, \u0027volume_get\u0027)"},{"line_number":2034,"context_line":"    @mock.patch.object(db, \u0027volume_update\u0027)"},{"line_number":2035,"context_line":"    def test_initialize_connection_fetchqos(self,"},{"line_number":2036,"context_line":"                                            _mock_volume_update,"},{"line_number":2037,"context_line":"                                            _mock_volume_get,"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_7aca57a3","line":2034,"range":{"start_line":2034,"start_character":28,"end_line":2034,"end_character":41},"updated":"2015-12-31 07:22:23.000000000","message":"Do we still need the db mock functions here? Per my understanding, there are should be object mock functions as we use objects here already.","commit_id":"af45b08bd5eeb02a85ac1f3bb4acc92f9978b06a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"41fc32503e53d6c54c4b1243a97cf402ada3e278","unresolved":false,"context_lines":[{"line_number":2031,"context_line":"                       \u0027_get_target_chap_auth\u0027)"},{"line_number":2032,"context_line":"    @mock.patch.object(db, \u0027volume_admin_metadata_get\u0027)"},{"line_number":2033,"context_line":"    @mock.patch.object(db.sqlalchemy.api, \u0027volume_get\u0027)"},{"line_number":2034,"context_line":"    @mock.patch.object(db, \u0027volume_update\u0027)"},{"line_number":2035,"context_line":"    def test_initialize_connection_fetchqos(self,"},{"line_number":2036,"context_line":"                                            _mock_volume_update,"},{"line_number":2037,"context_line":"                                            _mock_volume_get,"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_89eca3c8","line":2034,"range":{"start_line":2034,"start_character":28,"end_line":2034,"end_character":41},"in_reply_to":"fa69d971_7aca57a3","updated":"2015-12-31 10:40:09.000000000","message":"Object methods use DB API methods, so the difference is just that we have one more layer between. I prefer to have db methods mocked as that way we\u0027re also testing objects code.","commit_id":"af45b08bd5eeb02a85ac1f3bb4acc92f9978b06a"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"40b19013d293e5636a57ab33081530dc0b4428ac","unresolved":false,"context_lines":[{"line_number":2147,"context_line":"        \"\"\"Test exception path for create_export failure.\"\"\""},{"line_number":2148,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":2149,"context_line":"            self.context, admin_metadata\u003d{\u0027fake-key\u0027: \u0027fake-value\u0027},"},{"line_number":2150,"context_line":"            volume_type_id\u003d\u0027fake_type_id\u0027, **self.volume_params)"},{"line_number":2151,"context_line":"        _mock_create_export.side_effect \u003d exception.CinderException"},{"line_number":2152,"context_line":""},{"line_number":2153,"context_line":"        connector \u003d {\u0027ip\u0027: \u0027IP\u0027, \u0027initiator\u0027: \u0027INITIATOR\u0027}"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a061dce_82bc17bc","line":2150,"updated":"2016-04-07 12:54:52.000000000","message":"volume_type_id \u003d fake.volume_type_id\n\nSee line 2092.","commit_id":"2bab1086da71c6798fa936929696d5547ae7bfa1"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"e555d825bf6b8f59794dde87f365197acf344b23","unresolved":false,"context_lines":[{"line_number":2147,"context_line":"        \"\"\"Test exception path for create_export failure.\"\"\""},{"line_number":2148,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":2149,"context_line":"            self.context, admin_metadata\u003d{\u0027fake-key\u0027: \u0027fake-value\u0027},"},{"line_number":2150,"context_line":"            volume_type_id\u003d\u0027fake_type_id\u0027, **self.volume_params)"},{"line_number":2151,"context_line":"        _mock_create_export.side_effect \u003d exception.CinderException"},{"line_number":2152,"context_line":""},{"line_number":2153,"context_line":"        connector \u003d {\u0027ip\u0027: \u0027IP\u0027, \u0027initiator\u0027: \u0027INITIATOR\u0027}"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a18252c_9b585c34","line":2150,"in_reply_to":"9a061dce_82bc17bc","updated":"2016-04-13 21:18:37.000000000","message":"Done","commit_id":"2bab1086da71c6798fa936929696d5547ae7bfa1"}],"cinder/tests/unit/test_volume_rpcapi.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2789c141ee49a056a3d58fc7fc42da0c55cad6ff","unresolved":false,"context_lines":[{"line_number":355,"context_line":"                              volume\u003dself.fake_volume_obj,"},{"line_number":356,"context_line":"                              connector\u003d\u0027fake_connector\u0027,"},{"line_number":357,"context_line":"                              version\u003d\u00271.37\u0027)"},{"line_number":358,"context_line":"        can_send_version.assert_called_once_with(\u00271.37\u0027)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    @mock.patch(\u0027oslo_messaging.RPCClient.can_send_version\u0027,"},{"line_number":361,"context_line":"                return_value\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a7b0d38_f075acf9","line":358,"updated":"2015-12-28 09:26:30.000000000","message":"You\u0027re bumping the manager version to 1.38, so this also should be 1.38.","commit_id":"9d4de128a9a2c207e7aab4503c170283d3f8f4e1"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2789c141ee49a056a3d58fc7fc42da0c55cad6ff","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                              volume\u003dself.fake_volume_obj,"},{"line_number":366,"context_line":"                              connector\u003d\u0027fake_connector\u0027,"},{"line_number":367,"context_line":"                              version\u003d\u00271.0\u0027)"},{"line_number":368,"context_line":"        can_send_version.assert_called_once_with(\u00271.37\u0027)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def test_terminate_connection(self):"},{"line_number":371,"context_line":"        self._test_volume_api(\u0027terminate_connection\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a7b0d38_b062c43c","line":368,"updated":"2015-12-28 09:26:30.000000000","message":"Ditto.","commit_id":"9d4de128a9a2c207e7aab4503c170283d3f8f4e1"}],"cinder/volume/manager.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"4b3e20589ec3ad9ece2004656a888dc2eae3fb64","unresolved":false,"context_lines":[{"line_number":1258,"context_line":"                               \u0027backend\u0027: namespace})"},{"line_number":1259,"context_line":"                raise"},{"line_number":1260,"context_line":""},{"line_number":1261,"context_line":"    def initialize_connection(self, context, volume, connector):"},{"line_number":1262,"context_line":"        \"\"\"Prepare volume for connection from host represented by connector."},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"        This method calls the driver initialize_connection and returns"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_903a8035","line":1261,"updated":"2015-11-09 14:55:23.000000000","message":"I think I finally finished all the updates necessary in the dependency chain,  so changes in the scheduler and volume\u0027s rpcapi.py and manager.py are backwards compatible.  Please rebase this patch and follow the examples in the dependent patches to make initialize_connection send over objects and be backwards compatible.  Thanks!","commit_id":"d67d31e29b36400062408ba63e66c79d19995815"},{"author":{"_account_id":12661,"name":"Dmitry Guryanov","email":"dmitry.guryanov@gmail.com","username":"dguryanov"},"change_message_id":"1027558b66205122398d7d3f24237660f0bc2ead","unresolved":false,"context_lines":[{"line_number":1377,"context_line":""},{"line_number":1378,"context_line":"        # Add encrypted flag to connection_info if not set in the driver."},{"line_number":1379,"context_line":"        if conn_info[\u0027data\u0027].get(\u0027encrypted\u0027) is None:"},{"line_number":1380,"context_line":"            encrypted \u003d bool(volume.get(\u0027encryption_key_id\u0027))"},{"line_number":1381,"context_line":"            conn_info[\u0027data\u0027][\u0027encrypted\u0027] \u003d encrypted"},{"line_number":1382,"context_line":""},{"line_number":1383,"context_line":"        LOG.info(_LI(\"Initialize volume connection completed successfully.\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a26ad4f_bb0f6f2d","line":1380,"updated":"2015-10-29 02:04:39.000000000","message":"Why didn\u0027t you change this?","commit_id":"d67d31e29b36400062408ba63e66c79d19995815"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"f6ec90d970d9a95044bc8ad7b5b740af6826dac3","unresolved":false,"context_lines":[{"line_number":1377,"context_line":""},{"line_number":1378,"context_line":"        # Add encrypted flag to connection_info if not set in the driver."},{"line_number":1379,"context_line":"        if conn_info[\u0027data\u0027].get(\u0027encrypted\u0027) is None:"},{"line_number":1380,"context_line":"            encrypted \u003d bool(volume.get(\u0027encryption_key_id\u0027))"},{"line_number":1381,"context_line":"            conn_info[\u0027data\u0027][\u0027encrypted\u0027] \u003d encrypted"},{"line_number":1382,"context_line":""},{"line_number":1383,"context_line":"        LOG.info(_LI(\"Initialize volume connection completed successfully.\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a26ad4f_3813580f","line":1380,"in_reply_to":"1a26ad4f_bb0f6f2d","updated":"2015-10-29 10:26:36.000000000","message":"Missed it. Will fix with next patch. Thanks","commit_id":"d67d31e29b36400062408ba63e66c79d19995815"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"7988a89d23e7281f8f76c1707f24e65198e0025a","unresolved":false,"context_lines":[{"line_number":1453,"context_line":""},{"line_number":1454,"context_line":"        # Add access_mode to connection info"},{"line_number":1455,"context_line":"        volume_metadata \u003d volume.admin_metadata"},{"line_number":1456,"context_line":"        conn_info[\u0027data\u0027][\u0027access_mode\u0027] \u003d volume_metadata.get("},{"line_number":1457,"context_line":"            \u0027attached_mode\u0027,"},{"line_number":1458,"context_line":"            # NOTE(zhiyan): client didn\u0027t call \u0027os-attach\u0027 before"},{"line_number":1459,"context_line":"            \u0027ro\u0027 if volume_metadata.get(\u0027readonly\u0027) \u003d\u003d \u0027True\u0027 else \u0027rw\u0027)"},{"line_number":1460,"context_line":""},{"line_number":1461,"context_line":"        # Add encrypted flag to connection_info if not set in the driver."},{"line_number":1462,"context_line":"        if conn_info[\u0027data\u0027].get(\u0027encrypted\u0027) is None:"}],"source_content_type":"text/x-python","patch_set":29,"id":"9abb7d3a_152134b5","line":1459,"range":{"start_line":1456,"start_character":0,"end_line":1459,"end_character":72},"updated":"2016-06-02 08:42:58.000000000","message":"Technically previous code was also setting access_mode when attached_mode was None. As `value` in VolumeMetadata is nullable, this may happen. It will be safer to mimic the older behavior exactly.","commit_id":"b7a86789310b513d925ce50e01bf37cfd7a5f283"}],"cinder/volume/rpcapi.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2789c141ee49a056a3d58fc7fc42da0c55cad6ff","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        new_host \u003d utils.extract_host(volume.host)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        msg_args \u003d {\u0027volume_id\u0027: volume.id, \u0027connector\u0027: connector}"},{"line_number":216,"context_line":"        if self.client.can_send_version(\u00271.37\u0027):"},{"line_number":217,"context_line":"            version \u003d \u00271.37\u0027"},{"line_number":218,"context_line":"            msg_args[\u0027volume\u0027] \u003d volume"},{"line_number":219,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a7b0d38_7058dc8a","line":216,"updated":"2015-12-28 09:26:30.000000000","message":"This is 1.38 now.","commit_id":"9d4de128a9a2c207e7aab4503c170283d3f8f4e1"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2789c141ee49a056a3d58fc7fc42da0c55cad6ff","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        msg_args \u003d {\u0027volume_id\u0027: volume.id, \u0027connector\u0027: connector}"},{"line_number":216,"context_line":"        if self.client.can_send_version(\u00271.37\u0027):"},{"line_number":217,"context_line":"            version \u003d \u00271.37\u0027"},{"line_number":218,"context_line":"            msg_args[\u0027volume\u0027] \u003d volume"},{"line_number":219,"context_line":"        else:"},{"line_number":220,"context_line":"            version \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a7b0d38_905d487b","line":217,"updated":"2015-12-28 09:26:30.000000000","message":"ditto","commit_id":"9d4de128a9a2c207e7aab4503c170283d3f8f4e1"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"6383d8f975c4f05c66e733f681bef102e57e4d62","unresolved":false,"context_lines":[{"line_number":89,"context_line":"               initialize_connection()."},{"line_number":90,"context_line":"    \"\"\""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    RPC_API_VERSION \u003d \u00271.37\u0027"},{"line_number":93,"context_line":"    TOPIC \u003d CONF.volume_topic"},{"line_number":94,"context_line":"    BINARY \u003d \u0027cinder-volume\u0027"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"5a5ae5dd_224529b2","line":92,"updated":"2016-02-05 13:57:41.000000000","message":"This version should be bumped to \u00271.38\u0027.","commit_id":"a3c54f0e3043c94adc0624bce4d721156bc68b4b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"e8c1042fec92bbb9432b77423b24572e6829d31a","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        cctxt.cast(ctxt, \u0027copy_volume_to_image\u0027, volume_id\u003dvolume[\u0027id\u0027],"},{"line_number":197,"context_line":"                   image_meta\u003dimage_meta)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def initialize_connection(self, ctxt, volume, connector):"},{"line_number":200,"context_line":"        version \u003d self._compat_ver(\u00272.1\u0027, \u00272.0\u0027, \u00271.0\u0027)"},{"line_number":201,"context_line":"        msg_args \u003d {\u0027volume_id\u0027: volume.id, \u0027connector\u0027: connector,"},{"line_number":202,"context_line":"                    \u0027volume\u0027: volume}"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        if version in (\u00272.0\u0027, \u00271.0\u0027):"},{"line_number":205,"context_line":"            del msg_args[\u0027volume\u0027]"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        cctxt \u003d self._get_cctxt(volume[\u0027host\u0027], version\u003dversion)"},{"line_number":208,"context_line":"        return cctxt.call(ctxt, \u0027initialize_connection\u0027, **msg_args)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def terminate_connection(self, ctxt, volume, connector, force\u003dFalse):"},{"line_number":211,"context_line":"        cctxt \u003d self._get_cctxt(volume[\u0027host\u0027], \u00272.0\u0027)"}],"source_content_type":"text/x-python","patch_set":28,"id":"9abb7d3a_58271a12","line":208,"range":{"start_line":199,"start_character":0,"end_line":208,"end_character":68},"updated":"2016-05-30 13:24:02.000000000","message":"You don\u0027t really need compatibility with 1.x now - that\u0027s the point of raising version to 2.0 in the end of Mitaka. Just our cleanups took time to get merged. So - just be compatible with 2.0.","commit_id":"f034ef9548b64ef88342d0436001c559de319e6e"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"71776c20510b4d733883a01b10a9a7896a974334","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        cctxt.cast(ctxt, \u0027copy_volume_to_image\u0027, volume_id\u003dvolume[\u0027id\u0027],"},{"line_number":197,"context_line":"                   image_meta\u003dimage_meta)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def initialize_connection(self, ctxt, volume, connector):"},{"line_number":200,"context_line":"        version \u003d self._compat_ver(\u00272.1\u0027, \u00272.0\u0027, \u00271.0\u0027)"},{"line_number":201,"context_line":"        msg_args \u003d {\u0027volume_id\u0027: volume.id, \u0027connector\u0027: connector,"},{"line_number":202,"context_line":"                    \u0027volume\u0027: volume}"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        if version in (\u00272.0\u0027, \u00271.0\u0027):"},{"line_number":205,"context_line":"            del msg_args[\u0027volume\u0027]"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        cctxt \u003d self._get_cctxt(volume[\u0027host\u0027], version\u003dversion)"},{"line_number":208,"context_line":"        return cctxt.call(ctxt, \u0027initialize_connection\u0027, **msg_args)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def terminate_connection(self, ctxt, volume, connector, force\u003dFalse):"},{"line_number":211,"context_line":"        cctxt \u003d self._get_cctxt(volume[\u0027host\u0027], \u00272.0\u0027)"}],"source_content_type":"text/x-python","patch_set":28,"id":"9abb7d3a_3325c708","line":208,"range":{"start_line":199,"start_character":0,"end_line":208,"end_character":68},"in_reply_to":"9abb7d3a_58271a12","updated":"2016-05-31 21:40:48.000000000","message":"Yeah, you\u0027re right, forgot about that. Fixed.","commit_id":"f034ef9548b64ef88342d0436001c559de319e6e"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"7988a89d23e7281f8f76c1707f24e65198e0025a","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        msg_args \u003d {\u0027volume_id\u0027: volume.id, \u0027connector\u0027: connector,"},{"line_number":202,"context_line":"                    \u0027volume\u0027: volume}"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        if version \u003d\u003d \u00272.0\u0027:"},{"line_number":205,"context_line":"            del msg_args[\u0027volume\u0027]"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        cctxt \u003d self._get_cctxt(volume[\u0027host\u0027], version\u003dversion)"},{"line_number":208,"context_line":"        return cctxt.call(ctxt, \u0027initialize_connection\u0027, **msg_args)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9abb7d3a_3840ad35","line":205,"range":{"start_line":204,"start_character":0,"end_line":205,"end_character":34},"updated":"2016-06-02 08:42:58.000000000","message":"Older approach with explicit calls of can_send_version in conditionals was producing less redundant code in case a call was modified multiple times, as you could waterfall version constraints.\n\nAnyway I don\u0027t have a strong preference for that.","commit_id":"b7a86789310b513d925ce50e01bf37cfd7a5f283"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"12492a0f8e59950b67cc37e60d4c6a89e64bbe94","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        msg_args \u003d {\u0027volume_id\u0027: volume.id, \u0027connector\u0027: connector,"},{"line_number":202,"context_line":"                    \u0027volume\u0027: volume}"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        if version \u003d\u003d \u00272.0\u0027:"},{"line_number":205,"context_line":"            del msg_args[\u0027volume\u0027]"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        cctxt \u003d self._get_cctxt(volume[\u0027host\u0027], version\u003dversion)"},{"line_number":208,"context_line":"        return cctxt.call(ctxt, \u0027initialize_connection\u0027, **msg_args)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9abb7d3a_6e0d3337","line":205,"range":{"start_line":204,"start_character":0,"end_line":205,"end_character":34},"in_reply_to":"9abb7d3a_3840ad35","updated":"2016-06-02 16:34:49.000000000","message":"Example of current approach - https://review.openstack.org/#/c/297366/1/cinder/volume/rpcapi.py\nImo it produces much cleaner code and don\u0027t need to call _compat_ver multiple times.","commit_id":"b7a86789310b513d925ce50e01bf37cfd7a5f283"},{"author":{"_account_id":20140,"name":"Karthik Prabhu Vinod","email":"karthik.prabhu.vinod@intel.com","username":"kprabhuv"},"change_message_id":"8e7db5b57ab596faacaf6c7ecd218f271b09385e","unresolved":false,"context_lines":[{"line_number":103,"context_line":"               initialize_connection()."},{"line_number":104,"context_line":"    \"\"\""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    RPC_API_VERSION \u003d \u00272.0\u0027"},{"line_number":107,"context_line":"    TOPIC \u003d CONF.volume_topic"},{"line_number":108,"context_line":"    BINARY \u003d \u0027cinder-volume\u0027"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9abb7d3a_4a463b22","line":106,"range":{"start_line":106,"start_character":24,"end_line":106,"end_character":25},"updated":"2016-06-06 22:35:39.000000000","message":"I think you need to bump this to 2.1 here","commit_id":"7891edf84e91d92cd8f35863958b72d3c6c697b9"},{"author":{"_account_id":18026,"name":"huanan","email":"huanan@huawei.com","username":"huanan"},"change_message_id":"84796a72db9da528e21f30155bc05f4d69fd8e01","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                   image_meta\u003dimage_meta)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def initialize_connection(self, ctxt, volume, connector):"},{"line_number":202,"context_line":"        version \u003d self._compat_ver(\u00272.3\u0027, \u00272.0\u0027)"},{"line_number":203,"context_line":"        msg_args \u003d {\u0027volume_id\u0027: volume.id, \u0027connector\u0027: connector,"},{"line_number":204,"context_line":"                    \u0027volume\u0027: volume}"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        if version \u003d\u003d \u00272.0\u0027:"},{"line_number":207,"context_line":"            del msg_args[\u0027volume\u0027]"}],"source_content_type":"text/x-python","patch_set":33,"id":"bacf61ea_90606637","line":204,"range":{"start_line":202,"start_character":8,"end_line":204,"end_character":36},"updated":"2016-07-28 11:45:19.000000000","message":"I found that this patch lead to the following bug, and need modify as soon as possible.\nhttps://bugs.launchpad.net/cinder/+bug/1607333","commit_id":"83a1fdb5c4f773e1f54f47aa26cb762369110208"}]}
