)]}'
{"specs/liberty/approved/no_valid_host_reporting.rst":[{"author":{"_account_id":1981,"name":"Don Dugger","email":"n0ano@n0ano.com","username":"n0ano"},"change_message_id":"035148595a6a1b81d465a58b9b1327d61261e874","unresolved":false,"context_lines":[{"line_number":81,"context_line":"break, and instead of simply returning a NoValidHost exception, the entire"},{"line_number":82,"context_line":"RequestSpec object would be serialized and written to the logs. If an operator"},{"line_number":83,"context_line":"wished to track down why a particular host was not selected, they would be able"},{"line_number":84,"context_line":"to see the filter that removed it from consideration."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"Posting to get preliminary feedback on the scope of this spec."},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3afb71cf_3f18b41d","line":84,"updated":"2015-06-09 20:41:57.000000000","message":"You\u0027re suggesting keeping track of the hosts that passed, it might be better to keep track the hosts that are failed by a filter.  This would make it much easier to find which filter dropped a host, This would also reduce the size of the log from (number of filters)*(number of hosts) to just (number of hosts).","commit_id":"673de3aa5697c3d574e74c99444493d80dfd866a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d0fdaaf1d63e4b5124565220f687fd9156203dbc","unresolved":false,"context_lines":[{"line_number":81,"context_line":"break, and instead of simply returning a NoValidHost exception, the entire"},{"line_number":82,"context_line":"RequestSpec object would be serialized and written to the logs. If an operator"},{"line_number":83,"context_line":"wished to track down why a particular host was not selected, they would be able"},{"line_number":84,"context_line":"to see the filter that removed it from consideration."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"Posting to get preliminary feedback on the scope of this spec."},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3afb71cf_55ea0175","line":84,"in_reply_to":"3afb71cf_3f18b41d","updated":"2015-06-10 18:18:26.000000000","message":"That would be more expensive, as the logic would have to retain the starting hosts and compare them with the remaining hosts after each filter does its work, and record the diff. Since filters should be set up to remove as much as possible up front, the total amount of data should be less this way. E.g.: if there are 1000 hosts and the first filter removes 900, the log would record the 100 remaining for this step. If we did it your way, it would record the 900.\n\nI think that your math on the size of the log is off. The proposed solution will have the logs being the sum of the passing hosts, which will never approach the product you mention.","commit_id":"673de3aa5697c3d574e74c99444493d80dfd866a"},{"author":{"_account_id":1981,"name":"Don Dugger","email":"n0ano@n0ano.com","username":"n0ano"},"change_message_id":"035148595a6a1b81d465a58b9b1327d61261e874","unresolved":false,"context_lines":[{"line_number":132,"context_line":"------------------"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"There should be no significant performance impact other than writing a log"},{"line_number":135,"context_line":"entry that may be large."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Other deployer impact"},{"line_number":138,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3afb71cf_ff833c54","line":135,"updated":"2015-06-09 20:41:57.000000000","message":"I\u0027m a little concerned as there is a potential memory overhead for this and that overhead would apply to ALL requests, even those that pass.  The log entry for a cloud with thousands of nodes would be rather large.","commit_id":"673de3aa5697c3d574e74c99444493d80dfd866a"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"d0fdaaf1d63e4b5124565220f687fd9156203dbc","unresolved":false,"context_lines":[{"line_number":132,"context_line":"------------------"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"There should be no significant performance impact other than writing a log"},{"line_number":135,"context_line":"entry that may be large."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"Other deployer impact"},{"line_number":138,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3afb71cf_38b3fc51","line":135,"in_reply_to":"3afb71cf_ff833c54","updated":"2015-06-10 18:18:26.000000000","message":"The size of the log entry will depend on the filter configuration. If filters are set up properly, the most discriminating filters will be applied first, making the size of the log entry much smaller, as we\u0027re only recording the passed hosts.\n\nI don\u0027t really see any alternative to the memory overhead. Remember, we\u0027re just holding the names of the hosts, not entire ComputeNode objects.","commit_id":"673de3aa5697c3d574e74c99444493d80dfd866a"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"81b05f4e061f39024282040256fdfb05402b0213","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Improve reporting when Scheduler returns NoValidHost"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Include the URL of your launchpad blueprint:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/nova/+spec/no-valid-host-reporting"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_60e3cad9","line":11,"updated":"2015-06-19 08:38:25.000000000","message":"nit: unnecessary line :-)","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c384343b36124578c1cf6670a4c9700350b58ccc","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Improve reporting when Scheduler returns NoValidHost"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Include the URL of your launchpad blueprint:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/nova/+spec/no-valid-host-reporting"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_d8e62ab0","line":11,"in_reply_to":"fa32b979_60e3cad9","updated":"2015-06-19 13:52:00.000000000","message":"Done","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"81b05f4e061f39024282040256fdfb05402b0213","unresolved":false,"context_lines":[{"line_number":17,"context_line":"this is scattered among various logs, making it difficult to find. This spec"},{"line_number":18,"context_line":"proposes to track the results of each filter operation, and if no valid host"},{"line_number":19,"context_line":"can be found, to record this information in the Scheduler logs so that an"},{"line_number":20,"context_line":"operator can determine why any particular host was not selected."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Problem description"},{"line_number":23,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_80484ecd","line":20,"updated":"2015-06-19 08:38:25.000000000","message":"too much details, could you please try to summarize that into 1 or 2 sentences ?\n\nsomething like \u0027Adds more details for the operator when the scheduler returns a NoValidHost exception by providing more logs detailing which filters are bad\"","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c384343b36124578c1cf6670a4c9700350b58ccc","unresolved":false,"context_lines":[{"line_number":17,"context_line":"this is scattered among various logs, making it difficult to find. This spec"},{"line_number":18,"context_line":"proposes to track the results of each filter operation, and if no valid host"},{"line_number":19,"context_line":"can be found, to record this information in the Scheduler logs so that an"},{"line_number":20,"context_line":"operator can determine why any particular host was not selected."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Problem description"},{"line_number":23,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_f3230fa6","line":20,"in_reply_to":"fa32b979_80484ecd","updated":"2015-06-19 13:52:00.000000000","message":"Done","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"81b05f4e061f39024282040256fdfb05402b0213","unresolved":false,"context_lines":[{"line_number":38,"context_line":"hosts for a particular request."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"There is no direct use case for end users, as returning information about hosts"},{"line_number":41,"context_line":"and filters would be leaking details about the underlying infrastructure."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Project Priority"},{"line_number":44,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_c02976e7","line":41,"updated":"2015-06-19 08:38:25.000000000","message":"probably unnecessary to talk about end-users then.","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c384343b36124578c1cf6670a4c9700350b58ccc","unresolved":false,"context_lines":[{"line_number":38,"context_line":"hosts for a particular request."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"There is no direct use case for end users, as returning information about hosts"},{"line_number":41,"context_line":"and filters would be leaking details about the underlying infrastructure."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Project Priority"},{"line_number":44,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_d355abfa","line":41,"in_reply_to":"fa32b979_c02976e7","updated":"2015-06-19 13:52:00.000000000","message":"I think it\u0027s helpful so that it is clear that this is not going to leak host information.","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"81b05f4e061f39024282040256fdfb05402b0213","unresolved":false,"context_lines":[{"line_number":64,"context_line":".. code:: python"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    ["},{"line_number":67,"context_line":"     (\"AvailabilityZoneFilter\", [\"host1\", \"host2\", \"host7\", ... \"hostN\"]),"},{"line_number":68,"context_line":"     (\"RamFilter\", [\"host2\", \"host23\", ... \"hostN\"]),"},{"line_number":69,"context_line":"     ..."},{"line_number":70,"context_line":"     (\"ComputeCapabilitiesFilter\", [\"host42\", \"host99\"]),"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_6553c06d","line":67,"updated":"2015-06-19 08:38:25.000000000","message":"I\u0027m just a little worried about a cloud running 1000+ hosts which would just explode the logs. Since it can be exponential, maybe we should find another way to report if the operator doesn\u0027t want to... At least a configuration flag for specifically disabling that logging (remember that you propose the INFO level) would avoid to afraid the operators.\n\nJust wondering if an alternative would not be to send a notification so a specific backend could get it and allows searching within it ?","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"0d62af3e2f0783b4d1f80e8fecf8ffbe981888d0","unresolved":false,"context_lines":[{"line_number":64,"context_line":".. code:: python"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    ["},{"line_number":67,"context_line":"     (\"AvailabilityZoneFilter\", [\"host1\", \"host2\", \"host7\", ... \"hostN\"]),"},{"line_number":68,"context_line":"     (\"RamFilter\", [\"host2\", \"host23\", ... \"hostN\"]),"},{"line_number":69,"context_line":"     ..."},{"line_number":70,"context_line":"     (\"ComputeCapabilitiesFilter\", [\"host42\", \"host99\"]),"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_ea7ec2e2","line":67,"updated":"2015-06-19 06:37:44.000000000","message":"there need use (host, node). As ironic still use node.","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c384343b36124578c1cf6670a4c9700350b58ccc","unresolved":false,"context_lines":[{"line_number":64,"context_line":".. code:: python"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    ["},{"line_number":67,"context_line":"     (\"AvailabilityZoneFilter\", [\"host1\", \"host2\", \"host7\", ... \"hostN\"]),"},{"line_number":68,"context_line":"     (\"RamFilter\", [\"host2\", \"host23\", ... \"hostN\"]),"},{"line_number":69,"context_line":"     ..."},{"line_number":70,"context_line":"     (\"ComputeCapabilitiesFilter\", [\"host42\", \"host99\"]),"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_73513fd8","line":67,"in_reply_to":"fa32b979_6553c06d","updated":"2015-06-19 13:52:00.000000000","message":"Sylvain: I don\u0027t think that there\u0027s really any way of reporting a usable amount of information for this need that won\u0027t be huge for a huge provider, and whether it\u0027s in a log entry or a notification, it\u0027s still going to be large, and I haven\u0027t heard or thought of a more efficient method to get operators the information they would need.","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c384343b36124578c1cf6670a4c9700350b58ccc","unresolved":false,"context_lines":[{"line_number":64,"context_line":".. code:: python"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    ["},{"line_number":67,"context_line":"     (\"AvailabilityZoneFilter\", [\"host1\", \"host2\", \"host7\", ... \"hostN\"]),"},{"line_number":68,"context_line":"     (\"RamFilter\", [\"host2\", \"host23\", ... \"hostN\"]),"},{"line_number":69,"context_line":"     ..."},{"line_number":70,"context_line":"     (\"ComputeCapabilitiesFilter\", [\"host42\", \"host99\"]),"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_33edf725","line":67,"in_reply_to":"fa32b979_ea7ec2e2","updated":"2015-06-19 13:52:00.000000000","message":"Alex: I limited it to just hostname to keep the size down, as that was the main concern I heard (and I think Sylvain\u0027s comment is typical).","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"81b05f4e061f39024282040256fdfb05402b0213","unresolved":false,"context_lines":[{"line_number":76,"context_line":"for the RamFilter and ComputeCapabilitiesFilter. The next filter, DiskFilter,"},{"line_number":77,"context_line":"removed the final two hosts, triggering the logging. If an operator wished to"},{"line_number":78,"context_line":"track down why a particular host was not selected, they would be able to see"},{"line_number":79,"context_line":"exactly which filter removed it from consideration."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"Posting to get preliminary feedback on the scope of this spec."},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_65f7408d","line":79,"updated":"2015-06-19 08:38:25.000000000","message":"Sounds a good proposal, provided the operator knows which request-id corresponded to the faulty instance scheduler check, which can be a bit hard even if we have the instance actions API for knowing the req-id.\n\nWondering if it would be worth adding a log to the conductor saying \u0027calling select_dest() for instances [uuid1, ...]\u0027 so the operator could very quickly see when it goes to the scheduler and then look back at the scheduler log to see your logs.","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c384343b36124578c1cf6670a4c9700350b58ccc","unresolved":false,"context_lines":[{"line_number":76,"context_line":"for the RamFilter and ComputeCapabilitiesFilter. The next filter, DiskFilter,"},{"line_number":77,"context_line":"removed the final two hosts, triggering the logging. If an operator wished to"},{"line_number":78,"context_line":"track down why a particular host was not selected, they would be able to see"},{"line_number":79,"context_line":"exactly which filter removed it from consideration."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"Posting to get preliminary feedback on the scope of this spec."},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_93c9635d","line":79,"in_reply_to":"fa32b979_65f7408d","updated":"2015-06-19 13:52:00.000000000","message":"Is the req_id passed to get_filtered_objects? I don\u0027t think so, but I could be missing something. See the proposed code here: https://review.openstack.org/#/c/192184/2/nova/filters.py,cm","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"81b05f4e061f39024282040256fdfb05402b0213","unresolved":false,"context_lines":[{"line_number":90,"context_line":"request. The return value could be moderated for non-admin to simply state"},{"line_number":91,"context_line":"something like \u0027Pass\u0027 or \u0027Fail\u0027, without returning any of the internal"},{"line_number":92,"context_line":"host/filter configuration. For admins, the entire filter/host matrix would be"},{"line_number":93,"context_line":"returned as a JSON blob."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"While this is potentially richer in terms of information returned, it would"},{"line_number":96,"context_line":"require an API change, and wouldn\u0027t directly answer the use case of an operator"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_e59350ff","line":93,"updated":"2015-06-19 08:38:25.000000000","message":"Given all the problems that we have with claims and how the scheduler can be racy, I don\u0027t think it\u0027s reasonable to add it.\n\nWe told during the Summit about a capacity API, but that\u0027s far different from what you propose and shouldn\u0027t be in the scope of that spec, IMHO.\nHere, the goal is to give more information about a specific failure, not giving a capacity API.","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c384343b36124578c1cf6670a4c9700350b58ccc","unresolved":false,"context_lines":[{"line_number":90,"context_line":"request. The return value could be moderated for non-admin to simply state"},{"line_number":91,"context_line":"something like \u0027Pass\u0027 or \u0027Fail\u0027, without returning any of the internal"},{"line_number":92,"context_line":"host/filter configuration. For admins, the entire filter/host matrix would be"},{"line_number":93,"context_line":"returned as a JSON blob."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"While this is potentially richer in terms of information returned, it would"},{"line_number":96,"context_line":"require an API change, and wouldn\u0027t directly answer the use case of an operator"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_7345bfb1","line":93,"in_reply_to":"fa32b979_e59350ff","updated":"2015-06-19 13:52:00.000000000","message":"Agreed. The benefit here is that the operator could request this only when they need it, versus logging which will be done any time there is a NoValidHost. The amount of data would be larger, but they would control when it is run.","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"81b05f4e061f39024282040256fdfb05402b0213","unresolved":false,"context_lines":[{"line_number":116,"context_line":"--------------------"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"None planned, although it would be possible to also add a notification with"},{"line_number":119,"context_line":"this information in a subsequent patch if it was deemed useful."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Other end user impact"},{"line_number":122,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_e516f057","line":119,"updated":"2015-06-19 08:38:25.000000000","message":"Well, notifications are one way to consider we defer the searching and storing to a 3rd party backend, which can be done by operators.\n\nThat said, operators can deploy some nice tooling for handling log management, like Sentry or Logstash, so that\u0027s really a trade-off that we could propose.","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c384343b36124578c1cf6670a4c9700350b58ccc","unresolved":false,"context_lines":[{"line_number":116,"context_line":"--------------------"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"None planned, although it would be possible to also add a notification with"},{"line_number":119,"context_line":"this information in a subsequent patch if it was deemed useful."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Other end user impact"},{"line_number":122,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_d3b4cb83","line":119,"in_reply_to":"fa32b979_e516f057","updated":"2015-06-19 13:52:00.000000000","message":"Again, I don\u0027t see the savings. The filter/host information would still need to be accumulated as the filters run. The only difference is what to do with it when all hosts fail. Adding a requirement for the operators to configure a special way to handle would be much more complicated than simply logging.","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"81b05f4e061f39024282040256fdfb05402b0213","unresolved":false,"context_lines":[{"line_number":127,"context_line":"------------------"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"There should be no significant performance impact other than writing a log"},{"line_number":130,"context_line":"entry that may be large."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Other deployer impact"},{"line_number":133,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_c5b96c7b","line":130,"updated":"2015-06-19 08:38:25.000000000","message":"As I said above, I don\u0027t see that minimal. We should make sure that we\u0027re not adding very verbose information by default, for many reasons (IO and disk space mainly)","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c384343b36124578c1cf6670a4c9700350b58ccc","unresolved":false,"context_lines":[{"line_number":127,"context_line":"------------------"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"There should be no significant performance impact other than writing a log"},{"line_number":130,"context_line":"entry that may be large."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"Other deployer impact"},{"line_number":133,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_93af232b","line":130,"in_reply_to":"fa32b979_c5b96c7b","updated":"2015-06-19 13:52:00.000000000","message":"It is minimal in the sense that it is the least amount of information that would be useful to an operator. See the proposed code linked above to get an idea of the verbosity.","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"81b05f4e061f39024282040256fdfb05402b0213","unresolved":false,"context_lines":[{"line_number":152,"context_line":"----------"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"* Modify the filtering loop in nova/filters.py to track the filter class and"},{"line_number":155,"context_line":"  remaining hosts after each filter is applied."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"* If all objects are filtered out, add a log entry with identifying text and"},{"line_number":158,"context_line":"  the filter tracking results."}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_8508442f","line":155,"updated":"2015-06-19 08:38:25.000000000","message":"Just one note, modifying that module will also impact cells v1 deployments, so it should be properly mentioned.","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"c384343b36124578c1cf6670a4c9700350b58ccc","unresolved":false,"context_lines":[{"line_number":152,"context_line":"----------"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"* Modify the filtering loop in nova/filters.py to track the filter class and"},{"line_number":155,"context_line":"  remaining hosts after each filter is applied."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"* If all objects are filtered out, add a log entry with identifying text and"},{"line_number":158,"context_line":"  the filter tracking results."}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_0efe8805","line":155,"in_reply_to":"fa32b979_8508442f","updated":"2015-06-19 13:52:00.000000000","message":"Good point - done.","commit_id":"215c77826ec3bff59b06223da6073cec9cfa502b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"795df7da59b5ccc6339e4915f19aad72eaf3b885","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/no-valid-host-reporting"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"When the scheduler fails to find a host for a VM, there is very little"},{"line_number":14,"context_line":"information for an operator to determine why no valid host was found. This"},{"line_number":15,"context_line":"proposes to add more information to the logs, detailing which filters removed"},{"line_number":16,"context_line":"which hosts."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_26f7e5f6","line":14,"updated":"2015-06-19 18:45:41.000000000","message":"I\u0027m not sure this is accurate, typically if it gets to nova-compute and fails there somehow (network fails b/c neutron agents are down, block device mapping fails - maybe cinder overquota, libvirt connection error, etc etc), there is a big ugly error in the nova-compute logs.","commit_id":"ded1f47c398f11c32e0632d8511949c0ad233615"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fa5951d01a20616af16e3270d9c02d5fa5105004","unresolved":false,"context_lines":[{"line_number":13,"context_line":"When the scheduler fails to find a host for a VM, there is very little"},{"line_number":14,"context_line":"information for an operator to determine why no valid host was found. This"},{"line_number":15,"context_line":"proposes to add more information to the logs, detailing which filters removed"},{"line_number":16,"context_line":"which hosts."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_dd11075f","line":16,"updated":"2015-06-22 10:41:09.000000000","message":"I think it better to say the \"NoValidHost\" error is very confusing for operators.\n\nThere are two cases it happens:\n* errors cause build to exceed max retries, get NoValidHost with a reason\n* unable to find a host to try the build on, get NoValidHost with no reason\n\nThe latter can be hard to debug if you don\u0027t have debug logs on telling you which filter was the first to return 0 hosts.\n\nThis spec should highlight these two cases, and treat them separately, ideally. We should log different errors for each case.","commit_id":"ded1f47c398f11c32e0632d8511949c0ad233615"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"ee9f7b641b305b513f2a12783e766d9199bf3558","unresolved":false,"context_lines":[{"line_number":13,"context_line":"When the scheduler fails to find a host for a VM, there is very little"},{"line_number":14,"context_line":"information for an operator to determine why no valid host was found. This"},{"line_number":15,"context_line":"proposes to add more information to the logs, detailing which filters removed"},{"line_number":16,"context_line":"which hosts."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_3a126eb5","line":16,"in_reply_to":"fa32b979_dd11075f","updated":"2015-06-22 14:01:49.000000000","message":"OK, I\u0027m refining the spec to make clear that it is only handling the second case.","commit_id":"ded1f47c398f11c32e0632d8511949c0ad233615"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"795df7da59b5ccc6339e4915f19aad72eaf3b885","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Trying to figure out why a particular request to spawn a new instance failed to"},{"line_number":22,"context_line":"find a valid host is currently very difficult. The information available is"},{"line_number":23,"context_line":"incomplete, and is scattered across various log files. Operators sometimes feel"},{"line_number":24,"context_line":"that a particular host should have been able to accomodate a request, but have"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_4636a9b5","line":21,"updated":"2015-06-19 18:45:41.000000000","message":"Yeah, especially if you don\u0027t have an ELK stack for your logs.","commit_id":"ded1f47c398f11c32e0632d8511949c0ad233615"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fa5951d01a20616af16e3270d9c02d5fa5105004","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Trying to figure out why a particular request to spawn a new instance failed to"},{"line_number":22,"context_line":"find a valid host is currently very difficult. The information available is"},{"line_number":23,"context_line":"incomplete, and is scattered across various log files. Operators sometimes feel"},{"line_number":24,"context_line":"that a particular host should have been able to accomodate a request, but have"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_c0359adb","line":21,"in_reply_to":"fa32b979_4636a9b5","updated":"2015-06-22 10:41:09.000000000","message":"Its when the scheduler says no, its quite confusing, particularly without the debug logs from nova-scheduler.","commit_id":"ded1f47c398f11c32e0632d8511949c0ad233615"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fa5951d01a20616af16e3270d9c02d5fa5105004","unresolved":false,"context_lines":[{"line_number":43,"context_line":"a priority for Liberty. It was specifically called out at the Vancouver Summit"},{"line_number":44,"context_line":"for implementation in Liberty:"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    https://etherpad.openstack.org/p/YVR-nova-liberty-priorities L48"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Proposed change"},{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_2074869a","line":46,"updated":"2015-06-22 10:41:09.000000000","message":"Just put \"scheduler\" here I guess.\nhttp://specs.openstack.org/openstack/nova-specs/priorities/liberty-priorities.html","commit_id":"ded1f47c398f11c32e0632d8511949c0ad233615"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"ee9f7b641b305b513f2a12783e766d9199bf3558","unresolved":false,"context_lines":[{"line_number":43,"context_line":"a priority for Liberty. It was specifically called out at the Vancouver Summit"},{"line_number":44,"context_line":"for implementation in Liberty:"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    https://etherpad.openstack.org/p/YVR-nova-liberty-priorities L48"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Proposed change"},{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_fa59668f","line":46,"in_reply_to":"fa32b979_2074869a","updated":"2015-06-22 14:01:49.000000000","message":"I think I copied that from one of bauzas\u0027 specs. :)\nI\u0027ll remove the etherpad link.","commit_id":"ded1f47c398f11c32e0632d8511949c0ad233615"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8751d6241c04dc117f8e8dab6bbb03a851d558e7","unresolved":false,"context_lines":[{"line_number":43,"context_line":"a priority for Liberty. It was specifically called out at the Vancouver Summit"},{"line_number":44,"context_line":"for implementation in Liberty:"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    https://etherpad.openstack.org/p/YVR-nova-liberty-priorities L48"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Proposed change"},{"line_number":49,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_607e6ae5","line":46,"in_reply_to":"fa32b979_fa59668f","updated":"2015-06-25 09:51:52.000000000","message":"Hum, I don\u0027t remember in which spec I made such copy/paste... Honestly, I usually put comments, not references within the priority section","commit_id":"ded1f47c398f11c32e0632d8511949c0ad233615"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"795df7da59b5ccc6339e4915f19aad72eaf3b885","unresolved":false,"context_lines":[{"line_number":52,"context_line":"class\u0027s get_filtered_objects() method. That method loops through each filter,"},{"line_number":53,"context_line":"and returns if all objects have been filtered out. I propose to track the"},{"line_number":54,"context_line":"remaining hosts after each pass through a filter, and if the method returns"},{"line_number":55,"context_line":"with no hosts remaining, to add a LOG.info entry containing the filter tracking"},{"line_number":56,"context_line":"history along with an appropriate message, so that operators could determine"},{"line_number":57,"context_line":"where each host was removed from consideration. The values tracked in the log"},{"line_number":58,"context_line":"would look like this:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_66be4dd6","line":55,"updated":"2015-06-19 18:45:41.000000000","message":"So more detailed logging is good, but if I\u0027m an operator and several times a day people are telling me their instances are failing to build and I have to check the logs to see what\u0027s going on, that\u0027s kind of a pain in the butt - assuming there is no ELK stack to query via Kibana.\n\nI know we have instance_actions and instance_faults which are shown in Horizon and we don\u0027t want to leak details to non-admin users.\n\nI\u0027m wondering if there is something we could store which could be viewed only by an admin which would have the detailed failure data?  That probably touches too close to the tasks work that isn\u0027t in Nova yet, but it\u0027s an idea.","commit_id":"ded1f47c398f11c32e0632d8511949c0ad233615"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"ee9f7b641b305b513f2a12783e766d9199bf3558","unresolved":false,"context_lines":[{"line_number":52,"context_line":"class\u0027s get_filtered_objects() method. That method loops through each filter,"},{"line_number":53,"context_line":"and returns if all objects have been filtered out. I propose to track the"},{"line_number":54,"context_line":"remaining hosts after each pass through a filter, and if the method returns"},{"line_number":55,"context_line":"with no hosts remaining, to add a LOG.info entry containing the filter tracking"},{"line_number":56,"context_line":"history along with an appropriate message, so that operators could determine"},{"line_number":57,"context_line":"where each host was removed from consideration. The values tracked in the log"},{"line_number":58,"context_line":"would look like this:"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_951a6b16","line":55,"in_reply_to":"fa32b979_66be4dd6","updated":"2015-06-22 14:01:49.000000000","message":"I like John\u0027s suggestion of raising different exceptions in the two situations: 1) nothing passing the filters, and 2) exceeding the maximum number of retries with hosts that *did* pass.","commit_id":"ded1f47c398f11c32e0632d8511949c0ad233615"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fa5951d01a20616af16e3270d9c02d5fa5105004","unresolved":false,"context_lines":[{"line_number":74,"context_line":"track down why a particular host was not selected, they would be able to see"},{"line_number":75,"context_line":"exactly which filter removed it from consideration."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"Posting to get preliminary feedback on the scope of this spec."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"Alternatives"},{"line_number":80,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_a0af36e2","line":77,"updated":"2015-06-22 10:41:09.000000000","message":"I quite like this approach, a info level log for the first filter that gets to zero hosts. Makes sense.","commit_id":"ded1f47c398f11c32e0632d8511949c0ad233615"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"795df7da59b5ccc6339e4915f19aad72eaf3b885","unresolved":false,"context_lines":[{"line_number":88,"context_line":"host/filter configuration. For admins, the entire filter/host matrix would be"},{"line_number":89,"context_line":"returned as a JSON blob."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"While this is potentially richer in terms of information returned, it would"},{"line_number":92,"context_line":"require an API change, and wouldn\u0027t directly answer the use case of an operator"},{"line_number":93,"context_line":"doing a post-mortem on a failed spawn request."},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_66096ddd","line":91,"updated":"2015-06-19 18:45:41.000000000","message":"Yeah, as a user I shouldn\u0027t have to test if a thing will pass or fail, because it could pass the test but then fail for real because of the various reasons I mentioned above once it gets to a certain compute node.","commit_id":"ded1f47c398f11c32e0632d8511949c0ad233615"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fa5951d01a20616af16e3270d9c02d5fa5105004","unresolved":false,"context_lines":[{"line_number":112,"context_line":"--------------------"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"None planned, although it would be possible to also add a notification with"},{"line_number":115,"context_line":"this information in a subsequent patch if it was deemed useful."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Other end user impact"},{"line_number":118,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_007f0267","line":115,"updated":"2015-06-22 10:41:09.000000000","message":"Please just leave this as None, the spec should say whats happening, not what *may* happen.","commit_id":"ded1f47c398f11c32e0632d8511949c0ad233615"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"ee9f7b641b305b513f2a12783e766d9199bf3558","unresolved":false,"context_lines":[{"line_number":112,"context_line":"--------------------"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"None planned, although it would be possible to also add a notification with"},{"line_number":115,"context_line":"this information in a subsequent patch if it was deemed useful."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Other end user impact"},{"line_number":118,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_15573b03","line":115,"in_reply_to":"fa32b979_007f0267","updated":"2015-06-22 14:01:49.000000000","message":"Done","commit_id":"ded1f47c398f11c32e0632d8511949c0ad233615"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3795f1f54ece4e3908d99d0f41f7f0cae42896e1","unresolved":false,"context_lines":[{"line_number":80,"context_line":"for the RamFilter and ComputeCapabilitiesFilter. The next filter, DiskFilter,"},{"line_number":81,"context_line":"removed the final two hosts, triggering the logging. If an operator wished to"},{"line_number":82,"context_line":"track down why a particular host was not selected, they would be able to see"},{"line_number":83,"context_line":"exactly which filter removed it from consideration."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Alternatives"},{"line_number":86,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa32b979_eb9ec168","line":83,"updated":"2015-06-25 19:44:18.000000000","message":"Like we discussed on IRC, I think this logging is quite trivial but not really useful for big operators.\n\nLet me explain why again :\n- the scheduler doesn\u0027t really know the instance uuid (even if it\u0027s left by the instance_properties dict) because we don\u0027t want to have the instance UUIDs given to the scheduler. It would mean that the log wouldn\u0027t say which instance would be failing related to the above, it would be just leaving the context request-id\n- in order to find the corresponding req-id, the operator would have to look either at the instance-actions API or at the nova-api logs to get the req-id related to the instance\n- if the operator would have 10 n-api servers and more than 1 n-scheduler, or just having logrotate, it would mean that he would have to run like more than 1GB using awk or more (Sentry, logstash, blah) to get that information\n\nAll of that makes me think that while I accept the above proposal for helping operators, I think it\u0027s enough trivial for not really needing a spec.\nOn the other hand, having the above information returned to the conductor and persisted in DB (possibly as a RequestSpec field) would help the operators by providing a REST API resource only for operators (call it /os-instance-failures for example) which would return the related scheduler failure (persisted in the related Spec)","commit_id":"87f6525bc5c1024e3d47f013ff6dc275ed5866b2"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"af207c9a623da1ead180ac44775e41e3476f3a66","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"While this is potentially richer in terms of information returned, it would"},{"line_number":98,"context_line":"require an API change, and wouldn\u0027t directly answer the use case of an operator"},{"line_number":99,"context_line":"doing a post-mortem on a failed spawn request."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Data model impact"},{"line_number":102,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa32b979_ca06c2cd","line":99,"updated":"2015-06-23 21:09:29.000000000","message":"Right, the dry-run thing is actually a separate use case...","commit_id":"87f6525bc5c1024e3d47f013ff6dc275ed5866b2"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3795f1f54ece4e3908d99d0f41f7f0cae42896e1","unresolved":false,"context_lines":[{"line_number":97,"context_line":"While this is potentially richer in terms of information returned, it would"},{"line_number":98,"context_line":"require an API change, and wouldn\u0027t directly answer the use case of an operator"},{"line_number":99,"context_line":"doing a post-mortem on a failed spawn request."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Data model impact"},{"line_number":102,"context_line":"-----------------"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa32b979_4b180d76","line":100,"updated":"2015-06-25 19:44:18.000000000","message":"I don\u0027t see much benefits of mentioning the above alternative since it\u0027s not really related to the problem description.","commit_id":"87f6525bc5c1024e3d47f013ff6dc275ed5866b2"}]}
