)]}'
{"etc/tempest.conf.sample":[{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"bb98ee31223659e96fdc9c85946f955e672a877e","unresolved":false,"context_lines":[{"line_number":213,"context_line":"# Runs Cinder multi-backend tests (requires 3 backend declared in cinder.conf)"},{"line_number":214,"context_line":"# 2 of them should have the same volume_backend_name"},{"line_number":215,"context_line":"# 1 of them should have another volume_backend_name"},{"line_number":216,"context_line":"cinder_multi_backend \u003d false"},{"line_number":217,"context_line":"backend1_backend2_name \u003d LVM_iSCSI"},{"line_number":218,"context_line":"backend3_name \u003d LVM_iSCSI_1"},{"line_number":219,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":13,"id":"AAAAOn%2F%2F1%2Bs%3D","line":216,"updated":"2013-04-19 08:05:29.000000000","message":"I think you have to rename the option here too: \u0027multi_backend_enabled\u0027","commit_id":"5fa29154cc4c067d16540e297b25d651ec2442a7"}],"tempest/config.py":[{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"0327fdd7c9697c500a202b3bfcd6168b4c10c625","unresolved":false,"context_lines":[{"line_number":313,"context_line":"    cfg.StrOpt(\u0027backend3_name\u0027,"},{"line_number":314,"context_line":"               default\u003d\u0027LVM_iSCSI_1\u0027,"},{"line_number":315,"context_line":"               help\u003d\"Name of the volume backend3 (should be declared in\""},{"line_number":316,"context_line":"               \"cinder.conf)\"),"},{"line_number":317,"context_line":"]"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAOn%2F%2F2p8%3D","line":316,"updated":"2013-04-17 15:59:21.000000000","message":"I\u0027d fix the indentation here","commit_id":"75273eaad3930308789cc3e5522249ec390b88fb"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"8390e66ca738efd019e48376291fea08ba2666a5","unresolved":false,"context_lines":[{"line_number":313,"context_line":"    cfg.StrOpt(\u0027backend3_name\u0027,"},{"line_number":314,"context_line":"               default\u003d\u0027LVM_iSCSI_1\u0027,"},{"line_number":315,"context_line":"               help\u003d\"Name of the volume backend3 (should be declared in\""},{"line_number":316,"context_line":"               \"cinder.conf)\"),"},{"line_number":317,"context_line":"]"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAOn%2F%2F2Fo%3D","line":316,"in_reply_to":"AAAAOn%2F%2F2p8%3D","updated":"2013-04-18 08:35:52.000000000","message":"Done","commit_id":"75273eaad3930308789cc3e5522249ec390b88fb"}],"tempest/tests/volume/admin/test_multi_backend.py":[{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"2c28bdffbd122d4acc9eee68c37364445cb7b28a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                                                                auth_url,"},{"line_number":54,"context_line":"                                                                adm_tenant)"},{"line_number":55,"context_line":"        ## Volume types creation"},{"line_number":56,"context_line":"        type_name1 \u003d rand_name(\u0027type-\u0027)"},{"line_number":57,"context_line":"        extra_specs1 \u003d {\"volume_backend_name\": cls.backend1_name}"},{"line_number":58,"context_line":"        resp, cls.body1 \u003d cls.client2.create_volume_type("},{"line_number":59,"context_line":"            type_name1, extra_specs\u003dextra_specs1)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAOn%2F%2Fwyo%3D","line":56,"updated":"2013-04-24 10:58:06.000000000","message":"what happens if type1 creation fails? I\u0027d put both or none in a try/catch","commit_id":"c2b3b63a5696d45ed210d9f0aadb7220e67d52e2"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"c911cccd57d0dfd2f907937d175c6f19201ed378","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                                                                auth_url,"},{"line_number":54,"context_line":"                                                                adm_tenant)"},{"line_number":55,"context_line":"        ## Volume types creation"},{"line_number":56,"context_line":"        type_name1 \u003d rand_name(\u0027type-\u0027)"},{"line_number":57,"context_line":"        extra_specs1 \u003d {\"volume_backend_name\": cls.backend1_name}"},{"line_number":58,"context_line":"        resp, cls.body1 \u003d cls.client2.create_volume_type("},{"line_number":59,"context_line":"            type_name1, extra_specs\u003dextra_specs1)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAOn%2F%2FwvU%3D","line":56,"in_reply_to":"AAAAOn%2F%2Fwyo%3D","updated":"2013-04-24 12:26:50.000000000","message":"My bad...","commit_id":"c2b3b63a5696d45ed210d9f0aadb7220e67d52e2"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"2c28bdffbd122d4acc9eee68c37364445cb7b28a","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        vol_name1 \u003d rand_name(\u0027Volume-\u0027)"},{"line_number":74,"context_line":"        vol_name2 \u003d rand_name(\u0027Volume-\u0027)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        resp, cls.volume1 \u003d cls.client.create_volume(size\u003d1,"},{"line_number":77,"context_line":"                                                     display_name\u003dvol_name1,"},{"line_number":78,"context_line":"                                                     volume_type\u003dtype_name1)"},{"line_number":79,"context_line":"        cls.client.wait_for_volume_status(cls.volume1[\u0027id\u0027], \u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAOn%2F%2Fwyc%3D","line":76,"updated":"2013-04-24 10:58:06.000000000","message":"what happens if volume1 creation fails? I\u0027d put both or none in a try/catch","commit_id":"c2b3b63a5696d45ed210d9f0aadb7220e67d52e2"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"c911cccd57d0dfd2f907937d175c6f19201ed378","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        vol_name1 \u003d rand_name(\u0027Volume-\u0027)"},{"line_number":74,"context_line":"        vol_name2 \u003d rand_name(\u0027Volume-\u0027)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        resp, cls.volume1 \u003d cls.client.create_volume(size\u003d1,"},{"line_number":77,"context_line":"                                                     display_name\u003dvol_name1,"},{"line_number":78,"context_line":"                                                     volume_type\u003dtype_name1)"},{"line_number":79,"context_line":"        cls.client.wait_for_volume_status(cls.volume1[\u0027id\u0027], \u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAOn%2F%2FwvQ%3D","line":76,"in_reply_to":"AAAAOn%2F%2Fwyc%3D","updated":"2013-04-24 12:26:50.000000000","message":"Done","commit_id":"c2b3b63a5696d45ed210d9f0aadb7220e67d52e2"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"2c28bdffbd122d4acc9eee68c37364445cb7b28a","unresolved":false,"context_lines":[{"line_number":125,"context_line":"               \"%(volume_host2)s\") % locals()"},{"line_number":126,"context_line":"        self.assertTrue(len(volume_host2.split(\"@\")) \u003e 1, msg)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def test_volume_backend_name(self):"},{"line_number":129,"context_line":"        # this test checks that the two volumes created at setUp doesn\u0027t"},{"line_number":130,"context_line":"        # belong to the same backend (if they are in the same backend, that"},{"line_number":131,"context_line":"        # means, volume_backend_name distinction is not working properly)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAOn%2F%2FwyQ%3D","line":128,"updated":"2013-04-24 10:58:06.000000000","message":"I\u0027d remove _volume_ , we\u0027re not testing the actual volume creation","commit_id":"c2b3b63a5696d45ed210d9f0aadb7220e67d52e2"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"c911cccd57d0dfd2f907937d175c6f19201ed378","unresolved":false,"context_lines":[{"line_number":125,"context_line":"               \"%(volume_host2)s\") % locals()"},{"line_number":126,"context_line":"        self.assertTrue(len(volume_host2.split(\"@\")) \u003e 1, msg)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def test_volume_backend_name(self):"},{"line_number":129,"context_line":"        # this test checks that the two volumes created at setUp doesn\u0027t"},{"line_number":130,"context_line":"        # belong to the same backend (if they are in the same backend, that"},{"line_number":131,"context_line":"        # means, volume_backend_name distinction is not working properly)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAOn%2F%2FwvA%3D","line":128,"in_reply_to":"AAAAOn%2F%2FwyQ%3D","updated":"2013-04-24 12:26:50.000000000","message":"Ah, ok. I see your point.\n\nHowever, \"volume_backend_name\" is the name of the parameter used in cinder.conf. As this test tests that volume_backend_name parameter is well taken into account, I named this test like this. Perhaps test_volume_backend_name_distinction will be better?","commit_id":"c2b3b63a5696d45ed210d9f0aadb7220e67d52e2"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"2c28bdffbd122d4acc9eee68c37364445cb7b28a","unresolved":false,"context_lines":[{"line_number":142,"context_line":"               \"(%(backend1_name)s): this means that the result of this test \""},{"line_number":143,"context_line":"               \"will not be relevant. Check your tempest.conf file.\") \\"},{"line_number":144,"context_line":"            % locals()"},{"line_number":145,"context_line":"        self.assertNotEqual(self.backend1_name, self.backend2_name, msg)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        ## checks multi backend is enabled"},{"line_number":148,"context_line":"        resp, fetched_volume \u003d self.client.get_volume(self.volume1[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAOn%2F%2FwyU%3D","line":145,"updated":"2013-04-24 10:58:06.000000000","message":"skip if the two names are identical, or this will result in a failure","commit_id":"c2b3b63a5696d45ed210d9f0aadb7220e67d52e2"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"c911cccd57d0dfd2f907937d175c6f19201ed378","unresolved":false,"context_lines":[{"line_number":142,"context_line":"               \"(%(backend1_name)s): this means that the result of this test \""},{"line_number":143,"context_line":"               \"will not be relevant. Check your tempest.conf file.\") \\"},{"line_number":144,"context_line":"            % locals()"},{"line_number":145,"context_line":"        self.assertNotEqual(self.backend1_name, self.backend2_name, msg)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        ## checks multi backend is enabled"},{"line_number":148,"context_line":"        resp, fetched_volume \u003d self.client.get_volume(self.volume1[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAOn%2F%2Fwuc%3D","line":145,"in_reply_to":"AAAAOn%2F%2FwyU%3D","updated":"2013-04-24 12:26:50.000000000","message":"Done","commit_id":"c2b3b63a5696d45ed210d9f0aadb7220e67d52e2"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"2c28bdffbd122d4acc9eee68c37364445cb7b28a","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        ## checks multi backend is enabled"},{"line_number":148,"context_line":"        resp, fetched_volume \u003d self.client.get_volume(self.volume1[\u0027id\u0027])"},{"line_number":149,"context_line":"        volume_host1 \u003d fetched_volume[\u0027os-vol-host-attr:host\u0027]"},{"line_number":150,"context_line":"        msg \u003d (\"Multi-backend is not available for at least host \""},{"line_number":151,"context_line":"               \"%(volume_host1)s\") % locals()"},{"line_number":152,"context_line":"        self.assertTrue(len(volume_host1.split(\"@\")) \u003e 1, msg)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAOn%2F%2FwyE%3D","line":150,"updated":"2013-04-24 10:58:06.000000000","message":"why the need to check again for the same stuff? we skip already if the bolean is false or if the two backends name are identical (delete from 150 to 152 and from 156 to 158)","commit_id":"c2b3b63a5696d45ed210d9f0aadb7220e67d52e2"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"c911cccd57d0dfd2f907937d175c6f19201ed378","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        ## checks multi backend is enabled"},{"line_number":148,"context_line":"        resp, fetched_volume \u003d self.client.get_volume(self.volume1[\u0027id\u0027])"},{"line_number":149,"context_line":"        volume_host1 \u003d fetched_volume[\u0027os-vol-host-attr:host\u0027]"},{"line_number":150,"context_line":"        msg \u003d (\"Multi-backend is not available for at least host \""},{"line_number":151,"context_line":"               \"%(volume_host1)s\") % locals()"},{"line_number":152,"context_line":"        self.assertTrue(len(volume_host1.split(\"@\")) \u003e 1, msg)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAOn%2F%2Fwu8%3D","line":150,"in_reply_to":"AAAAOn%2F%2FwyE%3D","updated":"2013-04-24 12:26:50.000000000","message":"Done","commit_id":"c2b3b63a5696d45ed210d9f0aadb7220e67d52e2"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"2c28bdffbd122d4acc9eee68c37364445cb7b28a","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        self.assertTrue(len(volume_host2.split(\"@\")) \u003e 1, msg)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        ## checks the volumes don\u0027t belong to the same backend"},{"line_number":161,"context_line":"        msg \u003d (\"volume2 was created in the same backend as volume1: \""},{"line_number":162,"context_line":"               \"%(volume_host2)s. This means that backend1_name \""},{"line_number":163,"context_line":"               \"(%(backend1_name)s) and backend2_name (%(backend2_name)s) \""},{"line_number":164,"context_line":"               \"points to the same backend (%(volume_host1)s).\") % locals()"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAOn%2F%2Fwx8%3D","line":161,"updated":"2013-04-24 10:58:06.000000000","message":"I wouldn\u0027t give so much insight in the msg, just give the test a meaningful name and let the assertion fail","commit_id":"c2b3b63a5696d45ed210d9f0aadb7220e67d52e2"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"c911cccd57d0dfd2f907937d175c6f19201ed378","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        self.assertTrue(len(volume_host2.split(\"@\")) \u003e 1, msg)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        ## checks the volumes don\u0027t belong to the same backend"},{"line_number":161,"context_line":"        msg \u003d (\"volume2 was created in the same backend as volume1: \""},{"line_number":162,"context_line":"               \"%(volume_host2)s. This means that backend1_name \""},{"line_number":163,"context_line":"               \"(%(backend1_name)s) and backend2_name (%(backend2_name)s) \""},{"line_number":164,"context_line":"               \"points to the same backend (%(volume_host1)s).\") % locals()"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAOn%2F%2Fwuo%3D","line":161,"in_reply_to":"AAAAOn%2F%2Fwx8%3D","updated":"2013-04-24 12:26:50.000000000","message":"Done","commit_id":"c2b3b63a5696d45ed210d9f0aadb7220e67d52e2"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"95aab4b1813f4057684161da962561bd1bb3a2b7","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            resp, cls.body2 \u003d cls.client2.create_volume_type("},{"line_number":68,"context_line":"                type_name2, extra_specs\u003dextra_specs2)"},{"line_number":69,"context_line":"        except Exception:"},{"line_number":70,"context_line":"            cls.client2.delete_volume_type(cls.body1[\u0027id\u0027])"},{"line_number":71,"context_line":"            msg \u003d (\"volume-type2 was not created successfully, \""},{"line_number":72,"context_line":"                   \"try to delete volume-type1\")"},{"line_number":73,"context_line":"            raise cls.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAOn%2F%2Fwto%3D","line":70,"updated":"2013-04-24 12:58:48.000000000","message":"you can\u0027t be sure it failed after type1 was created; strip out the delete attempt and just skip the tests with a generic error message (setup failed)","commit_id":"261f45d6df3939262609a938ba645037c32ded0d"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"a6ad1c7384021e1009ec5f8a3a590b48022810e0","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            resp, cls.body2 \u003d cls.client2.create_volume_type("},{"line_number":68,"context_line":"                type_name2, extra_specs\u003dextra_specs2)"},{"line_number":69,"context_line":"        except Exception:"},{"line_number":70,"context_line":"            cls.client2.delete_volume_type(cls.body1[\u0027id\u0027])"},{"line_number":71,"context_line":"            msg \u003d (\"volume-type2 was not created successfully, \""},{"line_number":72,"context_line":"                   \"try to delete volume-type1\")"},{"line_number":73,"context_line":"            raise cls.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAOn%2F%2FwrI%3D","line":70,"in_reply_to":"AAAAOn%2F%2Fwto%3D","updated":"2013-04-24 13:22:59.000000000","message":"Done","commit_id":"261f45d6df3939262609a938ba645037c32ded0d"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"95aab4b1813f4057684161da962561bd1bb3a2b7","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        except Exception:"},{"line_number":88,"context_line":"            cls.client.delete_volume(cls.volume1[\u0027id\u0027])"},{"line_number":89,"context_line":"            cls.client2.delete_volume_type(cls.body1[\u0027id\u0027])"},{"line_number":90,"context_line":"            cls.client2.delete_volume_type(cls.body2[\u0027id\u0027])"},{"line_number":91,"context_line":"            msg \u003d (\"volume2 was not created successfully, \""},{"line_number":92,"context_line":"                   \"try to delete volume1, volume-type1 and volume-type2\")"},{"line_number":93,"context_line":"            raise cls.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAOn%2F%2FwtQ%3D","line":90,"updated":"2013-04-24 12:58:48.000000000","message":"you can\u0027t be sure which volume got created and you won\u0027t be able to delete types if there are volumes labeled with such a type; strip out the delete attempts and just skip the tests with a generic error message (setup failed)","commit_id":"261f45d6df3939262609a938ba645037c32ded0d"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"a6ad1c7384021e1009ec5f8a3a590b48022810e0","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        except Exception:"},{"line_number":88,"context_line":"            cls.client.delete_volume(cls.volume1[\u0027id\u0027])"},{"line_number":89,"context_line":"            cls.client2.delete_volume_type(cls.body1[\u0027id\u0027])"},{"line_number":90,"context_line":"            cls.client2.delete_volume_type(cls.body2[\u0027id\u0027])"},{"line_number":91,"context_line":"            msg \u003d (\"volume2 was not created successfully, \""},{"line_number":92,"context_line":"                   \"try to delete volume1, volume-type1 and volume-type2\")"},{"line_number":93,"context_line":"            raise cls.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAOn%2F%2FwrE%3D","line":90,"in_reply_to":"AAAAOn%2F%2FwtQ%3D","updated":"2013-04-24 13:22:59.000000000","message":"Done","commit_id":"261f45d6df3939262609a938ba645037c32ded0d"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"77d4fba46ba2bdf5bb81c8cd6e3fc7a1d057418a","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            extra_specs2 \u003d {\"volume_backend_name\": cls.backend2_name}"},{"line_number":67,"context_line":"            resp, cls.body2 \u003d cls.client2.create_volume_type("},{"line_number":68,"context_line":"                type_name2, extra_specs\u003dextra_specs2)"},{"line_number":69,"context_line":"        except Exception:"},{"line_number":70,"context_line":"            msg \u003d (\"setup failed: volume types creation error\")"},{"line_number":71,"context_line":"            raise cls.skipException(msg)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAOn%2F%2Ft%2B0%3D","line":69,"updated":"2013-04-26 11:59:16.000000000","message":"I don\u0027t want us doing try / skip here. If this test is enabled, it should work. If we can\u0027t build the volumes in an environment where we think we should be able to, that\u0027s a fail.","commit_id":"d24916e024cf30a657dd889bac3c420ef620531f"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"573240d7e283182286a0895b722b9b785abef87c","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            extra_specs2 \u003d {\"volume_backend_name\": cls.backend2_name}"},{"line_number":67,"context_line":"            resp, cls.body2 \u003d cls.client2.create_volume_type("},{"line_number":68,"context_line":"                type_name2, extra_specs\u003dextra_specs2)"},{"line_number":69,"context_line":"        except Exception:"},{"line_number":70,"context_line":"            msg \u003d (\"setup failed: volume types creation error\")"},{"line_number":71,"context_line":"            raise cls.skipException(msg)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAOn%2F%2Ft6M%3D","line":69,"in_reply_to":"AAAAOn%2F%2Ft%2B0%3D","updated":"2013-04-26 13:16:38.000000000","message":"Done","commit_id":"d24916e024cf30a657dd889bac3c420ef620531f"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"77d4fba46ba2bdf5bb81c8cd6e3fc7a1d057418a","unresolved":false,"context_lines":[{"line_number":121,"context_line":"               \"%(volume_host2)s\") % locals()"},{"line_number":122,"context_line":"        self.assertTrue(len(volume_host2.split(\"@\")) \u003e 1, msg)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    @testtools.skipIf(backend_names_equal, \"backend names are identical\")"},{"line_number":125,"context_line":"    def test_backend_name_distinction(self):"},{"line_number":126,"context_line":"        # this test checks that the two volumes created at setUp doesn\u0027t"},{"line_number":127,"context_line":"        # belong to the same backend (if they are in the same backend, that"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAOn%2F%2Ft%2Bw%3D","line":124,"updated":"2013-04-26 11:59:16.000000000","message":"this shouldn\u0027t be a skip, we should enforce the backends are separate elsewhere, and fail on this case.","commit_id":"d24916e024cf30a657dd889bac3c420ef620531f"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"573240d7e283182286a0895b722b9b785abef87c","unresolved":false,"context_lines":[{"line_number":121,"context_line":"               \"%(volume_host2)s\") % locals()"},{"line_number":122,"context_line":"        self.assertTrue(len(volume_host2.split(\"@\")) \u003e 1, msg)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    @testtools.skipIf(backend_names_equal, \"backend names are identical\")"},{"line_number":125,"context_line":"    def test_backend_name_distinction(self):"},{"line_number":126,"context_line":"        # this test checks that the two volumes created at setUp doesn\u0027t"},{"line_number":127,"context_line":"        # belong to the same backend (if they are in the same backend, that"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAOn%2F%2Ft44%3D","line":124,"in_reply_to":"AAAAOn%2F%2Ft%2Bw%3D","updated":"2013-04-26 13:16:38.000000000","message":"Done","commit_id":"d24916e024cf30a657dd889bac3c420ef620531f"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"d4b1ca09112582cf3cb6a60ed988c0e410fcef32","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            extra_specs2 \u003d {\"volume_backend_name\": cls.backend2_name}"},{"line_number":67,"context_line":"            resp, cls.body2 \u003d cls.client2.create_volume_type("},{"line_number":68,"context_line":"                type_name2, extra_specs\u003dextra_specs2)"},{"line_number":69,"context_line":"        except Exception:"},{"line_number":70,"context_line":"            msg \u003d (\"setup failed: volume types creation error\")"},{"line_number":71,"context_line":"            raise Exception(msg)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAOn%2F%2FsFk%3D","line":69,"updated":"2013-04-28 20:05:34.000000000","message":"You do not need try except here, just let the original exception to propagate.","commit_id":"7da1248e572204c3ce17da2bd3fb3c1df7b8ede6"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"d4b1ca09112582cf3cb6a60ed988c0e410fcef32","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            resp, cls.volume2 \u003d cls.client.create_volume("},{"line_number":83,"context_line":"                size\u003d1, display_name\u003dvol_name2, volume_type\u003dtype_name2)"},{"line_number":84,"context_line":"            cls.client.wait_for_volume_status(cls.volume2[\u0027id\u0027], \u0027available\u0027)"},{"line_number":85,"context_line":"        except Exception:"},{"line_number":86,"context_line":"            msg \u003d (\"setup failed: volumes creation error\")"},{"line_number":87,"context_line":"            raise Exception(msg)"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAOn%2F%2FsFg%3D","line":85,"updated":"2013-04-28 20:05:34.000000000","message":"You do not need try except here, just let the original exception to propagate.","commit_id":"7da1248e572204c3ce17da2bd3fb3c1df7b8ede6"}],"tempest/tests/volume/admin/test_volume_multi_backend.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"afeede0dcbefb0094d7b642106613373af69bb20","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        resp, cls.volume2 \u003d cls.client.create_volume(size\u003d1,"},{"line_number":70,"context_line":"                                                     display_name\u003dvol_name2,"},{"line_number":71,"context_line":"                                                     volume_type\u003dtype_name)"},{"line_number":72,"context_line":"        cls.client.wait_for_volume_status(cls.volume2[\u0027id\u0027], \u0027available\u0027)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @classmethod"},{"line_number":75,"context_line":"    def tearDownClass(cls):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAOX%2F%2F6BI%3D","line":72,"updated":"2013-04-08 07:21:47.000000000","message":"Should probably handle case where volume creation raises an exception in setupClass and call tearDownClass manually as it won\u0027t be called automatically","commit_id":"350df16ca9e4bdb1da8f1a241df89701a76f45ec"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"afeede0dcbefb0094d7b642106613373af69bb20","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        volume_host3 \u003d fetched_volume[\u0027os-vol-host-attr:host\u0027]"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        ## volume3 deletion"},{"line_number":159,"context_line":"        self.client.delete_volume(volume3[\u0027id\u0027])"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        ## volume type deletion"},{"line_number":162,"context_line":"        self.client2.delete_volume_type(body1[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAOX%2F%2F6BE%3D","line":159,"updated":"2013-04-08 07:21:47.000000000","message":"Need to handle deletion if exceptions are raised before normal deletion occurs. Use something like addCleanUp?","commit_id":"350df16ca9e4bdb1da8f1a241df89701a76f45ec"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"3e0734960f48d47bbfa73f6f75a4828a243ad81c","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        cls.client2.delete_volume_type(cls.body[\u0027id\u0027])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @testtools.skipIf(not cinder_multi_backend,"},{"line_number":93,"context_line":"                      \"Cinder multi-backend feature is not available\")"},{"line_number":94,"context_line":"    def test_multi_backend(self):"},{"line_number":95,"context_line":"        # this test tests if the two previously created volumes was made in"},{"line_number":96,"context_line":"        # \"multi-backend environment\""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAOn%2F%2F4oA%3D","line":93,"updated":"2013-04-13 15:04:09.000000000","message":"why not skip before setUpClass?","commit_id":"4f48a4b9b9288228f240eb844b24c98c5d66976e"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"3e0734960f48d47bbfa73f6f75a4828a243ad81c","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        self.assertNotEqual(part1, volume_host2, msg)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @testtools.skipIf(not cinder_multi_backend,"},{"line_number":120,"context_line":"                      \"Cinder multi-backend feature is not available\")"},{"line_number":121,"context_line":"    def test_multi_backend_with_same_volume_backend_name(self):"},{"line_number":122,"context_line":"        # assumption: two empty backend of the same size and same"},{"line_number":123,"context_line":"        # volume_backend_name (cinder.conf) are availables."}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAOn%2F%2F4n8%3D","line":120,"updated":"2013-04-13 15:04:09.000000000","message":"the same as above","commit_id":"4f48a4b9b9288228f240eb844b24c98c5d66976e"},{"author":{"_account_id":5586,"name":"Ivan-Zhu","email":"zhubo198511@gmail.com","username":"ivan-zhu"},"change_message_id":"3e0734960f48d47bbfa73f6f75a4828a243ad81c","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        self.assertNotEqual(volume_host1, volume_host2, msg)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    @testtools.skipIf(not cinder_multi_backend,"},{"line_number":139,"context_line":"                      \"Cinder multi-backend feature is not available\")"},{"line_number":140,"context_line":"    def test_multi_backend_with_different_volumes_backend_names(self):"},{"line_number":141,"context_line":"        # this test creates a third volume, checks that this new one doesn\u0027t"},{"line_number":142,"context_line":"        # belong to the backend of volume_host1 or volume_host2"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAOn%2F%2F4n4%3D","line":139,"updated":"2013-04-13 15:04:09.000000000","message":"the same as above","commit_id":"4f48a4b9b9288228f240eb844b24c98c5d66976e"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"0327fdd7c9697c500a202b3bfcd6168b4c10c625","unresolved":false,"context_lines":[{"line_number":27,"context_line":"class VolumeMultiBackendTest(base.BaseVolumeAdminTest):"},{"line_number":28,"context_line":"    _interface \u003d \"json\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    cinder_multi_backend \u003d config.TempestConfig().volume.cinder_multi_backend"},{"line_number":31,"context_line":"    backend1_backend2_name \u003d \\"},{"line_number":32,"context_line":"        config.TempestConfig().volume.backend1_backend2_name"},{"line_number":33,"context_line":"    backend3_name \u003d config.TempestConfig().volume.backend3_name"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAOn%2F%2F2o0%3D","line":30,"updated":"2013-04-17 15:59:21.000000000","message":"I\u0027d rename \"cinder_multi_backend\" into \"multi_backend_enabled\"","commit_id":"75273eaad3930308789cc3e5522249ec390b88fb"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"8390e66ca738efd019e48376291fea08ba2666a5","unresolved":false,"context_lines":[{"line_number":27,"context_line":"class VolumeMultiBackendTest(base.BaseVolumeAdminTest):"},{"line_number":28,"context_line":"    _interface \u003d \"json\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    cinder_multi_backend \u003d config.TempestConfig().volume.cinder_multi_backend"},{"line_number":31,"context_line":"    backend1_backend2_name \u003d \\"},{"line_number":32,"context_line":"        config.TempestConfig().volume.backend1_backend2_name"},{"line_number":33,"context_line":"    backend3_name \u003d config.TempestConfig().volume.backend3_name"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAOn%2F%2F2FY%3D","line":30,"in_reply_to":"AAAAOn%2F%2F2o0%3D","updated":"2013-04-18 08:35:52.000000000","message":"Done","commit_id":"75273eaad3930308789cc3e5522249ec390b88fb"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"0327fdd7c9697c500a202b3bfcd6168b4c10c625","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                    size\u003d1, display_name\u003dvol_name2, volume_type\u003dtype_name)"},{"line_number":76,"context_line":"            cls.client.wait_for_volume_status(cls.volume2[\u0027id\u0027], \u0027available\u0027)"},{"line_number":77,"context_line":"        except Exception:"},{"line_number":78,"context_line":"            cls.client.delete_volume(cls.volume1[\u0027id\u0027])"},{"line_number":79,"context_line":"            msg \u003d (\"volume2 was not created successfully, \""},{"line_number":80,"context_line":"                   \"try to delete volume1\")"},{"line_number":81,"context_line":"            raise cls.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAOn%2F%2F2oM%3D","line":78,"updated":"2013-04-17 15:59:21.000000000","message":"you need to delete the volume type too","commit_id":"75273eaad3930308789cc3e5522249ec390b88fb"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"8390e66ca738efd019e48376291fea08ba2666a5","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                    size\u003d1, display_name\u003dvol_name2, volume_type\u003dtype_name)"},{"line_number":76,"context_line":"            cls.client.wait_for_volume_status(cls.volume2[\u0027id\u0027], \u0027available\u0027)"},{"line_number":77,"context_line":"        except Exception:"},{"line_number":78,"context_line":"            cls.client.delete_volume(cls.volume1[\u0027id\u0027])"},{"line_number":79,"context_line":"            msg \u003d (\"volume2 was not created successfully, \""},{"line_number":80,"context_line":"                   \"try to delete volume1\")"},{"line_number":81,"context_line":"            raise cls.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAOn%2F%2F2FQ%3D","line":78,"in_reply_to":"AAAAOn%2F%2F2oM%3D","updated":"2013-04-18 08:35:52.000000000","message":"Done","commit_id":"75273eaad3930308789cc3e5522249ec390b88fb"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"0327fdd7c9697c500a202b3bfcd6168b4c10c625","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        # backend volume"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        resp, fetched_volume \u003d self.client.get_volume(self.volume1[\u0027id\u0027])"},{"line_number":103,"context_line":"        volume_host1 \u003d fetched_volume[\u0027os-vol-host-attr:host\u0027]"},{"line_number":104,"context_line":"        part1, part2, part3 \u003d volume_host1.partition(\"@\")"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        msg \u003d (\"Multi-backend is not available for at least host %(part1)s\") \\"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAOn%2F%2F2nU%3D","line":103,"updated":"2013-04-17 15:59:21.000000000","message":"I think you can make this simpler to read by:\n1. remove from 104 to 117\n2. save len(volume_host1.split(\"@\"))\n3. save len(volume_host2.split(\"@\"))\n4. assert that both are \u003e1","commit_id":"75273eaad3930308789cc3e5522249ec390b88fb"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"8390e66ca738efd019e48376291fea08ba2666a5","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        # backend volume"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        resp, fetched_volume \u003d self.client.get_volume(self.volume1[\u0027id\u0027])"},{"line_number":103,"context_line":"        volume_host1 \u003d fetched_volume[\u0027os-vol-host-attr:host\u0027]"},{"line_number":104,"context_line":"        part1, part2, part3 \u003d volume_host1.partition(\"@\")"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        msg \u003d (\"Multi-backend is not available for at least host %(part1)s\") \\"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAOn%2F%2F2E8%3D","line":103,"in_reply_to":"AAAAOn%2F%2F2nU%3D","updated":"2013-04-18 08:35:52.000000000","message":"Done","commit_id":"75273eaad3930308789cc3e5522249ec390b88fb"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"0327fdd7c9697c500a202b3bfcd6168b4c10c625","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        self.assertNotEqual(part1, volume_host2, msg)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def test_multi_backend_with_same_volume_backend_name(self):"},{"line_number":120,"context_line":"        # assumption: two empty backend of the same size and same"},{"line_number":121,"context_line":"        # volume_backend_name (cinder.conf) are availables."},{"line_number":122,"context_line":"        # this test tests if filter scheduler works well with multiple backend"},{"line_number":123,"context_line":"        # the test fails if the two volumes were created in the same backend"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAOn%2F%2F2nQ%3D","line":120,"updated":"2013-04-17 15:59:21.000000000","message":"do they have to be of the same size?","commit_id":"75273eaad3930308789cc3e5522249ec390b88fb"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"8390e66ca738efd019e48376291fea08ba2666a5","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        self.assertNotEqual(part1, volume_host2, msg)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def test_multi_backend_with_same_volume_backend_name(self):"},{"line_number":120,"context_line":"        # assumption: two empty backend of the same size and same"},{"line_number":121,"context_line":"        # volume_backend_name (cinder.conf) are availables."},{"line_number":122,"context_line":"        # this test tests if filter scheduler works well with multiple backend"},{"line_number":123,"context_line":"        # the test fails if the two volumes were created in the same backend"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAOn%2F%2F2E0%3D","line":120,"in_reply_to":"AAAAOn%2F%2F2nQ%3D","updated":"2013-04-18 08:35:52.000000000","message":"In fact, the filter scheduler, in it\u0027s default configuration, tries to create volumes on backend with the most available space. If the backend do not have the same amount of available space, filter scheduler will try to fill the least loaded backend.\nI will change the comment : \"two empty backend of the same size\" by \"two empty backend with the same amount of available space\"","commit_id":"75273eaad3930308789cc3e5522249ec390b88fb"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"0327fdd7c9697c500a202b3bfcd6168b4c10c625","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        # assumption: two empty backend of the same size and same"},{"line_number":121,"context_line":"        # volume_backend_name (cinder.conf) are availables."},{"line_number":122,"context_line":"        # this test tests if filter scheduler works well with multiple backend"},{"line_number":123,"context_line":"        # the test fails if the two volumes were created in the same backend"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        resp, fetched_volume \u003d self.client.get_volume(self.volume1[\u0027id\u0027])"},{"line_number":126,"context_line":"        volume_host1 \u003d fetched_volume[\u0027os-vol-host-attr:host\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAOn%2F%2F2nI%3D","line":123,"updated":"2013-04-17 15:59:21.000000000","message":"are we sure it is a failure in that case? can\u0027t the scheduler just pick up twice the same host?","commit_id":"75273eaad3930308789cc3e5522249ec390b88fb"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"8390e66ca738efd019e48376291fea08ba2666a5","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        # assumption: two empty backend of the same size and same"},{"line_number":121,"context_line":"        # volume_backend_name (cinder.conf) are availables."},{"line_number":122,"context_line":"        # this test tests if filter scheduler works well with multiple backend"},{"line_number":123,"context_line":"        # the test fails if the two volumes were created in the same backend"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        resp, fetched_volume \u003d self.client.get_volume(self.volume1[\u0027id\u0027])"},{"line_number":126,"context_line":"        volume_host1 \u003d fetched_volume[\u0027os-vol-host-attr:host\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAOn%2F%2F2Ew%3D","line":123,"in_reply_to":"AAAAOn%2F%2F2nI%3D","updated":"2013-04-18 08:35:52.000000000","message":"See my previous remark.","commit_id":"75273eaad3930308789cc3e5522249ec390b88fb"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"452e10ec74364b1af15deefbbc73d951fb002f99","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    _interface \u003d \"json\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    multi_backend_enabled \u003d config.TempestConfig().volume.multi_backend_enabled"},{"line_number":31,"context_line":"    backend1_name \u003d \\"},{"line_number":32,"context_line":"        config.TempestConfig().volume.backend1_name"},{"line_number":33,"context_line":"    backend2_name \u003d config.TempestConfig().volume.backend2_name"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAOn%2F%2FyjE%3D","line":31,"updated":"2013-04-23 10:40:10.000000000","message":"no need for the newline","commit_id":"360abe8352d57f9d418d46a502d3a1989622108c"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"f20adb14b7e26ec5eed839068910ee37cc513121","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    _interface \u003d \"json\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    multi_backend_enabled \u003d config.TempestConfig().volume.multi_backend_enabled"},{"line_number":31,"context_line":"    backend1_name \u003d \\"},{"line_number":32,"context_line":"        config.TempestConfig().volume.backend1_name"},{"line_number":33,"context_line":"    backend2_name \u003d config.TempestConfig().volume.backend2_name"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAOn%2F%2FybQ%3D","line":31,"in_reply_to":"AAAAOn%2F%2FyjE%3D","updated":"2013-04-23 14:08:52.000000000","message":"Done","commit_id":"360abe8352d57f9d418d46a502d3a1989622108c"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"452e10ec74364b1af15deefbbc73d951fb002f99","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        ## Volume type creation"},{"line_number":57,"context_line":"        type_name \u003d rand_name(\u0027type-\u0027)"},{"line_number":58,"context_line":"        extra_specs \u003d {\"volume_backend_name\": cls.backend1_name}"},{"line_number":59,"context_line":"        resp, cls.body \u003d cls.client2.create_volume_type("},{"line_number":60,"context_line":"                type_name, extra_specs\u003dextra_specs)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        # Volumes creation"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAOn%2F%2FyjA%3D","line":59,"updated":"2013-04-23 10:40:10.000000000","message":"fix indentation","commit_id":"360abe8352d57f9d418d46a502d3a1989622108c"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"f20adb14b7e26ec5eed839068910ee37cc513121","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        ## Volume type creation"},{"line_number":57,"context_line":"        type_name \u003d rand_name(\u0027type-\u0027)"},{"line_number":58,"context_line":"        extra_specs \u003d {\"volume_backend_name\": cls.backend1_name}"},{"line_number":59,"context_line":"        resp, cls.body \u003d cls.client2.create_volume_type("},{"line_number":60,"context_line":"                type_name, extra_specs\u003dextra_specs)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        # Volumes creation"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAOn%2F%2Fya4%3D","line":59,"in_reply_to":"AAAAOn%2F%2FyjA%3D","updated":"2013-04-23 14:08:52.000000000","message":"Done","commit_id":"360abe8352d57f9d418d46a502d3a1989622108c"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"452e10ec74364b1af15deefbbc73d951fb002f99","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                                                     volume_type\u003dtype_name)"},{"line_number":70,"context_line":"        cls.client.wait_for_volume_status(cls.volume1[\u0027id\u0027], \u0027available\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        ## volume 2"},{"line_number":73,"context_line":"        try:"},{"line_number":74,"context_line":"            resp, cls.volume2 \u003d cls.client.create_volume("},{"line_number":75,"context_line":"                    size\u003d1, display_name\u003dvol_name2, volume_type\u003dtype_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAOn%2F%2Fyi8%3D","line":72,"updated":"2013-04-23 10:40:10.000000000","message":"we don\u0027t need to create two volumes in the same backend now","commit_id":"360abe8352d57f9d418d46a502d3a1989622108c"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"f20adb14b7e26ec5eed839068910ee37cc513121","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                                                     volume_type\u003dtype_name)"},{"line_number":70,"context_line":"        cls.client.wait_for_volume_status(cls.volume1[\u0027id\u0027], \u0027available\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        ## volume 2"},{"line_number":73,"context_line":"        try:"},{"line_number":74,"context_line":"            resp, cls.volume2 \u003d cls.client.create_volume("},{"line_number":75,"context_line":"                    size\u003d1, display_name\u003dvol_name2, volume_type\u003dtype_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAOn%2F%2Fya0%3D","line":72,"in_reply_to":"AAAAOn%2F%2Fyi8%3D","updated":"2013-04-23 14:08:52.000000000","message":"Done","commit_id":"360abe8352d57f9d418d46a502d3a1989622108c"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"452e10ec74364b1af15deefbbc73d951fb002f99","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        ## volumes deletion"},{"line_number":89,"context_line":"        cls.client.delete_volume(cls.volume1[\u0027id\u0027])"},{"line_number":90,"context_line":"        cls.client.delete_volume(cls.volume2[\u0027id\u0027])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        ## volume type deletion"},{"line_number":93,"context_line":"        cls.client2.delete_volume_type(cls.body[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAOn%2F%2Fyi4%3D","line":90,"updated":"2013-04-23 10:40:10.000000000","message":"if only one volume is created, one needs to be deleted","commit_id":"360abe8352d57f9d418d46a502d3a1989622108c"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"f20adb14b7e26ec5eed839068910ee37cc513121","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        ## volumes deletion"},{"line_number":89,"context_line":"        cls.client.delete_volume(cls.volume1[\u0027id\u0027])"},{"line_number":90,"context_line":"        cls.client.delete_volume(cls.volume2[\u0027id\u0027])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        ## volume type deletion"},{"line_number":93,"context_line":"        cls.client2.delete_volume_type(cls.body[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAOn%2F%2Fyaw%3D","line":90,"in_reply_to":"AAAAOn%2F%2Fyi4%3D","updated":"2013-04-23 14:08:52.000000000","message":"Done","commit_id":"360abe8352d57f9d418d46a502d3a1989622108c"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"452e10ec74364b1af15deefbbc73d951fb002f99","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        ## volume type deletion"},{"line_number":93,"context_line":"        cls.client2.delete_volume_type(cls.body[\u0027id\u0027])"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def test_multi_backend(self):"},{"line_number":96,"context_line":"        # this test tests if the two previously created volumes was made in"},{"line_number":97,"context_line":"        # \"multi-backend environment\""},{"line_number":98,"context_line":"        # if multi-backend is enabled: os-vol-attr:host should be like:"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAOn%2F%2Fyis%3D","line":95,"updated":"2013-04-23 10:40:10.000000000","message":"if only one volume is created, the description needs to be updated","commit_id":"360abe8352d57f9d418d46a502d3a1989622108c"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"f20adb14b7e26ec5eed839068910ee37cc513121","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        ## volume type deletion"},{"line_number":93,"context_line":"        cls.client2.delete_volume_type(cls.body[\u0027id\u0027])"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def test_multi_backend(self):"},{"line_number":96,"context_line":"        # this test tests if the two previously created volumes was made in"},{"line_number":97,"context_line":"        # \"multi-backend environment\""},{"line_number":98,"context_line":"        # if multi-backend is enabled: os-vol-attr:host should be like:"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAOn%2F%2Fyas%3D","line":95,"in_reply_to":"AAAAOn%2F%2Fyis%3D","updated":"2013-04-23 14:08:52.000000000","message":"Done","commit_id":"360abe8352d57f9d418d46a502d3a1989622108c"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"452e10ec74364b1af15deefbbc73d951fb002f99","unresolved":false,"context_lines":[{"line_number":106,"context_line":"               \"%(volume_host1)s\") % locals()"},{"line_number":107,"context_line":"        self.assertTrue(len(volume_host1.split(\"@\")) \u003e 1, msg)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        resp, fetched_volume \u003d self.client.get_volume(self.volume2[\u0027id\u0027])"},{"line_number":110,"context_line":"        volume_host2 \u003d fetched_volume[\u0027os-vol-host-attr:host\u0027]"},{"line_number":111,"context_line":"        msg \u003d (\"Multi-backend is not available for at least host \""},{"line_number":112,"context_line":"               \"%(volume_host2)s\") % locals()"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAOn%2F%2Fyio%3D","line":109,"updated":"2013-04-23 10:40:10.000000000","message":"if only one volume is created, we don\u0027t need of lines from 109 to 113","commit_id":"360abe8352d57f9d418d46a502d3a1989622108c"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"f20adb14b7e26ec5eed839068910ee37cc513121","unresolved":false,"context_lines":[{"line_number":106,"context_line":"               \"%(volume_host1)s\") % locals()"},{"line_number":107,"context_line":"        self.assertTrue(len(volume_host1.split(\"@\")) \u003e 1, msg)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        resp, fetched_volume \u003d self.client.get_volume(self.volume2[\u0027id\u0027])"},{"line_number":110,"context_line":"        volume_host2 \u003d fetched_volume[\u0027os-vol-host-attr:host\u0027]"},{"line_number":111,"context_line":"        msg \u003d (\"Multi-backend is not available for at least host \""},{"line_number":112,"context_line":"               \"%(volume_host2)s\") % locals()"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAOn%2F%2FyUg%3D","line":109,"in_reply_to":"AAAAOn%2F%2Fyio%3D","updated":"2013-04-23 14:08:52.000000000","message":"Done","commit_id":"360abe8352d57f9d418d46a502d3a1989622108c"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"452e10ec74364b1af15deefbbc73d951fb002f99","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        msg \u003d (\"The volume was created in the wrong backend: \""},{"line_number":152,"context_line":"               \"%(volume_host3)s\") % locals()"},{"line_number":153,"context_line":"        self.assertNotEqual(volume_host3, volume_host1, msg)"},{"line_number":154,"context_line":"        resp, fetched_volume \u003d self.client.get_volume(self.volume2[\u0027id\u0027])"},{"line_number":155,"context_line":"        volume_host2 \u003d fetched_volume[\u0027os-vol-host-attr:host\u0027]"},{"line_number":156,"context_line":"        msg \u003d (\"The volume was created in the wrong backend: \""},{"line_number":157,"context_line":"               \"%(volume_host3)s\") % locals()"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAOn%2F%2Fyik%3D","line":154,"updated":"2013-04-23 10:40:10.000000000","message":"if only one volume is created, we don\u0027t need of lines from 154 to 158","commit_id":"360abe8352d57f9d418d46a502d3a1989622108c"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"f20adb14b7e26ec5eed839068910ee37cc513121","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        msg \u003d (\"The volume was created in the wrong backend: \""},{"line_number":152,"context_line":"               \"%(volume_host3)s\") % locals()"},{"line_number":153,"context_line":"        self.assertNotEqual(volume_host3, volume_host1, msg)"},{"line_number":154,"context_line":"        resp, fetched_volume \u003d self.client.get_volume(self.volume2[\u0027id\u0027])"},{"line_number":155,"context_line":"        volume_host2 \u003d fetched_volume[\u0027os-vol-host-attr:host\u0027]"},{"line_number":156,"context_line":"        msg \u003d (\"The volume was created in the wrong backend: \""},{"line_number":157,"context_line":"               \"%(volume_host3)s\") % locals()"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAOn%2F%2FyUc%3D","line":154,"in_reply_to":"AAAAOn%2F%2Fyik%3D","updated":"2013-04-23 14:08:52.000000000","message":"Done","commit_id":"360abe8352d57f9d418d46a502d3a1989622108c"},{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"8519f5bdb0c841648893a308385b1b602e746cc9","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        resp, fetched_volume \u003d self.client.get_volume(self.volume2[\u0027id\u0027])"},{"line_number":109,"context_line":"        volume_host2 \u003d fetched_volume[\u0027os-vol-host-attr:host\u0027]"},{"line_number":110,"context_line":"        msg \u003d (\"volume2 was created in the same backend as volume1: \""},{"line_number":111,"context_line":"               \"%(volume_host2)s\") % locals()"},{"line_number":112,"context_line":"        self.assertNotEqual(volume_host2, volume_host1, msg)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAOn%2F%2FyLQ%3D","line":111,"updated":"2013-04-23 15:12:51.000000000","message":"before the final assertion I would also assert volume_host2.split(\"@\") also is \u003e 1 to make sure that both have been correctly setup (eg. in case the backend_name is mistyped in the config file)","commit_id":"50921f1f0edaebcb28f941d241ffc0a646b634fa"}],"tempest/tests/volume/admin/test_volume_multi_backends.py":[{"author":{"_account_id":2064,"name":"Loic Dachary","email":"loic@dachary.org","username":"dachary"},"change_message_id":"694ab9c2e8980a73ef09c2787ce947b364d315d9","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        # create two volumes, checks that they belong to two distinct backends"},{"line_number":57,"context_line":"        # assumption: two empty backends of the same size and same"},{"line_number":58,"context_line":"        # volume_backend_name (cinder.conf) are available."},{"line_number":59,"context_line":"        # volume_backend_name has to be the default value : LVM_iSCSI"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            resp, fetched_volume \u003d self.client.get_volume(self.volume1[\u0027id\u0027])"},{"line_number":62,"context_line":"            volume_host1 \u003d fetched_volume[\u0027os-vol-host-attr:host\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F0hk%3D","line":59,"updated":"2013-03-11 14:20:03.000000000","message":"Unless I\u0027m mistaken, that test would also work with one backend and two hosts since the schduler will, by default, chose the host that is less full. Am I missing something ?","commit_id":"3745d81eb800b144272f1d41eaad3fbcdb1445ea"},{"author":{"_account_id":2064,"name":"Loic Dachary","email":"loic@dachary.org","username":"dachary"},"change_message_id":"cef14ef08cf50b6e0f06187d40c44caf5c9902f8","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        # create two volumes, checks that they belong to two distinct backends"},{"line_number":57,"context_line":"        # assumption: two empty backends of the same size and same"},{"line_number":58,"context_line":"        # volume_backend_name (cinder.conf) are available."},{"line_number":59,"context_line":"        # volume_backend_name has to be the default value : LVM_iSCSI"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            resp, fetched_volume \u003d self.client.get_volume(self.volume1[\u0027id\u0027])"},{"line_number":62,"context_line":"            volume_host1 \u003d fetched_volume[\u0027os-vol-host-attr:host\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2FwaE%3D","line":59,"in_reply_to":"AAAAN3%2F%2F0Tc%3D","updated":"2013-03-13 17:35:52.000000000","message":"Hi Jerome !\n\nYour explanation makes sense. Could you please point me the test that will fail if the multi-backend patch was not applied and the two hosts were configured to use a single backend ?\n\nCheers","commit_id":"3745d81eb800b144272f1d41eaad3fbcdb1445ea"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"0c7f1bf2694179c36585df89c7d1e2cce15f852b","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        # create two volumes, checks that they belong to two distinct backends"},{"line_number":57,"context_line":"        # assumption: two empty backends of the same size and same"},{"line_number":58,"context_line":"        # volume_backend_name (cinder.conf) are available."},{"line_number":59,"context_line":"        # volume_backend_name has to be the default value : LVM_iSCSI"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            resp, fetched_volume \u003d self.client.get_volume(self.volume1[\u0027id\u0027])"},{"line_number":62,"context_line":"            volume_host1 \u003d fetched_volume[\u0027os-vol-host-attr:host\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F0Tc%3D","line":59,"in_reply_to":"AAAAN3%2F%2F0hk%3D","updated":"2013-03-11 16:04:40.000000000","message":"Hi Loïc, thanks for your comment!\n\nI\u0027m not sure to fully understand your point. Can we take an example to discuss on it?\n\nAssumption : multi backend feature is enabled, 2 free LVM volumes on 2 hosts (5G)\n\ncinder.conf of host1:\n* [lvmdriver-1]\n* volume_group \u003d stack-volume\n* volume_backend_name\u003dLVM_iSCSI\n* volume_driver \u003d cinder.volume.drivers.lvm.LVMISCSIDriver\n\ncinder.conf of host2:\n* [lvmdriver-2]\n* volume_group \u003d stack-volume\n* volume_backend_name\u003dLVM_iSCSI\n* volume_driver \u003d cinder.volume.drivers.lvm.LVMISCSIDriver\n\n\nFrom the scheduler point of view, \"one\" backend LVM_iSCSI is available on host1@lvmdriver-1 and host2@lvmdriver-2.\nAs you say, the test should work in that case: if two volumes are created, one should be created on host1@lvmdriver-1 and the other on host2@lvmdriver-2.\n\nDo you agree with this example?\nThanks a lot.","commit_id":"3745d81eb800b144272f1d41eaad3fbcdb1445ea"},{"author":{"_account_id":6828,"name":"jerome-gallard","email":"jerome.david.gallard@gmail.com","username":"jerome-gallard"},"change_message_id":"be4a10894eeb254591c4f3a43edf673154efd5f0","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        # create two volumes, checks that they belong to two distinct backends"},{"line_number":57,"context_line":"        # assumption: two empty backends of the same size and same"},{"line_number":58,"context_line":"        # volume_backend_name (cinder.conf) are available."},{"line_number":59,"context_line":"        # volume_backend_name has to be the default value : LVM_iSCSI"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            resp, fetched_volume \u003d self.client.get_volume(self.volume1[\u0027id\u0027])"},{"line_number":62,"context_line":"            volume_host1 \u003d fetched_volume[\u0027os-vol-host-attr:host\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2FvOA%3D","line":59,"in_reply_to":"AAAAN3%2F%2FwaE%3D","updated":"2013-03-14 13:50:23.000000000","message":"Hi Loïc,\n\nThanks a lot for your comment :)\n\nHummmm... If two hosts are configured without the multi-backend feature, you are absolutely right, the patch will not fail.\n\nExplanation, in that case:\n\nvolume_host1\u003dhost1 AND volume_host2\u003dhost2\n\nSo, as host1 and host2 are not equal, the test will success. This is why I introduced the \"skipIf\" in the case where the multi-backend feature is not enabled.\n\nIn fact, perhaps there is a problem of definition of the test:\n- 1/ does the test has to test the multi-backend feature (so, if the feature is not activated, the test is simply skipped)\n- 2/ does the test has to be more general: whatever the multi-backend is enabled or not, the test should return something \"coherent\"\n\nEffectively, in this patch, I went into the way n°1. Do you think it\u0027s not the good way and n°2 should be better?\n\nPerhaps I missed something in the \"testing philosophy\", so, thanks again for your comments :)","commit_id":"3745d81eb800b144272f1d41eaad3fbcdb1445ea"}]}
