)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"5ebbe0906a06ae0d19d01fc9fdb1bcd5fceb10c2","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Method _devices_sizes() in Block Device driver invokes N times"},{"line_number":10,"context_line":"_get_device_size(device) to get devices sizes. It can be done by"},{"line_number":11,"context_line":"executing once command: blockdev --getsize64 /dev/loop1 /dev/loop2."},{"line_number":12,"context_line":"In such a way we take the devices\u0027 sizes in bytes and convert them"},{"line_number":13,"context_line":"in Gb."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ba15a1d1_385413c8","line":11,"updated":"2015-09-21 15:10:00.000000000","message":"once  -\u003e one","commit_id":"28dd92539fca6d05581a09832e273244794fb5fb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5f454b04abef0c52aef629b01aa0ca705958d526","unresolved":false,"context_lines":[{"line_number":10,"context_line":"_get_device_size(device) to get devices sizes. It can be done by"},{"line_number":11,"context_line":"executing one command: blockdev --getsize64 /dev/loop1 /dev/loop2."},{"line_number":12,"context_line":"In such a way we take the devices\u0027 sizes in bytes and convert them"},{"line_number":13,"context_line":"in Gb."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I0aba86239b4c580a0b12202a8f7fc863dab6fecd"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba15a1d1_52ea7175","line":13,"updated":"2015-09-23 09:50:51.000000000","message":"nit: s/in/to","commit_id":"dc5521861155634458736a0cff6e5a0320d16230"}],"cinder/tests/unit/test_block_device.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"63af1eaf45e4ffe65d936006d115d634b489a5d0","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        with mock.patch.object(self.drv, \u0027local_path\u0027,"},{"line_number":103,"context_line":"                               return_value\u003d\u0027/dev/loop1\u0027) as lp_mocked:"},{"line_number":104,"context_line":"            with mock.patch.object(self.drv, \u0027_get_devices_sizes\u0027,"},{"line_number":105,"context_line":"                                   return_value\u003d{\u0027/dev/loop1\u0027: 1}) as \\"},{"line_number":106,"context_line":"                    gds_mocked:"},{"line_number":107,"context_line":"                volutils.clear_volume(gds_mocked, lp_mocked)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a1a9d01_35fdf5b0","line":105,"updated":"2015-10-01 15:34:03.000000000","message":"parens continuation","commit_id":"11bbc450c33703dba8b78c56556637e49c420376"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"d4afbe6d93fe0e2efaaf7a5abfe3997a8b1e3cf9","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        with mock.patch.object(self.drv, \u0027local_path\u0027,"},{"line_number":103,"context_line":"                               return_value\u003d\u0027/dev/loop1\u0027) as lp_mocked:"},{"line_number":104,"context_line":"            with mock.patch.object(self.drv, \u0027_get_devices_sizes\u0027,"},{"line_number":105,"context_line":"                                   return_value\u003d{\u0027/dev/loop1\u0027: 1}) as \\"},{"line_number":106,"context_line":"                    gds_mocked:"},{"line_number":107,"context_line":"                volutils.clear_volume(gds_mocked, lp_mocked)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a1a9d01_c7f2936f","line":105,"in_reply_to":"9a1a9d01_27e7cf13","updated":"2015-10-02 14:56:29.000000000","message":"I gave a +1 b/c otherwise the code looks fine to me and I was\nyielding to the judgment of core reviewers on this one.\n\nOf course, I was raising an issue, namely that it\u0027s not entriely obviou when \"guidelines\" are to be strictly enforced or not.","commit_id":"11bbc450c33703dba8b78c56556637e49c420376"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"66e5946ab705266e292efcf135ce7496c680dad5","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        with mock.patch.object(self.drv, \u0027local_path\u0027,"},{"line_number":103,"context_line":"                               return_value\u003d\u0027/dev/loop1\u0027) as lp_mocked:"},{"line_number":104,"context_line":"            with mock.patch.object(self.drv, \u0027_get_devices_sizes\u0027,"},{"line_number":105,"context_line":"                                   return_value\u003d{\u0027/dev/loop1\u0027: 1}) as \\"},{"line_number":106,"context_line":"                    gds_mocked:"},{"line_number":107,"context_line":"                volutils.clear_volume(gds_mocked, lp_mocked)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a1a9d01_878ef225","line":105,"in_reply_to":"9a1a9d01_35fdf5b0","updated":"2015-10-02 03:17:09.000000000","message":"This has \"with\".  I don\u0027t think () works in this case.","commit_id":"11bbc450c33703dba8b78c56556637e49c420376"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"d4afbe6d93fe0e2efaaf7a5abfe3997a8b1e3cf9","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        with mock.patch.object(self.drv, \u0027local_path\u0027,"},{"line_number":103,"context_line":"                               return_value\u003d\u0027/dev/loop1\u0027) as lp_mocked:"},{"line_number":104,"context_line":"            with mock.patch.object(self.drv, \u0027_get_devices_sizes\u0027,"},{"line_number":105,"context_line":"                                   return_value\u003d{\u0027/dev/loop1\u0027: 1}) as \\"},{"line_number":106,"context_line":"                    gds_mocked:"},{"line_number":107,"context_line":"                volutils.clear_volume(gds_mocked, lp_mocked)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a1a9d01_e79237f6","line":105,"in_reply_to":"9a1a9d01_6798676b","updated":"2015-10-02 14:56:29.000000000","message":"Agree, and I would have made that suggestion myself if I had\nbeen trying to be constructive rather than trying to make a\npoint about inconsistency in enforcing guidelines :-)","commit_id":"11bbc450c33703dba8b78c56556637e49c420376"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"21bc472ff2cb8becd7e4b0c660024041664c4ae6","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        with mock.patch.object(self.drv, \u0027local_path\u0027,"},{"line_number":103,"context_line":"                               return_value\u003d\u0027/dev/loop1\u0027) as lp_mocked:"},{"line_number":104,"context_line":"            with mock.patch.object(self.drv, \u0027_get_devices_sizes\u0027,"},{"line_number":105,"context_line":"                                   return_value\u003d{\u0027/dev/loop1\u0027: 1}) as \\"},{"line_number":106,"context_line":"                    gds_mocked:"},{"line_number":107,"context_line":"                volutils.clear_volume(gds_mocked, lp_mocked)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a1a9d01_eefbf445","line":105,"in_reply_to":"9a1a9d01_878ef225","updated":"2015-10-02 14:04:11.000000000","message":"That is correct. For whatever reason, when doing nested \"with\" statements it pukes if you try wrapping it in (). Unfortunately \\ is required in this case.","commit_id":"11bbc450c33703dba8b78c56556637e49c420376"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"5b9bcba2537df246226aa66c2e6e9bd70aaeafcf","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        with mock.patch.object(self.drv, \u0027local_path\u0027,"},{"line_number":103,"context_line":"                               return_value\u003d\u0027/dev/loop1\u0027) as lp_mocked:"},{"line_number":104,"context_line":"            with mock.patch.object(self.drv, \u0027_get_devices_sizes\u0027,"},{"line_number":105,"context_line":"                                   return_value\u003d{\u0027/dev/loop1\u0027: 1}) as \\"},{"line_number":106,"context_line":"                    gds_mocked:"},{"line_number":107,"context_line":"                volutils.clear_volume(gds_mocked, lp_mocked)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a1a9d01_27e7cf13","line":105,"in_reply_to":"9a1a9d01_91ba996d","updated":"2015-10-02 14:50:10.000000000","message":"That looks like a good work around, but Tom, you gave a +1 even with your comments any way:).","commit_id":"11bbc450c33703dba8b78c56556637e49c420376"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"f6b4d2e4d749b28eae595fcaacb28ebfdf8a6efa","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        with mock.patch.object(self.drv, \u0027local_path\u0027,"},{"line_number":103,"context_line":"                               return_value\u003d\u0027/dev/loop1\u0027) as lp_mocked:"},{"line_number":104,"context_line":"            with mock.patch.object(self.drv, \u0027_get_devices_sizes\u0027,"},{"line_number":105,"context_line":"                                   return_value\u003d{\u0027/dev/loop1\u0027: 1}) as \\"},{"line_number":106,"context_line":"                    gds_mocked:"},{"line_number":107,"context_line":"                volutils.clear_volume(gds_mocked, lp_mocked)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a1a9d01_6798676b","line":105,"in_reply_to":"9a1a9d01_91ba996d","updated":"2015-10-02 14:51:11.000000000","message":"The way to get around this ugliness is to avoid using nested withs.\n\nPreferring decorators helps with this most of the time, and would here.\n\nSee http://git.openstack.org/cgit/openstack/cinder/tree/cinder/tests/unit/test_volume.py?id\u003dc7255b6a#n5013","commit_id":"11bbc450c33703dba8b78c56556637e49c420376"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"008a8e3422b3fac2001f3e49dfb923ccb9865b0f","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        with mock.patch.object(self.drv, \u0027local_path\u0027,"},{"line_number":103,"context_line":"                               return_value\u003d\u0027/dev/loop1\u0027) as lp_mocked:"},{"line_number":104,"context_line":"            with mock.patch.object(self.drv, \u0027_get_devices_sizes\u0027,"},{"line_number":105,"context_line":"                                   return_value\u003d{\u0027/dev/loop1\u0027: 1}) as \\"},{"line_number":106,"context_line":"                    gds_mocked:"},{"line_number":107,"context_line":"                volutils.clear_volume(gds_mocked, lp_mocked)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a1a9d01_91ba996d","line":105,"in_reply_to":"9a1a9d01_eefbf445","updated":"2015-10-02 14:20:35.000000000","message":"Well, I\u0027m pretty sure that, having been conditioned by -1s\non my patches for using \u0027\\\u0027, I have successfully done something like the following:\n\nretval \u003d {\u0027/dev/loop\u0027: 1}\nwith ...\n    with mock.patch.object(\n        self.drv,\n        \u0027_get_devices_sizes\u0027,\n        return_value\u003dretval) as gds_mocked:\n              ....\n\nAll that said, I\u0027ll withdraw my -1 and feel free to use \u0027\\\u0027 with \"with\" going forwards.\n\nSorry, Yuriy!","commit_id":"11bbc450c33703dba8b78c56556637e49c420376"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"63af1eaf45e4ffe65d936006d115d634b489a5d0","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        with mock.patch.object(self.drv, \u0027find_appropriate_size_device\u0027,"},{"line_number":164,"context_line":"                               return_value\u003d\u0027/dev/loop2\u0027) as fasd_mocked:"},{"line_number":165,"context_line":"            with mock.patch.object(self.drv, \u0027_get_devices_sizes\u0027,"},{"line_number":166,"context_line":"                                   return_value\u003d{\u0027/dev/loop2\u0027: 2}) as \\"},{"line_number":167,"context_line":"                    gds_mocked:"},{"line_number":168,"context_line":"                with mock.patch.object(self.drv, \u0027local_path\u0027,"},{"line_number":169,"context_line":"                                       return_value\u003d\u0027/dev/loop1\u0027) as \\"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a1a9d01_b527c561","line":166,"updated":"2015-10-01 15:34:03.000000000","message":"ditto","commit_id":"11bbc450c33703dba8b78c56556637e49c420376"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"63af1eaf45e4ffe65d936006d115d634b489a5d0","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                                   return_value\u003d{\u0027/dev/loop2\u0027: 2}) as \\"},{"line_number":167,"context_line":"                    gds_mocked:"},{"line_number":168,"context_line":"                with mock.patch.object(self.drv, \u0027local_path\u0027,"},{"line_number":169,"context_line":"                                       return_value\u003d\u0027/dev/loop1\u0027) as \\"},{"line_number":170,"context_line":"                        lp_mocked:"},{"line_number":171,"context_line":"                    volutils.copy_volume(\u0027/dev/loop1\u0027, fasd_mocked, 2,"},{"line_number":172,"context_line":"                                         mock.sentinel,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a1a9d01_1519d121","line":169,"updated":"2015-10-01 15:34:03.000000000","message":"ditto","commit_id":"11bbc450c33703dba8b78c56556637e49c420376"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"63af1eaf45e4ffe65d936006d115d634b489a5d0","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                                             *dev_paths, run_as_root\u003dTrue)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def test_devices_sizes(self):"},{"line_number":250,"context_line":"        with mock.patch.object(self.drv, \u0027_get_devices_sizes\u0027) as \\"},{"line_number":251,"context_line":"                _get_dvc_size:"},{"line_number":252,"context_line":"            _get_dvc_size.return_value \u003d {\u0027/dev/loop1\u0027: 1, \u0027/dev/loop2\u0027: 1}"},{"line_number":253,"context_line":"            self.assertEqual(2, len(self.drv._devices_sizes()))"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a1a9d01_f5d8dd54","line":250,"updated":"2015-10-01 15:34:03.000000000","message":"ditto","commit_id":"11bbc450c33703dba8b78c56556637e49c420376"}],"cinder/volume/drivers/block_device.py":[{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"d93cb860f5c142f7bf223a9e23196705c25e0dc6","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                self.configuration.volume_clear !\u003d \u0027none\u0027:"},{"line_number":80,"context_line":"            dev_size \u003d self._get_device_size([dev_path])"},{"line_number":81,"context_line":"            volutils.clear_volume("},{"line_number":82,"context_line":"                dev_size[dev_path] * 1024, dev_path,"},{"line_number":83,"context_line":"                volume_clear\u003dself.configuration.volume_clear,"},{"line_number":84,"context_line":"                volume_clear_size\u003dself.configuration.volume_clear_size)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba15a1d1_013465db","line":82,"updated":"2015-09-17 16:51:53.000000000","message":"We should probably use \"units.Ki\" here","commit_id":"28dd92539fca6d05581a09832e273244794fb5fb"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"e201954acb36d680ee23a8f3a037f46cc4144bcf","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                self.configuration.volume_clear !\u003d \u0027none\u0027:"},{"line_number":80,"context_line":"            dev_size \u003d self._get_device_size([dev_path])"},{"line_number":81,"context_line":"            volutils.clear_volume("},{"line_number":82,"context_line":"                dev_size[dev_path] * 1024, dev_path,"},{"line_number":83,"context_line":"                volume_clear\u003dself.configuration.volume_clear,"},{"line_number":84,"context_line":"                volume_clear_size\u003dself.configuration.volume_clear_size)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba15a1d1_f6db2e7a","line":82,"in_reply_to":"ba15a1d1_013465db","updated":"2015-09-17 20:25:49.000000000","message":"We convert Gb (dev_size[dev_path]) into Mb.","commit_id":"28dd92539fca6d05581a09832e273244794fb5fb"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"c56a0b0a81bdd3c25694ec420a6ff21239f81ba6","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                self.configuration.volume_clear !\u003d \u0027none\u0027:"},{"line_number":80,"context_line":"            dev_size \u003d self._get_device_size([dev_path])"},{"line_number":81,"context_line":"            volutils.clear_volume("},{"line_number":82,"context_line":"                dev_size[dev_path] * 1024, dev_path,"},{"line_number":83,"context_line":"                volume_clear\u003dself.configuration.volume_clear,"},{"line_number":84,"context_line":"                volume_clear_size\u003dself.configuration.volume_clear_size)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba15a1d1_dcc7c462","line":82,"in_reply_to":"ba15a1d1_61c933ac","updated":"2015-09-21 19:02:08.000000000","message":"Hey Yuriy - that\u0027s a fair point that if we\u0027re not actually converting into KiB it may be confusing to use the KiB constant here.  However, I think we at least need a doc in _get_device_size stating what units the sizes are being returned in because otherwise we can\u0027t tell what this conversion does just by looking at the code.","commit_id":"28dd92539fca6d05581a09832e273244794fb5fb"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"9b13e5bb71f1633fe4ab206571c794cd0ec05323","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                self.configuration.volume_clear !\u003d \u0027none\u0027:"},{"line_number":80,"context_line":"            dev_size \u003d self._get_device_size([dev_path])"},{"line_number":81,"context_line":"            volutils.clear_volume("},{"line_number":82,"context_line":"                dev_size[dev_path] * 1024, dev_path,"},{"line_number":83,"context_line":"                volume_clear\u003dself.configuration.volume_clear,"},{"line_number":84,"context_line":"                volume_clear_size\u003dself.configuration.volume_clear_size)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba15a1d1_46d67e28","line":82,"in_reply_to":"ba15a1d1_dcc7c462","updated":"2015-09-21 21:38:00.000000000","message":"Ok. Why not.;)","commit_id":"28dd92539fca6d05581a09832e273244794fb5fb"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"dd7d5b11c4d940a712ad4f25c7ec18f66f4972d1","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                self.configuration.volume_clear !\u003d \u0027none\u0027:"},{"line_number":80,"context_line":"            dev_size \u003d self._get_device_size([dev_path])"},{"line_number":81,"context_line":"            volutils.clear_volume("},{"line_number":82,"context_line":"                dev_size[dev_path] * 1024, dev_path,"},{"line_number":83,"context_line":"                volume_clear\u003dself.configuration.volume_clear,"},{"line_number":84,"context_line":"                volume_clear_size\u003dself.configuration.volume_clear_size)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba15a1d1_61c933ac","line":82,"in_reply_to":"ba15a1d1_e20d93e8","updated":"2015-09-21 18:45:23.000000000","message":"I don\u0027t think it\u0027s a good idea to put down dev_size[dev_path] * units.Ki just because units.Ki is equal to 1024. Here we pass device_size_mb to the function volutils.clear_volume. \ndevice_size_mb \u003d device_size_gb * 1024","commit_id":"28dd92539fca6d05581a09832e273244794fb5fb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ce7519caa1b90f1e016c21f230fae858b21e84ff","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                self.configuration.volume_clear !\u003d \u0027none\u0027:"},{"line_number":80,"context_line":"            dev_size \u003d self._get_device_size([dev_path])"},{"line_number":81,"context_line":"            volutils.clear_volume("},{"line_number":82,"context_line":"                dev_size[dev_path] * 1024, dev_path,"},{"line_number":83,"context_line":"                volume_clear\u003dself.configuration.volume_clear,"},{"line_number":84,"context_line":"                volume_clear_size\u003dself.configuration.volume_clear_size)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba15a1d1_e20d93e8","line":82,"in_reply_to":"ba15a1d1_f6db2e7a","updated":"2015-09-18 12:53:15.000000000","message":"I agree units.Ki should be used here.  units.Ki is equal to 1024.\n\ndev_size[dev_path] * units.Ki\n\nhttps://github.com/openstack/oslo.utils/blob/master/oslo_utils/units.py#L21\n\nKi \u003d 1024","commit_id":"28dd92539fca6d05581a09832e273244794fb5fb"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"d93cb860f5c142f7bf223a9e23196705c25e0dc6","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        dev_size \u003d self._get_device_size([device])"},{"line_number":113,"context_line":"        volutils.copy_volume("},{"line_number":114,"context_line":"            self.local_path(src_vref), device,"},{"line_number":115,"context_line":"            dev_size[device] * 1024,"},{"line_number":116,"context_line":"            self.configuration.volume_dd_blocksize,"},{"line_number":117,"context_line":"            execute\u003dself._execute)"},{"line_number":118,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba15a1d1_212f2989","line":115,"updated":"2015-09-17 16:51:53.000000000","message":"We should probably use \"units.Ki\" here","commit_id":"28dd92539fca6d05581a09832e273244794fb5fb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ce7519caa1b90f1e016c21f230fae858b21e84ff","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        dev_size \u003d self._get_device_size([device])"},{"line_number":113,"context_line":"        volutils.copy_volume("},{"line_number":114,"context_line":"            self.local_path(src_vref), device,"},{"line_number":115,"context_line":"            dev_size[device] * 1024,"},{"line_number":116,"context_line":"            self.configuration.volume_dd_blocksize,"},{"line_number":117,"context_line":"            execute\u003dself._execute)"},{"line_number":118,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba15a1d1_a2fc7bb8","line":115,"in_reply_to":"ba15a1d1_212f2989","updated":"2015-09-18 12:53:15.000000000","message":"+1","commit_id":"28dd92539fca6d05581a09832e273244794fb5fb"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"d93cb860f5c142f7bf223a9e23196705c25e0dc6","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            if local_path:"},{"line_number":158,"context_line":"                used_devices.add(local_path)"},{"line_number":159,"context_line":"        return used_devices"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _get_device_size(self, dev_paths):"},{"line_number":162,"context_line":"        out, _err \u003d self._execute(\u0027blockdev\u0027, \u0027--getsize64\u0027, *dev_paths,"},{"line_number":163,"context_line":"                                  run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba15a1d1_a159f936","line":160,"updated":"2015-09-17 16:51:53.000000000","message":"A doc / comment here would be helpful for what units we\u0027re returning the size in","commit_id":"28dd92539fca6d05581a09832e273244794fb5fb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5f454b04abef0c52aef629b01aa0ca705958d526","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                self.configuration.volume_clear !\u003d \u0027none\u0027:"},{"line_number":80,"context_line":"            dev_size \u003d self._get_device_size([dev_path])"},{"line_number":81,"context_line":"            volutils.clear_volume("},{"line_number":82,"context_line":"                dev_size[dev_path] * 1024, dev_path,"},{"line_number":83,"context_line":"                volume_clear\u003dself.configuration.volume_clear,"},{"line_number":84,"context_line":"                volume_clear_size\u003dself.configuration.volume_clear_size)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_0594b540","line":82,"updated":"2015-09-23 09:50:51.000000000","message":"nit: I read discussion on previous patch, but I still believe this should be units.Ki\n\nAnd it is not about Ki coincidentally being the same number we are using, it is about Mi\u003d Ki ** 2 and Gi\u003d Ki ** 3, so if you want to convert something from Gi units to Ki you need to multiply by Ki.","commit_id":"dc5521861155634458736a0cff6e5a0320d16230"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"f5130f6c36eee7dd41eb267ccb0bed55db89f2cf","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                self.configuration.volume_clear !\u003d \u0027none\u0027:"},{"line_number":80,"context_line":"            dev_size \u003d self._get_device_size([dev_path])"},{"line_number":81,"context_line":"            volutils.clear_volume("},{"line_number":82,"context_line":"                dev_size[dev_path] * 1024, dev_path,"},{"line_number":83,"context_line":"                volume_clear\u003dself.configuration.volume_clear,"},{"line_number":84,"context_line":"                volume_clear_size\u003dself.configuration.volume_clear_size)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_21019f06","line":82,"in_reply_to":"ba15a1d1_0594b540","updated":"2015-09-23 13:36:22.000000000","message":"First we convert the size from Gigabytes to Megabytes. A multiplication by 1024 can be achieved by a left-shift operation of 10 bits. And the dev_size[dev_path] \u003c\u003c 10 is the fastest way of multiplying by 1024 (2**10). So I don\u0027t see any sense to multiply by units.Ki","commit_id":"dc5521861155634458736a0cff6e5a0320d16230"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"29085b11303eff2dc8c344625d18ae851c730d40","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                self.configuration.volume_clear !\u003d \u0027none\u0027:"},{"line_number":80,"context_line":"            dev_size \u003d self._get_device_size([dev_path])"},{"line_number":81,"context_line":"            volutils.clear_volume("},{"line_number":82,"context_line":"                dev_size[dev_path] * 1024, dev_path,"},{"line_number":83,"context_line":"                volume_clear\u003dself.configuration.volume_clear,"},{"line_number":84,"context_line":"                volume_clear_size\u003dself.configuration.volume_clear_size)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_de3c31e3","line":82,"in_reply_to":"ba15a1d1_21019f06","updated":"2015-09-23 18:16:47.000000000","message":"Since we must NOT return gigabytes in _get_device_size as I explained in another comment below, it doesn\u0027t really matter, and I could probably go all day talking about problems with magic numbers, readability and how the multiplication is insignificant compared to the cost of creating a list to pass just 1 item and then creating a dictionary that uses a hash table to return the values.","commit_id":"dc5521861155634458736a0cff6e5a0320d16230"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"3552b44897dff09bb1a443ba699ad1396b53cc4b","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                self.configuration.volume_clear !\u003d \u0027none\u0027:"},{"line_number":80,"context_line":"            dev_size \u003d self._get_device_size([dev_path])"},{"line_number":81,"context_line":"            volutils.clear_volume("},{"line_number":82,"context_line":"                dev_size[dev_path] * 1024, dev_path,"},{"line_number":83,"context_line":"                volume_clear\u003dself.configuration.volume_clear,"},{"line_number":84,"context_line":"                volume_clear_size\u003dself.configuration.volume_clear_size)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_4427ef11","line":82,"in_reply_to":"ba15a1d1_de3c31e3","updated":"2015-09-23 20:23:16.000000000","message":"Hey, guy. Are you sure \"I could probably go all day talking about problems with magic numbers\";)","commit_id":"dc5521861155634458736a0cff6e5a0320d16230"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5f454b04abef0c52aef629b01aa0ca705958d526","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        dev_size \u003d self._get_device_size([device])"},{"line_number":113,"context_line":"        volutils.copy_volume("},{"line_number":114,"context_line":"            self.local_path(src_vref), device,"},{"line_number":115,"context_line":"            dev_size[device] * 1024,"},{"line_number":116,"context_line":"            self.configuration.volume_dd_blocksize,"},{"line_number":117,"context_line":"            execute\u003dself._execute)"},{"line_number":118,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_c599dd7a","line":115,"updated":"2015-09-23 09:50:51.000000000","message":"nit: Same here","commit_id":"dc5521861155634458736a0cff6e5a0320d16230"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5f454b04abef0c52aef629b01aa0ca705958d526","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                used_devices.add(local_path)"},{"line_number":159,"context_line":"        return used_devices"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def _get_device_size(self, dev_paths):"},{"line_number":162,"context_line":"        out, _err \u003d self._execute(\u0027blockdev\u0027, \u0027--getsize64\u0027, *dev_paths,"},{"line_number":163,"context_line":"                                  run_as_root\u003dTrue)"},{"line_number":164,"context_line":"        dev_sizes \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_a5d8691f","line":161,"updated":"2015-09-23 09:50:51.000000000","message":"-1: This must be renamed to match functionality: _get_devices_sizes","commit_id":"dc5521861155634458736a0cff6e5a0320d16230"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5f454b04abef0c52aef629b01aa0ca705958d526","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        dev_sizes \u003d {}"},{"line_number":165,"context_line":"        out \u003d out.split(\u0027\\n\u0027)"},{"line_number":166,"context_line":"        for n, size in enumerate(out[:-1]):"},{"line_number":167,"context_line":"            dev_sizes[dev_paths[n]] \u003d int(size) / units.Gi"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        return dev_sizes"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_8569a5fb","line":167,"updated":"2015-09-23 09:50:51.000000000","message":"-1: By returning Gi instead of Mi you are losing precision and that will affect the clearing of the volume, which will leave up to Gi - 1 uncleared bytes and probably problems in volume cloning.","commit_id":"dc5521861155634458736a0cff6e5a0320d16230"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"f221b70c427d067091a34c28e1f7015b25b049e3","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        LOG.debug(\"Updating volume stats\")"},{"line_number":138,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":139,"context_line":"        data \u003d {\u0027total_capacity_gb\u0027: total_size \u003e\u003e 10,"},{"line_number":140,"context_line":"                \u0027free_capacity_gb\u0027: free_size \u003e\u003e 10,"},{"line_number":141,"context_line":"                \u0027reserved_percentage\u0027: self.configuration.reserved_percentage,"},{"line_number":142,"context_line":"                \u0027QoS_support\u0027: False,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_ac3d72de","line":139,"updated":"2015-09-30 11:44:00.000000000","message":"Please, use oslo.units here and below","commit_id":"411a35fe4cd04dbad08181e6dd729a1984f8dd4a"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1265cd113d55298e3676cb650dc06e08b273b998","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        LOG.debug(\"Updating volume stats\")"},{"line_number":138,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":139,"context_line":"        data \u003d {\u0027total_capacity_gb\u0027: total_size \u003e\u003e 10,"},{"line_number":140,"context_line":"                \u0027free_capacity_gb\u0027: free_size \u003e\u003e 10,"},{"line_number":141,"context_line":"                \u0027reserved_percentage\u0027: self.configuration.reserved_percentage,"},{"line_number":142,"context_line":"                \u0027QoS_support\u0027: False,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_c4be7aad","line":139,"in_reply_to":"9a1a9d01_7d5702ca","updated":"2015-09-30 13:34:56.000000000","message":"At first, I\u0027m not agree that it\u0027s the fastest way in python 2.7:\n\n\n(.venv)e0ne@ikolodyazhny-pc:~/working/python-brickclient$ python t.py\n\n0:00:00.000042\n\n0:00:00.000006\n\n(.venv)e0ne@ikolodyazhny-pc:~/working/python-brickclient$ cat t.py\n\n\nfrom datetime import datetime\n\nt1 \u003d datetime.now()\nn \u003d 2048 \u003e\u003e 10\nt2 \u003d datetime.now()\nprint (t2-t1)\n\nt3 \u003d datetime.now()\nm \u003d 2048 / 1024\nt4 \u003d datetime.now()\nprint(t4-t3)\n\nAt second,\nI don\u0027t care for some kind of optimization which is done only because we can do it. It\u0027s not valuable for users and developers.\nIt\u0027s more valuable to have the code in one style according to all projects","commit_id":"411a35fe4cd04dbad08181e6dd729a1984f8dd4a"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"46d913df98c6186c6fc4229bf319149bf2f9e453","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        LOG.debug(\"Updating volume stats\")"},{"line_number":138,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":139,"context_line":"        data \u003d {\u0027total_capacity_gb\u0027: total_size \u003e\u003e 10,"},{"line_number":140,"context_line":"                \u0027free_capacity_gb\u0027: free_size \u003e\u003e 10,"},{"line_number":141,"context_line":"                \u0027reserved_percentage\u0027: self.configuration.reserved_percentage,"},{"line_number":142,"context_line":"                \u0027QoS_support\u0027: False,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_90fbd846","line":139,"in_reply_to":"9a1a9d01_8abc09bc","updated":"2015-09-30 14:40:25.000000000","message":"More correct way to measure execution time of small code:\n\nimport timeit\n\nprint(timeit.timeit(\"n \u003d 2048 \u003e\u003e 10\"))\n\nprint(timeit.timeit(\"n \u003d 2048 / 1024\"))\n\nAnd you\u0027ll get the results like that:\n\n0.0132441520691\n\n0.0363008975983\n\nAnyway, it\u0027s obvious that a right-shift operation is much  faster.","commit_id":"411a35fe4cd04dbad08181e6dd729a1984f8dd4a"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"b3aa12c9be0f3145065d0a753754fc4ca289cd51","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        LOG.debug(\"Updating volume stats\")"},{"line_number":138,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":139,"context_line":"        data \u003d {\u0027total_capacity_gb\u0027: total_size \u003e\u003e 10,"},{"line_number":140,"context_line":"                \u0027free_capacity_gb\u0027: free_size \u003e\u003e 10,"},{"line_number":141,"context_line":"                \u0027reserved_percentage\u0027: self.configuration.reserved_percentage,"},{"line_number":142,"context_line":"                \u0027QoS_support\u0027: False,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_1bfda96d","line":139,"in_reply_to":"9a1a9d01_90fbd846","updated":"2015-09-30 14:51:56.000000000","message":"OK, using timeit is a right way.\n\nAnyway, this kind of an optimization is not needed here","commit_id":"411a35fe4cd04dbad08181e6dd729a1984f8dd4a"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"141ab875423a4acdf042f93c31f9265f742d61dd","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        LOG.debug(\"Updating volume stats\")"},{"line_number":138,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":139,"context_line":"        data \u003d {\u0027total_capacity_gb\u0027: total_size \u003e\u003e 10,"},{"line_number":140,"context_line":"                \u0027free_capacity_gb\u0027: free_size \u003e\u003e 10,"},{"line_number":141,"context_line":"                \u0027reserved_percentage\u0027: self.configuration.reserved_percentage,"},{"line_number":142,"context_line":"                \u0027QoS_support\u0027: False,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_7d5702ca","line":139,"in_reply_to":"9a1a9d01_ac3d72de","updated":"2015-09-30 12:49:25.000000000","message":"This is the fastest way to divide an integer by 1024. Using units.Ki (1024) in this situation looks confusing because we convert the size from Megabytes to Gigabytes.","commit_id":"411a35fe4cd04dbad08181e6dd729a1984f8dd4a"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"64be4ca60a91b3069f44d80f58271fce1b9e299e","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        LOG.debug(\"Updating volume stats\")"},{"line_number":138,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":139,"context_line":"        data \u003d {\u0027total_capacity_gb\u0027: total_size \u003e\u003e 10,"},{"line_number":140,"context_line":"                \u0027free_capacity_gb\u0027: free_size \u003e\u003e 10,"},{"line_number":141,"context_line":"                \u0027reserved_percentage\u0027: self.configuration.reserved_percentage,"},{"line_number":142,"context_line":"                \u0027QoS_support\u0027: False,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_8abc09bc","line":139,"in_reply_to":"9a1a9d01_c4be7aad","updated":"2015-09-30 14:10:56.000000000","message":"Change the order  of  function and you\u0027ll get the contrary result.;)\n\nfrom datetime import datetime\n\nt3 \u003d datetime.now() m \u003d 2048 / 1024 t4 \u003d datetime.now() print(t4-t3)\n\nt1 \u003d datetime.now() n \u003d 2048 \u003e\u003e 10 t2 \u003d datetime.now() print (t2-t1)\n\nyuryuriy17@yurgen-Inspiron:~$ ./t.py \n\n0:00:00.000045\n\n0:00:00.000006\n\nMake sure it himself.","commit_id":"411a35fe4cd04dbad08181e6dd729a1984f8dd4a"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"6dbf569f1a63f0449f0f87b1cefaec58ccb38226","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        LOG.debug(\"Updating volume stats\")"},{"line_number":139,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":140,"context_line":"        data \u003d {\u0027total_capacity_gb\u0027: total_size / 1024,"},{"line_number":141,"context_line":"                \u0027free_capacity_gb\u0027: free_size / 1024,"},{"line_number":142,"context_line":"                \u0027reserved_percentage\u0027: self.configuration.reserved_percentage,"},{"line_number":143,"context_line":"                \u0027QoS_support\u0027: False,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_3c8de2d2","line":140,"updated":"2015-10-01 09:30:21.000000000","message":"units.Ki","commit_id":"26f5eca87b5a63f8431fc69d95890533cdc6d3ff"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"6dbf569f1a63f0449f0f87b1cefaec58ccb38226","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        LOG.debug(\"Updating volume stats\")"},{"line_number":139,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":140,"context_line":"        data \u003d {\u0027total_capacity_gb\u0027: total_size / 1024,"},{"line_number":141,"context_line":"                \u0027free_capacity_gb\u0027: free_size / 1024,"},{"line_number":142,"context_line":"                \u0027reserved_percentage\u0027: self.configuration.reserved_percentage,"},{"line_number":143,"context_line":"                \u0027QoS_support\u0027: False,"},{"line_number":144,"context_line":"                \u0027volume_backend_name\u0027: backend_name or self.__class__.__name__,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_7caefa2e","line":141,"updated":"2015-10-01 09:30:21.000000000","message":"units.Ki","commit_id":"26f5eca87b5a63f8431fc69d95890533cdc6d3ff"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"6dbf569f1a63f0449f0f87b1cefaec58ccb38226","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        possible_device_size \u003d None"},{"line_number":184,"context_line":"        for device in free_devices:"},{"line_number":185,"context_line":"            dev_size \u003d dict_of_devices_sizes[device]"},{"line_number":186,"context_line":"            if size * 1024 \u003c\u003d dev_size and (possible_device is None or"},{"line_number":187,"context_line":"                                            dev_size \u003c possible_device_size):"},{"line_number":188,"context_line":"                possible_device \u003d device"},{"line_number":189,"context_line":"                possible_device_size \u003d dev_size"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_1ca9fe23","line":186,"updated":"2015-10-01 09:30:21.000000000","message":"units.Ki","commit_id":"26f5eca87b5a63f8431fc69d95890533cdc6d3ff"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"d739f0619f6bd680f279347ba8481305aaa0b98c","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        possible_device_size \u003d None"},{"line_number":184,"context_line":"        for device in free_devices:"},{"line_number":185,"context_line":"            dev_size \u003d dict_of_devices_sizes[device]"},{"line_number":186,"context_line":"            if size * units.Ki \u003c\u003d dev_size and \\"},{"line_number":187,"context_line":"                    (possible_device is None or"},{"line_number":188,"context_line":"                     dev_size \u003c possible_device_size):"},{"line_number":189,"context_line":"                possible_device \u003d device"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a1a9d01_3aeba2dd","line":186,"updated":"2015-10-01 10:15:31.000000000","message":"http://docs.openstack.org/developer/hacking/ expresses a preference for using parentheses for line continuation rather than \u0027\\\u0027 and the cinder community is enforcing this preference as a requirement - I get -1ed whenever I forget.","commit_id":"e0188bceb350fea0d6edd593a35c4e1d3a79fe37"}]}
