)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7b4bd1ffc2dbd8593934a73f44703603f24fe31b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"PatchSet 2: Implemented AopFixture to notify db changes to the main"},{"line_number":30,"context_line":"functional test greenthread, it is critical to ComputeFilter enabling."},{"line_number":31,"context_line":"And the main functional test thread no longer need to do polling to wait"},{"line_number":32,"context_line":"for db updates."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Change-Id: I9ad0822933321ed7f42ad21b99b2dbe46c8aa2dd"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ba0121b8_477778d4","line":32,"updated":"2016-03-28 17:03:55.000000000","message":"No need to list patch history like this. That\u0027s what git log is for :) Please remove and only put in the commit message what is relevant for this particular commit.","commit_id":"61aec9e042b574591ad6e2d4a8fb2d139838db05"}],"nova/tests/fixtures.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7b4bd1ffc2dbd8593934a73f44703603f24fe31b","unresolved":false,"context_lines":[{"line_number":428,"context_line":""},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"class AopFixture(fixtures.Fixture):"},{"line_number":431,"context_line":"    \"\"\"Patch a method with AOP\"\"\""},{"line_number":432,"context_line":"    def aop_wrapper(self, func):"},{"line_number":433,"context_line":"        def aop_wrapped(*args, **kwargs):"},{"line_number":434,"context_line":"            if not self.after and self.evt:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_87819092","line":431,"updated":"2016-03-28 17:03:55.000000000","message":"Aspect-oriented programming is not necessarily something most readers of this code will be familiar with. You may want to spell out AOP and explain why you are using it here.","commit_id":"61aec9e042b574591ad6e2d4a8fb2d139838db05"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"e7b930371d1302af62dc5910a187c005e1ea81ee","unresolved":false,"context_lines":[{"line_number":428,"context_line":""},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"class AopFixture(fixtures.Fixture):"},{"line_number":431,"context_line":"    \"\"\"Patch a method with AOP\"\"\""},{"line_number":432,"context_line":"    def aop_wrapper(self, func):"},{"line_number":433,"context_line":"        def aop_wrapped(*args, **kwargs):"},{"line_number":434,"context_line":"            if not self.after and self.evt:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_7fa3119f","line":431,"in_reply_to":"ba0121b8_87819092","updated":"2016-03-29 03:08:13.000000000","message":"Maybe InspectFixture is a much better name.","commit_id":"61aec9e042b574591ad6e2d4a8fb2d139838db05"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7b4bd1ffc2dbd8593934a73f44703603f24fe31b","unresolved":false,"context_lines":[{"line_number":443,"context_line":"            return ret"},{"line_number":444,"context_line":"        return aop_wrapped"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def __init__(self, name, after\u003dTrue):"},{"line_number":447,"context_line":"        self.after \u003d after"},{"line_number":448,"context_line":"        self.name \u003d name"},{"line_number":449,"context_line":"        self.evt \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_677efcaf","line":446,"updated":"2016-03-28 17:03:55.000000000","message":"A docstring is really needed here. What is this fixture actually doing __import__\u0027ing modules in the constructor here? The coupling of imports here with the setup of an event-driven trigger in the same fixture is troubling actually. Is there any way to separate out the event notification from this import stuff?","commit_id":"61aec9e042b574591ad6e2d4a8fb2d139838db05"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"e7b930371d1302af62dc5910a187c005e1ea81ee","unresolved":false,"context_lines":[{"line_number":443,"context_line":"            return ret"},{"line_number":444,"context_line":"        return aop_wrapped"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def __init__(self, name, after\u003dTrue):"},{"line_number":447,"context_line":"        self.after \u003d after"},{"line_number":448,"context_line":"        self.name \u003d name"},{"line_number":449,"context_line":"        self.evt \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_7fcaf150","line":446,"in_reply_to":"ba0121b8_677efcaf","updated":"2016-03-29 03:08:13.000000000","message":"Yes, it\u0027s complicated for readers by putting the two things together. I\u0027ll separate them.","commit_id":"61aec9e042b574591ad6e2d4a8fb2d139838db05"}],"nova/tests/functional/test_scheduler.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7b4bd1ffc2dbd8593934a73f44703603f24fe31b","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        # down.  But if we setup a polling to query db maybe every 0.2"},{"line_number":115,"context_line":"        # secondes, it will make funcional tests run slower. This logic is to"},{"line_number":116,"context_line":"        # inject events to notify functional tests that the compute service is"},{"line_number":117,"context_line":"        # ready."},{"line_number":118,"context_line":"        with event_timeout.Timeout("},{"line_number":119,"context_line":"                timeout,"},{"line_number":120,"context_line":"                RuntimeError(\"Cannot confirm whether compute service \""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_277404ce","line":117,"updated":"2016-03-28 17:03:55.000000000","message":"If your goal is to reduce the amount of setup or polling time that the functional tests currently take, then how about adding the event-driven fixture/check as a separate patch instead of adding it in this patch along with a brand new SchedulerTestBase? I don\u0027t actually see how this new SchedulerTestBase does anything differently from the main API-based functional test base class...","commit_id":"61aec9e042b574591ad6e2d4a8fb2d139838db05"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"e7b930371d1302af62dc5910a187c005e1ea81ee","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        # down.  But if we setup a polling to query db maybe every 0.2"},{"line_number":115,"context_line":"        # secondes, it will make funcional tests run slower. This logic is to"},{"line_number":116,"context_line":"        # inject events to notify functional tests that the compute service is"},{"line_number":117,"context_line":"        # ready."},{"line_number":118,"context_line":"        with event_timeout.Timeout("},{"line_number":119,"context_line":"                timeout,"},{"line_number":120,"context_line":"                RuntimeError(\"Cannot confirm whether compute service \""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_9fa7054f","line":117,"in_reply_to":"ba0121b8_277404ce","updated":"2016-03-29 03:08:13.000000000","message":"The SchedulerTestBase is aiming to be the base class of all scheduler functional tests, because they share the common goal to test the sanity of schedule results(i.e. the sanity of instance-placement and resource-consumption). Those tests also share their special needs to accelerate schedule-unrelated callings, and eliminate the strange behavior caused by launching greenthread-services instead of real processes.\n\nTake this code for example:\n`_start_compute_service()` provides a correct way to bring up compute services for scheduling. Otherwise the ComputeFilter will behave strange and will fail the tests.","commit_id":"61aec9e042b574591ad6e2d4a8fb2d139838db05"}]}
