)]}'
{"doc/source/devref/filter_scheduler.rst":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"daa1d8d420c2270ddf994e3e89488f8a69cd43c8","unresolved":false,"context_lines":[{"line_number":107,"context_line":"* |AggregateIoOpsFilter| - filters hosts by I/O operations with per-aggregate"},{"line_number":108,"context_line":"  ``max_io_ops_per_host`` setting. If no per-aggregate value is found, it will"},{"line_number":109,"context_line":"  fall back to the global default ``max_io_ops_per_host``. If more than"},{"line_number":110,"context_line":"  one value is found for a host (meaning the host is in two different"},{"line_number":111,"context_line":"  aggregate with different max io operations settings), the minimum value"},{"line_number":112,"context_line":"  will be used."},{"line_number":113,"context_line":"* |PciPassthroughFilter| - Filter that schedules instances on a host if the host"}],"source_content_type":"text/x-rst","patch_set":25,"id":"7ac7a964_d9958189","line":110,"updated":"2014-08-14 09:52:29.000000000","message":"two \u003d\u003e two or more?","commit_id":"ddddfb18618fd855559287287cf2dff1f4814e13"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"31f5468b5328f2f3ffff6ab7ab1c262dd4073bb4","unresolved":false,"context_lines":[{"line_number":107,"context_line":"* |AggregateIoOpsFilter| - filters hosts by I/O operations with per-aggregate"},{"line_number":108,"context_line":"  ``max_io_ops_per_host`` setting. If no per-aggregate value is found, it will"},{"line_number":109,"context_line":"  fall back to the global default ``max_io_ops_per_host``. If more than"},{"line_number":110,"context_line":"  one value is found for a host (meaning the host is in two different"},{"line_number":111,"context_line":"  aggregate with different max io operations settings), the minimum value"},{"line_number":112,"context_line":"  will be used."},{"line_number":113,"context_line":"* |PciPassthroughFilter| - Filter that schedules instances on a host if the host"}],"source_content_type":"text/x-rst","patch_set":25,"id":"7ac7a964_7909cd94","line":110,"in_reply_to":"7ac7a964_d9958189","updated":"2014-08-14 10:36:43.000000000","message":"Done","commit_id":"ddddfb18618fd855559287287cf2dff1f4814e13"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"daa1d8d420c2270ddf994e3e89488f8a69cd43c8","unresolved":false,"context_lines":[{"line_number":108,"context_line":"  ``max_io_ops_per_host`` setting. If no per-aggregate value is found, it will"},{"line_number":109,"context_line":"  fall back to the global default ``max_io_ops_per_host``. If more than"},{"line_number":110,"context_line":"  one value is found for a host (meaning the host is in two different"},{"line_number":111,"context_line":"  aggregate with different max io operations settings), the minimum value"},{"line_number":112,"context_line":"  will be used."},{"line_number":113,"context_line":"* |PciPassthroughFilter| - Filter that schedules instances on a host if the host"},{"line_number":114,"context_line":"  has devices to meet the device requests in the \u0027extra_specs\u0027 for the flavor."}],"source_content_type":"text/x-rst","patch_set":25,"id":"7ac7a964_f9923d9e","line":111,"updated":"2014-08-14 09:52:29.000000000","message":"aggregate \u003d\u003e aggregates","commit_id":"ddddfb18618fd855559287287cf2dff1f4814e13"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"31f5468b5328f2f3ffff6ab7ab1c262dd4073bb4","unresolved":false,"context_lines":[{"line_number":108,"context_line":"  ``max_io_ops_per_host`` setting. If no per-aggregate value is found, it will"},{"line_number":109,"context_line":"  fall back to the global default ``max_io_ops_per_host``. If more than"},{"line_number":110,"context_line":"  one value is found for a host (meaning the host is in two different"},{"line_number":111,"context_line":"  aggregate with different max io operations settings), the minimum value"},{"line_number":112,"context_line":"  will be used."},{"line_number":113,"context_line":"* |PciPassthroughFilter| - Filter that schedules instances on a host if the host"},{"line_number":114,"context_line":"  has devices to meet the device requests in the \u0027extra_specs\u0027 for the flavor."}],"source_content_type":"text/x-rst","patch_set":25,"id":"7ac7a964_39d8351d","line":111,"in_reply_to":"7ac7a964_f9923d9e","updated":"2014-08-14 10:36:43.000000000","message":"Done","commit_id":"ddddfb18618fd855559287287cf2dff1f4814e13"}],"nova/scheduler/filters/io_ops_filter.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"604e47cd4afa00336ecfe3b8ccb003366889d615","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def _get_max_io_ops(self, host_state, filter_properties):"},{"line_number":68,"context_line":"        context \u003d filter_properties[\u0027context\u0027].elevated()"},{"line_number":69,"context_line":"        # TODO(uni): DB query in filter is a performance hit, especially for"},{"line_number":70,"context_line":"        # system with lots of hosts. Will need a general solution here to fix"},{"line_number":71,"context_line":"        # all filters with aggregate DB call things."},{"line_number":72,"context_line":"        metadata \u003d db.aggregate_metadata_get_by_host("}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F9g0c%3D","line":69,"updated":"2014-02-06 11:59:27.000000000","message":"see another patch you added for disk filter, should be updated?","commit_id":"b256a5dfbf2a918cf08066252a2ae08d6aac035b"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"8c8ec077de456fa7ba3e51336cb477c8b19bbd70","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def _get_max_io_ops(self, host_state, filter_properties):"},{"line_number":68,"context_line":"        context \u003d filter_properties[\u0027context\u0027].elevated()"},{"line_number":69,"context_line":"        # TODO(uni): DB query in filter is a performance hit, especially for"},{"line_number":70,"context_line":"        # system with lots of hosts. Will need a general solution here to fix"},{"line_number":71,"context_line":"        # all filters with aggregate DB call things."},{"line_number":72,"context_line":"        metadata \u003d db.aggregate_metadata_get_by_host("}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F9Vtk%3D","line":69,"in_reply_to":"AAAAUH%2F9g0c%3D","updated":"2014-02-07 16:10:50.000000000","message":"Done","commit_id":"b256a5dfbf2a918cf08066252a2ae08d6aac035b"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"604e47cd4afa00336ecfe3b8ccb003366889d615","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        if num_values \u003e 1:"},{"line_number":81,"context_line":"            LOG.warning(_(\"%(num_values)d values found, \""},{"line_number":82,"context_line":"                          \"of which the minimum value will be used.\"),"},{"line_number":83,"context_line":"                        {\u0027num_values\u0027: num_values})"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        try:"},{"line_number":86,"context_line":"            value \u003d float(min(aggregate_vals))"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F9g0I%3D","line":83,"updated":"2014-02-06 11:59:27.000000000","message":"see disk filter patch comment","commit_id":"b256a5dfbf2a918cf08066252a2ae08d6aac035b"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"8c8ec077de456fa7ba3e51336cb477c8b19bbd70","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        if num_values \u003e 1:"},{"line_number":81,"context_line":"            LOG.warning(_(\"%(num_values)d values found, \""},{"line_number":82,"context_line":"                          \"of which the minimum value will be used.\"),"},{"line_number":83,"context_line":"                        {\u0027num_values\u0027: num_values})"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        try:"},{"line_number":86,"context_line":"            value \u003d float(min(aggregate_vals))"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F9Vtg%3D","line":83,"in_reply_to":"AAAAUH%2F9g0I%3D","updated":"2014-02-07 16:10:50.000000000","message":"Done","commit_id":"b256a5dfbf2a918cf08066252a2ae08d6aac035b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8820b5e1d42450dd612b7fefe9e7d843d88e911d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"class IoOpsFilter(BaseIoOpsFilter):"},{"line_number":55,"context_line":"    \"\"\"Filter out hosts with too many concurrent I/O operations.\"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _get_max_io_ops(self, host_state, filter_properties):"},{"line_number":58,"context_line":"        return CONF.max_io_ops_per_host"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAVn%2F%2F5jw%3D","line":57,"updated":"2014-03-03 15:01:51.000000000","message":"I don\u0027t like these extra base classes that are for no real reason, just add this extra method into the old IoOpsFilter please.","commit_id":"c18573b4fa671c9e9182ed500ee8a1ae1e8beab4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8820b5e1d42450dd612b7fefe9e7d843d88e911d","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        # TODO(sahid): DB query in filter is a performance hit, especially for"},{"line_number":70,"context_line":"        # system with lots of hosts. Will need a general solution here to fix"},{"line_number":71,"context_line":"        # all filters with aggregate DB call things."},{"line_number":72,"context_line":"        metadata \u003d db.aggregate_metadata_get_by_host("},{"line_number":73,"context_line":"            context, host_state.host, key\u003d\u0027max_io_ops_per_host\u0027)"},{"line_number":74,"context_line":"        aggregate_vals \u003d metadata.get(\u0027max_io_ops_per_host\u0027, set())"},{"line_number":75,"context_line":"        num_values \u003d len(aggregate_vals)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAVn%2F%2F5j8%3D","line":72,"updated":"2014-03-03 15:01:51.000000000","message":"I think this needs to use the new object call.\n\nhttps://github.com/openstack/nova/blob/master/nova/objects/aggregate.py#L169\n\nAlso, can we have a helper method to save the cut and paste between all the filters that are very very similar! This is not very DRY.","commit_id":"c18573b4fa671c9e9182ed500ee8a1ae1e8beab4"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"e579198a5632f06e07f8b8996c9f86f1c70b96bd","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        try:"},{"line_number":64,"context_line":"            value \u003d self._validates_aggregate_num_values("},{"line_number":65,"context_line":"                aggregate_vals, CONF.max_io_ops_per_host)"},{"line_number":66,"context_line":"        except ValueError as e:"},{"line_number":67,"context_line":"            LOG.warning(_(\"Could not decode max_io_ops_per_host: \u0027%s\u0027\"), e)"},{"line_number":68,"context_line":"            value \u003d CONF.max_io_ops_per_host"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAVn%2F%2FqC4%3D","line":65,"updated":"2014-03-04 20:17:52.000000000","message":"Passing in the CONF option for the case where there are no values seems a little  strange,  but OK.","commit_id":"140c6328b7d8fac33d3c0823557311afd479cd99"}],"nova/tests/scheduler/test_host_filters.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6288e39feca731284abe2d9fde67054b338ad2c8","unresolved":false,"context_lines":[{"line_number":1861,"context_line":"        host \u003d fakes.FakeHostState(\u0027host1\u0027, \u0027node1\u0027,"},{"line_number":1862,"context_line":"                                   {\u0027num_io_ops\u0027: 7})"},{"line_number":1863,"context_line":"        filter_properties \u003d {\u0027context\u0027: self.context}"},{"line_number":1864,"context_line":"        self.assertFalse(filt_cls.host_passes(host, filter_properties))"},{"line_number":1865,"context_line":"        self._create_aggregate_with_host("},{"line_number":1866,"context_line":"            name\u003d\u0027fake_aggregate\u0027,"},{"line_number":1867,"context_line":"            hosts\u003d[\u0027host1\u0027],"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_d924a110","line":1864,"updated":"2014-08-25 13:20:45.000000000","message":"There is a test for rejection here. :-)","commit_id":"65b3a4f6070a58ce4cb3cfb773fc4b7a3f47979c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f120f659f5fc8663cdf74a10b46d297d72d81473","unresolved":false,"context_lines":[{"line_number":1861,"context_line":"        host \u003d fakes.FakeHostState(\u0027host1\u0027, \u0027node1\u0027,"},{"line_number":1862,"context_line":"                                   {\u0027num_io_ops\u0027: 7})"},{"line_number":1863,"context_line":"        filter_properties \u003d {\u0027context\u0027: self.context}"},{"line_number":1864,"context_line":"        self.assertFalse(filt_cls.host_passes(host, filter_properties))"},{"line_number":1865,"context_line":"        self._create_aggregate_with_host("},{"line_number":1866,"context_line":"            name\u003d\u0027fake_aggregate\u0027,"},{"line_number":1867,"context_line":"            hosts\u003d[\u0027host1\u0027],"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_52d687c6","line":1864,"in_reply_to":"1abeadc6_d924a110","updated":"2014-08-26 08:41:27.000000000","message":"Oh boy, I see it now.\n\nIdeally each of these asserts and calls to host_passes should be in a separate test. It makes it so much clearer to read.\n\nPlease try fix this up in a follow on patch, maybe?","commit_id":"65b3a4f6070a58ce4cb3cfb773fc4b7a3f47979c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"80b0ca6b23762d6092356a93017781c82f64069a","unresolved":false,"context_lines":[{"line_number":1878,"context_line":"            hosts\u003d[\u0027host1\u0027],"},{"line_number":1879,"context_line":"            metadata\u003d{\u0027max_io_ops_per_host\u0027: \u0027XXX\u0027})"},{"line_number":1880,"context_line":"        filter_properties \u003d {\u0027context\u0027: self.context}"},{"line_number":1881,"context_line":"        self.assertTrue(filt_cls.host_passes(host, filter_properties))"}],"source_content_type":"text/x-python","patch_set":26,"id":"1abeadc6_cfcc09be","line":1881,"updated":"2014-08-22 17:07:46.000000000","message":"Really way to see it do at least one rejection as well please.","commit_id":"65b3a4f6070a58ce4cb3cfb773fc4b7a3f47979c"}]}
