)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1cb2766692699c4518500c83d7e2e7b5e9250b7a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"us to do the right thing. Normally, we should not edit this history,"},{"line_number":23,"context_line":"but this is just filling in the value that would have been set when"},{"line_number":24,"context_line":"it was added."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Related to blueprint service-version-behavior"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: I679ebedb739a487e2e4e811c4e89b9c07c8b99bc"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a1a9d01_9ebff4a9","line":25,"updated":"2015-10-02 20:53:52.000000000","message":"Mmm, DocImpact is worth it, nope?\n\nAlso, an UpgradeImpact looks nice for making sure we don\u0027t forget to modify the next relnotes once the wikipage is created for Mitaka.","commit_id":"a913bcf411b1c1192b662ba3b2557b716dc2744c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ea41229a0c461323c5d56b217da9bdb1ace60c85","unresolved":false,"context_lines":[{"line_number":22,"context_line":"us to do the right thing. Normally, we should not edit this history,"},{"line_number":23,"context_line":"but this is just filling in the value that would have been set when"},{"line_number":24,"context_line":"it was added."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Related to blueprint service-version-behavior"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: I679ebedb739a487e2e4e811c4e89b9c07c8b99bc"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a1a9d01_7e49c0cf","line":25,"in_reply_to":"9a1a9d01_9ebff4a9","updated":"2015-10-02 20:57:07.000000000","message":"Yeah, probably","commit_id":"a913bcf411b1c1192b662ba3b2557b716dc2744c"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"fbdcdd5f73d03f4eb0d693755e231e9ef1e64a3f","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        self.client \u003d self.get_client(target, version_cap, serializer)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def _determine_version_cap(self, target):"},{"line_number":327,"context_line":"        # FIXME(danms): We should reload this on SIGHUP, or by timer"},{"line_number":328,"context_line":"        service_version \u003d objects.Service.get_minimum_version("},{"line_number":329,"context_line":"            context.get_admin_context(), \u0027compute\u0027)"},{"line_number":330,"context_line":"        history \u003d service_obj.SERVICE_VERSION_HISTORY"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_cd7cd474","line":327,"updated":"2015-09-15 15:44:52.000000000","message":"You could, but it\u0027s likely the control plane services (users of compute rpcapi) would be bounced first, so I\u0027d say that\u0027s just a nice to have feature.","commit_id":"0223ddd12737dc58a390fffd680a8a6e5f53795a"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"a4897ca692bb8b10f59360fd587eaea5e3ed0aa8","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        self.client \u003d self.get_client(target, version_cap, serializer)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def _determine_version_cap(self, target):"},{"line_number":327,"context_line":"        # FIXME(danms): We should reload this on SIGHUP, or by timer"},{"line_number":328,"context_line":"        service_version \u003d objects.Service.get_minimum_version("},{"line_number":329,"context_line":"            context.get_admin_context(), \u0027compute\u0027)"},{"line_number":330,"context_line":"        history \u003d service_obj.SERVICE_VERSION_HISTORY"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_b96ad07f","line":327,"in_reply_to":"ba15a1d1_1f00aba9","updated":"2015-09-16 15:19:50.000000000","message":"Yeah, derp, you are correct.\n\nSo basically some kind of reload is necessary to do this in a non-disruptive way then.","commit_id":"0223ddd12737dc58a390fffd680a8a6e5f53795a"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"eef8c779885147cb7f7cf99d4967171a9b5b417b","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        self.client \u003d self.get_client(target, version_cap, serializer)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def _determine_version_cap(self, target):"},{"line_number":327,"context_line":"        # FIXME(danms): We should reload this on SIGHUP, or by timer"},{"line_number":328,"context_line":"        service_version \u003d objects.Service.get_minimum_version("},{"line_number":329,"context_line":"            context.get_admin_context(), \u0027compute\u0027)"},{"line_number":330,"context_line":"        history \u003d service_obj.SERVICE_VERSION_HISTORY"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_55223753","line":327,"in_reply_to":"ba15a1d1_b96ad07f","updated":"2015-09-17 08:17:08.000000000","message":"Also, all compute hosts are themselves using this rpcapi to talk to each other so they all need to reload when the last one upgrades.","commit_id":"0223ddd12737dc58a390fffd680a8a6e5f53795a"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"6017b297ac46e176eb91c0022f816bc35df4a512","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        self.client \u003d self.get_client(target, version_cap, serializer)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def _determine_version_cap(self, target):"},{"line_number":327,"context_line":"        # FIXME(danms): We should reload this on SIGHUP, or by timer"},{"line_number":328,"context_line":"        service_version \u003d objects.Service.get_minimum_version("},{"line_number":329,"context_line":"            context.get_admin_context(), \u0027compute\u0027)"},{"line_number":330,"context_line":"        history \u003d service_obj.SERVICE_VERSION_HISTORY"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_1f00aba9","line":327,"in_reply_to":"ba15a1d1_cd7cd474","updated":"2015-09-15 16:59:22.000000000","message":"If the deploy is split between control plane and compute nodes, as is suggested, then the control plane services are not likely to be bounced after all of the compute node upgrades.","commit_id":"0223ddd12737dc58a390fffd680a8a6e5f53795a"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"fbdcdd5f73d03f4eb0d693755e231e9ef1e64a3f","unresolved":false,"context_lines":[{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def _determine_version_cap(self, target):"},{"line_number":327,"context_line":"        # FIXME(danms): We should reload this on SIGHUP, or by timer"},{"line_number":328,"context_line":"        service_version \u003d objects.Service.get_minimum_version("},{"line_number":329,"context_line":"            context.get_admin_context(), \u0027compute\u0027)"},{"line_number":330,"context_line":"        history \u003d service_obj.SERVICE_VERSION_HISTORY"},{"line_number":331,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_485672d3","line":328,"updated":"2015-09-15 15:44:52.000000000","message":"Feel like maybe we should be able to filter out hosts deemed down by the service group api?","commit_id":"0223ddd12737dc58a390fffd680a8a6e5f53795a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"590c84be39af5ac996d223c15e0d8b3ca44b3dea","unresolved":false,"context_lines":[{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def _determine_version_cap(self, target):"},{"line_number":327,"context_line":"        # FIXME(danms): We should reload this on SIGHUP, or by timer"},{"line_number":328,"context_line":"        service_version \u003d objects.Service.get_minimum_version("},{"line_number":329,"context_line":"            context.get_admin_context(), \u0027compute\u0027)"},{"line_number":330,"context_line":"        history \u003d service_obj.SERVICE_VERSION_HISTORY"},{"line_number":331,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_f0f2c46e","line":328,"in_reply_to":"ba15a1d1_3f280fe2","updated":"2015-09-15 18:12:30.000000000","message":"I feel like filtering for down is probably not always going to give us what we want. If one service entry times out because it\u0027s taking a while to restart, I don\u0027t want other nodes to decide they can move on to a newer version before I\u0027m ready.\n\nI think we need to include downed records here, and say that if you have a record that is old and not something that should be considered then delete it. Alternately, we could exclude force_down\u003dTrue in this.","commit_id":"0223ddd12737dc58a390fffd680a8a6e5f53795a"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"6017b297ac46e176eb91c0022f816bc35df4a512","unresolved":false,"context_lines":[{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def _determine_version_cap(self, target):"},{"line_number":327,"context_line":"        # FIXME(danms): We should reload this on SIGHUP, or by timer"},{"line_number":328,"context_line":"        service_version \u003d objects.Service.get_minimum_version("},{"line_number":329,"context_line":"            context.get_admin_context(), \u0027compute\u0027)"},{"line_number":330,"context_line":"        history \u003d service_obj.SERVICE_VERSION_HISTORY"},{"line_number":331,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_3f280fe2","line":328,"in_reply_to":"ba15a1d1_485672d3","updated":"2015-09-15 16:59:22.000000000","message":"I have a preference for the filtering to occur elsewhere, as in downed hosts wouldn\u0027t be returned here because their service entries have been removed.  That may not be practical with our usage of service entries today so maybe filtering here is warranted for now.","commit_id":"0223ddd12737dc58a390fffd680a8a6e5f53795a"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"a4897ca692bb8b10f59360fd587eaea5e3ed0aa8","unresolved":false,"context_lines":[{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def _determine_version_cap(self, target):"},{"line_number":327,"context_line":"        # FIXME(danms): We should reload this on SIGHUP, or by timer"},{"line_number":328,"context_line":"        service_version \u003d objects.Service.get_minimum_version("},{"line_number":329,"context_line":"            context.get_admin_context(), \u0027compute\u0027)"},{"line_number":330,"context_line":"        history \u003d service_obj.SERVICE_VERSION_HISTORY"},{"line_number":331,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_540c993a","line":328,"in_reply_to":"ba15a1d1_68d5481a","updated":"2015-09-16 15:19:50.000000000","message":"+1 to monitoring liveness and and marking services dead.  (out of scope here)\n\nExcluding forced down seems reasonable.","commit_id":"0223ddd12737dc58a390fffd680a8a6e5f53795a"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"c81a0f3dc2123d251a0591979cd9c319e6c40130","unresolved":false,"context_lines":[{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def _determine_version_cap(self, target):"},{"line_number":327,"context_line":"        # FIXME(danms): We should reload this on SIGHUP, or by timer"},{"line_number":328,"context_line":"        service_version \u003d objects.Service.get_minimum_version("},{"line_number":329,"context_line":"            context.get_admin_context(), \u0027compute\u0027)"},{"line_number":330,"context_line":"        history \u003d service_obj.SERVICE_VERSION_HISTORY"},{"line_number":331,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_68d5481a","line":328,"in_reply_to":"ba15a1d1_f0f2c46e","updated":"2015-09-16 14:20:28.000000000","message":"What I meant by filtering elsewhere is what you stated in your second paragraph.  If the service shouldn\u0027t be considered then it should be taken out of the db by something monitoring \u0027liveness\u0027 that can make a determination that something is really gone.  Excluding force_down\u003dTrue seems reasonable if we communicate that using that means an upgrade may be necessary on that node if the service_version updates.","commit_id":"0223ddd12737dc58a390fffd680a8a6e5f53795a"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"eef8c779885147cb7f7cf99d4967171a9b5b417b","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        history \u003d service_obj.SERVICE_VERSION_HISTORY"},{"line_number":331,"context_line":"        try:"},{"line_number":332,"context_line":"            version_cap \u003d history[service_version][\u0027compute_rpc\u0027]"},{"line_number":333,"context_line":"        except IndexError:"},{"line_number":334,"context_line":"            LOG.error(_(\u0027Failed to extract compute RPC version from \u0027"},{"line_number":335,"context_line":"                        \u0027service history because I am too \u0027"},{"line_number":336,"context_line":"                        \u0027old (minimum version is now %(version)i)\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_ba37024c","line":333,"updated":"2015-09-17 08:17:08.000000000","message":"This will stop old control plane services from starting but won\u0027t stop old compute hosts as they will:\n\n1. Create their own compute service record at startup (with old version).\n\n2. Arrive at this check and pass since get_minimum_version() will now give the old version back.\n\nDo we need a check at service creation so that a service won\u0027t lower the min_version when creating its own record?","commit_id":"0223ddd12737dc58a390fffd680a8a6e5f53795a"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"f4bc576f3bfe79e70259f14d1e196edeeb5e5823","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        history \u003d service_obj.SERVICE_VERSION_HISTORY"},{"line_number":331,"context_line":"        try:"},{"line_number":332,"context_line":"            version_cap \u003d history[service_version][\u0027compute_rpc\u0027]"},{"line_number":333,"context_line":"        except IndexError:"},{"line_number":334,"context_line":"            LOG.error(_(\u0027Failed to extract compute RPC version from \u0027"},{"line_number":335,"context_line":"                        \u0027service history because I am too \u0027"},{"line_number":336,"context_line":"                        \u0027old (minimum version is now %(version)i)\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_ebfb4b77","line":333,"in_reply_to":"ba15a1d1_4704bf16","updated":"2015-09-18 06:47:51.000000000","message":"Great, you got that covered then. If you want to do it in a separate change I\u0027m fine with that.","commit_id":"0223ddd12737dc58a390fffd680a8a6e5f53795a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"52a4c572fccd4669de20764113348ccd6e3fad81","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        history \u003d service_obj.SERVICE_VERSION_HISTORY"},{"line_number":331,"context_line":"        try:"},{"line_number":332,"context_line":"            version_cap \u003d history[service_version][\u0027compute_rpc\u0027]"},{"line_number":333,"context_line":"        except IndexError:"},{"line_number":334,"context_line":"            LOG.error(_(\u0027Failed to extract compute RPC version from \u0027"},{"line_number":335,"context_line":"                        \u0027service history because I am too \u0027"},{"line_number":336,"context_line":"                        \u0027old (minimum version is now %(version)i)\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_4704bf16","line":333,"in_reply_to":"ba15a1d1_ba37024c","updated":"2015-09-17 13:43:35.000000000","message":"Yep, my plan was to also hook the service create to do exactly that: fail to let service create/update itself to something below the minimum.","commit_id":"0223ddd12737dc58a390fffd680a8a6e5f53795a"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"fbdcdd5f73d03f4eb0d693755e231e9ef1e64a3f","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        try:"},{"line_number":332,"context_line":"            version_cap \u003d history[service_version][\u0027compute_rpc\u0027]"},{"line_number":333,"context_line":"        except IndexError:"},{"line_number":334,"context_line":"            LOG.error(_(\u0027Failed to extract compute RPC version from \u0027"},{"line_number":335,"context_line":"                        \u0027service history because I am too \u0027"},{"line_number":336,"context_line":"                        \u0027old (minimum version is now %(version)i)\u0027),"},{"line_number":337,"context_line":"                      {\u0027version\u0027: service_version})"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_12c8a721","line":334,"updated":"2015-09-15 15:44:52.000000000","message":"When is \"_LE\" expected versus just plain \"_\"?","commit_id":"0223ddd12737dc58a390fffd680a8a6e5f53795a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"590c84be39af5ac996d223c15e0d8b3ca44b3dea","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        try:"},{"line_number":332,"context_line":"            version_cap \u003d history[service_version][\u0027compute_rpc\u0027]"},{"line_number":333,"context_line":"        except IndexError:"},{"line_number":334,"context_line":"            LOG.error(_(\u0027Failed to extract compute RPC version from \u0027"},{"line_number":335,"context_line":"                        \u0027service history because I am too \u0027"},{"line_number":336,"context_line":"                        \u0027old (minimum version is now %(version)i)\u0027),"},{"line_number":337,"context_line":"                      {\u0027version\u0027: service_version})"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_70ff9434","line":334,"in_reply_to":"ba15a1d1_12c8a721","updated":"2015-09-15 18:12:30.000000000","message":"I should have used _LE here I think.","commit_id":"0223ddd12737dc58a390fffd680a8a6e5f53795a"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"fbdcdd5f73d03f4eb0d693755e231e9ef1e64a3f","unresolved":false,"context_lines":[{"line_number":337,"context_line":"                      {\u0027version\u0027: service_version})"},{"line_number":338,"context_line":"            raise exception.ServiceTooOld()"},{"line_number":339,"context_line":"        except KeyError:"},{"line_number":340,"context_line":"            LOG.error(_(\u0027Failed to extract compute RPC version from \u0027"},{"line_number":341,"context_line":"                        \u0027service history for version %(version)i\u0027),"},{"line_number":342,"context_line":"                      {\u0027version\u0027: service_version})"},{"line_number":343,"context_line":"            return target.version"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_cd6e14c9","line":340,"updated":"2015-09-15 15:44:52.000000000","message":"Isn\u0027t this a an error you would catch at dev-time?  You could just let it raise.","commit_id":"0223ddd12737dc58a390fffd680a8a6e5f53795a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"590c84be39af5ac996d223c15e0d8b3ca44b3dea","unresolved":false,"context_lines":[{"line_number":337,"context_line":"                      {\u0027version\u0027: service_version})"},{"line_number":338,"context_line":"            raise exception.ServiceTooOld()"},{"line_number":339,"context_line":"        except KeyError:"},{"line_number":340,"context_line":"            LOG.error(_(\u0027Failed to extract compute RPC version from \u0027"},{"line_number":341,"context_line":"                        \u0027service history for version %(version)i\u0027),"},{"line_number":342,"context_line":"                      {\u0027version\u0027: service_version})"},{"line_number":343,"context_line":"            return target.version"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_b0ba0c6d","line":340,"in_reply_to":"ba15a1d1_cd6e14c9","updated":"2015-09-15 18:12:30.000000000","message":"it is right now, but since the schema of that history isn\u0027t tightly controlled I figured it might be better to do something reasonable instead of just exploding, especially since this is happening during rpcapi __init__. However, I\u0027m fine with whatever the consensus is.","commit_id":"0223ddd12737dc58a390fffd680a8a6e5f53795a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5c3b89e92ce874dd2082dc6e9b403581681e8bb4","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        except KeyError:"},{"line_number":341,"context_line":"            LOG.error(_LE(\u0027Failed to extract compute RPC version from \u0027"},{"line_number":342,"context_line":"                          \u0027service history for version %(version)i\u0027),"},{"line_number":343,"context_line":"                      {\u0027version\u0027: service_version})"},{"line_number":344,"context_line":"            return target.version"},{"line_number":345,"context_line":"        LOG.info(_LI(\u0027Automatically selected compute RPC version %(rpc)s \u0027"},{"line_number":346,"context_line":"                     \u0027from minimum service version %(service)i\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_59243fae","line":343,"updated":"2015-10-02 01:41:06.000000000","message":"Should this be log level error if we\u0027re going to go ahead and do something and not raise an exception? I tend to think error means things failed and are not continuing. Maybe a warning that tells what version it\u0027s going ahead with (target.version)?","commit_id":"bf835da1974b4c0a15cf48f1e306c2d4886108e0"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ee3d7a4b2d453e5da129e3a721b72b7a84544115","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        except KeyError:"},{"line_number":341,"context_line":"            LOG.error(_LE(\u0027Failed to extract compute RPC version from \u0027"},{"line_number":342,"context_line":"                          \u0027service history for version %(version)i\u0027),"},{"line_number":343,"context_line":"                      {\u0027version\u0027: service_version})"},{"line_number":344,"context_line":"            return target.version"},{"line_number":345,"context_line":"        LOG.info(_LI(\u0027Automatically selected compute RPC version %(rpc)s \u0027"},{"line_number":346,"context_line":"                     \u0027from minimum service version %(service)i\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_ab9abc6c","line":343,"in_reply_to":"9a1a9d01_59243fae","updated":"2015-10-02 20:11:53.000000000","message":"So, this should really only happen if we end up with a service version history element that didn\u0027t include a compute_pc version. I was trying to be graceful here and fall back to the previous behavior in that case. Not knowing what gotchas may lie ahead with this approach I thought I\u0027d probably regret it later if I didn\u0027t.\n\nThat still feels like an error to me, because it\u0027s entirely possible that taking the old default still isn\u0027t going to work. I feel like warnings are things like \"Something timed out\" or \"Disk space is getting low\" and errors are \"Somebody screwed up\".","commit_id":"bf835da1974b4c0a15cf48f1e306c2d4886108e0"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"714488a24ee5d7045477924c42a5fff698929b3c","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        except KeyError:"},{"line_number":341,"context_line":"            LOG.error(_LE(\u0027Failed to extract compute RPC version from \u0027"},{"line_number":342,"context_line":"                          \u0027service history for version %(version)i\u0027),"},{"line_number":343,"context_line":"                      {\u0027version\u0027: service_version})"},{"line_number":344,"context_line":"            return target.version"},{"line_number":345,"context_line":"        LOG.info(_LI(\u0027Automatically selected compute RPC version %(rpc)s \u0027"},{"line_number":346,"context_line":"                     \u0027from minimum service version %(service)i\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_abd63cef","line":343,"in_reply_to":"9a1a9d01_ab9abc6c","updated":"2015-10-02 20:20:19.000000000","message":"If it means that something is definitely wrong and an operator needs to fix something, then I think error level is appropriate. Thanks for explaining it more.","commit_id":"bf835da1974b4c0a15cf48f1e306c2d4886108e0"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"080f455f403c87aa699a95c58d305b776eec0c31","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        self.client \u003d self.get_client(target, version_cap, serializer)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def _determine_version_cap(self, target):"},{"line_number":333,"context_line":"        # FIXME(danms): We should reload this on SIGHUP, or by timer"},{"line_number":334,"context_line":"        service_version \u003d objects.Service.get_minimum_version("},{"line_number":335,"context_line":"            context.get_admin_context(), \u0027compute\u0027)"},{"line_number":336,"context_line":"        history \u003d service_obj.SERVICE_VERSION_HISTORY"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_1c76dd3e","line":333,"updated":"2015-10-05 14:48:12.000000000","message":"is there a reason not to have it re-flushed with an RPC message itself?","commit_id":"95ee0d93733954cc2baa44c92afc60edda08d73e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3462fdf28fff57fc722fb43638e11198585f9d49","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        self.client \u003d self.get_client(target, version_cap, serializer)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def _determine_version_cap(self, target):"},{"line_number":333,"context_line":"        # FIXME(danms): We should reload this on SIGHUP, or by timer"},{"line_number":334,"context_line":"        service_version \u003d objects.Service.get_minimum_version("},{"line_number":335,"context_line":"            context.get_admin_context(), \u0027compute\u0027)"},{"line_number":336,"context_line":"        history \u003d service_obj.SERVICE_VERSION_HISTORY"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_3c7e39af","line":333,"in_reply_to":"7a2fa921_1c76dd3e","updated":"2015-10-05 14:51:07.000000000","message":"Yeah, it\u0027s a DB query, so if we did it every time we sent a message we\u0027d generate a ton of additional load.","commit_id":"95ee0d93733954cc2baa44c92afc60edda08d73e"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"080f455f403c87aa699a95c58d305b776eec0c31","unresolved":false,"context_lines":[{"line_number":344,"context_line":"            raise exception.ServiceTooOld()"},{"line_number":345,"context_line":"        except KeyError:"},{"line_number":346,"context_line":"            LOG.error(_LE(\u0027Failed to extract compute RPC version from \u0027"},{"line_number":347,"context_line":"                          \u0027service history for version %(version)i\u0027),"},{"line_number":348,"context_line":"                      {\u0027version\u0027: service_version})"},{"line_number":349,"context_line":"            return target.version"},{"line_number":350,"context_line":"        LOG.info(_LI(\u0027Automatically selected compute RPC version %(rpc)s \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_9c598d91","line":347,"updated":"2015-10-05 14:48:12.000000000","message":"these error messages seem a little opaque to the admin who is going to debug their fat fingering of a libtery. Though I can\u0027t figure out any better english right now.","commit_id":"95ee0d93733954cc2baa44c92afc60edda08d73e"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"1ab18dcf4d6d8db80545a84c7b8e2a57a6524cce","unresolved":false,"context_lines":[{"line_number":344,"context_line":"            raise exception.ServiceTooOld()"},{"line_number":345,"context_line":"        except KeyError:"},{"line_number":346,"context_line":"            LOG.error(_LE(\u0027Failed to extract compute RPC version from \u0027"},{"line_number":347,"context_line":"                          \u0027service history for version %(version)i\u0027),"},{"line_number":348,"context_line":"                      {\u0027version\u0027: service_version})"},{"line_number":349,"context_line":"            return target.version"},{"line_number":350,"context_line":"        LOG.info(_LI(\u0027Automatically selected compute RPC version %(rpc)s \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_dc494590","line":347,"in_reply_to":"7a2fa921_9c598d91","updated":"2015-10-05 14:51:08.000000000","message":"never mind","commit_id":"95ee0d93733954cc2baa44c92afc60edda08d73e"}],"nova/exception.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5c3b89e92ce874dd2082dc6e9b403581681e8bb4","unresolved":false,"context_lines":[{"line_number":482,"context_line":""},{"line_number":483,"context_line":"class ServiceTooOld(Invalid):"},{"line_number":484,"context_line":"    msg_fmt \u003d _(\"This service is older than the minimum version \""},{"line_number":485,"context_line":"                \"of the rest of the deployment. Unable to continue. \")"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"class DestinationDiskExists(Invalid):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_964e2695","line":485,"range":{"start_line":485,"start_character":67,"end_line":485,"end_character":68},"updated":"2015-10-02 01:41:06.000000000","message":"There\u0027s a trailing space in this string","commit_id":"bf835da1974b4c0a15cf48f1e306c2d4886108e0"}]}
