)]}'
{"devstack/lib/heat":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"33e0c26992b295c69b4a5befe555d32bdf7c25ca","unresolved":false,"context_lines":[{"line_number":100,"context_line":"# runs that a clean run would need to clean up"},{"line_number":101,"context_line":"function cleanup_heat {"},{"line_number":102,"context_line":"    if [[ \"$HEAT_USE_APACHE\" \u003d\u003d \"True\" ]]; then"},{"line_number":103,"context_line":"\t_cleanup_heat_apache_wsgi"},{"line_number":104,"context_line":"    fi"},{"line_number":105,"context_line":"    sudo rm -rf $HEAT_AUTH_CACHE_DIR"},{"line_number":106,"context_line":"    sudo rm -rf $HEAT_ENV_DIR"}],"source_content_type":"application/x-shellscript","patch_set":16,"id":"df140735_b8bca2dc","line":103,"updated":"2017-05-31 15:54:48.000000000","message":"tab","commit_id":"ca80f9da88507cd6571c96f08516b254c1716a27"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"398cc1d926c7579e789a93e196e8d99037f89f0f","unresolved":false,"context_lines":[{"line_number":100,"context_line":"# runs that a clean run would need to clean up"},{"line_number":101,"context_line":"function cleanup_heat {"},{"line_number":102,"context_line":"    if [[ \"$HEAT_USE_APACHE\" \u003d\u003d \"True\" ]]; then"},{"line_number":103,"context_line":"\t_cleanup_heat_apache_wsgi"},{"line_number":104,"context_line":"    fi"},{"line_number":105,"context_line":"    sudo rm -rf $HEAT_AUTH_CACHE_DIR"},{"line_number":106,"context_line":"    sudo rm -rf $HEAT_ENV_DIR"}],"source_content_type":"application/x-shellscript","patch_set":16,"id":"df140735_fbe454ae","line":103,"in_reply_to":"df140735_b8bca2dc","updated":"2017-05-31 16:40:29.000000000","message":"Done","commit_id":"ca80f9da88507cd6571c96f08516b254c1716a27"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"33e0c26992b295c69b4a5befe555d32bdf7c25ca","unresolved":false,"context_lines":[{"line_number":164,"context_line":"            write_uwsgi_config \"$HEAT_API_UWSGI_CONF\" \"$HEAT_API_UWSGI\" \"/heat-api\""},{"line_number":165,"context_line":"            write_uwsgi_config \"$HEAT_CFN_API_UWSGI_CONF\" \"$HEAT_CFN_API_UWSGI\" \"/heat-api-cfn\""},{"line_number":166,"context_line":"            write_uwsgi_config \"$HEAT_CW_API_UWSGI_CONF\" \"$HEAT_CW_API_UWSGI\" \"/heat-api-cloudwatch\""},{"line_number":167,"context_line":"\telse"},{"line_number":168,"context_line":"            _config_heat_apache_wsgi"},{"line_number":169,"context_line":"        fi"},{"line_number":170,"context_line":"    fi"}],"source_content_type":"application/x-shellscript","patch_set":16,"id":"df140735_78b60afd","line":167,"updated":"2017-05-31 15:54:48.000000000","message":"tab","commit_id":"ca80f9da88507cd6571c96f08516b254c1716a27"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"398cc1d926c7579e789a93e196e8d99037f89f0f","unresolved":false,"context_lines":[{"line_number":164,"context_line":"            write_uwsgi_config \"$HEAT_API_UWSGI_CONF\" \"$HEAT_API_UWSGI\" \"/heat-api\""},{"line_number":165,"context_line":"            write_uwsgi_config \"$HEAT_CFN_API_UWSGI_CONF\" \"$HEAT_CFN_API_UWSGI\" \"/heat-api-cfn\""},{"line_number":166,"context_line":"            write_uwsgi_config \"$HEAT_CW_API_UWSGI_CONF\" \"$HEAT_CW_API_UWSGI\" \"/heat-api-cloudwatch\""},{"line_number":167,"context_line":"\telse"},{"line_number":168,"context_line":"            _config_heat_apache_wsgi"},{"line_number":169,"context_line":"        fi"},{"line_number":170,"context_line":"    fi"}],"source_content_type":"application/x-shellscript","patch_set":16,"id":"df140735_dbdf50d4","line":167,"in_reply_to":"df140735_78b60afd","updated":"2017-05-31 16:40:29.000000000","message":"Done","commit_id":"ca80f9da88507cd6571c96f08516b254c1716a27"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"33e0c26992b295c69b4a5befe555d32bdf7c25ca","unresolved":false,"context_lines":[{"line_number":355,"context_line":"            disable_apache_site heat-api-cfn"},{"line_number":356,"context_line":"            disable_apache_site heat-api-cloudwatch"},{"line_number":357,"context_line":"            restart_apache_server"},{"line_number":358,"context_line":"\tfi"},{"line_number":359,"context_line":"    else"},{"line_number":360,"context_line":"       _stop_processes"},{"line_number":361,"context_line":"    fi"}],"source_content_type":"application/x-shellscript","patch_set":16,"id":"df140735_18cb8e72","line":358,"updated":"2017-05-31 15:54:48.000000000","message":"tabs","commit_id":"ca80f9da88507cd6571c96f08516b254c1716a27"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"398cc1d926c7579e789a93e196e8d99037f89f0f","unresolved":false,"context_lines":[{"line_number":355,"context_line":"            disable_apache_site heat-api-cfn"},{"line_number":356,"context_line":"            disable_apache_site heat-api-cloudwatch"},{"line_number":357,"context_line":"            restart_apache_server"},{"line_number":358,"context_line":"\tfi"},{"line_number":359,"context_line":"    else"},{"line_number":360,"context_line":"       _stop_processes"},{"line_number":361,"context_line":"    fi"}],"source_content_type":"application/x-shellscript","patch_set":16,"id":"df140735_7bea8475","line":358,"in_reply_to":"df140735_18cb8e72","updated":"2017-05-31 16:40:29.000000000","message":"Done","commit_id":"ca80f9da88507cd6571c96f08516b254c1716a27"}],"heat/common/identifier.py":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"33e0c26992b295c69b4a5befe555d32bdf7c25ca","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def arn_url_path(self):"},{"line_number":102,"context_line":"        \"\"\"Return an ARN quoted correctly for use in a URL.\"\"\""},{"line_number":103,"context_line":"        return \u0027/\u0027 + urlparse.quote(self.arn())"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def url_path(self):"},{"line_number":106,"context_line":"        \"\"\"Return a URL-encoded path segment of a URL."}],"source_content_type":"text/x-python","patch_set":16,"id":"df140735_d84f5632","line":103,"updated":"2017-05-31 15:54:48.000000000","message":"Aesthetically, I dislike this. The ARN is conceptually a single path component, and in theory it could be followed by another path component and you\u0027d need some way to see where the ARN ends and the next component begins. That\u0027s why the \u0027/\u0027s were escaped previously.\n\nIn practice, it doesn\u0027t really matter because something always ends up unencoding the \u0027/\u0027s anyway, so we don\u0027t rely on it.\n\nHowever, we have no way to change URLs generated in the past. These will stop working for existing users if their operator upgrades to serving heat-api over uwsgi, even assuming the endpoints stay the same. For that reason I think it would be preferable to configure Apache with \"AllowEncodedSlashes NoDecode\", even if we _also_ make this change.","commit_id":"ca80f9da88507cd6571c96f08516b254c1716a27"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"581936ac1c8c877c0a624f40b77c97dd6672b40f","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def arn_url_path(self):"},{"line_number":102,"context_line":"        \"\"\"Return an ARN quoted correctly for use in a URL.\"\"\""},{"line_number":103,"context_line":"        return \u0027/\u0027 + urlparse.quote(self.arn())"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def url_path(self):"},{"line_number":106,"context_line":"        \"\"\"Return a URL-encoded path segment of a URL."}],"source_content_type":"text/x-python","patch_set":16,"id":"df140735_8cadf79c","line":103,"in_reply_to":"df140735_1c51300f","updated":"2017-06-01 18:29:18.000000000","message":"So I guess the concern would be for anyone moving from a standalone heat-api to Apache, regardless of whether they use mod_wsgi or uwsgi.\n\n\u003e I don\u0027t think using encoded \u0027/\u0027 in arn_url_path works with signaling, if it\u0027s not unencoded by apache (by using AllowEncodedSlashes On).\n\nI\u0027d expect it to work, but you might be right as it\u0027s never been tested - both the standalone heat-api and the mod_wsgi gate decode the %2Fs.","commit_id":"ca80f9da88507cd6571c96f08516b254c1716a27"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"67e84ace05dba30eb489ddad020fb34569b95724","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def arn_url_path(self):"},{"line_number":102,"context_line":"        \"\"\"Return an ARN quoted correctly for use in a URL.\"\"\""},{"line_number":103,"context_line":"        return \u0027/\u0027 + urlparse.quote(self.arn())"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def url_path(self):"},{"line_number":106,"context_line":"        \"\"\"Return a URL-encoded path segment of a URL."}],"source_content_type":"text/x-python","patch_set":16,"id":"df140735_bd42193d","line":103,"in_reply_to":"df140735_8cadf79c","updated":"2017-06-02 06:09:56.000000000","message":"Yeah, anyone moving to use apache has to set AllowEncodedSlashes On for the existing signal urls to work, No different from what they \u0027must\u0027 do before this patch. However, All new urls would work without it (i.e new deployments would not require it). May be we need to document it somewhere.","commit_id":"ca80f9da88507cd6571c96f08516b254c1716a27"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"cf4c8bc16070149ab436e8a55c82b8f704d38065","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def arn_url_path(self):"},{"line_number":102,"context_line":"        \"\"\"Return an ARN quoted correctly for use in a URL.\"\"\""},{"line_number":103,"context_line":"        return \u0027/\u0027 + urlparse.quote(self.arn())"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def url_path(self):"},{"line_number":106,"context_line":"        \"\"\"Return a URL-encoded path segment of a URL."}],"source_content_type":"text/x-python","patch_set":16,"id":"df140735_1c51300f","line":103,"in_reply_to":"df140735_d84f5632","updated":"2017-06-01 04:33:42.000000000","message":"\u003eAesthetically, I dislike this. The ARN is conceptually a single path component\n\nI don\u0027t think using encoded \u0027/\u0027 in arn_url_path works with signaling, if it\u0027s not unencoded by apache (by using AlloEncodedSlashes On). It contains \"stacks%2F\u003cstack_name\u003e%2F\u003cstack_id\u003e%2Fresources%2F\u003cresource_name\u003e\" and fails with 403 AccessDenied.","commit_id":"ca80f9da88507cd6571c96f08516b254c1716a27"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"398cc1d926c7579e789a93e196e8d99037f89f0f","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def arn_url_path(self):"},{"line_number":102,"context_line":"        \"\"\"Return an ARN quoted correctly for use in a URL.\"\"\""},{"line_number":103,"context_line":"        return \u0027/\u0027 + urlparse.quote(self.arn())"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def url_path(self):"},{"line_number":106,"context_line":"        \"\"\"Return a URL-encoded path segment of a URL."}],"source_content_type":"text/x-python","patch_set":16,"id":"df140735_9ba438bb","line":103,"in_reply_to":"df140735_d84f5632","updated":"2017-05-31 16:40:29.000000000","message":"Not sure if I understand the concern in the last paragraph corrrectly. \n\nIf the users upgrades to use uwsgi, they have 2 options. Either bind directly to a port or use a proxy[1]. We use the proxy at the gate.\n\nif the endpoints stay the same(bind to port), then they can use \u0027AllowEncodedSlashes On\u0027 (in the apache site config, which they would be doing, if they use mod_wsgi with apache now) and the existing/new urls would would work(with this change), no?\n\n[1] https://github.com/openstack-dev/devstack/blob/master/lib/apache#L258","commit_id":"ca80f9da88507cd6571c96f08516b254c1716a27"}],"heat_integrationtests/prepare_test_env.sh":[{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"33e0c26992b295c69b4a5befe555d32bdf7c25ca","unresolved":false,"context_lines":[{"line_number":65,"context_line":"iniset $conf_file heat_plugin minimal_image_ref cirros-0.3.5-x86_64-disk"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"# Skip test_cancel_update_server_with_port till bug #1607714 is fixed in nova"},{"line_number":68,"context_line":"iniset $conf_file heat_plugin skip_functional_test_list \u0027CancelUpdateTest.test_cancel_update_server_with_port, ReloadOnSighupTest\u0027"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"# Add scenario tests to skip"},{"line_number":71,"context_line":"# VolumeBackupRestoreIntegrationTest skipped until failure rate can be reduced ref bug #1382300"}],"source_content_type":"text/x-sh","patch_set":16,"id":"df140735_98e0bece","line":68,"updated":"2017-05-31 15:54:48.000000000","message":"Can you add a comment on what this is about?","commit_id":"ca80f9da88507cd6571c96f08516b254c1716a27"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"398cc1d926c7579e789a93e196e8d99037f89f0f","unresolved":false,"context_lines":[{"line_number":65,"context_line":"iniset $conf_file heat_plugin minimal_image_ref cirros-0.3.5-x86_64-disk"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"# Skip test_cancel_update_server_with_port till bug #1607714 is fixed in nova"},{"line_number":68,"context_line":"iniset $conf_file heat_plugin skip_functional_test_list \u0027CancelUpdateTest.test_cancel_update_server_with_port, ReloadOnSighupTest\u0027"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"# Add scenario tests to skip"},{"line_number":71,"context_line":"# VolumeBackupRestoreIntegrationTest skipped until failure rate can be reduced ref bug #1382300"}],"source_content_type":"text/x-sh","patch_set":16,"id":"df140735_9bcaf817","line":68,"in_reply_to":"df140735_98e0bece","updated":"2017-05-31 16:40:29.000000000","message":"Yep I\u0027ll add. We skipped it earlier with a hack[1] in the test itself. However, there is no way to identify the processes with uwsgi and the hack would be even uglier. As we don\u0027t care much about running services without apache, I thought it would be good to skip it completely.\n\n[1] https://github.com/openstack/heat/blob/master/heat_integrationtests/functional/test_reload_on_sighup.py#L133","commit_id":"ca80f9da88507cd6571c96f08516b254c1716a27"}]}
