)]}'
{".zuul.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c9339041f959cef7b139d8ff36544740df467673","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    check:"},{"line_number":11,"context_line":"      jobs:"},{"line_number":12,"context_line":"        - openstack-tox-functional:"},{"line_number":13,"context_line":"            required-projects:"},{"line_number":14,"context_line":"              - openstack/placement"},{"line_number":15,"context_line":"        - openstack-tox-functional-py36:"},{"line_number":16,"context_line":"            required-projects:"},{"line_number":17,"context_line":"              - openstack/placement"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"3fce034c_10932bfc","line":14,"range":{"start_line":13,"start_character":12,"end_line":14,"end_character":35},"updated":"2019-04-17 16:57:16.000000000","message":"Comparing to nova\u0027s functional job definition this is correct and we don\u0027t have to specify tox_install_siblings: true because it is by default in zuulv3:\n\nhttps://zuul-ci.org/docs/zuul-jobs/python-roles.html?highlight\u003dtox_install_siblings#rolevar-tox.tox_install_siblings","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"}],"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c9339041f959cef7b139d8ff36544740df467673","unresolved":false,"context_lines":[{"line_number":13,"context_line":"There are four primary changes:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"* For each test a PlacementFixture is instantiated, using the"},{"line_number":16,"context_line":"  usual in-RAM db and in-process placement."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"* Because of some exceedingly confusing optimizations in"},{"line_number":19,"context_line":"  osc_lib and python-openstackclient, done to improve start"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fce034c_10c6cb49","line":16,"range":{"start_line":16,"start_character":8,"end_line":16,"end_character":17},"updated":"2019-04-17 16:57:16.000000000","message":"I\u0027m seeing a lot of these warnings - do we know why?\n\nhttp://logs.openstack.org/39/651939/2/check/openstack-tox-functional-py36/7a775fc/job-output.txt.gz#_2019-04-12_11_44_15_166971\n\nWARNING [placement.db_api] TransactionFactory already started, not reconfiguring.\n\nI don\u0027t see the same in a nova functional test run which uses the PlacementFixture:\n\nhttp://logs.openstack.org/68/653268/1/check/nova-tox-functional-py36/396a5ee/job-output.txt.gz","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"191718b1cf4445b81a5e8a7c81c452a3f79af8e7","unresolved":false,"context_lines":[{"line_number":13,"context_line":"There are four primary changes:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"* For each test a PlacementFixture is instantiated, using the"},{"line_number":16,"context_line":"  usual in-RAM db and in-process placement."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"* Because of some exceedingly confusing optimizations in"},{"line_number":19,"context_line":"  osc_lib and python-openstackclient, done to improve start"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fce034c_4ba3489f","line":16,"range":{"start_line":16,"start_character":8,"end_line":16,"end_character":17},"in_reply_to":"3fce034c_10c6cb49","updated":"2019-04-17 17:19:48.000000000","message":"That happens in the placement functional tests too, but it\u0027s not as noticeable because they are more tests.\n\nIt\u0027s probably something we should ignore after the first one (which is what nova does).\n\nIt\u0027s quite likely it shouldn\u0027t be a warning and represents not so much a bug in the database fixture handling as a misuse of a feature. I\u0027ve not made an effort to hide the warning myself as eventually it will get annoying enough to fix properly rather than masking.","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c9339041f959cef7b139d8ff36544740df467673","unresolved":false,"context_lines":[{"line_number":40,"context_line":"  exceptions from the subprocess module."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"  Switching to this form means that logging becomes in-process"},{"line_number":43,"context_line":"  and more visible. To accomodate this the Capture fixture"},{"line_number":44,"context_line":"  from placement is used. This was chosen because we are already"},{"line_number":45,"context_line":"  pulling in the PlacementFixture. If this seems icky, I can fix"},{"line_number":46,"context_line":"  it with a local one. This was the shorter path."},{"line_number":47,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fce034c_f0ca1f18","line":44,"range":{"start_line":43,"start_character":20,"end_line":44,"end_character":25},"updated":"2019-04-17 16:57:16.000000000","message":"Is this why we get the warnings in the logs now?","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"191718b1cf4445b81a5e8a7c81c452a3f79af8e7","unresolved":false,"context_lines":[{"line_number":40,"context_line":"  exceptions from the subprocess module."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"  Switching to this form means that logging becomes in-process"},{"line_number":43,"context_line":"  and more visible. To accomodate this the Capture fixture"},{"line_number":44,"context_line":"  from placement is used. This was chosen because we are already"},{"line_number":45,"context_line":"  pulling in the PlacementFixture. If this seems icky, I can fix"},{"line_number":46,"context_line":"  it with a local one. This was the shorter path."},{"line_number":47,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fce034c_8bb290e5","line":44,"range":{"start_line":43,"start_character":20,"end_line":44,"end_character":25},"in_reply_to":"3fce034c_f0ca1f18","updated":"2019-04-17 17:19:48.000000000","message":"That we see any output at all is because we are in-process.\n\nThe oslo capture fixture is not as deluxe as the nova one, which I\u0027ve found to be okay but other may disagree (see above about not wanting to mask warts).","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ca8b74f9b95de39f09b9e533656e53ed2a37a083","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"After running these for a while it became clear that there were"},{"line_number":58,"context_line":"intermittent failures being caused by subunit attachments being too"},{"line_number":59,"context_line":"larger. This was eventually traced back to logging from all packages"},{"line_number":60,"context_line":"being set to DEBUG even when something else was requested. That was"},{"line_number":61,"context_line":"traced back to a poor interaction between the way that osc does"},{"line_number":62,"context_line":"logging and the way oslo_logging does logging (used by placement and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"dfbec78f_b29181f4","line":59,"range":{"start_line":59,"start_character":0,"end_line":59,"end_character":6},"updated":"2019-05-02 22:51:44.000000000","message":"large","commit_id":"778d1df6c49cd0b472bc7db58f0004856db60e32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ca8b74f9b95de39f09b9e533656e53ed2a37a083","unresolved":false,"context_lines":[{"line_number":61,"context_line":"traced back to a poor interaction between the way that osc does"},{"line_number":62,"context_line":"logging and the way oslo_logging does logging (used by placement and"},{"line_number":63,"context_line":"thus the placement fixture). The workaround, embodied in the"},{"line_number":64,"context_line":"RESET_LOGGING list in in osc_placement/tests/functional/base.py, is"},{"line_number":65,"context_line":"to get and reset the log level for a subset of the packages that are"},{"line_number":66,"context_line":"used."},{"line_number":67,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"dfbec78f_72bd4967","line":64,"range":{"start_line":64,"start_character":19,"end_line":64,"end_character":24},"updated":"2019-05-02 22:51:44.000000000","message":"in","commit_id":"778d1df6c49cd0b472bc7db58f0004856db60e32"}],"osc_placement/tests/functional/base.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c9339041f959cef7b139d8ff36544740df467673","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            return obj.factory(instance)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":56,"context_line":"            \u0027osc_lib.clientmanager.ClientCache.__get__\u0027,"},{"line_number":57,"context_line":"            mock_get))"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def openstack(self, cmd, may_fail\u003dFalse, use_json\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_9014fb4f","line":56,"updated":"2019-04-17 16:57:16.000000000","message":"Monkey patching this could bite us later - maybe we need a fixture within osc_lib itself that we can re-use? Otherwise I don\u0027t have great ideas.","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"191718b1cf4445b81a5e8a7c81c452a3f79af8e7","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            return obj.factory(instance)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":56,"context_line":"            \u0027osc_lib.clientmanager.ClientCache.__get__\u0027,"},{"line_number":57,"context_line":"            mock_get))"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def openstack(self, cmd, may_fail\u003dFalse, use_json\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_4b74a868","line":56,"in_reply_to":"3fce034c_9014fb4f","updated":"2019-04-17 17:19:48.000000000","message":"This was the result of lots of discussion with Dean who agreed that osc was not making this easy on me but that that all that stuff was in there to speed up osc startup time.\n\nIt is fragile, but it will fail fast when things change.","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"7db25eef62037b921f3fa3e7e3145069262fd385","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def openstack(self, cmd, may_fail\u003dFalse, use_json\u003dFalse):"},{"line_number":60,"context_line":"        to_exec \u003d []"},{"line_number":61,"context_line":"        # Make all requests as a noauth amdin user."},{"line_number":62,"context_line":"        to_exec +\u003d ["},{"line_number":63,"context_line":"            \u0027--os-url\u0027, self.placement.endpoint,"},{"line_number":64,"context_line":"            \u0027--os-token\u0027, self.placement.token,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_1a4f1ebe","line":61,"range":{"start_line":61,"start_character":40,"end_line":61,"end_character":45},"updated":"2019-04-12 16:25:12.000000000","message":"admin\n\nIf there\u0027s a respin I\u0027ll fix this, but for now, meh","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e5d32fc8ae950faa32d561688011d0d54be531a0","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def openstack(self, cmd, may_fail\u003dFalse, use_json\u003dFalse):"},{"line_number":60,"context_line":"        to_exec \u003d []"},{"line_number":61,"context_line":"        # Make all requests as a noauth amdin user."},{"line_number":62,"context_line":"        to_exec +\u003d ["},{"line_number":63,"context_line":"            \u0027--os-url\u0027, self.placement.endpoint,"},{"line_number":64,"context_line":"            \u0027--os-token\u0027, self.placement.token,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_eb655446","line":61,"range":{"start_line":61,"start_character":40,"end_line":61,"end_character":45},"in_reply_to":"3fce034c_1a4f1ebe","updated":"2019-04-17 17:51:04.000000000","message":"Done","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c9339041f959cef7b139d8ff36544740df467673","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        # This mess is because we only want output trapping around"},{"line_number":73,"context_line":"        # just the run()."},{"line_number":74,"context_line":"        # TODO(cdent): This could be a context manager."},{"line_number":75,"context_line":"        self.output \u003d six.StringIO()"},{"line_number":76,"context_line":"        self.error \u003d six.StringIO()"},{"line_number":77,"context_line":"        self.saved_stdout \u003d sys.stdout"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_cbff38ff","line":74,"updated":"2019-04-17 16:57:16.000000000","message":"Yup, I think something like this would work:\n\nself.output \u003d StringIO()\nwith self.useFixture(\n        fixtures.MonkeyPatch(\u0027sys.stdout\u0027, self.output)):\n   # do the thing","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"191718b1cf4445b81a5e8a7c81c452a3f79af8e7","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        # This mess is because we only want output trapping around"},{"line_number":73,"context_line":"        # just the run()."},{"line_number":74,"context_line":"        # TODO(cdent): This could be a context manager."},{"line_number":75,"context_line":"        self.output \u003d six.StringIO()"},{"line_number":76,"context_line":"        self.error \u003d six.StringIO()"},{"line_number":77,"context_line":"        self.saved_stdout \u003d sys.stdout"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_8b0ff0df","line":74,"in_reply_to":"3fce034c_cbff38ff","updated":"2019-04-17 17:19:48.000000000","message":"we need both stdout and stderr, but yeah, something like this","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c9339041f959cef7b139d8ff36544740df467673","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        try:"},{"line_number":82,"context_line":"            os_shell \u003d shell.OpenStackShell()"},{"line_number":83,"context_line":"            return_code \u003d os_shell.run(to_exec)"},{"line_number":84,"context_line":"        except SystemExit as exc:"},{"line_number":85,"context_line":"            return_code \u003d exc.code"},{"line_number":86,"context_line":"        sys.stdout \u003d self.saved_stdout"},{"line_number":87,"context_line":"        sys.stderr \u003d self.saved_stderr"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_cb289887","line":84,"updated":"2019-04-17 16:57:16.000000000","message":"A comment here might be nice - like the argparse thing from the commit message. The more documentation in here the better.","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e5d32fc8ae950faa32d561688011d0d54be531a0","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        try:"},{"line_number":82,"context_line":"            os_shell \u003d shell.OpenStackShell()"},{"line_number":83,"context_line":"            return_code \u003d os_shell.run(to_exec)"},{"line_number":84,"context_line":"        except SystemExit as exc:"},{"line_number":85,"context_line":"            return_code \u003d exc.code"},{"line_number":86,"context_line":"        sys.stdout \u003d self.saved_stdout"},{"line_number":87,"context_line":"        sys.stderr \u003d self.saved_stderr"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_2be03c96","line":84,"in_reply_to":"3fce034c_cb289887","updated":"2019-04-17 17:51:04.000000000","message":"Done","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"191718b1cf4445b81a5e8a7c81c452a3f79af8e7","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        try:"},{"line_number":82,"context_line":"            os_shell \u003d shell.OpenStackShell()"},{"line_number":83,"context_line":"            return_code \u003d os_shell.run(to_exec)"},{"line_number":84,"context_line":"        except SystemExit as exc:"},{"line_number":85,"context_line":"            return_code \u003d exc.code"},{"line_number":86,"context_line":"        sys.stdout \u003d self.saved_stdout"},{"line_number":87,"context_line":"        sys.stderr \u003d self.saved_stderr"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fce034c_ab12ec07","line":84,"in_reply_to":"3fce034c_cb289887","updated":"2019-04-17 17:19:48.000000000","message":"good point","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"92f547cd183e9303a191b526a2f24ac605f16ab6","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            return obj.factory(instance)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        # NOTE(cdent): This is fragile, but is necessary to work around"},{"line_number":55,"context_line":"        # the rather complex start up optimizations that are done osc_lib."},{"line_number":56,"context_line":"        # If/when osc_lib changes this will at least fail fast."},{"line_number":57,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":58,"context_line":"            \u0027osc_lib.clientmanager.ClientCache.__get__\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_6679992d","line":55,"range":{"start_line":55,"start_character":61,"end_line":55,"end_character":65},"updated":"2019-04-17 18:14:15.000000000","message":"done in","commit_id":"be67b30adcfbcdb7d12312dfe3961edd8ebd9ab3"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"acb7e1f76b68730f8a7e97105a605c89ed41f131","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            return obj.factory(instance)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        # NOTE(cdent): This is fragile, but is necessary to work around"},{"line_number":55,"context_line":"        # the rather complex start up optimizations that are done osc_lib."},{"line_number":56,"context_line":"        # If/when osc_lib changes this will at least fail fast."},{"line_number":57,"context_line":"        self.useFixture(fixtures.MonkeyPatch("},{"line_number":58,"context_line":"            \u0027osc_lib.clientmanager.ClientCache.__get__\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_66c75947","line":55,"range":{"start_line":55,"start_character":61,"end_line":55,"end_character":65},"in_reply_to":"3fce034c_6679992d","updated":"2019-04-29 17:39:36.000000000","message":"crikey, there\u0027s always something. Today I blame context switching plus fatigue.","commit_id":"be67b30adcfbcdb7d12312dfe3961edd8ebd9ab3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ca8b74f9b95de39f09b9e533656e53ed2a37a083","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        # Reset log level on a set of packages. See comment on RESET_LOGGING"},{"line_number":79,"context_line":"        # assigment, above."},{"line_number":80,"context_line":"        for name in RESET_LOGGING:"},{"line_number":81,"context_line":"            logging.getLogger(name).setLevel(logging.WARNING)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def openstack(self, cmd, may_fail\u003dFalse, use_json\u003dFalse):"},{"line_number":84,"context_line":"        to_exec \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfbec78f_f2b0598e","line":81,"updated":"2019-05-02 22:51:44.000000000","message":"Nova\u0027s StandardLogging fixture does similar for db schema migration logging:\n\nhttps://github.com/openstack/nova/blob/ea29f2094604d2edf8b82f2c7581e87517675aea/nova/tests/fixtures.py#L176","commit_id":"778d1df6c49cd0b472bc7db58f0004856db60e32"}],"playbooks/legacy/osc-placement-dsvm-functional-py3/run.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c9339041f959cef7b139d8ff36544740df467673","unresolved":false,"context_lines":[{"line_number":13,"context_line":"          set -x"},{"line_number":14,"context_line":"          cat \u003e clonemap.yaml \u003c\u003c EOF"},{"line_number":15,"context_line":"          clonemap:"},{"line_number":16,"context_line":"            - name: openstack-infra/devstack-gate"},{"line_number":17,"context_line":"              dest: devstack-gate"},{"line_number":18,"context_line":"          EOF"},{"line_number":19,"context_line":"          /usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \\"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"3fce034c_6b65e4e0","side":"PARENT","line":16,"updated":"2019-04-17 16:57:16.000000000","message":"Ooo yay this change also automatically means we\u0027re zuulv3-ified.","commit_id":"ffc2ee4c09089baa65702abb6926a62f2cdf9996"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"191718b1cf4445b81a5e8a7c81c452a3f79af8e7","unresolved":false,"context_lines":[{"line_number":13,"context_line":"          set -x"},{"line_number":14,"context_line":"          cat \u003e clonemap.yaml \u003c\u003c EOF"},{"line_number":15,"context_line":"          clonemap:"},{"line_number":16,"context_line":"            - name: openstack-infra/devstack-gate"},{"line_number":17,"context_line":"              dest: devstack-gate"},{"line_number":18,"context_line":"          EOF"},{"line_number":19,"context_line":"          /usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \\"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"3fce034c_6bcc0461","side":"PARENT","line":16,"in_reply_to":"3fce034c_6b65e4e0","updated":"2019-04-17 17:19:48.000000000","message":"yup","commit_id":"ffc2ee4c09089baa65702abb6926a62f2cdf9996"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c9339041f959cef7b139d8ff36544740df467673","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"          function post_test_hook {"},{"line_number":40,"context_line":"              # Configure and run functional tests"},{"line_number":41,"context_line":"              $BASE/new/osc-placement/osc_placement/tests/functional/hooks/post_test_hook.sh"},{"line_number":42,"context_line":"          }"},{"line_number":43,"context_line":"          export -f post_test_hook"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"3fce034c_8b7050a7","side":"PARENT","line":41,"range":{"start_line":41,"start_character":14,"end_line":41,"end_character":92},"updated":"2019-04-17 16:57:16.000000000","message":"Ooo I think this means we can drop this as well now since we\u0027re not using devstack anymore.","commit_id":"ffc2ee4c09089baa65702abb6926a62f2cdf9996"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"e5d32fc8ae950faa32d561688011d0d54be531a0","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"          function post_test_hook {"},{"line_number":40,"context_line":"              # Configure and run functional tests"},{"line_number":41,"context_line":"              $BASE/new/osc-placement/osc_placement/tests/functional/hooks/post_test_hook.sh"},{"line_number":42,"context_line":"          }"},{"line_number":43,"context_line":"          export -f post_test_hook"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"3fce034c_eb1794a2","side":"PARENT","line":41,"range":{"start_line":41,"start_character":14,"end_line":41,"end_character":92},"in_reply_to":"3fce034c_8b7050a7","updated":"2019-04-17 17:51:04.000000000","message":"Done","commit_id":"ffc2ee4c09089baa65702abb6926a62f2cdf9996"}],"test-requirements.txt":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c9339041f959cef7b139d8ff36544740df467673","unresolved":false,"context_lines":[{"line_number":8,"context_line":"oslotest\u003e\u003d1.10.0 # Apache-2.0"},{"line_number":9,"context_line":"python-openstackclient\u003e\u003d3.3.0  # Apache-2.0"},{"line_number":10,"context_line":"stestr\u003e\u003d1.0.0 # Apache-2.0"},{"line_number":11,"context_line":"wsgi-intercept\u003e\u003d1.7.0  # MIT License"}],"source_content_type":"text/plain","patch_set":2,"id":"3fce034c_eb9eb4b6","line":11,"range":{"start_line":11,"start_character":16,"end_line":11,"end_character":21},"updated":"2019-04-17 16:57:16.000000000","message":"This matches nova but any reason to use 1.8.0 which is currently what\u0027s in upper-constraints?\n\nhttps://github.com/openstack/requirements/blob/master/upper-constraints.txt#L494","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"191718b1cf4445b81a5e8a7c81c452a3f79af8e7","unresolved":false,"context_lines":[{"line_number":8,"context_line":"oslotest\u003e\u003d1.10.0 # Apache-2.0"},{"line_number":9,"context_line":"python-openstackclient\u003e\u003d3.3.0  # Apache-2.0"},{"line_number":10,"context_line":"stestr\u003e\u003d1.0.0 # Apache-2.0"},{"line_number":11,"context_line":"wsgi-intercept\u003e\u003d1.7.0  # MIT License"}],"source_content_type":"text/plain","patch_set":2,"id":"3fce034c_eba474bb","line":11,"range":{"start_line":11,"start_character":16,"end_line":11,"end_character":21},"in_reply_to":"3fce034c_eb9eb4b6","updated":"2019-04-17 17:19:48.000000000","message":"1.7 added support for nested context managers, 1.8.0 simply added wheel support and dropped official support for python 3.3. upper constraints chose 1.8 because that\u0027s what it does: it looks for upper\n\nSo I used 1.7 here because a) it works, b) I copied nova or placement, not sure which. \n\nIt\u0027s likely all the way back to 1.0 would work.\n\nI waffled a fair bit on how to add this requirement. The placement fixture comes from placement which I didn\u0027t want to put here because I wanted to limit what\u0027s made available to the unit tests, so put it in tox.ini only. However, placement doesn\u0027t require wsgi-intercept when it is used as \"placement the service\", only when it is \"placement the provider of the placement fixture\".\n\nSo there\u0027s some thinking/cleanup to do there (maybe with extra-requires)  but I didn\u0027t want that to hold this up, so we got the above.","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"}],"tox.ini":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c9339041f959cef7b139d8ff36544740df467673","unresolved":false,"context_lines":[{"line_number":33,"context_line":"  git+https://git.openstack.org/openstack/placement#egg\u003dopenstack-placement"},{"line_number":34,"context_line":"commands \u003d stestr --test-path\u003d./osc_placement/tests/functional run {posargs}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"[testenv:functional-py35]"},{"line_number":37,"context_line":"deps \u003d"},{"line_number":38,"context_line":"  {[testenv:functional]deps}"},{"line_number":39,"context_line":"commands \u003d"},{"line_number":40,"context_line":"  {[testenv:functional]commands}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"[testenv:functional-py36]"},{"line_number":43,"context_line":"deps \u003d"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3fce034c_6b93a4a4","line":40,"range":{"start_line":36,"start_character":0,"end_line":40,"end_character":32},"updated":"2019-04-17 16:57:16.000000000","message":"I think we can probably drop this since we\u0027re using bionic for py3 jobs now which is py3.6 and gmann is working on dropping py35 jobs:\n\nhttp://lists.openstack.org/pipermail/openstack-discuss/2019-April/005097.html\n\nBut it\u0027s also something we could do later.","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"191718b1cf4445b81a5e8a7c81c452a3f79af8e7","unresolved":false,"context_lines":[{"line_number":33,"context_line":"  git+https://git.openstack.org/openstack/placement#egg\u003dopenstack-placement"},{"line_number":34,"context_line":"commands \u003d stestr --test-path\u003d./osc_placement/tests/functional run {posargs}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"[testenv:functional-py35]"},{"line_number":37,"context_line":"deps \u003d"},{"line_number":38,"context_line":"  {[testenv:functional]deps}"},{"line_number":39,"context_line":"commands \u003d"},{"line_number":40,"context_line":"  {[testenv:functional]commands}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"[testenv:functional-py36]"},{"line_number":43,"context_line":"deps \u003d"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3fce034c_2bd6fcf2","line":40,"range":{"start_line":36,"start_character":0,"end_line":40,"end_character":32},"in_reply_to":"3fce034c_6b93a4a4","updated":"2019-04-17 17:19:48.000000000","message":"true","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c9339041f959cef7b139d8ff36544740df467673","unresolved":false,"context_lines":[{"line_number":45,"context_line":"commands \u003d"},{"line_number":46,"context_line":"  {[testenv:functional]commands}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"[testenv:functional-py37]"},{"line_number":49,"context_line":"deps \u003d"},{"line_number":50,"context_line":"  {[testenv:functional]deps}"},{"line_number":51,"context_line":"commands \u003d"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3fce034c_6bd8847e","line":48,"updated":"2019-04-17 16:57:16.000000000","message":"Hmm, we don\u0027t run this in .zuul.yaml not even in the experimental queue, but that\u0027s fodder for a follow up.","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"191718b1cf4445b81a5e8a7c81c452a3f79af8e7","unresolved":false,"context_lines":[{"line_number":45,"context_line":"commands \u003d"},{"line_number":46,"context_line":"  {[testenv:functional]commands}"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"[testenv:functional-py37]"},{"line_number":49,"context_line":"deps \u003d"},{"line_number":50,"context_line":"  {[testenv:functional]deps}"},{"line_number":51,"context_line":"commands \u003d"}],"source_content_type":"text/x-properties","patch_set":2,"id":"3fce034c_abae6c95","line":48,"in_reply_to":"3fce034c_6bd8847e","updated":"2019-04-17 17:19:48.000000000","message":"Yeah, I was waiting for whatever centralized job definitions come to exist as a result of the mass of changes happening lately.","commit_id":"bb5e206aa9059594999f10a6846e3c1a965e46c5"}]}
