)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"3e65ca1cf58a8ad91adc70bc6b019a10a9f7b689","unresolved":false,"context_lines":[{"line_number":26,"context_line":"Ultimately, the resource tracker will trap PlacementAPIConflict while"},{"line_number":27,"context_line":"attempting to sync placement from ComputeDriver.update_provider_tree,"},{"line_number":28,"context_line":"and will respond by reinvoking that method and retrying the sync"},{"line_number":29,"context_line":"operation."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"[1] http://eavesdrop.openstack.org/meetings/nova_scheduler/2018/nova_scheduler.2018-01-08-14.00.log.html#l-251"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7f96bb07_efaa65d0","line":29,"updated":"2018-01-15 11:27:51.000000000","message":"Not sure it matters at this stage, but reading this made me think: What\u0027s the expectation with regard to handling PlacementAPIConflict in situations where the virt driver doesn\u0027t yet support update_provier_tree, or perhaps even get_inventory?","commit_id":"c83b750299c4aaac74e20e9cae10082a4b4273e6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bba59681e557e351c795ad3d3f817f2139368495","unresolved":false,"context_lines":[{"line_number":26,"context_line":"Ultimately, the resource tracker will trap PlacementAPIConflict while"},{"line_number":27,"context_line":"attempting to sync placement from ComputeDriver.update_provider_tree,"},{"line_number":28,"context_line":"and will respond by reinvoking that method and retrying the sync"},{"line_number":29,"context_line":"operation."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"[1] http://eavesdrop.openstack.org/meetings/nova_scheduler/2018/nova_scheduler.2018-01-08-14.00.log.html#l-251"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7f96bb07_d0686522","line":29,"in_reply_to":"7f96bb07_efaa65d0","updated":"2018-01-15 15:05:20.000000000","message":"That code path (_update_inventory) only involves inventory, and has retries built in.  As we incorporate generation conflict handling across the other aspects of a provider, we will have to consider both paths to inventory update.  The update_provider_tree code path will likely skip over _update_inventory (where the retry logic lives), and just use _update_inventory_attempt (which does the actual API call).  Though the latter will need to be refactored, as it currently converts 409 to return False.","commit_id":"c83b750299c4aaac74e20e9cae10082a4b4273e6"}],"nova/scheduler/client/report.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"72b49cf3b7e0e1737f07e306e4934f2aa2faa575","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        # conflicts by redriving the operation."},{"line_number":593,"context_line":"        if resp.status_code \u003d\u003d 409:"},{"line_number":594,"context_line":"            raise exception.ResourceProviderCreateConflict("},{"line_number":595,"context_line":"                name\u003dname, uuid\u003duuid, error\u003dresp.text)"},{"line_number":596,"context_line":"        # Generic exception for any other error."},{"line_number":597,"context_line":"        raise exception.ResourceProviderCreationFailed(name\u003dname)"},{"line_number":598,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_5767a14e","line":595,"updated":"2018-01-12 09:42:03.000000000","message":"If this is a benign error, we should probably not log at error level.","commit_id":"f9cf7b5c73de26fdf7506b619ebcec54e1dc9a59"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"6297fbaa513b40fb4619e29b17d1760bc316d353","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        # conflicts by redriving the operation."},{"line_number":593,"context_line":"        if resp.status_code \u003d\u003d 409:"},{"line_number":594,"context_line":"            raise exception.ResourceProviderCreateConflict("},{"line_number":595,"context_line":"                name\u003dname, uuid\u003duuid, error\u003dresp.text)"},{"line_number":596,"context_line":"        # Generic exception for any other error."},{"line_number":597,"context_line":"        raise exception.ResourceProviderCreationFailed(name\u003dname)"},{"line_number":598,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_5c149d4e","line":595,"in_reply_to":"7f96bb07_3968c31f","updated":"2018-01-12 16:21:16.000000000","message":"True, but hopefully if it is not caught by the caller then the exception will be logged at some point. If it\u0027s a \u0027normal\u0027 result then logging an error seems overkill and liable to annoy operators.","commit_id":"f9cf7b5c73de26fdf7506b619ebcec54e1dc9a59"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fa62f1362a2df10911ef22fd75c7950d7f7f93e1","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        # conflicts by redriving the operation."},{"line_number":593,"context_line":"        if resp.status_code \u003d\u003d 409:"},{"line_number":594,"context_line":"            raise exception.ResourceProviderCreateConflict("},{"line_number":595,"context_line":"                name\u003dname, uuid\u003duuid, error\u003dresp.text)"},{"line_number":596,"context_line":"        # Generic exception for any other error."},{"line_number":597,"context_line":"        raise exception.ResourceProviderCreationFailed(name\u003dname)"},{"line_number":598,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_ba692cbf","line":595,"in_reply_to":"7f96bb07_5767a14e","updated":"2018-01-12 09:53:16.000000000","message":"Yeah, in a followup we can think about not logging error for events which causes an automatic retry.","commit_id":"f9cf7b5c73de26fdf7506b619ebcec54e1dc9a59"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8cf516fc32769a62bbf9b28a137da5f48cd9fca5","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        # conflicts by redriving the operation."},{"line_number":593,"context_line":"        if resp.status_code \u003d\u003d 409:"},{"line_number":594,"context_line":"            raise exception.ResourceProviderCreateConflict("},{"line_number":595,"context_line":"                name\u003dname, uuid\u003duuid, error\u003dresp.text)"},{"line_number":596,"context_line":"        # Generic exception for any other error."},{"line_number":597,"context_line":"        raise exception.ResourceProviderCreationFailed(name\u003dname)"},{"line_number":598,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_ea4a7753","line":595,"in_reply_to":"7f96bb07_5c149d4e","updated":"2018-01-12 17:10:44.000000000","message":"Fair point.  Though it *should* be very rare.  If it\u0027s happening a lot, it probably points to a suboptimal algorithm that should be fixed, so it\u0027s a good thing that it annoys operators, so they\u0027ll open a bug for that :)","commit_id":"f9cf7b5c73de26fdf7506b619ebcec54e1dc9a59"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3ef987a05acec679c0a133a2c6571d00fb2642f1","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        # conflicts by redriving the operation."},{"line_number":593,"context_line":"        if resp.status_code \u003d\u003d 409:"},{"line_number":594,"context_line":"            raise exception.ResourceProviderCreateConflict("},{"line_number":595,"context_line":"                name\u003dname, uuid\u003duuid, error\u003dresp.text)"},{"line_number":596,"context_line":"        # Generic exception for any other error."},{"line_number":597,"context_line":"        raise exception.ResourceProviderCreationFailed(name\u003dname)"},{"line_number":598,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_3968c31f","line":595,"in_reply_to":"7f96bb07_ba692cbf","updated":"2018-01-12 15:40:49.000000000","message":"Are you suggesting making the log level lower just for the 409 case?  Like:\n\n if 409:\n     LOG.warning(msg, args)\n     raise Conflict\n LOG.error(msg, args)\n raise Failure\n\nBenign-ness kinda depends on how the caller reacts.  If the caller doesn\u0027t explicitly trap Conflict, it\u0027ll behave like any other exception.","commit_id":"f9cf7b5c73de26fdf7506b619ebcec54e1dc9a59"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"3e65ca1cf58a8ad91adc70bc6b019a10a9f7b689","unresolved":false,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        # Raise a \u0027Conflict\u0027 exception on 409.  Callers will often respond to"},{"line_number":592,"context_line":"        # conflicts by redriving the operation."},{"line_number":593,"context_line":"        if resp.status_code \u003d\u003d 409:"},{"line_number":594,"context_line":"            raise exception.ResourceProviderCreateConflict("},{"line_number":595,"context_line":"                name\u003dname, uuid\u003duuid, error\u003dresp.text)"},{"line_number":596,"context_line":"        # Generic exception for any other error."}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_cf4be928","line":593,"updated":"2018-01-15 11:27:51.000000000","message":"Given the 409 check already happening at line 565, the only time this 409 is going to hit is when there _is_ a name conflict, which is not something a \"redriving the operation\" will be able to correct as presumably the name is fairly stable.\n\nI think what you probably want is to change the block starting at 565 or in the case rp creation, maybe do nothing, the existing code might be correct for create. For update, different rules may apply.","commit_id":"c83b750299c4aaac74e20e9cae10082a4b4273e6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bba59681e557e351c795ad3d3f817f2139368495","unresolved":false,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        # Raise a \u0027Conflict\u0027 exception on 409.  Callers will often respond to"},{"line_number":592,"context_line":"        # conflicts by redriving the operation."},{"line_number":593,"context_line":"        if resp.status_code \u003d\u003d 409:"},{"line_number":594,"context_line":"            raise exception.ResourceProviderCreateConflict("},{"line_number":595,"context_line":"                name\u003dname, uuid\u003duuid, error\u003dresp.text)"},{"line_number":596,"context_line":"        # Generic exception for any other error."}],"source_content_type":"text/x-python","patch_set":5,"id":"7f96bb07_9072dd10","line":593,"in_reply_to":"7f96bb07_cf4be928","updated":"2018-01-15 15:05:20.000000000","message":"I think you\u0027re right - this should be left alone.","commit_id":"c83b750299c4aaac74e20e9cae10082a4b4273e6"}]}
