)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d3b22d353a41d964344a59af0518fb0499cb3dd5","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Moves build request_spec in order to use it when a max retry exceeded"},{"line_number":10,"context_line":"exception is raised."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"changes. Lines starting # with \u0027#\u0027 will be ignored, and an empty"},{"line_number":13,"context_line":"message aborts the commit.  # rebase in progress; onto df48534 # You"},{"line_number":14,"context_line":"are currently editing a commit while rebasing branch"},{"line_number":15,"context_line":"\u0027bp/libvirt-real-time\u0027 on \u0027df48534\u0027.  # # Changes to be committed: #"},{"line_number":16,"context_line":"modified: nova/conductor/manager.py # modified:"},{"line_number":17,"context_line":"nova/tests/unit/conductor/test_conductor.py #"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: Ia16b09d259d1c72e9d0af4075f0810a26602f7ad"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7a740942_1a004c33","line":17,"range":{"start_line":12,"start_character":0,"end_line":17,"end_character":45},"updated":"2015-12-14 13:33:50.000000000","message":"fix that and I\u0027m okay","commit_id":"9ad61bb2d3b686bde930bbd37d3c6bb79031b592"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"4f76ce3aa1ca30debe4ba50013b19fde3b1e5417","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Moves build request_spec in order to use it when a max retry exceeded"},{"line_number":10,"context_line":"exception is raised."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ia16b09d259d1c72e9d0af4075f0810a26602f7ad"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3a7e1126_ae0dd03f","line":11,"updated":"2015-12-17 15:17:41.000000000","message":"Really we should have a bug report, so users can find this fix.","commit_id":"bf88c5efd3ba3174a39e227c73bf0e5c44b7b56c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0ee621d3c2915bb6475da3a100541480a3bf68d2","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Moves build request_spec in order to use it when a max retry exceeded"},{"line_number":10,"context_line":"exception is raised."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ia16b09d259d1c72e9d0af4075f0810a26602f7ad"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3a7e1126_81722548","line":11,"in_reply_to":"3a7e1126_ae0dd03f","updated":"2015-12-17 15:22:52.000000000","message":"Ah, so I see this was regressed here:\nhttps://review.openstack.org/#q,I19bad96d997f61958e32f6254bc4a428395bc7ec,n,z\n\nWhich did get released as part of mitaka-1","commit_id":"bf88c5efd3ba3174a39e227c73bf0e5c44b7b56c"}],"nova/conductor/manager.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"6ac2098febd04f52b1717dfca5a708e7541fc6e5","unresolved":false,"context_lines":[{"line_number":350,"context_line":"            flavor \u003d objects.Flavor.get_by_id(context, flavor[\u0027id\u0027])"},{"line_number":351,"context_line":"            filter_properties \u003d dict(filter_properties, instance_type\u003dflavor)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        request_spec \u003d scheduler_utils.build_request_spec("},{"line_number":354,"context_line":"            context, image, instances)"},{"line_number":355,"context_line":"        try:"},{"line_number":356,"context_line":"            # check retry policy. Rather ugly use of instances[0]..."},{"line_number":357,"context_line":"            # but if we\u0027ve exceeded max retries... then we really only"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_55830503","line":354,"range":{"start_line":353,"start_character":23,"end_line":354,"end_character":38},"updated":"2015-12-14 13:48:15.000000000","message":"This does a lot of stuff including possible db work, and we want to be catching exceptions if it fails and error out the instance I would say.\n\nWe want to refactor the exception handler rather than do this IMHO.","commit_id":"c21a36681e68a07f3917cfb2df4d77885bf3822c"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"75849b58202f38026f669157cf864af31b8d02c4","unresolved":false,"context_lines":[{"line_number":351,"context_line":"            filter_properties \u003d dict(filter_properties, instance_type\u003dflavor)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        request_spec \u003d scheduler_utils.build_request_spec("},{"line_number":354,"context_line":"            context, image, instances)"},{"line_number":355,"context_line":"        try:"},{"line_number":356,"context_line":"            # check retry policy. Rather ugly use of instances[0]..."},{"line_number":357,"context_line":"            # but if we\u0027ve exceeded max retries... then we really only"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_d05b8320","line":354,"in_reply_to":"7a740942_55830503","updated":"2015-12-14 14:04:29.000000000","message":"Can you be more specific about how you think we should refactor exception handler; Is your point is to catch any exceptions from request_spec and do a return like\n\n  try\n    request_spec \u003d ...\n  except:\n    return\n\n?\n\nI can see several points where we call database without to catch exceptions I was expected that this method is called in a safer manner which catch unexpected exceptions anyway.","commit_id":"c21a36681e68a07f3917cfb2df4d77885bf3822c"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"2e9238290599ff4f75b53cf795e15cbd882d5ef3","unresolved":false,"context_lines":[{"line_number":351,"context_line":"            filter_properties \u003d dict(filter_properties, instance_type\u003dflavor)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        request_spec \u003d scheduler_utils.build_request_spec("},{"line_number":354,"context_line":"            context, image, instances)"},{"line_number":355,"context_line":"        try:"},{"line_number":356,"context_line":"            # check retry policy. Rather ugly use of instances[0]..."},{"line_number":357,"context_line":"            # but if we\u0027ve exceeded max retries... then we really only"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_aea693a8","line":354,"in_reply_to":"7a740942_d05b8320","updated":"2015-12-14 15:21:13.000000000","message":"Regardless of other places where this is happening, if we move it out of here we might introduce a regression in current behaviour. Before we\u0027d error out the instance which will be visible to the user, with your change we just crash the green-thread leaving the instance in BUILDING (or whichever) state which is annoying in this very commonly used path.","commit_id":"c21a36681e68a07f3917cfb2df4d77885bf3822c"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"bb904c2c3908b822203255a89159164f40b013cf","unresolved":false,"context_lines":[{"line_number":349,"context_line":"            # is receiving an object, so lookup the flavor to ensure this."},{"line_number":350,"context_line":"            flavor \u003d objects.Flavor.get_by_id(context, flavor[\u0027id\u0027])"},{"line_number":351,"context_line":"            filter_properties \u003d dict(filter_properties, instance_type\u003dflavor)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        request_spec \u003d scheduler_utils.build_request_spec("},{"line_number":354,"context_line":"            context, image, instances)"},{"line_number":355,"context_line":"        try:"},{"line_number":356,"context_line":"            # check retry policy. Rather ugly use of instances[0]..."},{"line_number":357,"context_line":"            # but if we\u0027ve exceeded max retries... then we really only"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_bae9f5e7","line":354,"range":{"start_line":352,"start_character":0,"end_line":354,"end_character":38},"updated":"2015-12-14 14:18:42.000000000","message":"See comment on previous patch - this should still be inside try-except imho","commit_id":"f1dbcafc0a67d057e5b2f9c9b772e21184bd6587"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"82d86a6070c19e4d707b7df5d45c84e569a5aefb","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        request_spec \u003d {}"},{"line_number":354,"context_line":"        try:"},{"line_number":355,"context_line":"            request_spec \u003d scheduler_utils.build_request_spec("},{"line_number":356,"context_line":"                context, image, instances)"},{"line_number":357,"context_line":"            # check retry policy. Rather ugly use of instances[0]..."},{"line_number":358,"context_line":"            # but if we\u0027ve exceeded max retries... then we really only"},{"line_number":359,"context_line":"            # have a single instance."}],"source_content_type":"text/x-python","patch_set":5,"id":"5a710552_b05ed674","line":356,"updated":"2015-12-14 17:47:18.000000000","message":"This doesn\u0027t need to be moved anymore to solve the unbound local error. If populate_retry raises an exception, the _set_vm_state_and_notify() call will now have a value for request_spec.","commit_id":"20a75d2b3e6735f901975a93a3cf8556bc645de2"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d3c614710566bbd7f4be7faa1e05de6805ab87b5","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        request_spec \u003d {}"},{"line_number":354,"context_line":"        try:"},{"line_number":355,"context_line":"            request_spec \u003d scheduler_utils.build_request_spec("},{"line_number":356,"context_line":"                context, image, instances)"},{"line_number":357,"context_line":"            # check retry policy. Rather ugly use of instances[0]..."},{"line_number":358,"context_line":"            # but if we\u0027ve exceeded max retries... then we really only"},{"line_number":359,"context_line":"            # have a single instance."}],"source_content_type":"text/x-python","patch_set":5,"id":"5a710552_f4f8b27e","line":356,"in_reply_to":"5a710552_a0daf776","updated":"2015-12-15 08:01:22.000000000","message":"You are talking about regressions and behavior changes without to explain them. populate_retry is only doing arithmetic without to interact with third parts and can throw an *expected* exception where \u0027build_request_spec()\u0027 not. This change is in relation with that bug since we want to initialize request_spec soon as possible since it\u0027s used in case where that *expected* exception is raised.\n\nBUT I will revert that part if that can make thing moving forward.","commit_id":"20a75d2b3e6735f901975a93a3cf8556bc645de2"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"c9d665c097e14f0a81f652298aac9db13cc0cb15","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        request_spec \u003d {}"},{"line_number":354,"context_line":"        try:"},{"line_number":355,"context_line":"            request_spec \u003d scheduler_utils.build_request_spec("},{"line_number":356,"context_line":"                context, image, instances)"},{"line_number":357,"context_line":"            # check retry policy. Rather ugly use of instances[0]..."},{"line_number":358,"context_line":"            # but if we\u0027ve exceeded max retries... then we really only"},{"line_number":359,"context_line":"            # have a single instance."}],"source_content_type":"text/x-python","patch_set":5,"id":"5a710552_f39f88b2","line":356,"in_reply_to":"5a710552_b05ed674","updated":"2015-12-14 17:52:31.000000000","message":"IMHO we should always have \u0027request_spec\u0027 initialized so it makes more sense to have \u0027request_spec\u0027 well initialized during an expected workflow when a max retry exception is raised, so set_vm_state_and_notify can takes advantage of it.","commit_id":"20a75d2b3e6735f901975a93a3cf8556bc645de2"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"f7c61928b6ecef6b6099459e5212460c8aff7244","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        request_spec \u003d {}"},{"line_number":354,"context_line":"        try:"},{"line_number":355,"context_line":"            request_spec \u003d scheduler_utils.build_request_spec("},{"line_number":356,"context_line":"                context, image, instances)"},{"line_number":357,"context_line":"            # check retry policy. Rather ugly use of instances[0]..."},{"line_number":358,"context_line":"            # but if we\u0027ve exceeded max retries... then we really only"},{"line_number":359,"context_line":"            # have a single instance."}],"source_content_type":"text/x-python","patch_set":5,"id":"5a710552_a0daf776","line":356,"in_reply_to":"5a710552_f39f88b2","updated":"2015-12-14 21:49:42.000000000","message":"But as Nikola pointed out, this is changing the behavior, and might introduce regressions. The bug is simply that the name \u0027request_spec\u0027 wasn\u0027t in scope when the populate_retry() raised an exception. Adding line 353 fixes that. This change doesn\u0027t fix the bug, but changes the behavior.","commit_id":"20a75d2b3e6735f901975a93a3cf8556bc645de2"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"0c5b1db9f05c789a464c606e9fd451be0d2f518f","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        request_spec \u003d {}"},{"line_number":354,"context_line":"        try:"},{"line_number":355,"context_line":"            request_spec \u003d scheduler_utils.build_request_spec("},{"line_number":356,"context_line":"                context, image, instances)"},{"line_number":357,"context_line":"            # check retry policy. Rather ugly use of instances[0]..."},{"line_number":358,"context_line":"            # but if we\u0027ve exceeded max retries... then we really only"},{"line_number":359,"context_line":"            # have a single instance."}],"source_content_type":"text/x-python","patch_set":5,"id":"5a710552_6d3a9638","line":356,"in_reply_to":"5a710552_f4f8b27e","updated":"2015-12-15 16:06:47.000000000","message":"I didn\u0027t mean to imply that this would break anything. In general, a patchset should not have changes that are not needed to solve the problem at hand. In this case, changing the order of the populate_retry() and build_request_spec() are not needed to fix the issue, so there is no good reason to do so.","commit_id":"20a75d2b3e6735f901975a93a3cf8556bc645de2"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"d93631d80a3b21b134147fa96b63604b9107c2f0","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        request_spec \u003d {}"},{"line_number":354,"context_line":"        try:"},{"line_number":355,"context_line":"            request_spec \u003d scheduler_utils.build_request_spec("},{"line_number":356,"context_line":"                context, image, instances)"},{"line_number":357,"context_line":"            # check retry policy. Rather ugly use of instances[0]..."},{"line_number":358,"context_line":"            # but if we\u0027ve exceeded max retries... then we really only"},{"line_number":359,"context_line":"            # have a single instance."}],"source_content_type":"text/x-python","patch_set":5,"id":"5a710552_5fd991f2","line":356,"in_reply_to":"5a710552_f4f8b27e","updated":"2015-12-15 12:25:47.000000000","message":"Yeah I don\u0027t think this has the same problem as previous PSs do. as long as build_request_spec is inside the try block it should be fine.\n\nThat said - there is no reason to shuffle it around so might as well put it back to move things forward - it\u0027s a simple enough change.","commit_id":"20a75d2b3e6735f901975a93a3cf8556bc645de2"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"678df9c49d1d6c376048b92e284ee8390c95744f","unresolved":false,"context_lines":[{"line_number":358,"context_line":"            scheduler_utils.populate_retry("},{"line_number":359,"context_line":"                filter_properties, instances[0].uuid)"},{"line_number":360,"context_line":"            request_spec \u003d scheduler_utils.build_request_spec("},{"line_number":361,"context_line":"                context, image, instances)"},{"line_number":362,"context_line":"            hosts \u003d self._schedule_instances("},{"line_number":363,"context_line":"                    context, request_spec, filter_properties)"},{"line_number":364,"context_line":"        except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_48a0e79f","line":361,"updated":"2015-12-15 16:32:34.000000000","message":"I really hate to be nit-picky, but this is an unrelated whitespace change. It also makes the indentation of the continued line inconsistent with the following line.","commit_id":"668531e197b39442b3ac1884bc865cfaea1b3c94"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"cca13965ee34d912924b768786419c93da0d1e31","unresolved":false,"context_lines":[{"line_number":358,"context_line":"            scheduler_utils.populate_retry("},{"line_number":359,"context_line":"                filter_properties, instances[0].uuid)"},{"line_number":360,"context_line":"            request_spec \u003d scheduler_utils.build_request_spec("},{"line_number":361,"context_line":"                context, image, instances)"},{"line_number":362,"context_line":"            hosts \u003d self._schedule_instances("},{"line_number":363,"context_line":"                    context, request_spec, filter_properties)"},{"line_number":364,"context_line":"        except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a710552_0b0659ce","line":361,"in_reply_to":"5a710552_48a0e79f","updated":"2015-12-15 16:48:02.000000000","message":"Yes this change is not necessary.","commit_id":"668531e197b39442b3ac1884bc865cfaea1b3c94"}],"nova/tests/unit/conductor/test_conductor.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ac0d33d43c5bb74f469a188c6d89c274c0a1cf58","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        scheduler_utils.build_request_spec(self.context, image,"},{"line_number":531,"context_line":"                mox.IgnoreArg()).AndReturn(spec)"},{"line_number":532,"context_line":"        filter_properties \u003d {\u0027retry\u0027: {\u0027num_attempts\u0027: 10, \u0027hosts\u0027: []}}"},{"line_number":533,"context_line":"        scheduler_utils.populate_retry("},{"line_number":534,"context_line":"            filter_properties, instances[0].uuid)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        updates \u003d {\u0027vm_state\u0027: vm_states.ERROR, \u0027task_state\u0027: None}"},{"line_number":537,"context_line":"        for instance in instances:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_35a3d901","line":534,"range":{"start_line":533,"start_character":0,"end_line":534,"end_character":49},"updated":"2015-12-14 13:41:10.000000000","message":"I don\u0027t see it actually raising MaxRetriesExceeded so you don\u0027t test it correctly, right?","commit_id":"c21a36681e68a07f3917cfb2df4d77885bf3822c"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"fe9856747e39e00255b6cfb08e23200ca79cf2b1","unresolved":false,"context_lines":[{"line_number":531,"context_line":"                mox.IgnoreArg()).AndReturn(spec)"},{"line_number":532,"context_line":"        filter_properties \u003d {\u0027retry\u0027: {\u0027num_attempts\u0027: 10, \u0027hosts\u0027: []}}"},{"line_number":533,"context_line":"        scheduler_utils.populate_retry("},{"line_number":534,"context_line":"            filter_properties, instances[0].uuid)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        updates \u003d {\u0027vm_state\u0027: vm_states.ERROR, \u0027task_state\u0027: None}"},{"line_number":537,"context_line":"        for instance in instances:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_75a3a1b2","line":534,"in_reply_to":"7a740942_35a3d901","updated":"2015-12-14 13:47:21.000000000","message":"Hum yes... you can see line 532 num_attempts to 10 which is more than max_retry.\n\nBut actually since i use StubOutWithMock this method should to do nothing... So the exception raised is probably not what we are expecting.\n\nAnyway will see that...","commit_id":"c21a36681e68a07f3917cfb2df4d77885bf3822c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"4f76ce3aa1ca30debe4ba50013b19fde3b1e5417","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        instances \u003d [fake_instance.fake_instance_obj(self.context)]"},{"line_number":523,"context_line":"        image \u003d {\u0027fake-data\u0027: \u0027should_pass_silently\u0027}"},{"line_number":524,"context_line":"        exception \u003d exc.MaxRetriesExceeded(reason\u003d\"Too many try\")"},{"line_number":525,"context_line":"        self.mox.StubOutWithMock(scheduler_utils, \u0027populate_retry\u0027)"},{"line_number":526,"context_line":"        self.mox.StubOutWithMock(scheduler_utils, \u0027set_vm_state_and_notify\u0027)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        filter_properties \u003d {\u0027retry\u0027: {\u0027num_attempts\u0027: 10, \u0027hosts\u0027: []}}"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_ee443875","line":525,"updated":"2015-12-17 15:17:41.000000000","message":"Honestly, I don\u0027t really want any more tests using mox being added.","commit_id":"bf88c5efd3ba3174a39e227c73bf0e5c44b7b56c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1a7112941fc4180d9557b25488a87792f88c3d0a","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        instances \u003d [fake_instance.fake_instance_obj(self.context)]"},{"line_number":523,"context_line":"        image \u003d {\u0027fake-data\u0027: \u0027should_pass_silently\u0027}"},{"line_number":524,"context_line":"        exception \u003d exc.MaxRetriesExceeded(reason\u003d\"Too many try\")"},{"line_number":525,"context_line":"        self.mox.StubOutWithMock(scheduler_utils, \u0027populate_retry\u0027)"},{"line_number":526,"context_line":"        self.mox.StubOutWithMock(scheduler_utils, \u0027set_vm_state_and_notify\u0027)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        filter_properties \u003d {\u0027retry\u0027: {\u0027num_attempts\u0027: 10, \u0027hosts\u0027: []}}"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a7e1126_8147854a","line":525,"in_reply_to":"3a7e1126_ee443875","updated":"2015-12-17 15:18:48.000000000","message":"Yeah, we should be writing new tests in mock for py34 to work, mox is racy with py34 and our blacklist is growing because of it.","commit_id":"bf88c5efd3ba3174a39e227c73bf0e5c44b7b56c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"29552ce68e3f5e0b7043457b30f894320e175f16","unresolved":false,"context_lines":[{"line_number":526,"context_line":""},{"line_number":527,"context_line":"        @mock.patch.object(scheduler_utils, \u0027set_vm_state_and_notify\u0027)"},{"line_number":528,"context_line":"        @mock.patch.object(scheduler_utils, \u0027populate_retry\u0027)"},{"line_number":529,"context_line":"        @mock.patch(\u0027nova.utils.spawn_n\u0027)"},{"line_number":530,"context_line":"        def _test(spawn_mock, populate_retry, set_vm_state_and_notify):"},{"line_number":531,"context_line":"            # NOTE(gibi): LocalComputeTaskAPI use eventlet spawn that"},{"line_number":532,"context_line":"            # makes mocking hard so use direct call instead."}],"source_content_type":"text/x-python","patch_set":10,"id":"3a7e1126_46d17d56","line":529,"updated":"2015-12-18 12:19:15.000000000","message":"Nit: I prefer these being added the the main test method myself, to follow the more usual pattern.","commit_id":"04b7c27dfb446cfce508db32643bed3220b117b1"}]}
