)]}'
{"rally-jobs/rally-neutron.yaml":[{"author":{"_account_id":13555,"name":"Pradeep K Surisetty","username":"pradeepkumars","inactive":true},"change_message_id":"1fbc9b6eb1a04d5d0cabdbcf3b3875c677b2cd4c","unresolved":false,"context_lines":[{"line_number":598,"context_line":"  CinderVolumes.create_volume_and_modify_metadata:"},{"line_number":599,"context_line":"    -"},{"line_number":600,"context_line":"      args:"},{"line_number":601,"context_line":"        size: 10"},{"line_number":602,"context_line":"      runner:"},{"line_number":603,"context_line":"        type: \"constant\""},{"line_number":604,"context_line":"        times: 3"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"3ab451fb_60a5ee02","line":601,"updated":"2015-04-17 14:31:38.000000000","message":"10G is much on test/devel environment. \nMight want to reduce to 1 or 2","commit_id":"af4ad93dc6ff7abe68f30d995a63552b5fede4b4"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"8bd93cf61205857d1e0388bd3c35779a7135d03c","unresolved":false,"context_lines":[{"line_number":628,"context_line":"        failure_rate:"},{"line_number":629,"context_line":"          max: 0"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"  CinderVolumes.modify_volume_metadata:"},{"line_number":632,"context_line":"    -"},{"line_number":633,"context_line":"      args:"},{"line_number":634,"context_line":"        size: 10"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"7a016987_9eaf8a7c","line":631,"updated":"2015-05-21 22:44:24.000000000","message":"Why this one in the rally-neutron.yaml?","commit_id":"675a61b5c0588f756c41fa753bb35b1a2208a544"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"1a3817a92b8e610c643a1adb6cb441b010252e80","unresolved":false,"context_lines":[{"line_number":628,"context_line":"        failure_rate:"},{"line_number":629,"context_line":"          max: 0"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"  CinderVolumes.modify_volume_metadata:"},{"line_number":632,"context_line":"    -"},{"line_number":633,"context_line":"      args:"},{"line_number":634,"context_line":"        size: 10"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"7a016987_6fc0482b","line":631,"in_reply_to":"7a016987_59f7ec8a","updated":"2015-05-26 14:12:01.000000000","message":"This work is under underway: https://review.openstack.org/#/c/185031/\n\nI think this can currently be merged safely, and then it can be split out as part of that change.","commit_id":"675a61b5c0588f756c41fa753bb35b1a2208a544"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"7daf7d0da5d131bde86dc5c4060b1d88e39d985b","unresolved":false,"context_lines":[{"line_number":628,"context_line":"        failure_rate:"},{"line_number":629,"context_line":"          max: 0"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"  CinderVolumes.modify_volume_metadata:"},{"line_number":632,"context_line":"    -"},{"line_number":633,"context_line":"      args:"},{"line_number":634,"context_line":"        size: 10"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"7a016987_becda632","line":631,"in_reply_to":"7a016987_9eaf8a7c","updated":"2015-05-21 22:52:25.000000000","message":"It\u0027s not just this one; all of the CinderVolumes scenarios are in rally-neutron.yaml. It looks like the gate-rally-dvsm-rally job starts Cinder, so I\u0027m not sure why it\u0027s done that way, but I was just following the examples.","commit_id":"675a61b5c0588f756c41fa753bb35b1a2208a544"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"09f28f70fe547eadd7a81b7e7e15ab2348553024","unresolved":false,"context_lines":[{"line_number":628,"context_line":"        failure_rate:"},{"line_number":629,"context_line":"          max: 0"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"  CinderVolumes.modify_volume_metadata:"},{"line_number":632,"context_line":"    -"},{"line_number":633,"context_line":"      args:"},{"line_number":634,"context_line":"        size: 10"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"7a016987_59f7ec8a","line":631,"in_reply_to":"7a016987_becda632","updated":"2015-05-21 23:29:50.000000000","message":"I think all cinder jobs should be moved into appropriate file like rally-cinder.yaml?","commit_id":"675a61b5c0588f756c41fa753bb35b1a2208a544"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"7a8c0f7e4728ed7d00ceda514439146a2f3fdee9","unresolved":false,"context_lines":[{"line_number":634,"context_line":"        size: 10"},{"line_number":635,"context_line":"      runner:"},{"line_number":636,"context_line":"        type: \"constant\""},{"line_number":637,"context_line":"        times: 10"},{"line_number":638,"context_line":"        concurrency: 2"},{"line_number":639,"context_line":"      context:"},{"line_number":640,"context_line":"        volumes:"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"7a016987_78b8ffe5","line":637,"updated":"2015-05-26 23:17:42.000000000","message":"Sorry, I think this job takes too much time. http://logs.openstack.org/94/174894/12/check/gate-rally-dsvm-neutron-rally/4d85e52/rally-plot/results.html.gz#/CinderVolumes.modify_volume_metadata We can reduce it to 3 times in 3 flows. As in others jobs.","commit_id":"78bd7682df4fcf17df554346a9340c2d7e9a1744"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"ce7a0dfd1185db5028986b98b25cfee824141b9e","unresolved":false,"context_lines":[{"line_number":634,"context_line":"        size: 10"},{"line_number":635,"context_line":"      runner:"},{"line_number":636,"context_line":"        type: \"constant\""},{"line_number":637,"context_line":"        times: 10"},{"line_number":638,"context_line":"        concurrency: 2"},{"line_number":639,"context_line":"      context:"},{"line_number":640,"context_line":"        volumes:"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"7a016987_e2c9b826","line":637,"in_reply_to":"7a016987_78b8ffe5","updated":"2015-05-27 16:26:21.000000000","message":"Done","commit_id":"78bd7682df4fcf17df554346a9340c2d7e9a1744"}],"rally/benchmark/scenarios/cinder/utils.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"cef75ab3e88dcec1d06f6d9e3d593129a00eeb5b","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        return self.clients(\"cinder\").volume_snapshots.list(detailed)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @base.atomic_action_timer(\"cinder.set_metadata\")"},{"line_number":69,"context_line":"    def _set_metadata(self, volume, sets\u003d10, set_size\u003d3):"},{"line_number":70,"context_line":"        \"\"\"Set volume metadata."},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3acd31a7_a6451671","line":68,"updated":"2015-05-03 09:51:53.000000000","message":"I would prefer to use instead of decorator directly context manage: \n\n  with AtomicAction \n\nand pass sets and set_size as a part of it here: \n\n  https://github.com/openstack/rally/blob/master/rally/benchmark/scenarios/designate/basic.py#L86-L91\n\nsame about _delete_metadata","commit_id":"688e29a4fdedc662021b4fc6a765b815aeee522f"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8fa2a321901c844127413a618913e934d5186fbb","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        return self.clients(\"cinder\").volume_snapshots.list(detailed)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @base.atomic_action_timer(\"cinder.set_metadata\")"},{"line_number":69,"context_line":"    def _set_metadata(self, volume, sets\u003d10, set_size\u003d3):"},{"line_number":70,"context_line":"        \"\"\"Set volume metadata."},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3acd31a7_15098031","line":68,"in_reply_to":"3acd31a7_a6451671","updated":"2015-05-04 13:49:39.000000000","message":"Done","commit_id":"688e29a4fdedc662021b4fc6a765b815aeee522f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"58fedb34410d3cba538c8bb1e9085fee3d005075","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        for i in range(deletes):"},{"line_number":101,"context_line":"            to_del \u003d []"},{"line_number":102,"context_line":"            for j in range(delete_size):"},{"line_number":103,"context_line":"                key \u003d random.choice(list(set(keys) - deleted - set(to_del)))"},{"line_number":104,"context_line":"                to_del.append(key)"},{"line_number":105,"context_line":"                deleted.add(key)"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3acd31a7_46ad2230","line":103,"updated":"2015-05-03 09:44:57.000000000","message":"this is very very unoptimal way to do next: \n\n  for i in range(delete_size): \n       key \u003d keys.pop(0, random.len(keys) - 1)\n       to_delete.append(key)","commit_id":"688e29a4fdedc662021b4fc6a765b815aeee522f"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8fa2a321901c844127413a618913e934d5186fbb","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        for i in range(deletes):"},{"line_number":101,"context_line":"            to_del \u003d []"},{"line_number":102,"context_line":"            for j in range(delete_size):"},{"line_number":103,"context_line":"                key \u003d random.choice(list(set(keys) - deleted - set(to_del)))"},{"line_number":104,"context_line":"                to_del.append(key)"},{"line_number":105,"context_line":"                deleted.add(key)"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3acd31a7_f507241a","line":103,"in_reply_to":"3acd31a7_46ad2230","updated":"2015-05-04 13:49:39.000000000","message":"Done","commit_id":"688e29a4fdedc662021b4fc6a765b815aeee522f"}],"rally/benchmark/scenarios/cinder/volumes.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"48e36a00aee3d6e68e81eea2a30a1dc3e285f3b4","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        if image:"},{"line_number":149,"context_line":"            kwargs[\"imageRef\"] \u003d image"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        volume \u003d self._create_volume(size, **kwargs)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        keys \u003d []"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dac4157f_1374649a","line":151,"updated":"2015-04-19 11:13:55.000000000","message":"creating volumes takes a lot of time in scenario about half, and they are not deleted. Maybe it makes sense to create volume using volumes context, and in scenario just update metadata?","commit_id":"04dec0837e2dd8cf4fcfaa43502ff352185ac544"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"48e36a00aee3d6e68e81eea2a30a1dc3e285f3b4","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        def set_metadata():"},{"line_number":156,"context_line":"            metadata \u003d {}"},{"line_number":157,"context_line":"            for _ in range(mod_size):"},{"line_number":158,"context_line":"                key \u003d self._generate_random_name()"},{"line_number":159,"context_line":"                keys.append(key)"},{"line_number":160,"context_line":"                metadata[key] \u003d self._generate_random_name()"}],"source_content_type":"text/x-python","patch_set":4,"id":"dac4157f_7310404f","line":157,"updated":"2015-04-19 11:13:55.000000000","message":"do not use _ in OpenStack project this variable is used for i18n.","commit_id":"04dec0837e2dd8cf4fcfaa43502ff352185ac544"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"48e36a00aee3d6e68e81eea2a30a1dc3e285f3b4","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                keys.append(key)"},{"line_number":160,"context_line":"                metadata[key] \u003d self._generate_random_name()"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"            self._set_metadata(volume, metadata)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        def del_metadata():"},{"line_number":165,"context_line":"            to_del \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"dac4157f_933ab4cc","line":162,"updated":"2015-04-19 11:13:55.000000000","message":"this is not proper usage of atomic_actions. \nIt will create useless mess e.g. \n  cinder.set_metadata-1\n  cinder.set_metadata-2\n  cinder.set_metadata-3\n\nWhere you are interested more in duration of set_3_metadas and how it is changed over the time.\n\nhttp://logs.openstack.org/94/174894/4/check/gate-rally-dsvm-neutron-rally/8834720/rally-plot/results.html.gz#/CinderVolumes.create_volume_and_modify_metadata/details","commit_id":"04dec0837e2dd8cf4fcfaa43502ff352185ac544"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"48e36a00aee3d6e68e81eea2a30a1dc3e285f3b4","unresolved":false,"context_lines":[{"line_number":165,"context_line":"            to_del \u003d []"},{"line_number":166,"context_line":"            for _ in range(mod_size):"},{"line_number":167,"context_line":"                key \u003d random.choice(list(set(keys) - set(to_del)))"},{"line_number":168,"context_line":"                to_del.append(key)"},{"line_number":169,"context_line":"                keys.remove(key)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"            self._delete_metadata(volume, to_del)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dac4157f_53341cdd","line":168,"updated":"2015-04-19 11:13:55.000000000","message":"i belive this code should be moved to utils. \nAnd method should be called: \n\n  self._delete_metadata(volume, delete_n_metadatas)","commit_id":"04dec0837e2dd8cf4fcfaa43502ff352185ac544"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"48e36a00aee3d6e68e81eea2a30a1dc3e285f3b4","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        # a given number of modification, so that our benchmarking is"},{"line_number":175,"context_line":"        # reliable."},{"line_number":176,"context_line":"        operation \u003d itertools.cycle([set_metadata, set_metadata, set_metadata,"},{"line_number":177,"context_line":"                                     del_metadata])"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        for _ in range(modifications):"},{"line_number":180,"context_line":"            next(operation)()"}],"source_content_type":"text/x-python","patch_set":4,"id":"dac4157f_531d3c65","line":177,"updated":"2015-04-19 11:13:55.000000000","message":"so we are deleting less then creating? And why it is hardcoded?","commit_id":"04dec0837e2dd8cf4fcfaa43502ff352185ac544"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"48e36a00aee3d6e68e81eea2a30a1dc3e285f3b4","unresolved":false,"context_lines":[{"line_number":177,"context_line":"                                     del_metadata])"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        for _ in range(modifications):"},{"line_number":180,"context_line":"            next(operation)()"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    @validation.required_services(consts.Service.CINDER)"},{"line_number":183,"context_line":"    @validation.required_openstack(users\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dac4157f_d356ec05","line":180,"updated":"2015-04-19 11:13:55.000000000","message":"Please do not reimplement rally runners, you shouldn\u0027t do loops inside the scenarios","commit_id":"04dec0837e2dd8cf4fcfaa43502ff352185ac544"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"58fedb34410d3cba538c8bb1e9085fee3d005075","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        self._create_volume(size, **kwargs)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @types.set(image\u003dtypes.ImageResourceType)"},{"line_number":130,"context_line":"    @validation.image_exists(\"image\", nullable\u003dTrue)"},{"line_number":131,"context_line":"    @validation.required_services(consts.Service.CINDER)"},{"line_number":132,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":133,"context_line":"    @base.scenario(context\u003d{\"cleanup\": [\"cinder\"]})"}],"source_content_type":"text/x-python","patch_set":7,"id":"3acd31a7_c6c012e3","line":130,"updated":"2015-05-03 09:44:57.000000000","message":"This benchmark doesn\u0027t use image nowhere. Please remove it from lines: \n\n 129, 130, 134, 144","commit_id":"688e29a4fdedc662021b4fc6a765b815aeee522f"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8fa2a321901c844127413a618913e934d5186fbb","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        self._create_volume(size, **kwargs)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @types.set(image\u003dtypes.ImageResourceType)"},{"line_number":130,"context_line":"    @validation.image_exists(\"image\", nullable\u003dTrue)"},{"line_number":131,"context_line":"    @validation.required_services(consts.Service.CINDER)"},{"line_number":132,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":133,"context_line":"    @base.scenario(context\u003d{\"cleanup\": [\"cinder\"]})"}],"source_content_type":"text/x-python","patch_set":7,"id":"3acd31a7_183777e4","line":130,"in_reply_to":"3acd31a7_c6c012e3","updated":"2015-05-04 13:49:39.000000000","message":"Done","commit_id":"688e29a4fdedc662021b4fc6a765b815aeee522f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"58fedb34410d3cba538c8bb1e9085fee3d005075","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    @types.set(image\u003dtypes.ImageResourceType)"},{"line_number":130,"context_line":"    @validation.image_exists(\"image\", nullable\u003dTrue)"},{"line_number":131,"context_line":"    @validation.required_services(consts.Service.CINDER)"},{"line_number":132,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":133,"context_line":"    @base.scenario(context\u003d{\"cleanup\": [\"cinder\"]})"},{"line_number":134,"context_line":"    def modify_volume_metadata(self, sets\u003d10, set_size\u003d3,"},{"line_number":135,"context_line":"                               deletes\u003d5, delete_size\u003d3,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3acd31a7_a6b75685","line":132,"updated":"2015-05-03 09:44:57.000000000","message":"You should add validation that volumes context is required \n\n  @validation.required_context(\"volumes\")","commit_id":"688e29a4fdedc662021b4fc6a765b815aeee522f"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"8fa2a321901c844127413a618913e934d5186fbb","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    @types.set(image\u003dtypes.ImageResourceType)"},{"line_number":130,"context_line":"    @validation.image_exists(\"image\", nullable\u003dTrue)"},{"line_number":131,"context_line":"    @validation.required_services(consts.Service.CINDER)"},{"line_number":132,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":133,"context_line":"    @base.scenario(context\u003d{\"cleanup\": [\"cinder\"]})"},{"line_number":134,"context_line":"    def modify_volume_metadata(self, sets\u003d10, set_size\u003d3,"},{"line_number":135,"context_line":"                               deletes\u003d5, delete_size\u003d3,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3acd31a7_38435344","line":132,"in_reply_to":"3acd31a7_a6b75685","updated":"2015-05-04 13:49:39.000000000","message":"Done","commit_id":"688e29a4fdedc662021b4fc6a765b815aeee522f"}],"rally/plugins/openstack/scenarios/cinder/utils.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"7a8c0f7e4728ed7d00ceda514439146a2f3fdee9","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    def _delete_metadata(self, volume, keys, deletes\u003d10, delete_size\u003d3):"},{"line_number":90,"context_line":"        \"\"\"Delete volume metadata keys."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        Note that ``len(keys)`` must be greater than ``deletes * delete_size``."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        :param volume: The volume to delete metadata from"},{"line_number":95,"context_line":"        :param deletes: how many operations to perform"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_98e73bac","line":92,"updated":"2015-05-26 23:17:42.000000000","message":"Also I think it\u0027s better to throw maybe some exception to help users not to read sources of code when they want to run scenatio)","commit_id":"78bd7682df4fcf17df554346a9340c2d7e9a1744"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"ce7a0dfd1185db5028986b98b25cfee824141b9e","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    def _delete_metadata(self, volume, keys, deletes\u003d10, delete_size\u003d3):"},{"line_number":90,"context_line":"        \"\"\"Delete volume metadata keys."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        Note that ``len(keys)`` must be greater than ``deletes * delete_size``."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        :param volume: The volume to delete metadata from"},{"line_number":95,"context_line":"        :param deletes: how many operations to perform"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_453416dd","line":92,"in_reply_to":"7a016987_98e73bac","updated":"2015-05-27 16:26:21.000000000","message":"Done","commit_id":"78bd7682df4fcf17df554346a9340c2d7e9a1744"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"7a8c0f7e4728ed7d00ceda514439146a2f3fdee9","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        # make a shallow copy of the list of keys so that, when we pop"},{"line_number":100,"context_line":"        # from it later, we don\u0027t modify the original list."},{"line_number":101,"context_line":"        _keys \u003d keys[:]"},{"line_number":102,"context_line":"        key \u003d \"cinder.delete_%s_metadatas_%s_times\" % (delete_size, deletes)"},{"line_number":103,"context_line":"        with base.AtomicAction(self, key):"},{"line_number":104,"context_line":"            for i in range(deletes):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_386a871b","line":101,"updated":"2015-05-26 23:17:42.000000000","message":"I think _keys \u003d list(keys) is more readable and don\u0027t need comment, but it as you want)","commit_id":"78bd7682df4fcf17df554346a9340c2d7e9a1744"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"ce7a0dfd1185db5028986b98b25cfee824141b9e","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        # make a shallow copy of the list of keys so that, when we pop"},{"line_number":100,"context_line":"        # from it later, we don\u0027t modify the original list."},{"line_number":101,"context_line":"        _keys \u003d keys[:]"},{"line_number":102,"context_line":"        key \u003d \"cinder.delete_%s_metadatas_%s_times\" % (delete_size, deletes)"},{"line_number":103,"context_line":"        with base.AtomicAction(self, key):"},{"line_number":104,"context_line":"            for i in range(deletes):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_2546ba4f","line":101,"in_reply_to":"7a016987_386a871b","updated":"2015-05-27 16:26:21.000000000","message":"Done. I\u0027ve kept the comment, though.","commit_id":"78bd7682df4fcf17df554346a9340c2d7e9a1744"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"7a8c0f7e4728ed7d00ceda514439146a2f3fdee9","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            for i in range(deletes):"},{"line_number":105,"context_line":"                to_del \u003d []"},{"line_number":106,"context_line":"                for j in range(delete_size):"},{"line_number":107,"context_line":"                    key \u003d _keys.pop(random.randint(0, len(_keys) - 1))"},{"line_number":108,"context_line":"                    to_del.append(key)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"                self.clients(\"cinder\").volumes.delete_metadata(volume, to_del)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_78023f71","line":107,"updated":"2015-05-26 23:17:42.000000000","message":"Also I think its not good Idea to call two different things \"key\"","commit_id":"78bd7682df4fcf17df554346a9340c2d7e9a1744"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"ce7a0dfd1185db5028986b98b25cfee824141b9e","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            for i in range(deletes):"},{"line_number":105,"context_line":"                to_del \u003d []"},{"line_number":106,"context_line":"                for j in range(delete_size):"},{"line_number":107,"context_line":"                    key \u003d _keys.pop(random.randint(0, len(_keys) - 1))"},{"line_number":108,"context_line":"                    to_del.append(key)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"                self.clients(\"cinder\").volumes.delete_metadata(volume, to_del)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_255d9a15","line":107,"in_reply_to":"7a016987_78023f71","updated":"2015-05-27 16:26:21.000000000","message":"Hahaha whoops.\n\nDone.","commit_id":"78bd7682df4fcf17df554346a9340c2d7e9a1744"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"bdda9b7cc8a69cf21947555ffc3590d1bd900c4d","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        action_name \u003d \"cinder.delete_%s_metadatas_%s_times\" % (delete_size,"},{"line_number":109,"context_line":"                                                               deletes)"},{"line_number":110,"context_line":"        with base.AtomicAction(self, action_name):"},{"line_number":111,"context_line":"            for i in range(deletes):"},{"line_number":112,"context_line":"                to_del \u003d []"},{"line_number":113,"context_line":"                for j in range(delete_size):"},{"line_number":114,"context_line":"                    key \u003d _keys.pop(random.randint(0, len(_keys) - 1))"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_c80ed2e4","line":111,"updated":"2015-05-27 22:09:09.000000000","message":"You could simple shuffle the _keys and then split it into multiple arrays.\n\n https://docs.python.org/2/library/itertools.html#itertools.tee","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"17ac660830caf897bf1187a725e477fad9ba9544","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        action_name \u003d \"cinder.delete_%s_metadatas_%s_times\" % (delete_size,"},{"line_number":109,"context_line":"                                                               deletes)"},{"line_number":110,"context_line":"        with base.AtomicAction(self, action_name):"},{"line_number":111,"context_line":"            for i in range(deletes):"},{"line_number":112,"context_line":"                to_del \u003d []"},{"line_number":113,"context_line":"                for j in range(delete_size):"},{"line_number":114,"context_line":"                    key \u003d _keys.pop(random.randint(0, len(_keys) - 1))"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_8a2c364b","line":111,"in_reply_to":"7a016987_c80ed2e4","updated":"2015-05-28 14:08:25.000000000","message":"Reimplemented using random.shuffle(), no need for itertools.tee(). Thanks for the pointer.","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a2959823ef3ae47050b98f60fcd87d3e37a06131","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        :param delete_size: number of metadata keys to delete in each operation"},{"line_number":97,"context_line":"        :param keys: a list of keys to choose deletion candidates from"},{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        if len(keys) \u003c\u003d deletes * delete_size:"},{"line_number":100,"context_line":"            raise exceptions.InvalidArgumentsException("},{"line_number":101,"context_line":"                \"Not enough metadata keys to delete: \""},{"line_number":102,"context_line":"                \"%(num_keys)s keys, but asked to delete %(num_deletes)s\" %"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_0de3a7a5","line":99,"updated":"2015-05-29 01:22:57.000000000","message":"Why do you check that len(keys) \u003c\u003d ? Should not it be simply \u0027\u003c\u0027 check?","commit_id":"2fc3837f1d8cec0ec5a34b8b151b24f644f82399"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"654f2192b87a20ecbc128c3459d04eb426d7aec6","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        :param delete_size: number of metadata keys to delete in each operation"},{"line_number":97,"context_line":"        :param keys: a list of keys to choose deletion candidates from"},{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        if len(keys) \u003c\u003d deletes * delete_size:"},{"line_number":100,"context_line":"            raise exceptions.InvalidArgumentsException("},{"line_number":101,"context_line":"                \"Not enough metadata keys to delete: \""},{"line_number":102,"context_line":"                \"%(num_keys)s keys, but asked to delete %(num_deletes)s\" %"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_bd447a46","line":99,"in_reply_to":"7a016987_0de3a7a5","updated":"2015-06-01 14:32:22.000000000","message":"Done","commit_id":"2fc3837f1d8cec0ec5a34b8b151b24f644f82399"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"823571bf8f794826e07e6ad32bd5d44655728ba7","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                 \"num_deletes\": deletes * delete_size})"},{"line_number":105,"context_line":"        # make a shallow copy of the list of keys so that, when we pop"},{"line_number":106,"context_line":"        # from it later, we don\u0027t modify the original list."},{"line_number":107,"context_line":"        _keys \u003d list(keys)"},{"line_number":108,"context_line":"        random.shuffle(_keys)"},{"line_number":109,"context_line":"        action_name \u003d \"cinder.delete_%s_metadatas_%s_times\" % (delete_size,"},{"line_number":110,"context_line":"                                                               deletes)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_12f15495","line":107,"updated":"2015-05-30 19:58:23.000000000","message":"Why don\u0027t you name it just `keys\u0027?:\n keys \u003d list(keys)","commit_id":"2fc3837f1d8cec0ec5a34b8b151b24f644f82399"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"654f2192b87a20ecbc128c3459d04eb426d7aec6","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                 \"num_deletes\": deletes * delete_size})"},{"line_number":105,"context_line":"        # make a shallow copy of the list of keys so that, when we pop"},{"line_number":106,"context_line":"        # from it later, we don\u0027t modify the original list."},{"line_number":107,"context_line":"        _keys \u003d list(keys)"},{"line_number":108,"context_line":"        random.shuffle(_keys)"},{"line_number":109,"context_line":"        action_name \u003d \"cinder.delete_%s_metadatas_%s_times\" % (delete_size,"},{"line_number":110,"context_line":"                                                               deletes)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_5d7a2678","line":107,"in_reply_to":"7a016987_12f15495","updated":"2015-06-01 14:32:22.000000000","message":"That felt icky due to reusing a variable name, but since we don\u0027t do anything with the original list (and don\u0027t want to, in fact), I think you\u0027re right. Done.","commit_id":"2fc3837f1d8cec0ec5a34b8b151b24f644f82399"}],"rally/plugins/openstack/scenarios/cinder/volumes.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b9d7343f4261d8f12f7775dbb35b025d8fdaefe4","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        This requires a volume to be created with the volumes"},{"line_number":148,"context_line":"        context. Additionally, ``sets * set_size`` must be less than"},{"line_number":149,"context_line":"        or equal to ``deletes * delete_size``."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        :param size: volume size (in GB)"},{"line_number":152,"context_line":"        :param sets: how many set_metadata operations to perform"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_ac07ae80","line":149,"updated":"2015-05-22 16:17:21.000000000","message":"I think therefore we need to change default values","commit_id":"675a61b5c0588f756c41fa753bb35b1a2208a544"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"1a3817a92b8e610c643a1adb6cb441b010252e80","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        This requires a volume to be created with the volumes"},{"line_number":148,"context_line":"        context. Additionally, ``sets * set_size`` must be less than"},{"line_number":149,"context_line":"        or equal to ``deletes * delete_size``."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        :param size: volume size (in GB)"},{"line_number":152,"context_line":"        :param sets: how many set_metadata operations to perform"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a016987_7154b120","line":149,"in_reply_to":"7a016987_ac07ae80","updated":"2015-05-26 14:12:01.000000000","message":"Doc string was wrong, thanks.","commit_id":"675a61b5c0588f756c41fa753bb35b1a2208a544"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"3ee64ef7a963901afafc302d04c88ad1ac19f30a","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        context. Additionally, ``sets * set_size`` must be greater"},{"line_number":149,"context_line":"        than or equal to ``deletes * delete_size``."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        :param size: volume size (in GB)"},{"line_number":152,"context_line":"        :param sets: how many set_metadata operations to perform"},{"line_number":153,"context_line":"        :param set_size: number of metadata keys to set in each"},{"line_number":154,"context_line":"                         set_metadata operation"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a016987_cdfdc46f","line":151,"updated":"2015-05-27 21:45:29.000000000","message":"Sorry that I\u0027m enoying to you) But you fogot remove this line from docstring","commit_id":"be9bd6eed7e1737d053ab9eab879737f53191c6a"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"53e6ceef94e2c0be5c9c0abea2aba99777bedfb1","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        :param deletes: how many delete_metadata operations to perform"},{"line_number":155,"context_line":"        :param delete_size: number of metadata keys to delete in each"},{"line_number":156,"context_line":"                            delete_metadata operation"},{"line_number":157,"context_line":"        :param kwargs: optional args to create a volume"},{"line_number":158,"context_line":"        \"\"\""},{"line_number":159,"context_line":"        volume \u003d random.choice(self.context[\"tenant\"][\"volumes\"])"},{"line_number":160,"context_line":"        keys \u003d self._set_metadata(volume[\"id\"], sets, set_size)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_b82f653d","line":157,"range":{"start_line":157,"start_character":15,"end_line":157,"end_character":21},"updated":"2015-05-27 23:56:30.000000000","message":"\u0027kwargs\u0027 is not used in this method","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"17ac660830caf897bf1187a725e477fad9ba9544","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        :param deletes: how many delete_metadata operations to perform"},{"line_number":155,"context_line":"        :param delete_size: number of metadata keys to delete in each"},{"line_number":156,"context_line":"                            delete_metadata operation"},{"line_number":157,"context_line":"        :param kwargs: optional args to create a volume"},{"line_number":158,"context_line":"        \"\"\""},{"line_number":159,"context_line":"        volume \u003d random.choice(self.context[\"tenant\"][\"volumes\"])"},{"line_number":160,"context_line":"        keys \u003d self._set_metadata(volume[\"id\"], sets, set_size)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_ea1baa1a","line":157,"in_reply_to":"7a016987_b82f653d","updated":"2015-05-28 14:08:25.000000000","message":"Done","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"6fcb7dbedf88af3201c8b308666b978bc0071d0a","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        :param deletes: how many delete_metadata operations to perform"},{"line_number":154,"context_line":"        :param delete_size: number of metadata keys to delete in each"},{"line_number":155,"context_line":"                            delete_metadata operation"},{"line_number":156,"context_line":"        \"\"\""},{"line_number":157,"context_line":"        volume \u003d random.choice(self.context[\"tenant\"][\"volumes\"])"},{"line_number":158,"context_line":"        keys \u003d self._set_metadata(volume[\"id\"], sets, set_size)"},{"line_number":159,"context_line":"        self._delete_metadata(volume[\"id\"], keys, deletes, delete_size)"}],"source_content_type":"text/x-python","patch_set":16,"id":"5afe65bd_6daa971b","line":156,"updated":"2015-06-02 03:22:01.000000000","message":"I think it should be check first here (sets * set_size \u003e\u003d deletes * delete_size) before doing any operations, since if sets * set_size \u003c deletes * delete_size, this benchmark will fail anyway..","commit_id":"cc437888ec868d0afa2c2c53ac72b63ca667342e"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"cf6b60030f97acb278c3d7c1f7773ae1c83e3809","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        :param deletes: how many delete_metadata operations to perform"},{"line_number":154,"context_line":"        :param delete_size: number of metadata keys to delete in each"},{"line_number":155,"context_line":"                            delete_metadata operation"},{"line_number":156,"context_line":"        \"\"\""},{"line_number":157,"context_line":"        volume \u003d random.choice(self.context[\"tenant\"][\"volumes\"])"},{"line_number":158,"context_line":"        keys \u003d self._set_metadata(volume[\"id\"], sets, set_size)"},{"line_number":159,"context_line":"        self._delete_metadata(volume[\"id\"], keys, deletes, delete_size)"}],"source_content_type":"text/x-python","patch_set":16,"id":"5afe65bd_7e3c7193","line":156,"in_reply_to":"5afe65bd_6daa971b","updated":"2015-06-02 13:20:42.000000000","message":"Done","commit_id":"cc437888ec868d0afa2c2c53ac72b63ca667342e"}],"samples/tasks/scenarios/cinder/modify-volume-metadata.json":[{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"53e6ceef94e2c0be5c9c0abea2aba99777bedfb1","unresolved":false,"context_lines":[{"line_number":2,"context_line":"    \"CinderVolumes.modify_volume_metadata\": ["},{"line_number":3,"context_line":"        {"},{"line_number":4,"context_line":"            \"args\": {"},{"line_number":5,"context_line":"                \"size\": 10"},{"line_number":6,"context_line":"            },"},{"line_number":7,"context_line":"            \"runner\": {"},{"line_number":8,"context_line":"                \"type\": \"constant\","}],"source_content_type":"application/json","patch_set":14,"id":"7a016987_181b191d","line":5,"range":{"start_line":5,"start_character":17,"end_line":5,"end_character":21},"updated":"2015-05-27 23:56:30.000000000","message":"\u0027CinderVolumes.modify_volume_metadata\u0027 has no argument \u0027size\u0027","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"17ac660830caf897bf1187a725e477fad9ba9544","unresolved":false,"context_lines":[{"line_number":2,"context_line":"    \"CinderVolumes.modify_volume_metadata\": ["},{"line_number":3,"context_line":"        {"},{"line_number":4,"context_line":"            \"args\": {"},{"line_number":5,"context_line":"                \"size\": 10"},{"line_number":6,"context_line":"            },"},{"line_number":7,"context_line":"            \"runner\": {"},{"line_number":8,"context_line":"                \"type\": \"constant\","}],"source_content_type":"application/json","patch_set":14,"id":"7a016987_6ad69a28","line":5,"in_reply_to":"7a016987_181b191d","updated":"2015-05-28 14:08:25.000000000","message":"Done","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"}],"samples/tasks/scenarios/cinder/modify-volume-metadata.yaml":[{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"53e6ceef94e2c0be5c9c0abea2aba99777bedfb1","unresolved":false,"context_lines":[{"line_number":2,"context_line":"  CinderVolumes.modify_volume_metadata:"},{"line_number":3,"context_line":"    -"},{"line_number":4,"context_line":"      args:"},{"line_number":5,"context_line":"        size: 10"},{"line_number":6,"context_line":"      runner:"},{"line_number":7,"context_line":"        type: \"constant\""},{"line_number":8,"context_line":"        times: 10"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a016987_f8ecbdf4","line":5,"range":{"start_line":5,"start_character":8,"end_line":5,"end_character":12},"updated":"2015-05-27 23:56:30.000000000","message":"same as in json","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"17ac660830caf897bf1187a725e477fad9ba9544","unresolved":false,"context_lines":[{"line_number":2,"context_line":"  CinderVolumes.modify_volume_metadata:"},{"line_number":3,"context_line":"    -"},{"line_number":4,"context_line":"      args:"},{"line_number":5,"context_line":"        size: 10"},{"line_number":6,"context_line":"      runner:"},{"line_number":7,"context_line":"        type: \"constant\""},{"line_number":8,"context_line":"        times: 10"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a016987_caf10ecf","line":5,"in_reply_to":"7a016987_f8ecbdf4","updated":"2015-05-28 14:08:25.000000000","message":"Done","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"}],"tests/unit/plugins/openstack/scenarios/cinder/test_utils.py":[{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"bdda9b7cc8a69cf21947555ffc3590d1bd900c4d","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        volume \u003d fakes.FakeVolume()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.scenario._set_metadata(volume, sets\u003d2, set_size\u003d4)"},{"line_number":68,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.set_metadata.call_args_list"},{"line_number":69,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":70,"context_line":"        for call in calls:"},{"line_number":71,"context_line":"            call_volume, metadata \u003d call[0]"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_08d3ca39","line":68,"updated":"2015-05-27 22:09:09.000000000","message":"Please don\u0027t call the mock_clients(\"cinder\").\n\n1. You can just call mock_clients() instead\n2. Use mock_clients.return_value.volumes.etc instead","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"17ac660830caf897bf1187a725e477fad9ba9544","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        volume \u003d fakes.FakeVolume()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.scenario._set_metadata(volume, sets\u003d2, set_size\u003d4)"},{"line_number":68,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.set_metadata.call_args_list"},{"line_number":69,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":70,"context_line":"        for call in calls:"},{"line_number":71,"context_line":"            call_volume, metadata \u003d call[0]"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_2a01c26a","line":68,"in_reply_to":"7a016987_08d3ca39","updated":"2015-05-28 14:08:25.000000000","message":"mock_clients(\"cinder\") is used throughout these unit tests (and the unit tests for other scenarios), and is IMO slightly more readable. I\u0027m not opposed per se to using mock_clients.return_value (I *am* opposed to using just mock_clients()), but for consistency\u0027s sake I\u0027ve kept this as-is.","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"d056aed3cd365ff08dfae0663e7c86c7e89acad8","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        volume \u003d fakes.FakeVolume()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.scenario._set_metadata(volume, sets\u003d2, set_size\u003d4)"},{"line_number":68,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.set_metadata.call_args_list"},{"line_number":69,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":70,"context_line":"        for call in calls:"},{"line_number":71,"context_line":"            call_volume, metadata \u003d call[0]"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_8d7f9716","line":68,"in_reply_to":"7a016987_2a01c26a","updated":"2015-05-29 01:19:33.000000000","message":"Using mock_clients(\"cinder\") is wrong, as it is no much different from mock_clients(\"foobar\").\n\nCheck\n self.assertEqual(mock_clients(\"foo\"), mock_clients(\"bar\"))","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"bdda9b7cc8a69cf21947555ffc3590d1bd900c4d","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.scenario._set_metadata(volume, sets\u003d2, set_size\u003d4)"},{"line_number":68,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.set_metadata.call_args_list"},{"line_number":69,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":70,"context_line":"        for call in calls:"},{"line_number":71,"context_line":"            call_volume, metadata \u003d call[0]"},{"line_number":72,"context_line":"            self.assertEqual(call_volume, volume)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_28ec46f2","line":69,"updated":"2015-05-27 22:09:09.000000000","message":"The order is otherwise.","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"17ac660830caf897bf1187a725e477fad9ba9544","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.scenario._set_metadata(volume, sets\u003d2, set_size\u003d4)"},{"line_number":68,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.set_metadata.call_args_list"},{"line_number":69,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":70,"context_line":"        for call in calls:"},{"line_number":71,"context_line":"            call_volume, metadata \u003d call[0]"},{"line_number":72,"context_line":"            self.assertEqual(call_volume, volume)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_8a8f9622","line":69,"in_reply_to":"7a016987_28ec46f2","updated":"2015-05-28 14:08:25.000000000","message":"Equality is commutative, so the order doesn\u0027t matter.","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"d056aed3cd365ff08dfae0663e7c86c7e89acad8","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.scenario._set_metadata(volume, sets\u003d2, set_size\u003d4)"},{"line_number":68,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.set_metadata.call_args_list"},{"line_number":69,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":70,"context_line":"        for call in calls:"},{"line_number":71,"context_line":"            call_volume, metadata \u003d call[0]"},{"line_number":72,"context_line":"            self.assertEqual(call_volume, volume)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_ad95b333","line":69,"in_reply_to":"7a016987_8a8f9622","updated":"2015-05-29 01:19:33.000000000","message":"Equality *is not commutative* because one side is *what it should be* (printed as \u0027reference\u0027) other is *what have we got* (printed as \u0027actual\u0027).\n\n testtools.matchers._impl.MismatchError: !\u003d:\nreference \u003d {\u0027a\u0027: [[1],\n       [2, 3],\n       [1],\n       [2, 3],\n       [1],\n       [2, 3],\n       [1],\n       [2, 3],\n       [1],\n       [2, 3],\n       [1],\n       [2, 3],\n       [1],\n       [2, 3],\n       [1],\n       [2, 3]],\n \u0027aaa\u0027: 30,\n \u0027abc\u0027: 10,\n \u0027eeee\u0027: 50}\nactual    \u003d {\u0027def\u0027: 20}","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"bdda9b7cc8a69cf21947555ffc3590d1bd900c4d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        for call in calls:"},{"line_number":71,"context_line":"            call_volume, metadata \u003d call[0]"},{"line_number":72,"context_line":"            self.assertEqual(call_volume, volume)"},{"line_number":73,"context_line":"            self.assertEqual(len(metadata), 4)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        self._test_atomic_action_timer(self.scenario.atomic_actions(),"},{"line_number":76,"context_line":"                                       \"cinder.set_4_metadatas_2_times\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_08baaae1","line":73,"updated":"2015-05-27 22:09:09.000000000","message":"The order is otherwise.","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"bdda9b7cc8a69cf21947555ffc3590d1bd900c4d","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    def test__delete_metadata(self, mock_clients):"},{"line_number":80,"context_line":"        volume \u003d fakes.FakeVolume()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        keys \u003d [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\"]"},{"line_number":83,"context_line":"        self.scenario._delete_metadata(volume, keys, deletes\u003d2, delete_size\u003d4)"},{"line_number":84,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.delete_metadata.call_args_list"},{"line_number":85,"context_line":"        self.assertEqual(len(calls), 2)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_28c32659","line":82,"updated":"2015-05-27 22:09:09.000000000","message":"I think it is better to use map(chr, range(ord(\"a\"), ord(\"l\") + 1))","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"17ac660830caf897bf1187a725e477fad9ba9544","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    def test__delete_metadata(self, mock_clients):"},{"line_number":80,"context_line":"        volume \u003d fakes.FakeVolume()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        keys \u003d [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\"]"},{"line_number":83,"context_line":"        self.scenario._delete_metadata(volume, keys, deletes\u003d2, delete_size\u003d4)"},{"line_number":84,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.delete_metadata.call_args_list"},{"line_number":85,"context_line":"        self.assertEqual(len(calls), 2)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_2a9c225c","line":82,"in_reply_to":"7a016987_28c32659","updated":"2015-05-28 14:08:25.000000000","message":"Clever fixtures to generate simple, static data are rarely actually clever.","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"b4f0fa24c3d19db3fa48a1621dbea1018a4f7970","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    def test__delete_metadata(self, mock_clients):"},{"line_number":80,"context_line":"        volume \u003d fakes.FakeVolume()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        keys \u003d [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\"]"},{"line_number":83,"context_line":"        self.scenario._delete_metadata(volume, keys, deletes\u003d2, delete_size\u003d4)"},{"line_number":84,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.delete_metadata.call_args_list"},{"line_number":85,"context_line":"        self.assertEqual(len(calls), 2)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_0d9167f1","line":82,"in_reply_to":"7a016987_2a9c225c","updated":"2015-05-29 01:24:42.000000000","message":"How about?\n \u003e\u003e\u003e string.ascii_letters[:20]\n \u0027abcdefghijklmnopqrst\u0027","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"bdda9b7cc8a69cf21947555ffc3590d1bd900c4d","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        keys \u003d [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\"]"},{"line_number":83,"context_line":"        self.scenario._delete_metadata(volume, keys, deletes\u003d2, delete_size\u003d4)"},{"line_number":84,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.delete_metadata.call_args_list"},{"line_number":85,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":86,"context_line":"        all_deleted \u003d []"},{"line_number":87,"context_line":"        for call in calls:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_c8b37209","line":84,"updated":"2015-05-27 22:09:09.000000000","message":"Same here.","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"bdda9b7cc8a69cf21947555ffc3590d1bd900c4d","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        self.scenario._delete_metadata(volume, keys, deletes\u003d2, delete_size\u003d4)"},{"line_number":84,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.delete_metadata.call_args_list"},{"line_number":85,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":86,"context_line":"        all_deleted \u003d []"},{"line_number":87,"context_line":"        for call in calls:"},{"line_number":88,"context_line":"            call_volume, del_keys \u003d call[0]"},{"line_number":89,"context_line":"            self.assertEqual(call_volume, volume)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_c8aa5285","line":86,"updated":"2015-05-27 22:09:09.000000000","message":"Use `set\u0027 here.","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"d056aed3cd365ff08dfae0663e7c86c7e89acad8","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        self.scenario._delete_metadata(volume, keys, deletes\u003d2, delete_size\u003d4)"},{"line_number":84,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.delete_metadata.call_args_list"},{"line_number":85,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":86,"context_line":"        all_deleted \u003d []"},{"line_number":87,"context_line":"        for call in calls:"},{"line_number":88,"context_line":"            call_volume, del_keys \u003d call[0]"},{"line_number":89,"context_line":"            self.assertEqual(call_volume, volume)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_4dccff69","line":86,"in_reply_to":"7a016987_aabff2a8","updated":"2015-05-29 01:19:33.000000000","message":"Checking that an object is in list is O(N). For the set is O(log N).","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"17ac660830caf897bf1187a725e477fad9ba9544","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        self.scenario._delete_metadata(volume, keys, deletes\u003d2, delete_size\u003d4)"},{"line_number":84,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.delete_metadata.call_args_list"},{"line_number":85,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":86,"context_line":"        all_deleted \u003d []"},{"line_number":87,"context_line":"        for call in calls:"},{"line_number":88,"context_line":"            call_volume, del_keys \u003d call[0]"},{"line_number":89,"context_line":"            self.assertEqual(call_volume, volume)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_aabff2a8","line":86,"in_reply_to":"7a016987_c8aa5285","updated":"2015-05-28 14:08:25.000000000","message":"Why? all_deleted will never have duplicate data because we assertNotIn() before we add a key to it, and that assertion is critical to the unit test.","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"823571bf8f794826e07e6ad32bd5d44655728ba7","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        volume \u003d fakes.FakeVolume()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.scenario._set_metadata(volume, sets\u003d2, set_size\u003d4)"},{"line_number":68,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.set_metadata.call_args_list"},{"line_number":69,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":70,"context_line":"        for call in calls:"},{"line_number":71,"context_line":"            call_volume, metadata \u003d call[0]"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_f2eb58a2","line":68,"updated":"2015-05-30 19:58:23.000000000","message":"Why `mock_clients(\"cinder\")\u0027? Just\n mock_clients.return_value\n\nWhen someone else will copy your code he/she will get a false feeling that `mock_clients(\"cinder\")\u0027 is different from `mock_clients(\"nova\")\u0027. Please don\u0027t place leaky abstraction trap for others.","commit_id":"2fc3837f1d8cec0ec5a34b8b151b24f644f82399"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"654f2192b87a20ecbc128c3459d04eb426d7aec6","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        volume \u003d fakes.FakeVolume()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.scenario._set_metadata(volume, sets\u003d2, set_size\u003d4)"},{"line_number":68,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.set_metadata.call_args_list"},{"line_number":69,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":70,"context_line":"        for call in calls:"},{"line_number":71,"context_line":"            call_volume, metadata \u003d call[0]"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_dd0176b0","line":68,"in_reply_to":"7a016987_f2eb58a2","updated":"2015-06-01 14:32:22.000000000","message":"Consistency with the other tests. I would +1 a review to replace all such mock_clients() calls with mock_clients.return_value if you wanted to put one in, but I don\u0027t feel like using a mix of the two approaches adds anything -- it just sets another different trap.","commit_id":"2fc3837f1d8cec0ec5a34b8b151b24f644f82399"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"823571bf8f794826e07e6ad32bd5d44655728ba7","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.scenario._set_metadata(volume, sets\u003d2, set_size\u003d4)"},{"line_number":68,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.set_metadata.call_args_list"},{"line_number":69,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":70,"context_line":"        for call in calls:"},{"line_number":71,"context_line":"            call_volume, metadata \u003d call[0]"},{"line_number":72,"context_line":"            self.assertEqual(call_volume, volume)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_d22dfcfe","line":69,"updated":"2015-05-30 19:58:23.000000000","message":"Once again -- the order is otherwise.","commit_id":"2fc3837f1d8cec0ec5a34b8b151b24f644f82399"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"654f2192b87a20ecbc128c3459d04eb426d7aec6","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        self.scenario._set_metadata(volume, sets\u003d2, set_size\u003d4)"},{"line_number":68,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.set_metadata.call_args_list"},{"line_number":69,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":70,"context_line":"        for call in calls:"},{"line_number":71,"context_line":"            call_volume, metadata \u003d call[0]"},{"line_number":72,"context_line":"            self.assertEqual(call_volume, volume)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_5df10600","line":69,"in_reply_to":"7a016987_d22dfcfe","updated":"2015-06-01 14:32:22.000000000","message":"Equality is still commutative.","commit_id":"2fc3837f1d8cec0ec5a34b8b151b24f644f82399"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"823571bf8f794826e07e6ad32bd5d44655728ba7","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":70,"context_line":"        for call in calls:"},{"line_number":71,"context_line":"            call_volume, metadata \u003d call[0]"},{"line_number":72,"context_line":"            self.assertEqual(call_volume, volume)"},{"line_number":73,"context_line":"            self.assertEqual(len(metadata), 4)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        self._test_atomic_action_timer(self.scenario.atomic_actions(),"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_b2304057","line":72,"updated":"2015-05-30 19:58:23.000000000","message":"Order is otherwise.","commit_id":"2fc3837f1d8cec0ec5a34b8b151b24f644f82399"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"823571bf8f794826e07e6ad32bd5d44655728ba7","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        for call in calls:"},{"line_number":71,"context_line":"            call_volume, metadata \u003d call[0]"},{"line_number":72,"context_line":"            self.assertEqual(call_volume, volume)"},{"line_number":73,"context_line":"            self.assertEqual(len(metadata), 4)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        self._test_atomic_action_timer(self.scenario.atomic_actions(),"},{"line_number":76,"context_line":"                                       \"cinder.set_4_metadatas_2_times\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_92330462","line":73,"updated":"2015-05-30 19:58:23.000000000","message":"Order is otherwise.","commit_id":"2fc3837f1d8cec0ec5a34b8b151b24f644f82399"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"823571bf8f794826e07e6ad32bd5d44655728ba7","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        keys \u003d [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\"]"},{"line_number":83,"context_line":"        self.scenario._delete_metadata(volume, keys, deletes\u003d2, delete_size\u003d4)"},{"line_number":84,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.delete_metadata.call_args_list"},{"line_number":85,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":86,"context_line":"        all_deleted \u003d []"},{"line_number":87,"context_line":"        for call in calls:"},{"line_number":88,"context_line":"            call_volume, del_keys \u003d call[0]"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_72364852","line":85,"updated":"2015-05-30 19:58:23.000000000","message":"Order is otherwise.","commit_id":"2fc3837f1d8cec0ec5a34b8b151b24f644f82399"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"823571bf8f794826e07e6ad32bd5d44655728ba7","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        self.scenario._delete_metadata(volume, keys, deletes\u003d2, delete_size\u003d4)"},{"line_number":84,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.delete_metadata.call_args_list"},{"line_number":85,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":86,"context_line":"        all_deleted \u003d []"},{"line_number":87,"context_line":"        for call in calls:"},{"line_number":88,"context_line":"            call_volume, del_keys \u003d call[0]"},{"line_number":89,"context_line":"            self.assertEqual(call_volume, volume)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_52422caf","line":86,"updated":"2015-05-30 19:58:23.000000000","message":"Why don\u0027t you use `set()\u0027 here?","commit_id":"2fc3837f1d8cec0ec5a34b8b151b24f644f82399"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"654f2192b87a20ecbc128c3459d04eb426d7aec6","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        self.scenario._delete_metadata(volume, keys, deletes\u003d2, delete_size\u003d4)"},{"line_number":84,"context_line":"        calls \u003d mock_clients(\"cinder\").volumes.delete_metadata.call_args_list"},{"line_number":85,"context_line":"        self.assertEqual(len(calls), 2)"},{"line_number":86,"context_line":"        all_deleted \u003d []"},{"line_number":87,"context_line":"        for call in calls:"},{"line_number":88,"context_line":"            call_volume, del_keys \u003d call[0]"},{"line_number":89,"context_line":"            self.assertEqual(call_volume, volume)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a016987_1d4eee3a","line":86,"in_reply_to":"7a016987_52422caf","updated":"2015-06-01 14:32:22.000000000","message":"Why should I? As explained the last time, all_deleted will not and cannot ever have a duplicate in it because there\u0027s an assertion to make sure that it won\u0027t, and that assertion is critical to the unit test. Changing this to a set makes absolutely no pragmatic difference to the way the test runs. What\u0027s the value of doing so?","commit_id":"2fc3837f1d8cec0ec5a34b8b151b24f644f82399"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"6fcb7dbedf88af3201c8b308666b978bc0071d0a","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                                       \"cinder.delete_4_metadatas_3_times\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @mock.patch(CINDER_UTILS + \".CinderScenario.clients\")"},{"line_number":101,"context_line":"    def test__delete_metadata_not_enough_keys(self, mock_clients):"},{"line_number":102,"context_line":"        volume \u003d fakes.FakeVolume()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        keys \u003d [\"a\", \"b\", \"c\", \"d\", \"e\"]"}],"source_content_type":"text/x-python","patch_set":16,"id":"5afe65bd_ad0c0f43","line":101,"updated":"2015-06-02 03:22:01.000000000","message":"no_enough_keys","commit_id":"cc437888ec868d0afa2c2c53ac72b63ca667342e"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"cf6b60030f97acb278c3d7c1f7773ae1c83e3809","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                                       \"cinder.delete_4_metadatas_3_times\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @mock.patch(CINDER_UTILS + \".CinderScenario.clients\")"},{"line_number":101,"context_line":"    def test__delete_metadata_not_enough_keys(self, mock_clients):"},{"line_number":102,"context_line":"        volume \u003d fakes.FakeVolume()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        keys \u003d [\"a\", \"b\", \"c\", \"d\", \"e\"]"}],"source_content_type":"text/x-python","patch_set":16,"id":"5afe65bd_fe3741e1","line":101,"in_reply_to":"5afe65bd_ad0c0f43","updated":"2015-06-02 13:20:42.000000000","message":"Huh?","commit_id":"cc437888ec868d0afa2c2c53ac72b63ca667342e"}],"tests/unit/plugins/openstack/scenarios/cinder/test_volumes.py":[{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"bdda9b7cc8a69cf21947555ffc3590d1bd900c4d","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        scenario.modify_volume_metadata(sets\u003d5, set_size\u003d4,"},{"line_number":78,"context_line":"                                        deletes\u003d3, delete_size\u003d2,"},{"line_number":79,"context_line":"                                        fakearg\u003d\"fakearg\")"},{"line_number":80,"context_line":"        scenario._set_metadata.assert_called_once_with(\"uuid\", 5, 4)"},{"line_number":81,"context_line":"        scenario._delete_metadata.assert_called_once_with("},{"line_number":82,"context_line":"            \"uuid\","}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_08886a21","line":79,"updated":"2015-05-27 22:09:09.000000000","message":"Fakearg is not checked to be passed anywhere.","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"17ac660830caf897bf1187a725e477fad9ba9544","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        scenario.modify_volume_metadata(sets\u003d5, set_size\u003d4,"},{"line_number":78,"context_line":"                                        deletes\u003d3, delete_size\u003d2,"},{"line_number":79,"context_line":"                                        fakearg\u003d\"fakearg\")"},{"line_number":80,"context_line":"        scenario._set_metadata.assert_called_once_with(\"uuid\", 5, 4)"},{"line_number":81,"context_line":"        scenario._delete_metadata.assert_called_once_with("},{"line_number":82,"context_line":"            \"uuid\","}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_aaedb2b8","line":79,"in_reply_to":"7a016987_08886a21","updated":"2015-05-28 14:08:25.000000000","message":"Done","commit_id":"17f0251d8c52c028bcca147b20a8cacbc9592954"}]}
