)]}'
{"cinder/tests/unit/test_glusterfs.py":[{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"7cf928c4040ac8ef137a29e98808389d64980c1d","unresolved":false,"context_lines":[{"line_number":1055,"context_line":"        snap_path \u003d \u0027%s.%s\u0027 % (volume_path, self.SNAP_UUID)"},{"line_number":1056,"context_line":"        snap_file \u003d \u0027%s.%s\u0027 % (volume_file, self.SNAP_UUID)"},{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"        def change_progress(*args):"},{"line_number":1059,"context_line":"            progress \u003d [\u00270%\u0027, \u002750%\u0027, \u002790%\u0027]"},{"line_number":1060,"context_line":"            snap_ref.progress \u003d progress[change_progress.idx]"},{"line_number":1061,"context_line":"            change_progress.idx +\u003d 1"},{"line_number":1062,"context_line":"            return snap_ref"},{"line_number":1063,"context_line":"        change_progress.idx \u003d 0"},{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"        with mock.patch.object(drv, \u0027_execute\u0027) as mock_execute,\\"},{"line_number":1066,"context_line":"                mock.patch.object(db, \u0027snapshot_get\u0027) as mock_snapshot_get,\\"}],"source_content_type":"text/x-python","patch_set":21,"id":"dab17558_22a8bc76","line":1063,"range":{"start_line":1058,"start_character":8,"end_line":1063,"end_character":31},"updated":"2016-05-11 06:35:34.000000000","message":"Could it be a public util method? Seems other tests also use it and code is almost same.","commit_id":"c8f744f481e0ffea8ceddf944eb2fe9bb7e4f8e2"}],"cinder/tests/unit/test_remotefs.py":[{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"523fb79cc28087d3c3a93f30b73c58108a04b7bc","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        _FAKE_VOLUME \u003d {\u0027id\u0027: \u00274f711859-4928-4cb7-801a-a50c37ceaccc\u0027,"},{"line_number":44,"context_line":"                        \u0027size\u0027: 1,"},{"line_number":45,"context_line":"                        \u0027provider_location\u0027: \u0027fake_share\u0027,"},{"line_number":46,"context_line":"                        \u0027name\u0027: \u0027volume-TEST123\u0027,"},{"line_number":47,"context_line":"                        \u0027status\u0027: \u0027available\u0027}"},{"line_number":48,"context_line":"        self._fake_volume \u003d fake_volume.fake_volume_obj(self.context,"},{"line_number":49,"context_line":"                                                        **_FAKE_VOLUME)"},{"line_number":50,"context_line":"        self._fake_volume_path \u003d os.path.join(self._FAKE_MNT_POINT,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_77f0d767","line":47,"range":{"start_line":43,"start_character":1,"end_line":47,"end_character":46},"updated":"2016-01-05 03:24:31.000000000","message":"Why move this to here? Could we use self._FAKE_VOLUME in fake_volume_obj()?","commit_id":"1c3fc94c2c76aa2a273bdb9faa8d6380f6e3b6c5"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"f315e89de098dcf15341eb92f69c25fa932ba48f","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        _FAKE_VOLUME \u003d {\u0027id\u0027: \u00274f711859-4928-4cb7-801a-a50c37ceaccc\u0027,"},{"line_number":44,"context_line":"                        \u0027size\u0027: 1,"},{"line_number":45,"context_line":"                        \u0027provider_location\u0027: \u0027fake_share\u0027,"},{"line_number":46,"context_line":"                        \u0027name\u0027: \u0027volume-TEST123\u0027,"},{"line_number":47,"context_line":"                        \u0027status\u0027: \u0027available\u0027}"},{"line_number":48,"context_line":"        self._fake_volume \u003d fake_volume.fake_volume_obj(self.context,"},{"line_number":49,"context_line":"                                                        **_FAKE_VOLUME)"},{"line_number":50,"context_line":"        self._fake_volume_path \u003d os.path.join(self._FAKE_MNT_POINT,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_c1ba73c0","line":47,"range":{"start_line":43,"start_character":1,"end_line":47,"end_character":46},"in_reply_to":"fa69d971_0c09b731","updated":"2016-01-27 03:37:24.000000000","message":"Okay, got it.","commit_id":"1c3fc94c2c76aa2a273bdb9faa8d6380f6e3b6c5"},{"author":{"_account_id":12661,"name":"Dmitry Guryanov","email":"dmitry.guryanov@gmail.com","username":"dguryanov"},"change_message_id":"98c8bc4897fbadaec7fd6846a39c6ca7b4ec3a63","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        _FAKE_VOLUME \u003d {\u0027id\u0027: \u00274f711859-4928-4cb7-801a-a50c37ceaccc\u0027,"},{"line_number":44,"context_line":"                        \u0027size\u0027: 1,"},{"line_number":45,"context_line":"                        \u0027provider_location\u0027: \u0027fake_share\u0027,"},{"line_number":46,"context_line":"                        \u0027name\u0027: \u0027volume-TEST123\u0027,"},{"line_number":47,"context_line":"                        \u0027status\u0027: \u0027available\u0027}"},{"line_number":48,"context_line":"        self._fake_volume \u003d fake_volume.fake_volume_obj(self.context,"},{"line_number":49,"context_line":"                                                        **_FAKE_VOLUME)"},{"line_number":50,"context_line":"        self._fake_volume_path \u003d os.path.join(self._FAKE_MNT_POINT,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_0c09b731","line":47,"range":{"start_line":43,"start_character":1,"end_line":47,"end_character":46},"in_reply_to":"fa69d971_77f0d767","updated":"2016-01-07 23:01:04.000000000","message":"Just to make it invisible from other methods.","commit_id":"1c3fc94c2c76aa2a273bdb9faa8d6380f6e3b6c5"}],"cinder/volume/drivers/glusterfs.py":[{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"eb0cae9d4c9894032a4b4828c524945a841330d1","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        if len(snapshots) \u003e 0:"},{"line_number":449,"context_line":"            raise exception.InvalidVolume(snap_error_msg)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        volume \u003d self.db.volume_get(context, backup[\u0027volume_id\u0027])"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"        active_file_path \u003d self._active_volume_path(volume)"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5aef4532_7f273064","line":451,"updated":"2016-03-09 08:39:54.000000000","message":"Should be:\nvolume \u003d objects.Volume.get_by_id()","commit_id":"a22656f249ad6824c5141a962cf104e5b61d14a0"},{"author":{"_account_id":13431,"name":"Evgeny Antyshev","email":"eantyshev@gmail.com","username":"eantyshev"},"change_message_id":"01771e96336bcd756b48b39e0608905b989fd836","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        if len(snapshots) \u003e 0:"},{"line_number":449,"context_line":"            raise exception.InvalidVolume(snap_error_msg)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        volume \u003d self.db.volume_get(context, backup[\u0027volume_id\u0027])"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"        active_file_path \u003d self._active_volume_path(volume)"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5aef4532_fb8ea2ce","line":451,"in_reply_to":"5aef4532_7f273064","updated":"2016-03-09 13:14:44.000000000","message":"Such a replacement causes that we switch to using database object of cinder.db, and not VolumeDriver.db\n\nI cannot say right away, what problems are there with it,\nbut all the other drivers, including the base one from cinder/volume/driver.py, use \"self.db.get_volume\" everywhere.\n\nThis patch is a solid refactor as is, and I would leave this issue for future (if this is really needed).","commit_id":"a22656f249ad6824c5141a962cf104e5b61d14a0"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"52c1a75a333efec5993beee90218685f2d25756f","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        if len(snapshots) \u003e 0:"},{"line_number":449,"context_line":"            raise exception.InvalidVolume(snap_error_msg)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        volume \u003d self.db.volume_get(context, backup[\u0027volume_id\u0027])"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"        active_file_path \u003d self._active_volume_path(volume)"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5aef4532_154516b2","line":451,"in_reply_to":"5aef4532_fb8ea2ce","updated":"2016-03-09 14:47:14.000000000","message":"I raised this comment because I see this replacement was done in other \"switching to versionedobjects\" patches, for example:\nhttps://review.openstack.org/#/c/228916/\nSo I think switching to using db object is part of this work.","commit_id":"a22656f249ad6824c5141a962cf104e5b61d14a0"}],"cinder/volume/drivers/remotefs.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"2a4fdaf4d69b043f0d7289943d525f36dec91dd3","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        \"\"\"Just to override parent behavior.\"\"\""},{"line_number":157,"context_line":"        pass"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":160,"context_line":"        \"\"\"Allow connection to connector and return connection info."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        :param volume: volume reference"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_e7abf887","line":159,"updated":"2016-01-01 16:22:44.000000000","message":"initialize_connection has not been switched over to use versionedobjects yet :)  You need to wait on https://review.openstack.org/#/c/238894/","commit_id":"1c3fc94c2c76aa2a273bdb9faa8d6380f6e3b6c5"},{"author":{"_account_id":12661,"name":"Dmitry Guryanov","email":"dmitry.guryanov@gmail.com","username":"dguryanov"},"change_message_id":"98c8bc4897fbadaec7fd6846a39c6ca7b4ec3a63","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        \"\"\"Just to override parent behavior.\"\"\""},{"line_number":157,"context_line":"        pass"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":160,"context_line":"        \"\"\"Allow connection to connector and return connection info."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        :param volume: volume reference"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_ace42bac","line":159,"in_reply_to":"fa69d971_e7abf887","updated":"2016-01-07 23:01:04.000000000","message":"This patch depends on it, so there is no problem :)","commit_id":"1c3fc94c2c76aa2a273bdb9faa8d6380f6e3b6c5"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"2a4fdaf4d69b043f0d7289943d525f36dec91dd3","unresolved":false,"context_lines":[{"line_number":891,"context_line":""},{"line_number":892,"context_line":"        snap_attrs \u003d [\u0027volume_name\u0027, \u0027volume_size\u0027, \u0027name\u0027,"},{"line_number":893,"context_line":"                      \u0027volume_id\u0027, \u0027id\u0027, \u0027volume\u0027]"},{"line_number":894,"context_line":"        Snapshot \u003d collections.namedtuple(\u0027Snapshot\u0027, snap_attrs)"},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"        volume_info \u003d Volume(provider_location\u003dsrc_vref.provider_location,"},{"line_number":897,"context_line":"                             size\u003dsrc_vref.size,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_07108ca7","line":894,"updated":"2016-01-01 16:22:44.000000000","message":"Technically, this is not a versionedobject.  You should be careful about using it, or stating it is a versionedobject because there are methods that a snapshot or volume object has that this does not.\n\nI do not believe it is necessary to make this \"look\" like a versionedobject.","commit_id":"1c3fc94c2c76aa2a273bdb9faa8d6380f6e3b6c5"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"523fb79cc28087d3c3a93f30b73c58108a04b7bc","unresolved":false,"context_lines":[{"line_number":891,"context_line":""},{"line_number":892,"context_line":"        snap_attrs \u003d [\u0027volume_name\u0027, \u0027volume_size\u0027, \u0027name\u0027,"},{"line_number":893,"context_line":"                      \u0027volume_id\u0027, \u0027id\u0027, \u0027volume\u0027]"},{"line_number":894,"context_line":"        Snapshot \u003d collections.namedtuple(\u0027Snapshot\u0027, snap_attrs)"},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"        volume_info \u003d Volume(provider_location\u003dsrc_vref.provider_location,"},{"line_number":897,"context_line":"                             size\u003dsrc_vref.size,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_57ea73ad","line":894,"in_reply_to":"fa69d971_07108ca7","updated":"2016-01-05 03:24:31.000000000","message":"Agree with Thang, no need to do this change indeed.","commit_id":"1c3fc94c2c76aa2a273bdb9faa8d6380f6e3b6c5"},{"author":{"_account_id":12661,"name":"Dmitry Guryanov","email":"dmitry.guryanov@gmail.com","username":"dguryanov"},"change_message_id":"98c8bc4897fbadaec7fd6846a39c6ca7b4ec3a63","unresolved":false,"context_lines":[{"line_number":891,"context_line":""},{"line_number":892,"context_line":"        snap_attrs \u003d [\u0027volume_name\u0027, \u0027volume_size\u0027, \u0027name\u0027,"},{"line_number":893,"context_line":"                      \u0027volume_id\u0027, \u0027id\u0027, \u0027volume\u0027]"},{"line_number":894,"context_line":"        Snapshot \u003d collections.namedtuple(\u0027Snapshot\u0027, snap_attrs)"},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"        volume_info \u003d Volume(provider_location\u003dsrc_vref.provider_location,"},{"line_number":897,"context_line":"                             size\u003dsrc_vref.size,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa69d971_ec76a3d7","line":894,"in_reply_to":"fa69d971_57ea73ad","updated":"2016-01-07 23:01:04.000000000","message":"This method calls _create_snapshot, _copy_volume_from_snapshot and _delete_snapshot, which take Snapshot object as argument. So we need to provide some fake snapshot object to them.","commit_id":"1c3fc94c2c76aa2a273bdb9faa8d6380f6e3b6c5"},{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"f315e89de098dcf15341eb92f69c25fa932ba48f","unresolved":false,"context_lines":[{"line_number":891,"context_line":""},{"line_number":892,"context_line":"        snap_attrs \u003d [\u0027volume_name\u0027, \u0027volume_size\u0027, \u0027name\u0027,"},{"line_number":893,"context_line":"                      \u0027volume_id\u0027, \u0027id\u0027, \u0027volume\u0027]"},{"line_number":894,"context_line":"        Snapshot \u003d collections.namedtuple(\u0027Snapshot\u0027, snap_attrs)"},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"        volume_info \u003d Volume(provider_location\u003dsrc_vref.provider_location,"},{"line_number":897,"context_line":"                             size\u003dsrc_vref.size,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_1441a739","line":894,"in_reply_to":"fa69d971_ec76a3d7","updated":"2016-01-27 03:37:24.000000000","message":"Okay, I see this, so either we use dict with compatibility or we use this fake object.","commit_id":"1c3fc94c2c76aa2a273bdb9faa8d6380f6e3b6c5"}],"cinder/volume/drivers/smbfs.py":[{"author":{"_account_id":8846,"name":"Hao Wang","display_name":"Hao Wang","email":"sxmatch1986@gmail.com","username":"sxmatch"},"change_message_id":"7cf928c4040ac8ef137a29e98808389d64980c1d","unresolved":false,"context_lines":[{"line_number":640,"context_line":""},{"line_number":641,"context_line":"    def _get_volume_format_spec(self, volume):"},{"line_number":642,"context_line":"        vol_type \u003d volume.volume_type"},{"line_number":643,"context_line":"        if vol_type:"},{"line_number":644,"context_line":"            extra_specs \u003d vol_type.extra_specs or {}"},{"line_number":645,"context_line":"        else:"},{"line_number":646,"context_line":"            extra_specs \u003d {}"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"        extra_specs.update(volume.metadata or {})"},{"line_number":649,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"dab17558_cda48109","line":646,"range":{"start_line":643,"start_character":0,"end_line":646,"end_character":28},"updated":"2016-05-11 06:35:34.000000000","message":"It could be:\n\nextra_specs \u003d {}\nif vol_type and vol_type.extra_specs:\n    extra_specs \u003d vol_type.extra_specs","commit_id":"c8f744f481e0ffea8ceddf944eb2fe9bb7e4f8e2"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"1c9d100dc9a0161431743df779f77a1ff640a28d","unresolved":false,"context_lines":[{"line_number":644,"context_line":"        if vol_type and vol_type.extra_specs:"},{"line_number":645,"context_line":"            extra_specs \u003d vol_type.extra_specs"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"        extra_specs.update(volume.metadata or {})"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"        return (extra_specs.get(\u0027volume_format\u0027) or"},{"line_number":650,"context_line":"                self.configuration.smbfs_default_volume_format)"}],"source_content_type":"text/x-python","patch_set":23,"id":"dab17558_5b4998b6","line":647,"updated":"2016-05-16 12:05:35.000000000","message":"One small issue: as mentioned in one of the inline comments, we\u0027d like the volume metadata specs to take precedence over the volume type specs.","commit_id":"3ed2306b5de716a8a3d5c77df7ef376f19c79a83"}]}
