)]}'
{"specs/train/approved/glance/cluster-awareness.rst":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b0837d8d358270dbd25a033a069a9c7217987a57","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/glance/+spec/cluster-awareness"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"With Interoperable Image Import and new edge usecases introducing asynchronous"},{"line_number":16,"context_line":"tasks we cannot expect users always hitting the specific node where data is"},{"line_number":17,"context_line":"located or that needs to do the work. Thus it\u0027s essential that we implement a"},{"line_number":18,"context_line":"way for the glance-api nodes to communicate with eachother and provide the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7faddb67_493bdec6","line":15,"range":{"start_line":15,"start_character":45,"end_line":15,"end_character":53},"updated":"2019-09-05 16:58:53.000000000","message":"use cases","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"65bdfb0ab522681c3244b8666ef83a81a219f182","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/glance/+spec/cluster-awareness"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"With Interoperable Image Import and new edge usecases introducing asynchronous"},{"line_number":16,"context_line":"tasks we cannot expect users always hitting the specific node where data is"},{"line_number":17,"context_line":"located or that needs to do the work. Thus it\u0027s essential that we implement a"},{"line_number":18,"context_line":"way for the glance-api nodes to communicate with eachother and provide the"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5faad753_9d2faef5","line":15,"range":{"start_line":15,"start_character":45,"end_line":15,"end_character":53},"in_reply_to":"7faddb67_493bdec6","updated":"2019-09-06 12:14:30.000000000","message":"Done","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b0837d8d358270dbd25a033a069a9c7217987a57","unresolved":false,"context_lines":[{"line_number":15,"context_line":"With Interoperable Image Import and new edge usecases introducing asynchronous"},{"line_number":16,"context_line":"tasks we cannot expect users always hitting the specific node where data is"},{"line_number":17,"context_line":"located or that needs to do the work. Thus it\u0027s essential that we implement a"},{"line_number":18,"context_line":"way for the glance-api nodes to communicate with eachother and provide the"},{"line_number":19,"context_line":"request to the correct worker."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7faddb67_e945ea44","line":18,"range":{"start_line":18,"start_character":49,"end_line":18,"end_character":58},"updated":"2019-09-05 16:58:53.000000000","message":"each other","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"65bdfb0ab522681c3244b8666ef83a81a219f182","unresolved":false,"context_lines":[{"line_number":15,"context_line":"With Interoperable Image Import and new edge usecases introducing asynchronous"},{"line_number":16,"context_line":"tasks we cannot expect users always hitting the specific node where data is"},{"line_number":17,"context_line":"located or that needs to do the work. Thus it\u0027s essential that we implement a"},{"line_number":18,"context_line":"way for the glance-api nodes to communicate with eachother and provide the"},{"line_number":19,"context_line":"request to the correct worker."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5faad753_5d39363f","line":18,"range":{"start_line":18,"start_character":49,"end_line":18,"end_character":58},"in_reply_to":"7faddb67_e945ea44","updated":"2019-09-06 12:14:30.000000000","message":"Done","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b0837d8d358270dbd25a033a069a9c7217987a57","unresolved":false,"context_lines":[{"line_number":25,"context_line":"Glance local is good example of image-import call that will currently require"},{"line_number":26,"context_line":"the import call to be received by the node that has access to the data, either"},{"line_number":27,"context_line":"via shared filesystem or the data being local on the node receiving the call."},{"line_number":28,"context_line":"We cannot expect this to be te case long term and specially not when Edge is"},{"line_number":29,"context_line":"bringing new challenges with geographically distributed nodes. We need to have"},{"line_number":30,"context_line":"a mechanism to reroute the requests to the nodes that are actually able to"},{"line_number":31,"context_line":"process them."}],"source_content_type":"text/x-rst","patch_set":2,"id":"7faddb67_a975b299","line":28,"range":{"start_line":28,"start_character":28,"end_line":28,"end_character":30},"updated":"2019-09-05 16:58:53.000000000","message":"the","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"65bdfb0ab522681c3244b8666ef83a81a219f182","unresolved":false,"context_lines":[{"line_number":25,"context_line":"Glance local is good example of image-import call that will currently require"},{"line_number":26,"context_line":"the import call to be received by the node that has access to the data, either"},{"line_number":27,"context_line":"via shared filesystem or the data being local on the node receiving the call."},{"line_number":28,"context_line":"We cannot expect this to be te case long term and specially not when Edge is"},{"line_number":29,"context_line":"bringing new challenges with geographically distributed nodes. We need to have"},{"line_number":30,"context_line":"a mechanism to reroute the requests to the nodes that are actually able to"},{"line_number":31,"context_line":"process them."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5faad753_fd3d822c","line":28,"range":{"start_line":28,"start_character":28,"end_line":28,"end_character":30},"in_reply_to":"7faddb67_a975b299","updated":"2019-09-06 12:14:30.000000000","message":"Done","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b0837d8d358270dbd25a033a069a9c7217987a57","unresolved":false,"context_lines":[{"line_number":31,"context_line":"process them."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Another set of problems that are introduced by distributed nodes is how do we"},{"line_number":34,"context_line":"provide best possible user experience to avoid users needing to explicitely"},{"line_number":35,"context_line":"select node for specific request (say initiating image precaching or"},{"line_number":36,"context_line":"image data migration between stores)."},{"line_number":37,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7faddb67_2969c2bc","line":34,"range":{"start_line":34,"start_character":64,"end_line":34,"end_character":75},"updated":"2019-09-05 16:58:53.000000000","message":"explicitly","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"65bdfb0ab522681c3244b8666ef83a81a219f182","unresolved":false,"context_lines":[{"line_number":31,"context_line":"process them."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Another set of problems that are introduced by distributed nodes is how do we"},{"line_number":34,"context_line":"provide best possible user experience to avoid users needing to explicitely"},{"line_number":35,"context_line":"select node for specific request (say initiating image precaching or"},{"line_number":36,"context_line":"image data migration between stores)."},{"line_number":37,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5faad753_1d3bbe38","line":34,"range":{"start_line":34,"start_character":64,"end_line":34,"end_character":75},"in_reply_to":"7faddb67_2969c2bc","updated":"2019-09-06 12:14:30.000000000","message":"Done","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b0837d8d358270dbd25a033a069a9c7217987a57","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Proposed change"},{"line_number":40,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"We introduce cluster awareness into Glance in which the glance-api nodes are"},{"line_number":43,"context_line":"first time aware that there might be other nodes in the cluster and is able to"},{"line_number":44,"context_line":"communicate with them. Using RabbitMQ is industry proven mechanism to achieve"},{"line_number":45,"context_line":"this and is already a requirement to operate Glance. It will provide more than"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7faddb67_29dc6272","line":42,"range":{"start_line":42,"start_character":52,"end_line":42,"end_character":76},"updated":"2019-09-05 16:58:53.000000000","message":"Suggestion: change this to \"each glance-api node is\" (to match the \"is\" on line 43)","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"65bdfb0ab522681c3244b8666ef83a81a219f182","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Proposed change"},{"line_number":40,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"We introduce cluster awareness into Glance in which the glance-api nodes are"},{"line_number":43,"context_line":"first time aware that there might be other nodes in the cluster and is able to"},{"line_number":44,"context_line":"communicate with them. Using RabbitMQ is industry proven mechanism to achieve"},{"line_number":45,"context_line":"this and is already a requirement to operate Glance. It will provide more than"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5faad753_bd470abd","line":42,"range":{"start_line":42,"start_character":52,"end_line":42,"end_character":76},"in_reply_to":"7faddb67_29dc6272","updated":"2019-09-06 12:14:30.000000000","message":"Done","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b0837d8d358270dbd25a033a069a9c7217987a57","unresolved":false,"context_lines":[{"line_number":47,"context_line":"without introducing new dependencies or risk production stability with non-"},{"line_number":48,"context_line":"proven technologies."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"This apporach was previosly approved as lite spec for Rocky cycle but the"},{"line_number":51,"context_line":"increased complexity and needs warrants full spec explaining the details of"},{"line_number":52,"context_line":"the approach instead of blanket statement of us looking into it."},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7faddb67_69c7ba99","line":50,"range":{"start_line":50,"start_character":18,"end_line":50,"end_character":27},"updated":"2019-09-05 16:58:53.000000000","message":"previously","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"65bdfb0ab522681c3244b8666ef83a81a219f182","unresolved":false,"context_lines":[{"line_number":47,"context_line":"without introducing new dependencies or risk production stability with non-"},{"line_number":48,"context_line":"proven technologies."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"This apporach was previosly approved as lite spec for Rocky cycle but the"},{"line_number":51,"context_line":"increased complexity and needs warrants full spec explaining the details of"},{"line_number":52,"context_line":"the approach instead of blanket statement of us looking into it."},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5faad753_dd4446ba","line":50,"range":{"start_line":50,"start_character":18,"end_line":50,"end_character":27},"in_reply_to":"7faddb67_69c7ba99","updated":"2019-09-06 12:14:30.000000000","message":"Done","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b0837d8d358270dbd25a033a069a9c7217987a57","unresolved":false,"context_lines":[{"line_number":55,"context_line":"------------"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"We could leave the glance-api nodes operating independently without any"},{"line_number":58,"context_line":"communication between eachother and push the burden of managing the target API"},{"line_number":59,"context_line":"requirements to the user."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Or we could look into some other mechanism of the nodes communicating with"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7faddb67_09b64626","line":58,"range":{"start_line":58,"start_character":22,"end_line":58,"end_character":31},"updated":"2019-09-05 16:58:53.000000000","message":"each other","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"65bdfb0ab522681c3244b8666ef83a81a219f182","unresolved":false,"context_lines":[{"line_number":55,"context_line":"------------"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"We could leave the glance-api nodes operating independently without any"},{"line_number":58,"context_line":"communication between eachother and push the burden of managing the target API"},{"line_number":59,"context_line":"requirements to the user."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Or we could look into some other mechanism of the nodes communicating with"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5faad753_7d13d2b9","line":58,"range":{"start_line":58,"start_character":22,"end_line":58,"end_character":31},"in_reply_to":"7faddb67_09b64626","updated":"2019-09-06 12:14:30.000000000","message":"Done","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b0837d8d358270dbd25a033a069a9c7217987a57","unresolved":false,"context_lines":[{"line_number":59,"context_line":"requirements to the user."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Or we could look into some other mechanism of the nodes communicating with"},{"line_number":62,"context_line":"eachother, for example calling directly the RestFul API, this would likely"},{"line_number":63,"context_line":"need unacceptable firewall rules to allow distributed calls between the nodes"},{"line_number":64,"context_line":"rather than centralized solution that is already deployed."},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7faddb67_693c9a91","line":62,"range":{"start_line":62,"start_character":0,"end_line":62,"end_character":9},"updated":"2019-09-05 16:58:53.000000000","message":"each other","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"65bdfb0ab522681c3244b8666ef83a81a219f182","unresolved":false,"context_lines":[{"line_number":59,"context_line":"requirements to the user."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Or we could look into some other mechanism of the nodes communicating with"},{"line_number":62,"context_line":"eachother, for example calling directly the RestFul API, this would likely"},{"line_number":63,"context_line":"need unacceptable firewall rules to allow distributed calls between the nodes"},{"line_number":64,"context_line":"rather than centralized solution that is already deployed."},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5faad753_9d180ed4","line":62,"range":{"start_line":62,"start_character":0,"end_line":62,"end_character":9},"in_reply_to":"7faddb67_693c9a91","updated":"2019-09-06 12:14:30.000000000","message":"Done","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b0837d8d358270dbd25a033a069a9c7217987a57","unresolved":false,"context_lines":[{"line_number":90,"context_line":"Other end user impact"},{"line_number":91,"context_line":"---------------------"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Less request micromanagement for endusers and operators."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"Performance Impact"},{"line_number":96,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7faddb67_e94f2a32","line":93,"range":{"start_line":93,"start_character":33,"end_line":93,"end_character":41},"updated":"2019-09-05 16:58:53.000000000","message":"end users","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"65bdfb0ab522681c3244b8666ef83a81a219f182","unresolved":false,"context_lines":[{"line_number":90,"context_line":"Other end user impact"},{"line_number":91,"context_line":"---------------------"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Less request micromanagement for endusers and operators."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"Performance Impact"},{"line_number":96,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5faad753_3d0d5a90","line":93,"range":{"start_line":93,"start_character":33,"end_line":93,"end_character":41},"in_reply_to":"7faddb67_e94f2a32","updated":"2019-09-06 12:14:30.000000000","message":"Done","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b0837d8d358270dbd25a033a069a9c7217987a57","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"This feature will introduce small delays to the API calls with the benefit"},{"line_number":99,"context_line":"of those calls having improved success rate instead of failing as the"},{"line_number":100,"context_line":"receiving node not being able to fulfil them."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Other deployer impact"},{"line_number":103,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7faddb67_e9996a79","line":100,"range":{"start_line":100,"start_character":33,"end_line":100,"end_character":39},"updated":"2019-09-05 16:58:53.000000000","message":"fulfill","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"65bdfb0ab522681c3244b8666ef83a81a219f182","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"This feature will introduce small delays to the API calls with the benefit"},{"line_number":99,"context_line":"of those calls having improved success rate instead of failing as the"},{"line_number":100,"context_line":"receiving node not being able to fulfil them."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Other deployer impact"},{"line_number":103,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5faad753_5d1296b3","line":100,"range":{"start_line":100,"start_character":33,"end_line":100,"end_character":39},"in_reply_to":"7faddb67_e9996a79","updated":"2019-09-06 12:14:30.000000000","message":"Done","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b0837d8d358270dbd25a033a069a9c7217987a57","unresolved":false,"context_lines":[{"line_number":108,"context_line":"----------------"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Distributed nature needs to be taken into account when designing new features"},{"line_number":111,"context_line":"and modifying existing ones."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"Implementation"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7faddb67_496e7e96","line":111,"updated":"2019-09-05 16:58:53.000000000","message":"Good point, it\u0027s worth emphasizing.","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b0837d8d358270dbd25a033a069a9c7217987a57","unresolved":false,"context_lines":[{"line_number":117,"context_line":"Assignee(s)"},{"line_number":118,"context_line":"-----------"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Who is leading the writing of the code? Or is this a blueprint where you\u0027re"},{"line_number":121,"context_line":"throwing it out there to see who picks it up?"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"If more than one person is working on the implementation, please designate the"},{"line_number":124,"context_line":"primary author and contact."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Primary assignee:"},{"line_number":127,"context_line":"  jokke"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7faddb67_c9626ead","line":124,"range":{"start_line":120,"start_character":0,"end_line":124,"end_character":27},"updated":"2019-09-05 16:58:53.000000000","message":"You can delete this.","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"65bdfb0ab522681c3244b8666ef83a81a219f182","unresolved":false,"context_lines":[{"line_number":117,"context_line":"Assignee(s)"},{"line_number":118,"context_line":"-----------"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Who is leading the writing of the code? Or is this a blueprint where you\u0027re"},{"line_number":121,"context_line":"throwing it out there to see who picks it up?"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"If more than one person is working on the implementation, please designate the"},{"line_number":124,"context_line":"primary author and contact."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Primary assignee:"},{"line_number":127,"context_line":"  jokke"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5faad753_fd26e216","line":124,"range":{"start_line":120,"start_character":0,"end_line":124,"end_character":27},"in_reply_to":"7faddb67_c9626ead","updated":"2019-09-06 12:14:30.000000000","message":"Done","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b0837d8d358270dbd25a033a069a9c7217987a57","unresolved":false,"context_lines":[{"line_number":132,"context_line":"Work Items"},{"line_number":133,"context_line":"----------"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"* Introducing server tags as config option for targetting subset of nodes."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"* Implementing the publisher and consumer functions."},{"line_number":138,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"7faddb67_9f8ee824","line":135,"range":{"start_line":135,"start_character":14,"end_line":135,"end_character":73},"updated":"2019-09-05 16:58:53.000000000","message":"Can you say a bit more about what you have in mind here?","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"65bdfb0ab522681c3244b8666ef83a81a219f182","unresolved":false,"context_lines":[{"line_number":132,"context_line":"Work Items"},{"line_number":133,"context_line":"----------"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"* Introducing server tags as config option for targetting subset of nodes."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"* Implementing the publisher and consumer functions."},{"line_number":138,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5faad753_1d241e0d","line":135,"range":{"start_line":135,"start_character":14,"end_line":135,"end_character":73},"in_reply_to":"7faddb67_9f8ee824","updated":"2019-09-06 12:14:30.000000000","message":"I added paragraph to the proposed solution section.","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"65bdfb0ab522681c3244b8666ef83a81a219f182","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"* Piping the needed API calls to redirect the request to the MQ instead of"},{"line_number":140,"context_line":"  instant failure. This part also needs the request to be delayed until we get"},{"line_number":141,"context_line":"  confirmation that some node can actually fulfil the request."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5faad753_bd206af9","line":141,"range":{"start_line":141,"start_character":43,"end_line":141,"end_character":49},"updated":"2019-09-06 12:14:30.000000000","message":"fixed this too.","commit_id":"be9a13624774a3c08ab458be236d707ded501983"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"a90093eb3d18a0350c16d791f8daba0ae9a59aea","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Proposed change"},{"line_number":40,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"We introduce cluster awareness into Glance in which each glance-api node is"},{"line_number":43,"context_line":"first time aware that there might be other nodes in the cluster and is able to"},{"line_number":44,"context_line":"communicate with them. Using RabbitMQ is industry proven mechanism to achieve"},{"line_number":45,"context_line":"this and is already a requirement to operate Glance. It will provide more than"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5faad753_f5181fd4","line":42,"updated":"2019-09-09 06:06:11.000000000","message":"Can we have a deployment + configuration scenario explained.\n\nFor example suppose I have 3 glance-api nodes running then how should I configure servcer_tags config option in glance-api.conf?","commit_id":"1d4cbf73cb67f27a45591f901c39ba79e68049fb"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"c464583f98d19c349686552419f040f4ba86b49d","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Proposed change"},{"line_number":40,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"We introduce cluster awareness into Glance in which each glance-api node is"},{"line_number":43,"context_line":"first time aware that there might be other nodes in the cluster and is able to"},{"line_number":44,"context_line":"communicate with them. Using RabbitMQ is industry proven mechanism to achieve"},{"line_number":45,"context_line":"this and is already a requirement to operate Glance. It will provide more than"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5faad753_d762c316","line":42,"in_reply_to":"5faad753_f5181fd4","updated":"2019-09-09 12:55:00.000000000","message":"Sure, that\u0027s definitely something for the docs patch for this.","commit_id":"1d4cbf73cb67f27a45591f901c39ba79e68049fb"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a6da250772bc7ffeeefa8111f73b69d67b3f2adf","unresolved":false,"context_lines":[{"line_number":47,"context_line":"without introducing new dependencies or risk production stability with non-"},{"line_number":48,"context_line":"proven technologies."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"\u0027glance-api.conf\u0027 will have \"server_tags\" config option that is not expected"},{"line_number":51,"context_line":"to be unified across the cluster. For operators perspective these tags are"},{"line_number":52,"context_line":"for creating groups like \"edge site 1\", \"central datacenter\", \"all api"},{"line_number":53,"context_line":"nodes\"; under the hood they are used to create and subscribe the nodes to"},{"line_number":54,"context_line":"different message queue subjects for routing purposes. The server tags will"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5faad753_b33bba9a","line":51,"range":{"start_line":50,"start_character":64,"end_line":51,"end_character":13},"updated":"2019-09-06 14:28:30.000000000","message":"i think maybe \"not required to be unified\" is more accurate?  (What I mean is the default case would be all glances are in the same group, but for edge cases we might want to partition the nodes.)","commit_id":"1d4cbf73cb67f27a45591f901c39ba79e68049fb"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"c464583f98d19c349686552419f040f4ba86b49d","unresolved":false,"context_lines":[{"line_number":47,"context_line":"without introducing new dependencies or risk production stability with non-"},{"line_number":48,"context_line":"proven technologies."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"\u0027glance-api.conf\u0027 will have \"server_tags\" config option that is not expected"},{"line_number":51,"context_line":"to be unified across the cluster. For operators perspective these tags are"},{"line_number":52,"context_line":"for creating groups like \"edge site 1\", \"central datacenter\", \"all api"},{"line_number":53,"context_line":"nodes\"; under the hood they are used to create and subscribe the nodes to"},{"line_number":54,"context_line":"different message queue subjects for routing purposes. The server tags will"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5faad753_9713eb66","line":51,"range":{"start_line":50,"start_character":64,"end_line":51,"end_character":13},"in_reply_to":"5faad753_b33bba9a","updated":"2019-09-09 12:55:00.000000000","message":"If it\u0027s configured it\u0027s unlikely to be unified. There is always one default queue configured to avoid the mechanism getting stuck. So unless this needs to be separated to smaller units than all, there is no need to configure this.","commit_id":"1d4cbf73cb67f27a45591f901c39ba79e68049fb"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a6da250772bc7ffeeefa8111f73b69d67b3f2adf","unresolved":false,"context_lines":[{"line_number":55,"context_line":"be the unique identifier for specific subset of api nodes that can be targeted"},{"line_number":56,"context_line":"for distributed calls, for example listing cached images on \"edge site 1\"."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"This apporach was previously approved as lite spec for Rocky cycle but the"},{"line_number":59,"context_line":"increased complexity and needs warrants full spec explaining the details of"},{"line_number":60,"context_line":"the approach instead of blanket statement of us looking into it."},{"line_number":61,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5faad753_d3e0b799","line":58,"range":{"start_line":58,"start_character":5,"end_line":58,"end_character":13},"updated":"2019-09-06 14:28:30.000000000","message":"approach (sorry, missed it first time through)","commit_id":"1d4cbf73cb67f27a45591f901c39ba79e68049fb"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a6da250772bc7ffeeefa8111f73b69d67b3f2adf","unresolved":false,"context_lines":[{"line_number":58,"context_line":"This apporach was previously approved as lite spec for Rocky cycle but the"},{"line_number":59,"context_line":"increased complexity and needs warrants full spec explaining the details of"},{"line_number":60,"context_line":"the approach instead of blanket statement of us looking into it."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Alternatives"},{"line_number":63,"context_line":"------------"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5faad753_363d78bb","line":61,"updated":"2019-09-06 14:28:30.000000000","message":"Three questions:\n\nWhat\u0027s the default value for server_tags? I guess it could be an empty topic, but it might be better to have an actual value.\n\nI guess all nodes will both publish to and subscribe from all the server_tags in their config file?\n\nCould you give some more detail to your \"edge site 1\" example?  What I mean is, if you have some normal glance nodes and some edge nodes, which ones get \u0027ES1\u0027 in their server_tags.\n\nWhat it comes down to, is I get how this will work for something like POST v2/images/{image_id}/import -- the node receiving the request publishes \"hey import image_id\" and each consumer checks to see if they have that image_id in their stage, and if so, they do the import.  At that point, how does the info get back to the original node to return a 202, and how will the node know to return a 404?  I guess that\u0027s the same problem for how to get the list-cached-images response from an edge site.  Or maybe I\u0027m not thinking of this the right way.  In any case, a bit more example will help me understand how you see this all hanging together.","commit_id":"1d4cbf73cb67f27a45591f901c39ba79e68049fb"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"c464583f98d19c349686552419f040f4ba86b49d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"This apporach was previously approved as lite spec for Rocky cycle but the"},{"line_number":59,"context_line":"increased complexity and needs warrants full spec explaining the details of"},{"line_number":60,"context_line":"the approach instead of blanket statement of us looking into it."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Alternatives"},{"line_number":63,"context_line":"------------"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5faad753_d73882d4","line":61,"in_reply_to":"5faad753_363d78bb","updated":"2019-09-09 12:55:00.000000000","message":"Like mentioned above, there is default value if it\u0027s not configured and all nodes can be always addressed with the \"glance\" tag. This is to avoid the whole shebang getting totally stuck.\n\nThe tags are only for the topics the node is listening. They will publish to topics based on the request coming in from the api. So your edge nodes would get \"ES1\" tag and your central nodes would get \"CDC\" tag etc.\n\nRabbit handles the responses with return queue for specific messages so that we get the info funneled back. These are just disposable queues that gets autogenerated with uuid as name (directly as rabbit documentation instructs to handle these scenarios). There is timeout for the response, so if none of the nodes in the queue gives green light for having the data, we will return failure to the client.","commit_id":"1d4cbf73cb67f27a45591f901c39ba79e68049fb"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"0a8e318a1674acc009719a6754dd3715be0e2ece","unresolved":false,"context_lines":[{"line_number":58,"context_line":"This apporach was previously approved as lite spec for Rocky cycle but the"},{"line_number":59,"context_line":"increased complexity and needs warrants full spec explaining the details of"},{"line_number":60,"context_line":"the approach instead of blanket statement of us looking into it."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Alternatives"},{"line_number":63,"context_line":"------------"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5faad753_ef5a5f4e","line":61,"in_reply_to":"5faad753_d73882d4","updated":"2019-09-10 18:08:17.000000000","message":"I think you should include some of this in the spec, particularly the business about using the disposable queues.\n\nAlso, from what you say here, the server_tags tell a node what topics to subscribe to.  But how does the publisher know what to include so that the exchange will publish to the appropriate queue?  I\u0027m missing something here.","commit_id":"1d4cbf73cb67f27a45591f901c39ba79e68049fb"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"25ed463a549c1924ae392d4d6343d611e46798cc","unresolved":false,"context_lines":[{"line_number":58,"context_line":"This apporach was previously approved as lite spec for Rocky cycle but the"},{"line_number":59,"context_line":"increased complexity and needs warrants full spec explaining the details of"},{"line_number":60,"context_line":"the approach instead of blanket statement of us looking into it."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Alternatives"},{"line_number":63,"context_line":"------------"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5faad753_ab4449b8","line":61,"in_reply_to":"5faad753_ef5a5f4e","updated":"2019-09-11 12:14:48.000000000","message":"Sure I include the rabbit MQ tutorial [0] into the next revision.\n\nI think the part what you\u0027re missing here is that Usage of the queues is really dependant of the feature that will utilize this ground work. So for example the included image import will just call the topic all nodes are subscribed to by default, plain and simple.\n\nMostly we do not quess what the user might want but expect the request having what we need if user wants something else than default behavior. Say we implement single point cache management API we expect the Tags being documented per deployment. We cannot just quess how the site layout is and how the operator wants to define their topology. The user needs enough information to include the server tag in the request so (s)he can request Glance to precache image X in say Edge Site Y which nodes are tagged with \"ESY\" tag. The responding node will just use the callback queue (this is box standard Rabbit thing explained in the tutoria [0]) for that message to get the response back.\n\nList cached images again doesn\u0027t even need to have tag specified in the request and we can safely default to the queue to all nodes to return the results from the all nodes. Or based on the tags set up in the deployment they can be as granular or simple as the operator wants without Glance needing to worry about any of that, just know which tags to subscribe and publish to the tags in request.\n\nGetting the base as usable as possible makes it really problematic to include any definite model to this spec. Specially as we do not want to make tight limitations on the framework we need to battle against when those features utilizing this is being implemented.\n\nIn short at this point we really don\u0027t need to know which topics we might need to send the message to. That will be defined by the request coming in from user and any possible defaults will be defined by the feature utilizing this.\n\n[0] https://www.rabbitmq.com/tutorials/tutorial-six-python.html","commit_id":"1d4cbf73cb67f27a45591f901c39ba79e68049fb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7a4dbcfce41ab09be6db9f9ddfba7b40aed63c82","unresolved":false,"context_lines":[{"line_number":53,"context_line":"nodes\"; under the hood they are used to create and subscribe the nodes to"},{"line_number":54,"context_line":"different message queue subjects for routing purposes. The server tags will"},{"line_number":55,"context_line":"be the unique identifier for specific subset of api nodes that can be targeted"},{"line_number":56,"context_line":"for distributed calls, for example listing cached images on \"edge site 1\"."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"This approach was previously approved as lite spec for Rocky cycle but the"},{"line_number":59,"context_line":"increased complexity and needs warrants full spec explaining the details of"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1f621f24_154887ca","line":56,"updated":"2020-10-28 17:58:00.000000000","message":"So each node will subscribe to a queue for each of the tags it\u0027s configured for, right? Presumably these will need to be fanout queues, so that if you send a message to that queue, it goes to every subscriber instead of the default which is one-of, round-robin.","commit_id":"bc3baf509d3dcbcc2fc9e703f3509a6786375025"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8878688bca42196e612bdc36ad8f5c425861feb2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"nodes\"; under the hood they are used to create and subscribe the nodes to"},{"line_number":54,"context_line":"different message queue subjects for routing purposes. The server tags will"},{"line_number":55,"context_line":"be the unique identifier for specific subset of api nodes that can be targeted"},{"line_number":56,"context_line":"for distributed calls, for example listing cached images on \"edge site 1\"."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"This approach was previously approved as lite spec for Rocky cycle but the"},{"line_number":59,"context_line":"increased complexity and needs warrants full spec explaining the details of"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1f621f24_db77c7d3","line":56,"in_reply_to":"1f621f24_154887ca","updated":"2020-11-10 13:07:45.000000000","message":"Yes, that was the idea behind this.","commit_id":"bc3baf509d3dcbcc2fc9e703f3509a6786375025"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7a4dbcfce41ab09be6db9f9ddfba7b40aed63c82","unresolved":false,"context_lines":[{"line_number":58,"context_line":"This approach was previously approved as lite spec for Rocky cycle but the"},{"line_number":59,"context_line":"increased complexity and needs warrants full spec explaining the details of"},{"line_number":60,"context_line":"the approach instead of blanket statement of us looking into it."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Alternatives"},{"line_number":63,"context_line":"------------"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1f621f24_d5ca8f4d","line":61,"updated":"2020-10-28 17:58:00.000000000","message":"Can you describe what you\u0027re actually going to do with/via rabbit once you have it?\n\nFrom reading the rest, I gather that you\u0027re planning to basically proxy calls from one worker to the intended one over rabbit, is that right? Like, if someone calls import on worker 7, but the image was staged on worker 3, then we\u0027ll contact worker 3 over the bus and tell it to do the thing that was asked of 7, and then report the result to the caller, is that right? If so, why not just have them talk directly to each other over http? Meaning, why not have worker 3 call to the same API on worker 7\u0027s direct interface?\n\nI can also provide some experience from nova, where we do a lot of this indirection, and can say that you need to be mindful of timeouts, because the one acting as a proxy will have its own timeout to wait for the child to respond, but the caller will have its own, which may be shorter. Note behaviors like doing an RPC call where the message bus goes down will result in an infinite hang (from the caller\u0027s perspective) if the connection to the bus is lost, until it comes back.","commit_id":"bc3baf509d3dcbcc2fc9e703f3509a6786375025"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8878688bca42196e612bdc36ad8f5c425861feb2","unresolved":false,"context_lines":[{"line_number":58,"context_line":"This approach was previously approved as lite spec for Rocky cycle but the"},{"line_number":59,"context_line":"increased complexity and needs warrants full spec explaining the details of"},{"line_number":60,"context_line":"the approach instead of blanket statement of us looking into it."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Alternatives"},{"line_number":63,"context_line":"------------"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"1f621f24_3b37db01","line":61,"in_reply_to":"1f621f24_d5ca8f4d","updated":"2020-11-10 13:07:45.000000000","message":"That is the part we have been trying to sort out _how_ do we actually handle it. Last idea we were investigating was to have \"dry run\" test function in the API that would check if it can actually fulfill the request and if so respond it\u0027s hostname as potential executor. As we discussed during the PTG I think your approach will solve a lot of the issues what comes to the image-import part (as long as we expect the API nodes being able to do http requests to eachother). I think the fanout rabbit queues will be best used for stuff like \"All nodes on site A, precache this image\" or \"everyone, what images you have in your cache\" etc. where we expect response from multiple nodes rather that try ot find the one that can process specific request.","commit_id":"bc3baf509d3dcbcc2fc9e703f3509a6786375025"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7a4dbcfce41ab09be6db9f9ddfba7b40aed63c82","unresolved":false,"context_lines":[{"line_number":74,"context_line":"Data model impact"},{"line_number":75,"context_line":"-----------------"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"None"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"REST API impact"},{"line_number":80,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1f621f24_d5f8cf7d","line":77,"updated":"2020-10-28 17:58:00.000000000","message":"How will the other workers find each other? In the import case above, if the import comes into me as worker 7, how do I know that I need to talk to 3, and what 3\u0027s address is (either over the bus or direct-http)? In nova, each service registers itself in a table, at least for the purposes of calculating message topics. Is that already present in glance (I haven\u0027t looked, but would not have thought so)? Presumably there needs to be some accounting in the import process to say \"and this is waiting on worker 3\" so that worker 7 knows who to delegate to, right?","commit_id":"bc3baf509d3dcbcc2fc9e703f3509a6786375025"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8878688bca42196e612bdc36ad8f5c425861feb2","unresolved":false,"context_lines":[{"line_number":74,"context_line":"Data model impact"},{"line_number":75,"context_line":"-----------------"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"None"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"REST API impact"},{"line_number":80,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1f621f24_db2507c4","line":77,"in_reply_to":"1f621f24_d5f8cf7d","updated":"2020-11-10 13:07:45.000000000","message":"Correct we do not have anything like that in the DB. thus we were thinking of discovering the possible executor via the initial fanout message for each request.","commit_id":"bc3baf509d3dcbcc2fc9e703f3509a6786375025"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7a4dbcfce41ab09be6db9f9ddfba7b40aed63c82","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"This feature will introduce small delays to the API calls with the benefit"},{"line_number":107,"context_line":"of those calls having improved success rate instead of failing as the"},{"line_number":108,"context_line":"receiving node not being able to fulfill them."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Other deployer impact"},{"line_number":111,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1f621f24_f51d0bbe","line":108,"updated":"2020-10-28 17:58:00.000000000","message":"If you took the above http direct approach for things that need to be delegated to specific workers, then it would be trivial to have a boolean flag of \"to proxy or not\". If proxy is enabled, then one worker proxies the call to the other worker internally. If proxy is disabled, it returns a 3xx redirect to the actual URL of the desired worker. In some cases, you would not want to expose your raw workers to users, but in others, it would be massively more efficient to do so (i.e. in an edge case where proxying through a worker at the central location only to ask one at an edge site to do something would be quite indirect).","commit_id":"bc3baf509d3dcbcc2fc9e703f3509a6786375025"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"8878688bca42196e612bdc36ad8f5c425861feb2","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"This feature will introduce small delays to the API calls with the benefit"},{"line_number":107,"context_line":"of those calls having improved success rate instead of failing as the"},{"line_number":108,"context_line":"receiving node not being able to fulfill them."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Other deployer impact"},{"line_number":111,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"1f621f24_bb0beb27","line":108,"in_reply_to":"1f621f24_f51d0bbe","updated":"2020-11-10 13:07:45.000000000","message":"This doesn\u0027t sound like a bad idea at all.","commit_id":"bc3baf509d3dcbcc2fc9e703f3509a6786375025"}],"specs/wallaby/approved/glance/cluster-awareness.rst":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":13,"context_line":"https://blueprints.launchpad.net/glance/+spec/cluster-awareness"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"With Interoperable Image Import and new edge usecases introducing asynchronous"},{"line_number":16,"context_line":"tasks we cannot expect users always hitting the specific node where data is"},{"line_number":17,"context_line":"located or that needs to do the work. Thus it\u0027s essential that we implement a"},{"line_number":18,"context_line":"way for the glance-api nodes to communicate with eachother and provide the"},{"line_number":19,"context_line":"request to the correct worker."}],"source_content_type":"text/x-rst","patch_set":5,"id":"f067b664_a130a9bb","line":16,"range":{"start_line":16,"start_character":23,"end_line":16,"end_character":43},"updated":"2020-11-23 15:40:20.000000000","message":"\"user HTTP requests to always hit\"","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":15,"context_line":"With Interoperable Image Import and new edge usecases introducing asynchronous"},{"line_number":16,"context_line":"tasks we cannot expect users always hitting the specific node where data is"},{"line_number":17,"context_line":"located or that needs to do the work. Thus it\u0027s essential that we implement a"},{"line_number":18,"context_line":"way for the glance-api nodes to communicate with eachother and provide the"},{"line_number":19,"context_line":"request to the correct worker."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This proposal is now split to two parts. Where the Interoperable Image Import"}],"source_content_type":"text/x-rst","patch_set":5,"id":"f98c2b9f_5b5be7b7","line":18,"range":{"start_line":18,"start_character":49,"end_line":18,"end_character":58},"updated":"2020-11-23 15:40:20.000000000","message":"\"each other\"","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":15,"context_line":"With Interoperable Image Import and new edge usecases introducing asynchronous"},{"line_number":16,"context_line":"tasks we cannot expect users always hitting the specific node where data is"},{"line_number":17,"context_line":"located or that needs to do the work. Thus it\u0027s essential that we implement a"},{"line_number":18,"context_line":"way for the glance-api nodes to communicate with eachother and provide the"},{"line_number":19,"context_line":"request to the correct worker."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This proposal is now split to two parts. Where the Interoperable Image Import"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bb8eafb2_aa4afab4","line":18,"range":{"start_line":18,"start_character":63,"end_line":18,"end_character":70},"updated":"2020-11-23 15:40:20.000000000","message":"I would say \"direct\" or \"forward\". The _user_ is \"providing\" the request.","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":26,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Glance has traditionally had the api-service operating with total independence"},{"line_number":29,"context_line":"without any remarks of possible other nodes sharing the load. This is"},{"line_number":30,"context_line":"becoming problematic as users and operators needs to address each individual"},{"line_number":31,"context_line":"nodes to perform common operations like image-precaching."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"cea9c728_c2d17d34","line":29,"range":{"start_line":29,"start_character":12,"end_line":29,"end_character":19},"updated":"2020-11-23 15:40:20.000000000","message":"I don\u0027t think \"remarks\" is the right word here, but I\u0027m not sure exactly what is. Perhaps \"total independence without any _notion_ of possible other nodes\" ?","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Glance has traditionally had the api-service operating with total independence"},{"line_number":29,"context_line":"without any remarks of possible other nodes sharing the load. This is"},{"line_number":30,"context_line":"becoming problematic as users and operators needs to address each individual"},{"line_number":31,"context_line":"nodes to perform common operations like image-precaching."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"1cd6fc55_d947e9ef","line":30,"range":{"start_line":30,"start_character":44,"end_line":30,"end_character":49},"updated":"2020-11-23 15:40:20.000000000","message":"\"need\"","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":28,"context_line":"Glance has traditionally had the api-service operating with total independence"},{"line_number":29,"context_line":"without any remarks of possible other nodes sharing the load. This is"},{"line_number":30,"context_line":"becoming problematic as users and operators needs to address each individual"},{"line_number":31,"context_line":"nodes to perform common operations like image-precaching."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":5,"id":"a57f5228_f5f8f293","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":5},"updated":"2020-11-23 15:40:20.000000000","message":"\"node\"","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":34,"context_line":"Proposed change"},{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"We introduce cluster awareness into Glance in which the glance-api nodes are"},{"line_number":38,"context_line":"first time aware that there might be other nodes in the cluster and is able to"},{"line_number":39,"context_line":"communicate with them. Using RabbitMQ is industry proven mechanism to achieve"},{"line_number":40,"context_line":"this and is already a requirement to operate Glance. It will provide more than"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5bb73194_f2d0e5c3","line":37,"range":{"start_line":37,"start_character":73,"end_line":37,"end_character":76},"updated":"2020-11-23 15:40:20.000000000","message":"\"are, for the first time\"","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"We introduce cluster awareness into Glance in which the glance-api nodes are"},{"line_number":38,"context_line":"first time aware that there might be other nodes in the cluster and is able to"},{"line_number":39,"context_line":"communicate with them. Using RabbitMQ is industry proven mechanism to achieve"},{"line_number":40,"context_line":"this and is already a requirement to operate Glance. It will provide more than"},{"line_number":41,"context_line":"ample tools to address the communication needs between the glance-api nodes"}],"source_content_type":"text/x-rst","patch_set":5,"id":"015487ac_d6a27fd1","line":38,"range":{"start_line":38,"start_character":68,"end_line":38,"end_character":70},"updated":"2020-11-23 15:40:20.000000000","message":"\"are\"","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"We introduce cluster awareness into Glance in which the glance-api nodes are"},{"line_number":38,"context_line":"first time aware that there might be other nodes in the cluster and is able to"},{"line_number":39,"context_line":"communicate with them. Using RabbitMQ is industry proven mechanism to achieve"},{"line_number":40,"context_line":"this and is already a requirement to operate Glance. It will provide more than"},{"line_number":41,"context_line":"ample tools to address the communication needs between the glance-api nodes"},{"line_number":42,"context_line":"without introducing new dependencies or risk production stability with non-"}],"source_content_type":"text/x-rst","patch_set":5,"id":"6cc297e7_a472a637","line":39,"range":{"start_line":39,"start_character":38,"end_line":39,"end_character":40},"updated":"2020-11-23 15:40:20.000000000","message":"\"is an\"","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":42,"context_line":"without introducing new dependencies or risk production stability with non-"},{"line_number":43,"context_line":"proven technologies."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"This apporach was previosly approved as lite spec for Rocky cycle but the"},{"line_number":46,"context_line":"increased complexity and needs warrants full spec explaining the details of"},{"line_number":47,"context_line":"the approach instead of blanket statement of us looking into it."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"066bd4f6_b6bf92e3","line":45,"range":{"start_line":45,"start_character":18,"end_line":45,"end_character":27},"updated":"2020-11-23 15:40:20.000000000","message":"\"previously\"","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":43,"context_line":"proven technologies."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"This apporach was previosly approved as lite spec for Rocky cycle but the"},{"line_number":46,"context_line":"increased complexity and needs warrants full spec explaining the details of"},{"line_number":47,"context_line":"the approach instead of blanket statement of us looking into it."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"As the interoperable Image Import was agreed to be handled by proxying the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"dfe3a897_927fbcb4","line":46,"range":{"start_line":46,"start_character":31,"end_line":46,"end_character":39},"updated":"2020-11-23 15:40:20.000000000","message":"\"warrant a\"","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"This apporach was previosly approved as lite spec for Rocky cycle but the"},{"line_number":46,"context_line":"increased complexity and needs warrants full spec explaining the details of"},{"line_number":47,"context_line":"the approach instead of blanket statement of us looking into it."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"As the interoperable Image Import was agreed to be handled by proxying the"},{"line_number":50,"context_line":"original request to the node that has indicated itself in the db for"}],"source_content_type":"text/x-rst","patch_set":5,"id":"c4c5c1f0_1bd72974","line":47,"range":{"start_line":47,"start_character":24,"end_line":47,"end_character":31},"updated":"2020-11-23 15:40:20.000000000","message":"\"a blanket\"","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":46,"context_line":"increased complexity and needs warrants full spec explaining the details of"},{"line_number":47,"context_line":"the approach instead of blanket statement of us looking into it."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"As the interoperable Image Import was agreed to be handled by proxying the"},{"line_number":50,"context_line":"original request to the node that has indicated itself in the db for"},{"line_number":51,"context_line":"availability, this approach can focus purely on our fanout needs like"},{"line_number":52,"context_line":"the caching API."}],"source_content_type":"text/x-rst","patch_set":5,"id":"2ec722e2_6e34f5f2","line":49,"range":{"start_line":49,"start_character":7,"end_line":49,"end_character":20},"updated":"2020-11-23 15:40:20.000000000","message":"Elsewhere you capitalize this as \"Interoperable\".","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":55,"context_line":"------------"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"We could leave the glance-api nodes operating independently without any"},{"line_number":58,"context_line":"communication between eachother and push the burden of managing the target API"},{"line_number":59,"context_line":"requirements to the user."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Or we could look into some other mechanism of the nodes communicating with"}],"source_content_type":"text/x-rst","patch_set":5,"id":"52c90a5f_fcb79078","line":58,"range":{"start_line":58,"start_character":22,"end_line":58,"end_character":31},"updated":"2020-11-23 15:40:20.000000000","message":"\"each other\"","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":59,"context_line":"requirements to the user."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Or we could look into some other mechanism of the nodes communicating with"},{"line_number":62,"context_line":"eachother, for example calling directly the RestFul API, this would likely"},{"line_number":63,"context_line":"need unacceptable firewall rules to allow distributed calls between the nodes"},{"line_number":64,"context_line":"rather than centralized solution that is already deployed."},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"83443356_160acf9e","line":62,"range":{"start_line":62,"start_character":44,"end_line":62,"end_character":51},"updated":"2020-11-23 15:40:20.000000000","message":"\"RESTful\"","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":78,"context_line":"---------------"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"The glance-api nodes will, instead of just publishing, process data from the"},{"line_number":81,"context_line":"message queues. To make this possible the tokens needs to be transported with"},{"line_number":82,"context_line":"the requests, special care needs to be taken to ensure that the message queue"},{"line_number":83,"context_line":"is deployed securely."},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"d4d8a0e3_7dc5563d","line":81,"range":{"start_line":81,"start_character":42,"end_line":81,"end_character":54},"updated":"2020-11-23 15:40:20.000000000","message":"\"user\u0027s token needs\"","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"The glance-api nodes will, instead of just publishing, process data from the"},{"line_number":81,"context_line":"message queues. To make this possible the tokens needs to be transported with"},{"line_number":82,"context_line":"the requests, special care needs to be taken to ensure that the message queue"},{"line_number":83,"context_line":"is deployed securely."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Notifications impact"}],"source_content_type":"text/x-rst","patch_set":5,"id":"05352e86_31a35a9c","line":82,"range":{"start_line":82,"start_character":4,"end_line":82,"end_character":12},"updated":"2020-11-23 15:40:20.000000000","message":"I would say \"message\" here, to clearly indicate the difference between the HTTP request that caused us to do something from the \"messages\" we send over RPC to take some action.","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":131,"context_line":"Work Items"},{"line_number":132,"context_line":"----------"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"* Introducing server tags as config option for targetting subset of nodes."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"* Implementing the publisher and consumer functions."},{"line_number":137,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"bfc3c018_c068341d","line":134,"range":{"start_line":134,"start_character":21,"end_line":134,"end_character":25},"updated":"2020-11-23 15:40:20.000000000","message":"This is literally the first mention of this in the spec here. I really would like to see more detail in the Proposed Change section about _what_ is being done. I vaguely know what you\u0027re proposing because we\u0027ve discussed it previously, but right now this spec would be pretty mystifying to people I think :)","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"* Introducing server tags as config option for targetting subset of nodes."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"* Implementing the publisher and consumer functions."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* Piping the needed API calls to redirect the request to the MQ instead of"},{"line_number":139,"context_line":"  instant failure. This part also needs an agreemen of the failure mechanisms"}],"source_content_type":"text/x-rst","patch_set":5,"id":"46595269_ff0eadc1","line":136,"updated":"2020-11-23 15:40:20.000000000","message":"I think we discussed using oslo.messaging now that you\u0027re back to a much more conventional use-case for rabbit, so I assume this needs to change to use the proper terminology (RPC server and RPC client)?\n\nHowever, splitting this from the caching use-case (which I believe is the only one currently proposed, right?) makes this a little weird, as that spec/effort is really where that stuff needs to be done.\n\nPerhaps this spec should just plan to set up an empty server and client structure, upon which things like the caching spec can build?","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"* Implementing the publisher and consumer functions."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* Piping the needed API calls to redirect the request to the MQ instead of"},{"line_number":139,"context_line":"  instant failure. This part also needs an agreemen of the failure mechanisms"},{"line_number":140,"context_line":"  and at which stage do we respond to the client."},{"line_number":141,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"c81aab69_cb77915a","line":138,"range":{"start_line":138,"start_character":2,"end_line":138,"end_character":29},"updated":"2020-11-23 15:40:20.000000000","message":"Are you still planning on doing this? I thought the plan for the MQ part of this was now just to support the caching stuff, which would be less about forwarding API calls over RPC and more about making RPC-specific actions for things like the caching? Perhaps just remove this bullet and save the actual work items of using this for the caching spec?","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":136,"context_line":"* Implementing the publisher and consumer functions."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* Piping the needed API calls to redirect the request to the MQ instead of"},{"line_number":139,"context_line":"  instant failure. This part also needs an agreemen of the failure mechanisms"},{"line_number":140,"context_line":"  and at which stage do we respond to the client."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"f8e1aae2_f8145bba","line":139,"range":{"start_line":139,"start_character":43,"end_line":139,"end_character":51},"updated":"2020-11-23 15:40:20.000000000","message":"\"agrement\"","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"* Piping the needed API calls to redirect the request to the MQ instead of"},{"line_number":139,"context_line":"  instant failure. This part also needs an agreemen of the failure mechanisms"},{"line_number":140,"context_line":"  and at which stage do we respond to the client."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":5,"id":"36d8486d_e4c1b70c","line":140,"updated":"2020-11-23 15:40:20.000000000","message":"Fanout messages need to be casts, which means you don\u0027t really get any sort of failure indication, except for a failure to deliver the message to rabbit or something. The only way you could know about per-node success would be to send the fanout and then expect every node to send you a directed message back, which kinda defeats the point of a fanout in the first place. Even still, that would be something likely specific to the caching use-case and not something about the generic functionality you\u0027re describing here.","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":149,"context_line":"Testing"},{"line_number":150,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Unit, Functional and Integration testing needs to be implemented."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":5,"id":"af2dda7c_058480f6","line":152,"updated":"2020-11-23 15:40:20.000000000","message":"What sort of functional and integration tests will come out of this? Since I think the first use of RPC via rabbit will be the caching stuff, I\u0027m not sure what you\u0027ll really be able to test here.\n\nI guess my point is...it\u0027s maybe a little hard to see this being a fully standalone effort from the caching stuff - maybe the best thing to do would be to just roll the MQ bits of this into the caching effort where it can be described more concretely?","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4f2a85072376308a5aab67c244e05b76664c0b62","unresolved":true,"context_lines":[{"line_number":162,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"[0] https://review.opendev.org/763574"},{"line_number":165,"context_line":"https://specs.openstack.org/openstack/glance-specs/specs/rocky/approved/glance/spec-lite-cluster-awareness.html"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9a29bf41_08071345","line":165,"updated":"2020-11-23 15:40:20.000000000","message":"This looks to me like a single URL that was intended to be wrapped. I think you want to put these into a list so they clearly show up as separate items.","commit_id":"825ef0cf6b24c87135db7b82cc914f2499bb4744"}]}
