)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"551f3f751b4289a41a699dd1c0ba76b94b75c327","unresolved":false,"context_lines":[{"line_number":10,"context_line":"exception whenever we try to do such queries, even if they would have"},{"line_number":11,"context_line":"succeeded with MySQL."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"That way, even if we are not exerting a specific code path in our CI, it"},{"line_number":14,"context_line":"will still fail when deploying devstack with MySQL DB engine if we go"},{"line_number":15,"context_line":"through that path."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a122d0e_3ff39074","line":13,"range":{"start_line":13,"start_character":29,"end_line":13,"end_character":37},"updated":"2016-04-28 19:56:16.000000000","message":"/exerting/asserting/ ?","commit_id":"2986a4f6e3e3902c6b1ad5568b7bc2fcab39ef0e"}],"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"551f3f751b4289a41a699dd1c0ba76b94b75c327","unresolved":false,"context_lines":[{"line_number":4506,"context_line":"        elif isinstance(field, six.string_types):"},{"line_number":4507,"context_line":"            used_models.add(model)"},{"line_number":4508,"context_line":"        else:"},{"line_number":4509,"context_line":"            raise exception.DBError(\u0027Unknown field type, must be string or \u0027"},{"line_number":4510,"context_line":"                                    \u0027ORM field.\u0027)"},{"line_number":4511,"context_line":"        if len(used_models) \u003e 1:"},{"line_number":4512,"context_line":"            raise exception.DBError(\u0027Error in query, multitable updates are \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_9fcf4428","line":4509,"range":{"start_line":4509,"start_character":35,"end_line":4509,"end_character":37},"updated":"2016-04-28 19:56:16.000000000","message":"Shouldn\u0027t this be DBError(reason\u003d_(\u0027Unknown....\u0027))","commit_id":"2986a4f6e3e3902c6b1ad5568b7bc2fcab39ef0e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e0165477642bdca7570f7ded0081fa1733f0a38a","unresolved":false,"context_lines":[{"line_number":4506,"context_line":"        elif isinstance(field, six.string_types):"},{"line_number":4507,"context_line":"            used_models.add(model)"},{"line_number":4508,"context_line":"        else:"},{"line_number":4509,"context_line":"            raise exception.DBError(\u0027Unknown field type, must be string or \u0027"},{"line_number":4510,"context_line":"                                    \u0027ORM field.\u0027)"},{"line_number":4511,"context_line":"        if len(used_models) \u003e 1:"},{"line_number":4512,"context_line":"            raise exception.DBError(\u0027Error in query, multitable updates are \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_ebc15a4f","line":4509,"range":{"start_line":4509,"start_character":35,"end_line":4509,"end_character":37},"in_reply_to":"1a122d0e_9fcf4428","updated":"2016-04-28 22:07:59.000000000","message":"YES IT SHOULD!!!\n\nI did it last night and apparently my brain was not really working...  :-(","commit_id":"2986a4f6e3e3902c6b1ad5568b7bc2fcab39ef0e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"551f3f751b4289a41a699dd1c0ba76b94b75c327","unresolved":false,"context_lines":[{"line_number":4509,"context_line":"            raise exception.DBError(\u0027Unknown field type, must be string or \u0027"},{"line_number":4510,"context_line":"                                    \u0027ORM field.\u0027)"},{"line_number":4511,"context_line":"        if len(used_models) \u003e 1:"},{"line_number":4512,"context_line":"            raise exception.DBError(\u0027Error in query, multitable updates are \u0027"},{"line_number":4513,"context_line":"                                    \u0027not supported.\u0027)"},{"line_number":4514,"context_line":""},{"line_number":4515,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_7fd228d2","line":4512,"updated":"2016-04-28 19:56:16.000000000","message":"Same.","commit_id":"2986a4f6e3e3902c6b1ad5568b7bc2fcab39ef0e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8881c02266594946c89dac8960f62fd972086360","unresolved":false,"context_lines":[{"line_number":4584,"context_line":"                                    \u0027string or ORM field.\u0027)"},{"line_number":4585,"context_line":"        if len(used_models) \u003e 1:"},{"line_number":4586,"context_line":"            raise exception.DBError(reason\u003d\u0027Error in query, multitable \u0027"},{"line_number":4587,"context_line":"                                    \u0027updates are not supported.\u0027)"},{"line_number":4588,"context_line":""},{"line_number":4589,"context_line":""},{"line_number":4590,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_acaf1ce2","line":4587,"updated":"2016-05-18 15:40:26.000000000","message":"IMO this should raise an exception like DBProgrammingError which makes it very clear that this is a bug and not just a random DB failure.","commit_id":"42ec476ed7fda83175b6ad275eb27b7d0b6ef16f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"941a4ee25918d505da9c5c4dcc330a60cef67c4c","unresolved":false,"context_lines":[{"line_number":4584,"context_line":"                                    \u0027string or ORM field.\u0027)"},{"line_number":4585,"context_line":"        if len(used_models) \u003e 1:"},{"line_number":4586,"context_line":"            raise exception.DBError(reason\u003d\u0027Error in query, multitable \u0027"},{"line_number":4587,"context_line":"                                    \u0027updates are not supported.\u0027)"},{"line_number":4588,"context_line":""},{"line_number":4589,"context_line":""},{"line_number":4590,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_dec5c23c","line":4587,"in_reply_to":"bab6814e_acaf1ce2","updated":"2016-05-19 08:16:52.000000000","message":"Well, I wanted to leave the exception class as a generic one so we can reuse it if needed (we have enough different exceptions as it is) and since this is not something the user can recover from I didn\u0027t see the point in making it very specific.  I thought the message was good enough, since it\u0027s saying that the error is in the query because something is not supported.\n\nSince you think this could be a cause of problems I\u0027ll change it.","commit_id":"42ec476ed7fda83175b6ad275eb27b7d0b6ef16f"}],"cinder/exception.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"164b41ec2537f9453b38b9b231e922f58fe79535","unresolved":false,"context_lines":[{"line_number":1114,"context_line":"    message \u003d _(\"Google Cloud Storage oauth2 failure: %(reason)s\")"},{"line_number":1115,"context_line":""},{"line_number":1116,"context_line":""},{"line_number":1117,"context_line":"class DBError(CinderException):"},{"line_number":1118,"context_line":"    message \u003d _(\u0027DB layer error: %(reason)s\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_d9f1e602","line":1118,"range":{"start_line":1117,"start_character":0,"end_line":1118,"end_character":45},"updated":"2016-04-28 14:14:53.000000000","message":"Can we get that to the general exceptions? Looks like on the bottom of the file we have driver-specific ones.","commit_id":"b89f342c0362e36cd9a9af0e00a245f581eb4705"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"661af942278b1084be1a5cb7994c486fb7565e5c","unresolved":false,"context_lines":[{"line_number":1114,"context_line":"    message \u003d _(\"Google Cloud Storage oauth2 failure: %(reason)s\")"},{"line_number":1115,"context_line":""},{"line_number":1116,"context_line":""},{"line_number":1117,"context_line":"class DBError(CinderException):"},{"line_number":1118,"context_line":"    message \u003d _(\u0027DB layer error: %(reason)s\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_1ff17495","line":1118,"range":{"start_line":1117,"start_character":0,"end_line":1118,"end_character":45},"in_reply_to":"1a122d0e_d9f1e602","updated":"2016-04-28 19:52:05.000000000","message":"Sure we can.  :-)","commit_id":"b89f342c0362e36cd9a9af0e00a245f581eb4705"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8881c02266594946c89dac8960f62fd972086360","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"class DBError(CinderException):"},{"line_number":153,"context_line":"    message \u003d _(\u0027DB layer error: %(reason)s\u0027)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"class NotAuthorized(CinderException):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_2cd04c53","line":153,"updated":"2016-05-18 15:40:26.000000000","message":"Or say something more to that effect in the message prefix, but then the class name not great, since it\u0027s pretty generic.","commit_id":"42ec476ed7fda83175b6ad275eb27b7d0b6ef16f"}],"cinder/tests/unit/objects/test_base.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"164b41ec2537f9453b38b9b231e922f58fe79535","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        # Check that the volume in the DB has also been updated"},{"line_number":580,"context_line":"        self._check_volume(volume, \u0027deleting\u0027, expected_size, True)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"    def test_conditional_update_multitable_fail(self):"},{"line_number":583,"context_line":"        volume \u003d self._create_volume()"},{"line_number":584,"context_line":"        self.assertRaises(exception.DBError, volume.conditional_update,"},{"line_number":585,"context_line":"                          {\u0027status\u0027: \u0027deleting\u0027,"},{"line_number":586,"context_line":"                           objects.Snapshot.model.status: \u0027available\u0027},"},{"line_number":587,"context_line":"                          {\u0027status\u0027: \u0027available\u0027})"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    def test_conditional_update_multitable_fail_fields_different_models(self):"},{"line_number":590,"context_line":"        volume \u003d self._create_volume()"},{"line_number":591,"context_line":"        self.assertRaises(exception.DBError, volume.conditional_update,"},{"line_number":592,"context_line":"                          {objects.Backup.model.status: \u0027available\u0027,"},{"line_number":593,"context_line":"                           objects.Snapshot.model.status: \u0027available\u0027})"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    def test_conditional_update_not_multitable(self):"},{"line_number":596,"context_line":"        volume \u003d self._create_volume()"},{"line_number":597,"context_line":"        with mock.patch(\u0027cinder.db.sqlalchemy.api._create_facade_lazily\u0027) as m:"},{"line_number":598,"context_line":"            res \u003d volume.conditional_update("},{"line_number":599,"context_line":"                {objects.Volume.model.status: \u0027deleting\u0027,"},{"line_number":600,"context_line":"                 objects.Volume.model.size: 12}, reflect_changes\u003dFalse)"},{"line_number":601,"context_line":"            self.assertTrue(res)"},{"line_number":602,"context_line":"            self.assertTrue(m.called)"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"class TestCinderDictObject(test_objects.BaseObjectsTestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_39ebbadd","line":602,"range":{"start_line":582,"start_character":0,"end_line":602,"end_character":37},"updated":"2016-04-28 14:14:53.000000000","message":"Should we write these tests in DB API tests to make it easier to copy the code to Manila?\n\n(no, I haven\u0027t evaluated if it\u0027s easy or even possible, so that\u0027s just a question).","commit_id":"b89f342c0362e36cd9a9af0e00a245f581eb4705"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"661af942278b1084be1a5cb7994c486fb7565e5c","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        # Check that the volume in the DB has also been updated"},{"line_number":580,"context_line":"        self._check_volume(volume, \u0027deleting\u0027, expected_size, True)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"    def test_conditional_update_multitable_fail(self):"},{"line_number":583,"context_line":"        volume \u003d self._create_volume()"},{"line_number":584,"context_line":"        self.assertRaises(exception.DBError, volume.conditional_update,"},{"line_number":585,"context_line":"                          {\u0027status\u0027: \u0027deleting\u0027,"},{"line_number":586,"context_line":"                           objects.Snapshot.model.status: \u0027available\u0027},"},{"line_number":587,"context_line":"                          {\u0027status\u0027: \u0027available\u0027})"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"    def test_conditional_update_multitable_fail_fields_different_models(self):"},{"line_number":590,"context_line":"        volume \u003d self._create_volume()"},{"line_number":591,"context_line":"        self.assertRaises(exception.DBError, volume.conditional_update,"},{"line_number":592,"context_line":"                          {objects.Backup.model.status: \u0027available\u0027,"},{"line_number":593,"context_line":"                           objects.Snapshot.model.status: \u0027available\u0027})"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    def test_conditional_update_not_multitable(self):"},{"line_number":596,"context_line":"        volume \u003d self._create_volume()"},{"line_number":597,"context_line":"        with mock.patch(\u0027cinder.db.sqlalchemy.api._create_facade_lazily\u0027) as m:"},{"line_number":598,"context_line":"            res \u003d volume.conditional_update("},{"line_number":599,"context_line":"                {objects.Volume.model.status: \u0027deleting\u0027,"},{"line_number":600,"context_line":"                 objects.Volume.model.size: 12}, reflect_changes\u003dFalse)"},{"line_number":601,"context_line":"            self.assertTrue(res)"},{"line_number":602,"context_line":"            self.assertTrue(m.called)"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"class TestCinderDictObject(test_objects.BaseObjectsTestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_df289ce4","line":602,"range":{"start_line":582,"start_character":0,"end_line":602,"end_character":37},"in_reply_to":"1a122d0e_39ebbadd","updated":"2016-04-28 19:52:05.000000000","message":"We have all conditional update tests here because the original idea for Cinder is that we will only use them from the OVO, so at this point I don\u0027t think it makes sense to move it to anywhere else.\n\nI will look at the best way to implement conditional updates in Manila, but I don\u0027t want that to affect Cinder at this point.","commit_id":"b89f342c0362e36cd9a9af0e00a245f581eb4705"}]}
