)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"1d3afc88787c5a8a86552e74f537c2c23676d0cd","unresolved":false,"context_lines":[{"line_number":13,"context_line":"exceptions from all cast calls for all RPC clients."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ia7e6cd717758a9d5b18fe9cb07c55938f52040ce"},{"line_number":16,"context_line":"Partial-Bug: #1705351"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"df3967d1_23af4be4","line":16,"updated":"2017-08-01 18:13:51.000000000","message":"probably also Closes-Bug: #1707160","commit_id":"85d8f6f1c8c51f32b6ec2f6fdc8cc09bbcc060eb"}],"neutron/common/rpc.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"75da847c6388c94939bc11d48ae24711c7de583c","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    def cast(self, ctxt, method, **kwargs):"},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            super(NeutronRPCClient, self).cast(ctxt, method, **kwargs)"},{"line_number":182,"context_line":"        except Exception:"},{"line_number":183,"context_line":"            # TODO(kevinbenton): make catch specific to missing exchange once"},{"line_number":184,"context_line":"            # bug/1705351 is resolved on the oslo.messaging side."},{"line_number":185,"context_line":"            LOG.exception(\"Ignored exception during cast\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_92c2df84","line":182,"updated":"2017-07-24 22:16:21.000000000","message":"I think the problem doing it here is that if someone calls prepare first, it returns an instance of the context. Then if you call cast on that, it would be bypassing the cast method directly on the client.\n\nThat\u0027s why I had to override the call method in the context and not on the client directly.","commit_id":"6685b4cd3fc4b63b90bf42933f5d2765d938e91c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"3bdc8c991f5b7589104cdd758751f0d56c980322","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    def cast(self, ctxt, method, **kwargs):"},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            super(NeutronRPCClient, self).cast(ctxt, method, **kwargs)"},{"line_number":182,"context_line":"        except Exception:"},{"line_number":183,"context_line":"            # TODO(kevinbenton): make catch specific to missing exchange once"},{"line_number":184,"context_line":"            # bug/1705351 is resolved on the oslo.messaging side."},{"line_number":185,"context_line":"            LOG.exception(\"Ignored exception during cast\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_edb70c86","line":182,"updated":"2017-07-24 23:32:28.000000000","message":"I\u0027m sorry but I don\u0027t understand how this is coupling publishers and subscribers. This is only for the publish side casting to protect it from the deleted exchange exception. It\u0027s still a workaround that will be removed once fixed in oslo messaging.","commit_id":"6685b4cd3fc4b63b90bf42933f5d2765d938e91c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"4f831b1368891b0f539960fa226e56c9b5915c39","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    def cast(self, ctxt, method, **kwargs):"},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            super(NeutronRPCClient, self).cast(ctxt, method, **kwargs)"},{"line_number":182,"context_line":"        except Exception:"},{"line_number":183,"context_line":"            # TODO(kevinbenton): make catch specific to missing exchange once"},{"line_number":184,"context_line":"            # bug/1705351 is resolved on the oslo.messaging side."},{"line_number":185,"context_line":"            LOG.exception(\"Ignored exception during cast\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_6ab65ffd","line":182,"updated":"2017-07-25 00:45:59.000000000","message":"The TODO should just be updated to say we need to revisit after oslo.messaging has a fix. The reason I said to adjust the catch is that I was thinking they might just end up throwing a different type of exception. But if they can avoid throwing all together then we can definitely drop this whole thing.","commit_id":"6685b4cd3fc4b63b90bf42933f5d2765d938e91c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"c789734928bd936c286ec817182492160ffb602d","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    def cast(self, ctxt, method, **kwargs):"},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            super(NeutronRPCClient, self).cast(ctxt, method, **kwargs)"},{"line_number":182,"context_line":"        except Exception:"},{"line_number":183,"context_line":"            # TODO(kevinbenton): make catch specific to missing exchange once"},{"line_number":184,"context_line":"            # bug/1705351 is resolved on the oslo.messaging side."},{"line_number":185,"context_line":"            LOG.exception(\"Ignored exception during cast\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_4d25f5aa","line":182,"in_reply_to":"ff346bd7_6ab65ffd","updated":"2017-07-25 01:11:48.000000000","message":"then we\u0027re in agreement.","commit_id":"6685b4cd3fc4b63b90bf42933f5d2765d938e91c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"a050536edc3e29b5b56db441048ca2f77ac3baaf","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    def cast(self, ctxt, method, **kwargs):"},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            super(NeutronRPCClient, self).cast(ctxt, method, **kwargs)"},{"line_number":182,"context_line":"        except Exception:"},{"line_number":183,"context_line":"            # TODO(kevinbenton): make catch specific to missing exchange once"},{"line_number":184,"context_line":"            # bug/1705351 is resolved on the oslo.messaging side."},{"line_number":185,"context_line":"            LOG.exception(\"Ignored exception during cast\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_ed826cc8","line":182,"in_reply_to":"ff346bd7_92c2df84","updated":"2017-07-24 23:26:49.000000000","message":"Personally I am reluctant to add this code here at all, as it feels like we\u0027re coupling the publisher (whoever puts messages on queues via exchanges) and subscribers (whoever consumes messages from queues) [1], as it feels like now a publisher can\u0027t publish if there are no consumers. In an async paradigm like pubsub a publisher shouldn\u0027t care of the life cycle of consumers.\n\nIf the exchange is declared with the auto-deleted bit [2], then it should probably also be auto-recreated if need be (by oslo.messaging). If no consumer is binding the queue to the exchange then the message is discarded and there\u0027s no performance penalty in doing so.  \n\nThat\u0027s the reason why I initially put -1 on the other patch. I needed time to gather my case :)\n\nIMO, the most appropriate fix lies in oslo.messaging, and I wonder whether something has changed in the underlying cast logic to expose this error (which can be seen in other jobs/services - e.g. nova - via logstash).\n\n[1] https://www.rabbitmq.com/tutorials/tutorial-three-python.html\n[2] https://www.rabbitmq.com/amqp-0-9-1-reference.html#exchange.declare.auto-delete","commit_id":"6685b4cd3fc4b63b90bf42933f5d2765d938e91c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"2dbc8b9aed92657a4114116657805c4c5da03971","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    def cast(self, ctxt, method, **kwargs):"},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            super(NeutronRPCClient, self).cast(ctxt, method, **kwargs)"},{"line_number":182,"context_line":"        except Exception:"},{"line_number":183,"context_line":"            # TODO(kevinbenton): make catch specific to missing exchange once"},{"line_number":184,"context_line":"            # bug/1705351 is resolved on the oslo.messaging side."},{"line_number":185,"context_line":"            LOG.exception(\"Ignored exception during cast\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_a8f8d2c3","line":182,"in_reply_to":"ff346bd7_edb70c86","updated":"2017-07-24 23:49:22.000000000","message":"so long as you\u0027re planning to remove this altogether, ie revert this entire patch, I am fine with the stopgap. But that\u0027s not what TODO at lines 183-184 is saying.","commit_id":"6685b4cd3fc4b63b90bf42933f5d2765d938e91c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d225a41d4990ed3295de7da344038265760e6e26","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    def cast(self, ctxt, method, **kwargs):"},{"line_number":108,"context_line":"        try:"},{"line_number":109,"context_line":"            self._original_context.cast(ctxt, method, **kwargs)"},{"line_number":110,"context_line":"        except Exception:"},{"line_number":111,"context_line":"            # TODO(kevinbenton): make catch specific to missing exchange once"},{"line_number":112,"context_line":"            # bug/1705351 is resolved on the oslo.messaging side; if"},{"line_number":113,"context_line":"            # oslo.messaging auto-creates the exchange, then just remove the"}],"source_content_type":"text/x-python","patch_set":4,"id":"df3967d1_e3c94378","line":110,"range":{"start_line":110,"start_character":7,"end_line":110,"end_character":25},"updated":"2017-08-01 18:25:11.000000000","message":"AFAIK, the only case oslo.messaging does not cover is \"channel not found\" error. Is it possible to catch a specific set of exception we know? I am not sure which is better.","commit_id":"85d8f6f1c8c51f32b6ec2f6fdc8cc09bbcc060eb"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d225a41d4990ed3295de7da344038265760e6e26","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            # bug/1705351 is resolved on the oslo.messaging side; if"},{"line_number":113,"context_line":"            # oslo.messaging auto-creates the exchange, then just remove the"},{"line_number":114,"context_line":"            # code completely"},{"line_number":115,"context_line":"            LOG.exception(\"Ignored exception during cast\")"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class _BackingOffContextWrapper(_ContextWrapper):"}],"source_content_type":"text/x-python","patch_set":4,"id":"df3967d1_63b2f3e8","line":115,"range":{"start_line":115,"start_character":27,"end_line":115,"end_character":44},"updated":"2017-08-01 18:25:11.000000000","message":"How about adding information on which exception class from which module is raised here? LOG.exception outputs an exception class name but a module name of an exception class is sometimes unclear. Having some information might help us identify the exception.","commit_id":"85d8f6f1c8c51f32b6ec2f6fdc8cc09bbcc060eb"}]}
