)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"9a345fe1f17376d81fcb01681958d549be9d5560","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"baeb44ec_55d3f2a4","updated":"2022-03-16 14:48:19.000000000","message":"\u003e Patch Set 11: Code-Review-1\n\u003e \n\u003e (1 comment)\n\u003e \n\u003e This is going to need some admin documentation to explain what is happening and how to get out of a blocked state.\n\nIt seems that we would need a list of the blocked amphora/lb so an admin could know which one to failover in case of a real issue with the amphora\nMaybe we need a new field or a new status in the amphora model to indicate that an amphora is blocked (i.e. cannot failover)","commit_id":"1acd3d68aa6e6b570307e248b37653424f33c608"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"3490525cbd1115c8c5cb2962c7ba20edb4c76899","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"80a24601_c54bb31e","in_reply_to":"baeb44ec_55d3f2a4","updated":"2022-03-30 10:03:59.000000000","message":"Done. The new FAILOVER_STOPPED status will tell the admin which ones are blocked.","commit_id":"1acd3d68aa6e6b570307e248b37653424f33c608"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"ba55698c349061d7b0c20417c9952738fb162e5b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"01d73155_9c29ca80","updated":"2022-03-17 14:04:31.000000000","message":"Need more test coverage","commit_id":"ab915197f7219066efc71648da08dc22a9fe4986"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"e21a505793285f048fee130d82a45ea4b1f3e0b2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"e69b2dc8_7310888e","updated":"2022-03-24 14:33:26.000000000","message":"This is still WIP.","commit_id":"9b140d7e86ecbabf74525b1c5b88301a805cde8a"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"439b411716c292a376d30448b7bbe2c91bd9ca7d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"63c7ce32_68b67179","updated":"2022-04-05 16:55:54.000000000","message":"recheck","commit_id":"ad79736d8a9add35772e7146de118d72b0ceaacc"},{"author":{"_account_id":31933,"name":"Greg Rakauskas","display_name":"Greg Rakauskas","email":"gregraka@redhat.com","username":"gregraka"},"change_message_id":"8a90477d3b8bb6eee39128949f4dc5d0ac827bdd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"0b9c7aa2_d3f0d17d","updated":"2022-04-19 14:22:54.000000000","message":"Hi Tom,\n\nAwesome job on the doc. I felt that I *truly* understood what was going on! 😊\n\nI provided a lot of feedback, primarily to avoid future tense and passive voice.\n\nAlso, there is one question buried in there about the name and location of the config file.\n\nTake or leave my suggestions. Whatever you think is best!\n\nRegards,\n--Greg","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"4710941223877f8f47c44742085f229812ed8c5e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"c72bebb7_df1b8c12","updated":"2022-04-20 08:25:54.000000000","message":"Operating state of amps will no longer get set to ERROR. Documentation rewritten thanks to Greg\u0027s suggestions. 😊","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"4710941223877f8f47c44742085f229812ed8c5e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"71f5e304_f5464db1","in_reply_to":"0b9c7aa2_d3f0d17d","updated":"2022-04-20 08:25:54.000000000","message":"Thanks a lot for your feedback, Greg. It made the documentation much better, plus I learned something from it. 👍","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":31933,"name":"Greg Rakauskas","display_name":"Greg Rakauskas","email":"gregraka@redhat.com","username":"gregraka"},"change_message_id":"afedf109e93591e115c48fb7bc8992e86167c22e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"6a2dd63b_7aebbca6","updated":"2022-04-20 13:10:30.000000000","message":"LGTM, Tom!","commit_id":"7f1a514cd942a55a68ef13df6b33519e10ebf43a"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"2f00ea2db88414738e36d1124e5f3053febaed37","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"0fd451f2_871f814a","updated":"2022-05-05 07:56:26.000000000","message":"Nit: maybe an update in the config sample","commit_id":"7f1a514cd942a55a68ef13df6b33519e10ebf43a"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"3180412545454da8f257cc7afed6cdb471039319","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"ae31a40f_febfbd04","updated":"2022-06-03 12:06:38.000000000","message":"LGTM\n+1 while waiting for TODOs to be resolved","commit_id":"d4fe3770278006d44eb5825db5c2ace81dd17037"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"eb32a3be01c4340c1e4e5889be115c24e2cdd833","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"b07d1a4f_07eb3799","updated":"2022-05-05 09:51:02.000000000","message":"Updated commit message and added tasks to be done after octavia-lib change has been merged and released.","commit_id":"d4fe3770278006d44eb5825db5c2ace81dd17037"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"c01d9876f8056ca08bf663a42a58b376df06fe7b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"b3f86a60_775ca4b8","updated":"2022-08-11 13:06:06.000000000","message":"recheck known issue \"Expected \u0027serve_forever\u0027 to have been called.\"","commit_id":"a2f8c7fe7c82931abb748f790814d08ff649c6e9"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"9b61ae2785e607ad23a09f27c9f923469dbc91ac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"2bc30320_0caa8193","updated":"2022-08-16 08:51:45.000000000","message":"recheck sqlite3.IntegrityError?","commit_id":"a2f8c7fe7c82931abb748f790814d08ff649c6e9"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cda0388fc8079493eb65b4f7d8c8dff9d26b1773","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":38,"id":"5407962e_956ad768","updated":"2022-08-31 22:21:29.000000000","message":"A few comments here. Mostly around language, DB migration, and the SQL optimization.","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"0e0c337610734985f70c60aa52dcb6e2d6dc29c1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":38,"id":"962d9cc7_370000e5","updated":"2022-08-22 08:16:05.000000000","message":"recheck octavia-lib 3.1.0 now in u-c.txt","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"df3d9305a3ee5680118da47c7e991b7f7a9f5e9d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":38,"id":"e4629d05_5bba7b53","updated":"2022-08-18 09:58:39.000000000","message":"recheck octavia-lib 3.1.0 was released","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"35abe3f9506ba7f106e723890756ad9ceb37209f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"ca55a4c0_d26095eb","updated":"2022-09-02 02:54:59.000000000","message":"LGTM","commit_id":"2b9a47923cc4df579a7e15d0104cbfa50d2f5f60"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"17b365a8dbbe468a8f9115b20360779803191d07","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"60e3c7d7_340e905b","updated":"2022-09-02 11:49:28.000000000","message":"Thanks Michael for working on the update. I did some manual testing and it seems to work as expected. Added doc updates in a follow-up patch.","commit_id":"2b9a47923cc4df579a7e15d0104cbfa50d2f5f60"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"b22af8d4b5a96a5b74638f3ad93a6926042b3699","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"925e7eb5_254717fd","updated":"2022-09-02 12:27:26.000000000","message":"Waiting for reviews on the doc patch to approve the 2 commits","commit_id":"2b9a47923cc4df579a7e15d0104cbfa50d2f5f60"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"51665d219807d12b417e5abea10100b64a26d667","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":46,"id":"5cc83b39_ac18dfff","updated":"2022-09-02 15:17:57.000000000","message":"LGTM","commit_id":"1d19b702b1c1aba027f3b128e4e18f221cb6b094"}],"doc/source/admin/failover-circuit-breaker.rst":[{"author":{"_account_id":31933,"name":"Greg Rakauskas","display_name":"Greg Rakauskas","email":"gregraka@redhat.com","username":"gregraka"},"change_message_id":"8a90477d3b8bb6eee39128949f4dc5d0ac827bdd","unresolved":true,"context_lines":[{"line_number":17,"context_line":"Octavia Amphora Failover Circuit Breaker"},{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"In case of larger infrastructure outages the automatic failover process"},{"line_number":21,"context_line":"for stale amphorae may lead to unwanted mass failover events, which can"},{"line_number":22,"context_line":"create a considerable amount of extra load on the servers and might not"},{"line_number":23,"context_line":"even be successful. The amphora failover circuit breaker mechanism can help"}],"source_content_type":"text/x-rst","patch_set":28,"id":"eb24a0bf_59dcf1f3","line":20,"updated":"2022-04-19 14:22:54.000000000","message":"Suggest this alternative:\n\nDuring a large infratructure outage, the automatic failover of stale amphorae can lead to a mass failover event and create a considerable amount of extra load on servers. By using the amphora failover circuit breaker feature, you can avoid these unwanted failover events. The circuit breaker is a configurable threshold value that you can set, and will stop amphorae from automatically failing over whenever that threshold value is met. The circuit breaker feature is disabled by default.","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"4710941223877f8f47c44742085f229812ed8c5e","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Octavia Amphora Failover Circuit Breaker"},{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"In case of larger infrastructure outages the automatic failover process"},{"line_number":21,"context_line":"for stale amphorae may lead to unwanted mass failover events, which can"},{"line_number":22,"context_line":"create a considerable amount of extra load on the servers and might not"},{"line_number":23,"context_line":"even be successful. The amphora failover circuit breaker mechanism can help"}],"source_content_type":"text/x-rst","patch_set":28,"id":"234be029_a184bd99","line":20,"in_reply_to":"eb24a0bf_59dcf1f3","updated":"2022-04-20 08:25:54.000000000","message":"Done","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":31933,"name":"Greg Rakauskas","display_name":"Greg Rakauskas","email":"gregraka@redhat.com","username":"gregraka"},"change_message_id":"8a90477d3b8bb6eee39128949f4dc5d0ac827bdd","unresolved":true,"context_lines":[{"line_number":27,"context_line":"Configuration"},{"line_number":28,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"The configuration variable that defines the threshold value at which"},{"line_number":31,"context_line":"the failover circuit breaker mechanism will become effective is called"},{"line_number":32,"context_line":"*failover_threshold* and part of the *health_manager* group within the"},{"line_number":33,"context_line":"configuration file. Once the number of stale amphorae gets at or above"}],"source_content_type":"text/x-rst","patch_set":28,"id":"5fc6b306_03bf663d","line":30,"updated":"2022-04-19 14:22:54.000000000","message":"Points to note:\n- Avoid future tense whenever possible.\n- Avoid passive voice if possible.\n\nQuestion: \nWhat is the name of this configuration file, and where is it located? \nKnowing this might help the user.\n\nSuggest this alternative:\n\nYou define the threshold value for the failover circuit breaker feature by setting the *failover_threshold* variable. The *failover_threshold* variable is a member of the *health_manager* group within the configuration file.\n\nWhenever the number of stale amphorae reaches or surpasses the value of *failover_threshold*, Octavia performs the following actions:\n\n- stops automatic failovers of amphorae.\n- sets the status of the stale amphorae to *FAILOVER_STOPPED*.\n- logs an error message.","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"4710941223877f8f47c44742085f229812ed8c5e","unresolved":false,"context_lines":[{"line_number":27,"context_line":"Configuration"},{"line_number":28,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"The configuration variable that defines the threshold value at which"},{"line_number":31,"context_line":"the failover circuit breaker mechanism will become effective is called"},{"line_number":32,"context_line":"*failover_threshold* and part of the *health_manager* group within the"},{"line_number":33,"context_line":"configuration file. Once the number of stale amphorae gets at or above"}],"source_content_type":"text/x-rst","patch_set":28,"id":"8170e897_1c3aa9a8","line":30,"in_reply_to":"5fc6b306_03bf663d","updated":"2022-04-20 08:25:54.000000000","message":"Thanks. I will try to follow your advice in the future.","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":31933,"name":"Greg Rakauskas","display_name":"Greg Rakauskas","email":"gregraka@redhat.com","username":"gregraka"},"change_message_id":"8a90477d3b8bb6eee39128949f4dc5d0ac827bdd","unresolved":true,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    ERROR octavia.db.repositories [-] Stale amphora count reached the threshold (3). 4 amphorae were set into FAILOVER_STOPPED status."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":".. note:: The value for *failover_threshold* should be chosen carefully based"},{"line_number":43,"context_line":"    one the size of the environment. We recommend to set it to the typical"},{"line_number":44,"context_line":"    number of amphorae that would be expected on a single host or to a"},{"line_number":45,"context_line":"    value that reflects between 20% and 30% of the total number of amphorae."}],"source_content_type":"text/x-rst","patch_set":28,"id":"37d8bad1_1db25e57","line":42,"updated":"2022-04-19 14:22:54.000000000","message":"Suggest this alternative:\n\nBase the value that you set for *failover_threshold* on the size of your environment. We recommend that you set the value to the typical number of amphorae that you estimate to run on a single host, or to a value that reflects between 20% and 30% of the total number of amphorae.","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"4710941223877f8f47c44742085f229812ed8c5e","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    ERROR octavia.db.repositories [-] Stale amphora count reached the threshold (3). 4 amphorae were set into FAILOVER_STOPPED status."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":".. note:: The value for *failover_threshold* should be chosen carefully based"},{"line_number":43,"context_line":"    one the size of the environment. We recommend to set it to the typical"},{"line_number":44,"context_line":"    number of amphorae that would be expected on a single host or to a"},{"line_number":45,"context_line":"    value that reflects between 20% and 30% of the total number of amphorae."}],"source_content_type":"text/x-rst","patch_set":28,"id":"76ad2cad_f05e65cf","line":42,"in_reply_to":"37d8bad1_1db25e57","updated":"2022-04-20 08:25:54.000000000","message":"Done","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":31933,"name":"Greg Rakauskas","display_name":"Greg Rakauskas","email":"gregraka@redhat.com","username":"gregraka"},"change_message_id":"8a90477d3b8bb6eee39128949f4dc5d0ac827bdd","unresolved":true,"context_lines":[{"line_number":50,"context_line":"Automatic Error Recovery"},{"line_number":51,"context_line":"------------------------"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Octavia will automatically reset the status of amphorae that are"},{"line_number":54,"context_line":"in *FAILOVER_STOPPED* state once it receives new updates from them."},{"line_number":55,"context_line":"The new status will be *ALLOCATED*."},{"line_number":56,"context_line":""}],"source_content_type":"text/x-rst","patch_set":28,"id":"9c71ba88_0ed60892","line":53,"updated":"2022-04-19 14:22:54.000000000","message":"Suggest this alternative:\n\nFor amphorae whose status is *FAILOVER_STOPPED*, Octavia will automatically reset their status to *ALLOCATED* after receiving new updates from these amphorae.","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"4710941223877f8f47c44742085f229812ed8c5e","unresolved":false,"context_lines":[{"line_number":50,"context_line":"Automatic Error Recovery"},{"line_number":51,"context_line":"------------------------"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Octavia will automatically reset the status of amphorae that are"},{"line_number":54,"context_line":"in *FAILOVER_STOPPED* state once it receives new updates from them."},{"line_number":55,"context_line":"The new status will be *ALLOCATED*."},{"line_number":56,"context_line":""}],"source_content_type":"text/x-rst","patch_set":28,"id":"3520b2e7_045919d2","line":53,"in_reply_to":"9c71ba88_0ed60892","updated":"2022-04-20 08:25:54.000000000","message":"Done","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":31933,"name":"Greg Rakauskas","display_name":"Greg Rakauskas","email":"gregraka@redhat.com","username":"gregraka"},"change_message_id":"8a90477d3b8bb6eee39128949f4dc5d0ac827bdd","unresolved":true,"context_lines":[{"line_number":57,"context_line":"Manual Error Recovery"},{"line_number":58,"context_line":"---------------------"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"In order to recover from the *FAILOVER_STOPPED* condition the number"},{"line_number":61,"context_line":"of stale amphorae must be brought to a value below the configured threshold."},{"line_number":62,"context_line":"This requires manual action."},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":28,"id":"2f1b71cc_9fb4ffc3","line":60,"updated":"2022-04-19 14:22:54.000000000","message":"Suggest this alternative:\n\nTo recover from the *FAILOVER_STOPPED* condition, you must manually reduce the value of the stale amphorae below the circuit breaker threshold.","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"4710941223877f8f47c44742085f229812ed8c5e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"Manual Error Recovery"},{"line_number":58,"context_line":"---------------------"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"In order to recover from the *FAILOVER_STOPPED* condition the number"},{"line_number":61,"context_line":"of stale amphorae must be brought to a value below the configured threshold."},{"line_number":62,"context_line":"This requires manual action."},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":28,"id":"abc63000_fe54a888","line":60,"in_reply_to":"2f1b71cc_9fb4ffc3","updated":"2022-04-20 08:25:54.000000000","message":"Done","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":31933,"name":"Greg Rakauskas","display_name":"Greg Rakauskas","email":"gregraka@redhat.com","username":"gregraka"},"change_message_id":"8a90477d3b8bb6eee39128949f4dc5d0ac827bdd","unresolved":true,"context_lines":[{"line_number":61,"context_line":"of stale amphorae must be brought to a value below the configured threshold."},{"line_number":62,"context_line":"This requires manual action."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"The ``openstack loadbalancer amphora list`` command can be used"},{"line_number":65,"context_line":"in order to list the amphorae that are in *FAILOVER_STOPPED* state. Manual"},{"line_number":66,"context_line":"failover can be triggered by the ``openstack loadbalancer amphora failover``"},{"line_number":67,"context_line":"command as shown in the example below."}],"source_content_type":"text/x-rst","patch_set":28,"id":"a74f6c41_1daeae9b","line":64,"updated":"2022-04-19 14:22:54.000000000","message":"Suggest this alternative:\n\nYou can use the ``openstack loadbalancer amphora list`` command to list the amphorae that are in *FAILOVER_STOPPED* state. Use the ``openstack loadbalancer amphora failover`` command to manually trigger the amphora to failover.","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"4710941223877f8f47c44742085f229812ed8c5e","unresolved":false,"context_lines":[{"line_number":61,"context_line":"of stale amphorae must be brought to a value below the configured threshold."},{"line_number":62,"context_line":"This requires manual action."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"The ``openstack loadbalancer amphora list`` command can be used"},{"line_number":65,"context_line":"in order to list the amphorae that are in *FAILOVER_STOPPED* state. Manual"},{"line_number":66,"context_line":"failover can be triggered by the ``openstack loadbalancer amphora failover``"},{"line_number":67,"context_line":"command as shown in the example below."}],"source_content_type":"text/x-rst","patch_set":28,"id":"fda3d934_83c89d09","line":64,"in_reply_to":"a74f6c41_1daeae9b","updated":"2022-04-20 08:25:54.000000000","message":"Done","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":31933,"name":"Greg Rakauskas","display_name":"Greg Rakauskas","email":"gregraka@redhat.com","username":"gregraka"},"change_message_id":"8a90477d3b8bb6eee39128949f4dc5d0ac827bdd","unresolved":true,"context_lines":[{"line_number":66,"context_line":"failover can be triggered by the ``openstack loadbalancer amphora failover``"},{"line_number":67,"context_line":"command as shown in the example below."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"For this example, let\u0027s consider the case where *failover_threshold \u003d 3*"},{"line_number":70,"context_line":"was configured and an infrastructure outage made four amphorae unavailable."},{"line_number":71,"context_line":"Once the health manager process detects that it sets the status of all"},{"line_number":72,"context_line":"stale amphorae to *FAILOVER_STOPPED* as shown below."}],"source_content_type":"text/x-rst","patch_set":28,"id":"fd6069c0_c6ad17ee","line":69,"updated":"2022-04-19 14:22:54.000000000","message":"Suggest this alternative:\n\nIn this example, *failover_threshold \u003d 3* and an infrastructure outage caused four amphorae to become unavailable. After the health manager process detects this state, it sets the status of all stale amphorae to *FAILOVER_STOPPED* as shown below.","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"4710941223877f8f47c44742085f229812ed8c5e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"failover can be triggered by the ``openstack loadbalancer amphora failover``"},{"line_number":67,"context_line":"command as shown in the example below."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"For this example, let\u0027s consider the case where *failover_threshold \u003d 3*"},{"line_number":70,"context_line":"was configured and an infrastructure outage made four amphorae unavailable."},{"line_number":71,"context_line":"Once the health manager process detects that it sets the status of all"},{"line_number":72,"context_line":"stale amphorae to *FAILOVER_STOPPED* as shown below."}],"source_content_type":"text/x-rst","patch_set":28,"id":"e3a04b68_731662b4","line":69,"in_reply_to":"fd6069c0_c6ad17ee","updated":"2022-04-20 08:25:54.000000000","message":"Done","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":31933,"name":"Greg Rakauskas","display_name":"Greg Rakauskas","email":"gregraka@redhat.com","username":"gregraka"},"change_message_id":"8a90477d3b8bb6eee39128949f4dc5d0ac827bdd","unresolved":true,"context_lines":[{"line_number":85,"context_line":"    | 441718e7-0956-436b-9f99-9a476339d7d2 | ab513cb3-8f5d-461e-b7ae-a06b5083a371 | FAILOVER_STOPPED | BACKUP | 192.168.0.148 | 10.0.0.26 |"},{"line_number":86,"context_line":"    +--------------------------------------+--------------------------------------+------------------+--------+---------------+-----------+"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Once the cause for the infrastructure outage has been resolved, administrators"},{"line_number":89,"context_line":"may need to trigger failover manually in order to return to normal operation."},{"line_number":90,"context_line":"In this example two manual failovers are necessary in order to get the"},{"line_number":91,"context_line":"number of stale amphorae below the configured threshold of three:"}],"source_content_type":"text/x-rst","patch_set":28,"id":"36d233cf_2c46ba18","line":88,"updated":"2022-04-19 14:22:54.000000000","message":"Suggest this alternative:\n\nAfter an operator has resolved the infrastructure outage, they might need to manually trigger failovers to return to normal operation. In this example, two manual failovers are necessary to get the number of stale amphorae below the configured threshold of three:","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"4710941223877f8f47c44742085f229812ed8c5e","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    | 441718e7-0956-436b-9f99-9a476339d7d2 | ab513cb3-8f5d-461e-b7ae-a06b5083a371 | FAILOVER_STOPPED | BACKUP | 192.168.0.148 | 10.0.0.26 |"},{"line_number":86,"context_line":"    +--------------------------------------+--------------------------------------+------------------+--------+---------------+-----------+"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Once the cause for the infrastructure outage has been resolved, administrators"},{"line_number":89,"context_line":"may need to trigger failover manually in order to return to normal operation."},{"line_number":90,"context_line":"In this example two manual failovers are necessary in order to get the"},{"line_number":91,"context_line":"number of stale amphorae below the configured threshold of three:"}],"source_content_type":"text/x-rst","patch_set":28,"id":"e360a99c_95bd9659","line":88,"in_reply_to":"36d233cf_2c46ba18","updated":"2022-04-20 08:25:54.000000000","message":"Done","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":31933,"name":"Greg Rakauskas","display_name":"Greg Rakauskas","email":"gregraka@redhat.com","username":"gregraka"},"change_message_id":"8a90477d3b8bb6eee39128949f4dc5d0ac827bdd","unresolved":true,"context_lines":[{"line_number":117,"context_line":"    | f82eff89-e326-4e9d-86bc-58c720220a3f | ab513cb3-8f5d-461e-b7ae-a06b5083a371 | ALLOCATED | BACKUP | 192.168.0.86  | 10.0.0.26 |"},{"line_number":118,"context_line":"    +--------------------------------------+--------------------------------------+-----------+--------+---------------+-----------+"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Once the number of stale amphorae gets below the configured threshold value"},{"line_number":121,"context_line":"normal operation will resume and automatic failover will try to restore the"},{"line_number":122,"context_line":"remaining stale amphorae."}],"source_content_type":"text/x-rst","patch_set":28,"id":"fba6fd88_e2a6f6a2","line":120,"updated":"2022-04-19 14:22:54.000000000","message":"Suggest this alternative:\n\nAfter the number of stale amphorae falls below the configured threshold value, normal operation resumes and the automatic failover process attempts to restore the remaining stale amphorae.","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"4710941223877f8f47c44742085f229812ed8c5e","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    | f82eff89-e326-4e9d-86bc-58c720220a3f | ab513cb3-8f5d-461e-b7ae-a06b5083a371 | ALLOCATED | BACKUP | 192.168.0.86  | 10.0.0.26 |"},{"line_number":118,"context_line":"    +--------------------------------------+--------------------------------------+-----------+--------+---------------+-----------+"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Once the number of stale amphorae gets below the configured threshold value"},{"line_number":121,"context_line":"normal operation will resume and automatic failover will try to restore the"},{"line_number":122,"context_line":"remaining stale amphorae."}],"source_content_type":"text/x-rst","patch_set":28,"id":"bb5ea052_9b84d234","line":120,"in_reply_to":"fba6fd88_e2a6f6a2","updated":"2022-04-20 08:25:54.000000000","message":"Done","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cda0388fc8079493eb65b4f7d8c8dff9d26b1773","unresolved":true,"context_lines":[{"line_number":49,"context_line":".. note:: Base the value that you set for *failover_threshold* on the"},{"line_number":50,"context_line":"    size of your environment. We recommend that you set the value to"},{"line_number":51,"context_line":"    the typical number of amphorae that you estimate to run on a"},{"line_number":52,"context_line":"    single host, or to a value that reflects between 20% and 30%"},{"line_number":53,"context_line":"    of the total number of amphorae."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Error Recovery"}],"source_content_type":"text/x-rst","patch_set":38,"id":"30d9c26c_fc90a48a","line":52,"range":{"start_line":52,"start_character":4,"end_line":52,"end_character":15},"updated":"2022-08-31 22:21:29.000000000","message":"nit: A single host should be a normal failover event. You would only want to enable this for a larger number, such as a full rack.","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"b5dfad9eaebc8975b31276f30e05368e189b23e4","unresolved":false,"context_lines":[{"line_number":49,"context_line":".. note:: Base the value that you set for *failover_threshold* on the"},{"line_number":50,"context_line":"    size of your environment. We recommend that you set the value to"},{"line_number":51,"context_line":"    the typical number of amphorae that you estimate to run on a"},{"line_number":52,"context_line":"    single host, or to a value that reflects between 20% and 30%"},{"line_number":53,"context_line":"    of the total number of amphorae."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Error Recovery"}],"source_content_type":"text/x-rst","patch_set":38,"id":"eac3e681_3742ac08","line":52,"range":{"start_line":52,"start_character":4,"end_line":52,"end_character":15},"in_reply_to":"30d9c26c_fc90a48a","updated":"2022-09-02 10:44:22.000000000","message":"Updated in a follow-up patch.","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cda0388fc8079493eb65b4f7d8c8dff9d26b1773","unresolved":true,"context_lines":[{"line_number":85,"context_line":"    +--------------------------------------+--------------------------------------+------------------+--------+---------------+-----------+"},{"line_number":86,"context_line":"    | id                                   | loadbalancer_id                      | status           | role   | lb_network_ip | ha_ip     |"},{"line_number":87,"context_line":"    +--------------------------------------+--------------------------------------+------------------+--------+---------------+-----------+"},{"line_number":88,"context_line":"    | 79f0e06d-446d-448a-9d2b-c3b89d0c700d | 8fd2cac5-cbca-4bb1-bcfc-daba43e097ab | FAILOVER_STOPPED | BACKUP | 192.168.0.108 | 10.0.0.17 |"},{"line_number":89,"context_line":"    | 9c0416d7-6293-4f13-8f67-61e5d757b36e | 4b13dda1-296a-400c-8248-1abad5728057 | ALLOCATED        | MASTER | 192.168.0.198 | 10.0.0.42 |"},{"line_number":90,"context_line":"    | e11208b7-f13d-4db3-9ded-1ee6f70a0502 | 8fd2cac5-cbca-4bb1-bcfc-daba43e097ab | FAILOVER_STOPPED | MASTER | 192.168.0.154 | 10.0.0.17 |"},{"line_number":91,"context_line":"    | ceea9fff-71a2-48c8-a968-e51dc440c572 | ab513cb3-8f5d-461e-b7ae-a06b5083a371 | ALLOCATED        | MASTER | 192.168.0.149 | 10.0.0.26 |"}],"source_content_type":"text/x-rst","patch_set":38,"id":"f87f70e3_8825cd22","line":88,"range":{"start_line":88,"start_character":128,"end_line":88,"end_character":138},"updated":"2022-08-31 22:21:29.000000000","message":"nit: This should use a documentation IP address range.","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"738c6d8e0419db18a643c3f73fd2e8c018833438","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    +--------------------------------------+--------------------------------------+------------------+--------+---------------+-----------+"},{"line_number":86,"context_line":"    | id                                   | loadbalancer_id                      | status           | role   | lb_network_ip | ha_ip     |"},{"line_number":87,"context_line":"    +--------------------------------------+--------------------------------------+------------------+--------+---------------+-----------+"},{"line_number":88,"context_line":"    | 79f0e06d-446d-448a-9d2b-c3b89d0c700d | 8fd2cac5-cbca-4bb1-bcfc-daba43e097ab | FAILOVER_STOPPED | BACKUP | 192.168.0.108 | 10.0.0.17 |"},{"line_number":89,"context_line":"    | 9c0416d7-6293-4f13-8f67-61e5d757b36e | 4b13dda1-296a-400c-8248-1abad5728057 | ALLOCATED        | MASTER | 192.168.0.198 | 10.0.0.42 |"},{"line_number":90,"context_line":"    | e11208b7-f13d-4db3-9ded-1ee6f70a0502 | 8fd2cac5-cbca-4bb1-bcfc-daba43e097ab | FAILOVER_STOPPED | MASTER | 192.168.0.154 | 10.0.0.17 |"},{"line_number":91,"context_line":"    | ceea9fff-71a2-48c8-a968-e51dc440c572 | ab513cb3-8f5d-461e-b7ae-a06b5083a371 | ALLOCATED        | MASTER | 192.168.0.149 | 10.0.0.26 |"}],"source_content_type":"text/x-rst","patch_set":38,"id":"be54dea9_e4c6a226","line":88,"range":{"start_line":88,"start_character":128,"end_line":88,"end_character":138},"in_reply_to":"f87f70e3_8825cd22","updated":"2022-09-01 15:47:17.000000000","message":"Done","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cda0388fc8079493eb65b4f7d8c8dff9d26b1773","unresolved":true,"context_lines":[{"line_number":94,"context_line":"    +--------------------------------------+--------------------------------------+------------------+--------+---------------+-----------+"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"After an operator has resolved the infrastructure outage,"},{"line_number":97,"context_line":"he might need to manually trigger failovers to return to"},{"line_number":98,"context_line":"normal operation. In this example, two manual failovers are"},{"line_number":99,"context_line":"necessary to get the number of stale amphorae below the"},{"line_number":100,"context_line":"configured threshold of three:"}],"source_content_type":"text/x-rst","patch_set":38,"id":"11ad71ab_d7b5a840","line":97,"range":{"start_line":97,"start_character":0,"end_line":97,"end_character":2},"updated":"2022-08-31 22:21:29.000000000","message":"We should use gender neutral language.\nSee the pronouns rule here: https://wiki.openstack.org/wiki/Diversity/Inclusivity","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"738c6d8e0419db18a643c3f73fd2e8c018833438","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    +--------------------------------------+--------------------------------------+------------------+--------+---------------+-----------+"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"After an operator has resolved the infrastructure outage,"},{"line_number":97,"context_line":"he might need to manually trigger failovers to return to"},{"line_number":98,"context_line":"normal operation. In this example, two manual failovers are"},{"line_number":99,"context_line":"necessary to get the number of stale amphorae below the"},{"line_number":100,"context_line":"configured threshold of three:"}],"source_content_type":"text/x-rst","patch_set":38,"id":"a851d49b_6545bfbc","line":97,"range":{"start_line":97,"start_character":0,"end_line":97,"end_character":2},"in_reply_to":"11ad71ab_d7b5a840","updated":"2022-09-01 15:47:17.000000000","message":"Done","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"}],"etc/octavia.conf":[{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"7b0881b405fb31ae6f97c8aab701f91335166e8e","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"# Maximum limit for the number of amphorae simultaneously pending failover before"},{"line_number":123,"context_line":"# halting the automatic failover process (an attempt to prevent failover cascades):"},{"line_number":124,"context_line":"# failover_threshold \u003d"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"[keystone_authtoken]"},{"line_number":127,"context_line":"# This group of config options are imported from keystone middleware. Thus the"}],"source_content_type":"text/plain","patch_set":10,"id":"1f621f24_7c7d6d6d","line":124,"updated":"2020-10-28 10:06:56.000000000","message":"in my opinion. use percentage is more nice.","commit_id":"686dd202356003a35332e5197c20c7ae27b47f95"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"635f292c80bff2653c64c390cc91b67c4a82ffc6","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"# Maximum limit for the number of amphorae simultaneously pending failover before"},{"line_number":123,"context_line":"# halting the automatic failover process (an attempt to prevent failover cascades):"},{"line_number":124,"context_line":"# failover_threshold \u003d"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"[keystone_authtoken]"},{"line_number":127,"context_line":"# This group of config options are imported from keystone middleware. Thus the"}],"source_content_type":"text/plain","patch_set":10,"id":"9f08dc4c_4ec0b54e","line":124,"in_reply_to":"1f621f24_7c7d6d6d","updated":"2021-01-06 16:36:14.000000000","message":"My feeling is that percentage is not actually going to do what you want. For example, imagine two clouds:\n\nCloud A1 has 20 LBs, so 40 amps. If we set the failover threshold to 10%, that\u0027s 4 amps. It\u0027s entirely possible that 4 amps might need to failover simultaneously just from a single HV having a hiccup, which should be fine. I\u0027d want a percentage closer to 25% to account for this cloud (because my real goal would be to make the threshold \"10\" and calculate the percentage backwards from that).\n\nCloud B2 has 1000 LBs, so 2000 amps. If we set the failover threshold to 10%, that\u0027s 200 amps that would need to fail to reach the threshold. That\u0027s crazy high, by that point we\u0027ve got 100 broken LBs before we decide to stop. I\u0027d want to set the threshold somewhere closer to 1% for this cloud (because my real goal would be to make the threshold \"20\" and calculate the percentage backwards from that).\n\nIMO the percentage solution is never what I actually want, I would in all cases rather calculate a reasonable number and use that (though we SHOULD probably provide some guidelines about how to make that calculation).","commit_id":"686dd202356003a35332e5197c20c7ae27b47f95"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"2f00ea2db88414738e36d1124e5f3053febaed37","unresolved":true,"context_lines":[{"line_number":128,"context_line":"# heartbeat_timeout \u003d 60"},{"line_number":129,"context_line":"# health_check_interval \u003d 3"},{"line_number":130,"context_line":"# sock_rlimit \u003d 0"},{"line_number":131,"context_line":"# Maximum limit for the number of amphorae simultaneously pending failover before"},{"line_number":132,"context_line":"# halting the automatic failover process (an attempt to prevent failover cascades):"},{"line_number":133,"context_line":"# failover_threshold \u003d"},{"line_number":134,"context_line":""}],"source_content_type":"text/plain","patch_set":29,"id":"1aeac1c9_084eddfb","line":131,"range":{"start_line":131,"start_character":2,"end_line":131,"end_character":81},"updated":"2022-05-05 07:56:26.000000000","message":"I would rather put the description of the option from config.py","commit_id":"7f1a514cd942a55a68ef13df6b33519e10ebf43a"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"eb32a3be01c4340c1e4e5889be115c24e2cdd833","unresolved":false,"context_lines":[{"line_number":128,"context_line":"# heartbeat_timeout \u003d 60"},{"line_number":129,"context_line":"# health_check_interval \u003d 3"},{"line_number":130,"context_line":"# sock_rlimit \u003d 0"},{"line_number":131,"context_line":"# Maximum limit for the number of amphorae simultaneously pending failover before"},{"line_number":132,"context_line":"# halting the automatic failover process (an attempt to prevent failover cascades):"},{"line_number":133,"context_line":"# failover_threshold \u003d"},{"line_number":134,"context_line":""}],"source_content_type":"text/plain","patch_set":29,"id":"70c94624_176b9884","line":131,"range":{"start_line":131,"start_character":2,"end_line":131,"end_character":81},"in_reply_to":"1aeac1c9_084eddfb","updated":"2022-05-05 09:51:02.000000000","message":"Done","commit_id":"7f1a514cd942a55a68ef13df6b33519e10ebf43a"}],"lower-constraints.txt":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"eb32a3be01c4340c1e4e5889be115c24e2cdd833","unresolved":true,"context_lines":[{"line_number":72,"context_line":"netaddr\u003d\u003d0.7.19"},{"line_number":73,"context_line":"netifaces\u003d\u003d0.10.4"},{"line_number":74,"context_line":"networkx\u003d\u003d2.1.0"},{"line_number":75,"context_line":"octavia-lib\u003d\u003d2.5.0  # FIXME: update after schema change and new release"},{"line_number":76,"context_line":"openstacksdk\u003d\u003d0.12.0"},{"line_number":77,"context_line":"os-client-config\u003d\u003d1.29.0"},{"line_number":78,"context_line":"os-service-types\u003d\u003d1.2.0"}],"source_content_type":"text/plain","patch_set":30,"id":"146c8115_a9b5a814","line":75,"range":{"start_line":75,"start_character":20,"end_line":75,"end_character":71},"updated":"2022-05-05 09:51:02.000000000","message":"TODO later","commit_id":"d4fe3770278006d44eb5825db5c2ace81dd17037"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"67cfaf31b7ff3563089b36749d5079fcb1625d89","unresolved":false,"context_lines":[{"line_number":72,"context_line":"netaddr\u003d\u003d0.7.19"},{"line_number":73,"context_line":"netifaces\u003d\u003d0.10.4"},{"line_number":74,"context_line":"networkx\u003d\u003d2.1.0"},{"line_number":75,"context_line":"octavia-lib\u003d\u003d2.5.0  # FIXME: update after schema change and new release"},{"line_number":76,"context_line":"openstacksdk\u003d\u003d0.12.0"},{"line_number":77,"context_line":"os-client-config\u003d\u003d1.29.0"},{"line_number":78,"context_line":"os-service-types\u003d\u003d1.2.0"}],"source_content_type":"text/plain","patch_set":30,"id":"887ff66a_68f40f7d","line":75,"range":{"start_line":75,"start_character":20,"end_line":75,"end_character":71},"in_reply_to":"146c8115_a9b5a814","updated":"2022-08-10 14:49:40.000000000","message":"l-c.txt has been deleted","commit_id":"d4fe3770278006d44eb5825db5c2ace81dd17037"}],"octavia/common/constants.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"b09967d5ce96663b38f4d7700755f67067505b49","unresolved":true,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":"# Note: The database Amphora table has a foreign key constraint against"},{"line_number":261,"context_line":"#       the provisioning_status table"},{"line_number":262,"context_line":"SUPPORTED_AMPHORA_STATUSES \u003d ("},{"line_number":263,"context_line":"    lib_consts.AMPHORA_ALLOCATED, lib_consts.AMPHORA_BOOTING, lib_consts.ERROR,"},{"line_number":264,"context_line":"    lib_consts.AMPHORA_READY, lib_consts.DELETED, lib_consts.PENDING_CREATE,"},{"line_number":265,"context_line":"    lib_consts.PENDING_DELETE)"}],"source_content_type":"text/x-python","patch_set":26,"id":"6e9d1585_4beb4e25","line":262,"range":{"start_line":262,"start_character":0,"end_line":262,"end_character":26},"updated":"2022-04-04 12:45:09.000000000","message":"it looks like this list should be updated, but it\u0027s not used at all in the code.\nmaybe we could take the opportunity to remove it now?","commit_id":"d2b4dc5365c2bca11c9d072f7ab057d6d84b92e3"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"5d29a1b88c057161a782d6a6e38507158659c40e","unresolved":false,"context_lines":[{"line_number":259,"context_line":""},{"line_number":260,"context_line":"# Note: The database Amphora table has a foreign key constraint against"},{"line_number":261,"context_line":"#       the provisioning_status table"},{"line_number":262,"context_line":"SUPPORTED_AMPHORA_STATUSES \u003d ("},{"line_number":263,"context_line":"    lib_consts.AMPHORA_ALLOCATED, lib_consts.AMPHORA_BOOTING, lib_consts.ERROR,"},{"line_number":264,"context_line":"    lib_consts.AMPHORA_READY, lib_consts.DELETED, lib_consts.PENDING_CREATE,"},{"line_number":265,"context_line":"    lib_consts.PENDING_DELETE)"}],"source_content_type":"text/x-python","patch_set":26,"id":"d0ed47dc_afd4b92a","line":262,"range":{"start_line":262,"start_character":0,"end_line":262,"end_character":26},"in_reply_to":"6e9d1585_4beb4e25","updated":"2022-04-05 14:39:26.000000000","message":"Ack","commit_id":"d2b4dc5365c2bca11c9d072f7ab057d6d84b92e3"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"eb32a3be01c4340c1e4e5889be115c24e2cdd833","unresolved":true,"context_lines":[{"line_number":165,"context_line":"try:"},{"line_number":166,"context_line":"    AMPHORA_FAILOVER_STOPPED \u003d lib_consts.AMPHORA_FAILOVER_STOPPED"},{"line_number":167,"context_line":"except AttributeError:"},{"line_number":168,"context_line":"    # FIXME(tweining): remove once change in octavia-lib is merged and"},{"line_number":169,"context_line":"    #  released."},{"line_number":170,"context_line":"    AMPHORA_FAILOVER_STOPPED \u003d \"FAILOVER_STOPPED\""},{"line_number":171,"context_line":"# \u0027ACTIVE\u0027"},{"line_number":172,"context_line":"ACTIVE \u003d lib_consts.ACTIVE"}],"source_content_type":"text/x-python","patch_set":30,"id":"ccf80a7a_38b96509","line":169,"range":{"start_line":168,"start_character":6,"end_line":169,"end_character":16},"updated":"2022-05-05 09:51:02.000000000","message":"TODO later","commit_id":"d4fe3770278006d44eb5825db5c2ace81dd17037"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"1d837556187fc554c78d8a9f2a87bb5186f3fd8d","unresolved":false,"context_lines":[{"line_number":165,"context_line":"try:"},{"line_number":166,"context_line":"    AMPHORA_FAILOVER_STOPPED \u003d lib_consts.AMPHORA_FAILOVER_STOPPED"},{"line_number":167,"context_line":"except AttributeError:"},{"line_number":168,"context_line":"    # FIXME(tweining): remove once change in octavia-lib is merged and"},{"line_number":169,"context_line":"    #  released."},{"line_number":170,"context_line":"    AMPHORA_FAILOVER_STOPPED \u003d \"FAILOVER_STOPPED\""},{"line_number":171,"context_line":"# \u0027ACTIVE\u0027"},{"line_number":172,"context_line":"ACTIVE \u003d lib_consts.ACTIVE"}],"source_content_type":"text/x-python","patch_set":30,"id":"f71d08b6_fa393f91","line":169,"range":{"start_line":168,"start_character":6,"end_line":169,"end_character":16},"in_reply_to":"ccf80a7a_38b96509","updated":"2022-08-16 16:16:57.000000000","message":"Done","commit_id":"d4fe3770278006d44eb5825db5c2ace81dd17037"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"eb32a3be01c4340c1e4e5889be115c24e2cdd833","unresolved":true,"context_lines":[{"line_number":178,"context_line":"PENDING_CREATE \u003d lib_consts.PENDING_CREATE"},{"line_number":179,"context_line":"# \u0027DELETED\u0027"},{"line_number":180,"context_line":"DELETED \u003d lib_consts.DELETED"},{"line_number":181,"context_line":"SUPPORTED_PROVISIONING_STATUSES \u003d tuple(  # FIXME(tweining): undo"},{"line_number":182,"context_line":"    list(lib_consts.SUPPORTED_PROVISIONING_STATUSES) +"},{"line_number":183,"context_line":"    [AMPHORA_FAILOVER_STOPPED])"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"4624d61f_6aedfe82","line":181,"range":{"start_line":181,"start_character":42,"end_line":181,"end_character":65},"updated":"2022-05-05 09:51:02.000000000","message":"TODO later","commit_id":"d4fe3770278006d44eb5825db5c2ace81dd17037"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"1d837556187fc554c78d8a9f2a87bb5186f3fd8d","unresolved":false,"context_lines":[{"line_number":178,"context_line":"PENDING_CREATE \u003d lib_consts.PENDING_CREATE"},{"line_number":179,"context_line":"# \u0027DELETED\u0027"},{"line_number":180,"context_line":"DELETED \u003d lib_consts.DELETED"},{"line_number":181,"context_line":"SUPPORTED_PROVISIONING_STATUSES \u003d tuple(  # FIXME(tweining): undo"},{"line_number":182,"context_line":"    list(lib_consts.SUPPORTED_PROVISIONING_STATUSES) +"},{"line_number":183,"context_line":"    [AMPHORA_FAILOVER_STOPPED])"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"319b70d6_80ebbab8","line":181,"range":{"start_line":181,"start_character":42,"end_line":181,"end_character":65},"in_reply_to":"4624d61f_6aedfe82","updated":"2022-08-16 16:16:57.000000000","message":"Done","commit_id":"d4fe3770278006d44eb5825db5c2ace81dd17037"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cda0388fc8079493eb65b4f7d8c8dff9d26b1773","unresolved":true,"context_lines":[{"line_number":162,"context_line":"# Amphora is ready to be allocated to a load balancer \u0027READY\u0027"},{"line_number":163,"context_line":"AMPHORA_READY \u003d lib_consts.AMPHORA_READY"},{"line_number":164,"context_line":"# \u0027FAILOVER_STOPPED\u0027. Failover threshold level has been reached."},{"line_number":165,"context_line":"AMPHORA_FAILOVER_STOPPED \u003d lib_consts.AMPHORA_FAILOVER_STOPPED"},{"line_number":166,"context_line":"# \u0027ACTIVE\u0027"},{"line_number":167,"context_line":"ACTIVE \u003d lib_consts.ACTIVE"},{"line_number":168,"context_line":"# \u0027PENDING_DELETE\u0027"}],"source_content_type":"text/x-python","patch_set":38,"id":"f3943d67_22a092cc","line":165,"updated":"2022-08-31 22:21:29.000000000","message":"nit: This could be removed and the lib constant used directly once octavia-lib has been released.","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"}],"octavia/db/migration/alembic_migrations/versions/0995c26fc506_add_failover_stopped_to_provisioning_.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cda0388fc8079493eb65b4f7d8c8dff9d26b1773","unresolved":true,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# revision identifiers, used by Alembic."},{"line_number":25,"context_line":"revision \u003d \u00270995c26fc506\u0027"},{"line_number":26,"context_line":"down_revision \u003d \u00276ac558d7fc21\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def upgrade():"}],"source_content_type":"text/x-python","patch_set":38,"id":"97e8c145_0a8199c2","line":26,"updated":"2022-08-31 22:21:29.000000000","message":"This will need to be updated as it is the same down_revision as the multi-vip patch that is merging.","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"738c6d8e0419db18a643c3f73fd2e8c018833438","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# revision identifiers, used by Alembic."},{"line_number":25,"context_line":"revision \u003d \u00270995c26fc506\u0027"},{"line_number":26,"context_line":"down_revision \u003d \u00276ac558d7fc21\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def upgrade():"}],"source_content_type":"text/x-python","patch_set":38,"id":"94bf66d7_0b4a7881","line":26,"in_reply_to":"97e8c145_0a8199c2","updated":"2022-09-01 15:47:17.000000000","message":"Done","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"}],"octavia/db/repositories.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"0b8eaab71b54317353afe76573894e9ee5b7de4b","unresolved":false,"context_lines":[{"line_number":1532,"context_line":""},{"line_number":1533,"context_line":"        amp_query \u003d session.query("},{"line_number":1534,"context_line":"            self.model_class).with_for_update().filter("},{"line_number":1535,"context_line":"            self.model_class.last_update \u003c expired_time).order_by("},{"line_number":1536,"context_line":"            func.random())"},{"line_number":1537,"context_line":""},{"line_number":1538,"context_line":"        threshold \u003d CONF.health_manager.failover_threshold"},{"line_number":1539,"context_line":"        if threshold is not None and amp_query.count() \u003e\u003d threshold:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_1cdcc344","line":1536,"range":{"start_line":1535,"start_character":57,"end_line":1536,"end_character":26},"updated":"2020-09-04 09:27:42.000000000","message":"I think it can be moved to line 1546 as well - to have logic about getting first randomly in one place.","commit_id":"51af5ee6b280a38b32b0eb96ba9ac8792283c31a"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"2c25e743316d60da2cdfc3336398022c624a0601","unresolved":true,"context_lines":[{"line_number":1681,"context_line":"        expired_time \u003d datetime.datetime.utcnow() - datetime.timedelta("},{"line_number":1682,"context_line":"            seconds\u003dtimeout)"},{"line_number":1683,"context_line":""},{"line_number":1684,"context_line":"        amp_query \u003d session.query("},{"line_number":1685,"context_line":"            self.model_class).with_for_update().filter("},{"line_number":1686,"context_line":"            self.model_class.last_update \u003c expired_time).order_by("},{"line_number":1687,"context_line":"            func.random())"},{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":"        threshold \u003d CONF.health_manager.failover_threshold"},{"line_number":1690,"context_line":"        if threshold is not None and amp_query.count() \u003e\u003d threshold:"}],"source_content_type":"text/x-python","patch_set":11,"id":"2d88faf2_51451b56","line":1687,"range":{"start_line":1684,"start_character":0,"end_line":1687,"end_character":26},"updated":"2021-01-26 09:20:54.000000000","message":"what happens if for any reason, an amphora goes into ERROR after a failover (i.e amphora-agent is up and is sending some heartbeat messages but the amp is broken), does this query prevent more failovers?","commit_id":"f41af2db30f6f5c7fcecf4c4067d04169204e3b6"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"e73ca4ae2f1e572e6d14e10bfc99bc78453194c2","unresolved":false,"context_lines":[{"line_number":1681,"context_line":"        expired_time \u003d datetime.datetime.utcnow() - datetime.timedelta("},{"line_number":1682,"context_line":"            seconds\u003dtimeout)"},{"line_number":1683,"context_line":""},{"line_number":1684,"context_line":"        amp_query \u003d session.query("},{"line_number":1685,"context_line":"            self.model_class).with_for_update().filter("},{"line_number":1686,"context_line":"            self.model_class.last_update \u003c expired_time).order_by("},{"line_number":1687,"context_line":"            func.random())"},{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":"        threshold \u003d CONF.health_manager.failover_threshold"},{"line_number":1690,"context_line":"        if threshold is not None and amp_query.count() \u003e\u003d threshold:"}],"source_content_type":"text/x-python","patch_set":11,"id":"f7a06875_0f7a176a","line":1687,"range":{"start_line":1684,"start_character":0,"end_line":1687,"end_character":26},"in_reply_to":"2d88faf2_51451b56","updated":"2022-03-17 14:06:01.000000000","message":"answer: it only prevents too many concurrent failovers","commit_id":"f41af2db30f6f5c7fcecf4c4067d04169204e3b6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"5ff27875a09e01b902ffbd2d4304e8c8d7dbe6eb","unresolved":true,"context_lines":[{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":"        threshold \u003d CONF.health_manager.failover_threshold"},{"line_number":1690,"context_line":"        if threshold is not None and amp_query.count() \u003e\u003d threshold:"},{"line_number":1691,"context_line":"            LOG.warning(\u0027Stale amphora count reached the threshold \u0027"},{"line_number":1692,"context_line":"                        \u0027(%(th)s) and %(count)s failovers were blocked.\u0027,"},{"line_number":1693,"context_line":"                        {\u0027th\u0027: threshold, \u0027count\u0027: amp_query.count()})"},{"line_number":1694,"context_line":"            # TODO(rm_work): Set a DB flag to indicate we passed threshold?"}],"source_content_type":"text/x-python","patch_set":11,"id":"02d4d2c2_232d6682","line":1691,"updated":"2021-04-20 15:13:42.000000000","message":"This seems more important that warning to me.","commit_id":"f41af2db30f6f5c7fcecf4c4067d04169204e3b6"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"e73ca4ae2f1e572e6d14e10bfc99bc78453194c2","unresolved":false,"context_lines":[{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":"        threshold \u003d CONF.health_manager.failover_threshold"},{"line_number":1690,"context_line":"        if threshold is not None and amp_query.count() \u003e\u003d threshold:"},{"line_number":1691,"context_line":"            LOG.warning(\u0027Stale amphora count reached the threshold \u0027"},{"line_number":1692,"context_line":"                        \u0027(%(th)s) and %(count)s failovers were blocked.\u0027,"},{"line_number":1693,"context_line":"                        {\u0027th\u0027: threshold, \u0027count\u0027: amp_query.count()})"},{"line_number":1694,"context_line":"            # TODO(rm_work): Set a DB flag to indicate we passed threshold?"}],"source_content_type":"text/x-python","patch_set":11,"id":"18d87fd4_e2facdf0","line":1691,"in_reply_to":"02d4d2c2_232d6682","updated":"2022-03-17 14:06:01.000000000","message":"updated to error message","commit_id":"f41af2db30f6f5c7fcecf4c4067d04169204e3b6"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cc25f183a5b54848de6fc2b67ea24d8eca10605a","unresolved":true,"context_lines":[{"line_number":1662,"context_line":"            seconds\u003dtimeout)"},{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        amp_query \u003d session.query("},{"line_number":1665,"context_line":"            self.model_class).with_for_update().filter("},{"line_number":1666,"context_line":"            self.model_class.last_update \u003c expired_time).order_by("},{"line_number":1667,"context_line":"            func.random())"},{"line_number":1668,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"416f1db6_bc4d81ec","line":1665,"updated":"2022-03-17 18:15:34.000000000","message":"The with_for_update() here is a bit concerning for a few reasons:\n1. session is usually an autocommit session, so the transaction would close automatically after the select.\n2. When using with_for_update you really should be explicit with the closing of the transaction to unlock the tables, which with sqlalchemy could be a bunch of tables.","commit_id":"ab915197f7219066efc71648da08dc22a9fe4986"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"0596acf3720edc33072d963401fe15b32ded7975","unresolved":true,"context_lines":[{"line_number":1662,"context_line":"            seconds\u003dtimeout)"},{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        amp_query \u003d session.query("},{"line_number":1665,"context_line":"            self.model_class).with_for_update().filter("},{"line_number":1666,"context_line":"            self.model_class.last_update \u003c expired_time).order_by("},{"line_number":1667,"context_line":"            func.random())"},{"line_number":1668,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"cd6f7663_9fce9464","line":1665,"in_reply_to":"416f1db6_bc4d81ec","updated":"2022-03-18 09:43:14.000000000","message":"it looks like a way to lock the access to those AmphoraHealth objects. I don\u0027t think it is safe to remove it","commit_id":"ab915197f7219066efc71648da08dc22a9fe4986"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"10a4ffc3dcc2ed52679441cc9343a7cc9e0d6d1d","unresolved":false,"context_lines":[{"line_number":1662,"context_line":"            seconds\u003dtimeout)"},{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        amp_query \u003d session.query("},{"line_number":1665,"context_line":"            self.model_class).with_for_update().filter("},{"line_number":1666,"context_line":"            self.model_class.last_update \u003c expired_time).order_by("},{"line_number":1667,"context_line":"            func.random())"},{"line_number":1668,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"a573a583_466c5365","line":1665,"in_reply_to":"93bef5df_32936f89","updated":"2022-04-08 11:50:52.000000000","message":"Done","commit_id":"ab915197f7219066efc71648da08dc22a9fe4986"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"7a9cbd10b807a16f957c2251a0b23f0f50ed7b3b","unresolved":true,"context_lines":[{"line_number":1662,"context_line":"            seconds\u003dtimeout)"},{"line_number":1663,"context_line":""},{"line_number":1664,"context_line":"        amp_query \u003d session.query("},{"line_number":1665,"context_line":"            self.model_class).with_for_update().filter("},{"line_number":1666,"context_line":"            self.model_class.last_update \u003c expired_time).order_by("},{"line_number":1667,"context_line":"            func.random())"},{"line_number":1668,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"93bef5df_32936f89","line":1665,"in_reply_to":"cd6f7663_9fce9464","updated":"2022-03-24 12:46:33.000000000","message":"Just a few comments.\n1, The caller uses db_api.get_session(autocommit\u003dFalse) for the session. So at least in this case it is not a autocommit session.\n2. with_for_update() was there before already.","commit_id":"ab915197f7219066efc71648da08dc22a9fe4986"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"736fc60a0287c38de9b442e9931d493deda061c2","unresolved":true,"context_lines":[{"line_number":1671,"context_line":"            LOG.error(\u0027Stale amphora count reached the threshold \u0027"},{"line_number":1672,"context_line":"                      \u0027(%(th)s) and %(count)s failovers were blocked.\u0027,"},{"line_number":1673,"context_line":"                      {\u0027th\u0027: threshold, \u0027count\u0027: amp_query.count()})"},{"line_number":1674,"context_line":"            # TODO(rm_work): Set a DB flag to indicate we passed threshold?"},{"line_number":1675,"context_line":"            for amp_health in amp_query:"},{"line_number":1676,"context_line":"                amp \u003d session.query(models.Amphora).filter("},{"line_number":1677,"context_line":"                    models.Amphora.id \u003d\u003d amp_health.amphora_id).one()"},{"line_number":1678,"context_line":"                if amp.status !\u003d consts.PENDING_DELETE:"},{"line_number":1679,"context_line":"                    amp.status \u003d consts.ERROR"},{"line_number":1680,"context_line":"                # TODO(gthiemonge) Set the operating_status of the LB to ERROR?"},{"line_number":1681,"context_line":"                if amp.load_balancer_id:"},{"line_number":1682,"context_line":"                    load_balancer \u003d session.query("},{"line_number":1683,"context_line":"                        models.LoadBalancer).filter_by("}],"source_content_type":"text/x-python","patch_set":13,"id":"69262782_f07efe01","line":1680,"range":{"start_line":1674,"start_character":12,"end_line":1680,"end_character":79},"updated":"2022-03-23 10:43:17.000000000","message":"Would it work to kill both TODOs by adding a new operating_status \"FAILOVER_THRESHOLD_REACHED\" or \"FAILOVER_STOPPED\" or so? It could be set/reset automatically based on the threshold and the current number of failed amps. I don\u0027t think the LB should not go to ERROR as long as it can operate normally with working amphorae.","commit_id":"ab915197f7219066efc71648da08dc22a9fe4986"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"3490525cbd1115c8c5cb2962c7ba20edb4c76899","unresolved":false,"context_lines":[{"line_number":1671,"context_line":"            LOG.error(\u0027Stale amphora count reached the threshold \u0027"},{"line_number":1672,"context_line":"                      \u0027(%(th)s) and %(count)s failovers were blocked.\u0027,"},{"line_number":1673,"context_line":"                      {\u0027th\u0027: threshold, \u0027count\u0027: amp_query.count()})"},{"line_number":1674,"context_line":"            # TODO(rm_work): Set a DB flag to indicate we passed threshold?"},{"line_number":1675,"context_line":"            for amp_health in amp_query:"},{"line_number":1676,"context_line":"                amp \u003d session.query(models.Amphora).filter("},{"line_number":1677,"context_line":"                    models.Amphora.id \u003d\u003d amp_health.amphora_id).one()"},{"line_number":1678,"context_line":"                if amp.status !\u003d consts.PENDING_DELETE:"},{"line_number":1679,"context_line":"                    amp.status \u003d consts.ERROR"},{"line_number":1680,"context_line":"                # TODO(gthiemonge) Set the operating_status of the LB to ERROR?"},{"line_number":1681,"context_line":"                if amp.load_balancer_id:"},{"line_number":1682,"context_line":"                    load_balancer \u003d session.query("},{"line_number":1683,"context_line":"                        models.LoadBalancer).filter_by("}],"source_content_type":"text/x-python","patch_set":13,"id":"f188d993_809e2768","line":1680,"range":{"start_line":1674,"start_character":12,"end_line":1680,"end_character":79},"in_reply_to":"0888ee10_6d30ad96","updated":"2022-03-30 10:03:59.000000000","message":"Ack","commit_id":"ab915197f7219066efc71648da08dc22a9fe4986"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"6a24b23812b3b1aea4aee5dbc56019fdccf6de71","unresolved":true,"context_lines":[{"line_number":1671,"context_line":"            LOG.error(\u0027Stale amphora count reached the threshold \u0027"},{"line_number":1672,"context_line":"                      \u0027(%(th)s) and %(count)s failovers were blocked.\u0027,"},{"line_number":1673,"context_line":"                      {\u0027th\u0027: threshold, \u0027count\u0027: amp_query.count()})"},{"line_number":1674,"context_line":"            # TODO(rm_work): Set a DB flag to indicate we passed threshold?"},{"line_number":1675,"context_line":"            for amp_health in amp_query:"},{"line_number":1676,"context_line":"                amp \u003d session.query(models.Amphora).filter("},{"line_number":1677,"context_line":"                    models.Amphora.id \u003d\u003d amp_health.amphora_id).one()"},{"line_number":1678,"context_line":"                if amp.status !\u003d consts.PENDING_DELETE:"},{"line_number":1679,"context_line":"                    amp.status \u003d consts.ERROR"},{"line_number":1680,"context_line":"                # TODO(gthiemonge) Set the operating_status of the LB to ERROR?"},{"line_number":1681,"context_line":"                if amp.load_balancer_id:"},{"line_number":1682,"context_line":"                    load_balancer \u003d session.query("},{"line_number":1683,"context_line":"                        models.LoadBalancer).filter_by("}],"source_content_type":"text/x-python","patch_set":13,"id":"0888ee10_6d30ad96","line":1680,"range":{"start_line":1674,"start_character":12,"end_line":1680,"end_character":79},"in_reply_to":"69262782_f07efe01","updated":"2022-03-23 12:34:51.000000000","message":"yes, a new state would also help to identify the amphorae the admin can failover manually.\nI think ERROR is still valid for the LB: if we haven\u0027t received any health status update, we cannot ensure that it is working correctly.","commit_id":"ab915197f7219066efc71648da08dc22a9fe4986"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"2d9d1a1762bf13df04aa73f42393cc18c48f2e7b","unresolved":true,"context_lines":[{"line_number":1691,"context_line":"                                      consts.AMPHORA_FAILOVER_STOPPED):"},{"line_number":1692,"context_line":"                    amp.status \u003d consts.AMPHORA_FAILOVER_STOPPED"},{"line_number":1693,"context_line":"                if amp.load_balancer_id:"},{"line_number":1694,"context_line":"                    load_balancer \u003d session.query("},{"line_number":1695,"context_line":"                        models.LoadBalancer).filter_by("},{"line_number":1696,"context_line":"                            id\u003damp.load_balancer_id).first()"},{"line_number":1697,"context_line":"                    load_balancer.operating_status \u003d consts.ERROR"},{"line_number":1698,"context_line":"            return None"},{"line_number":1699,"context_line":""},{"line_number":1700,"context_line":"        amp \u003d amp_query.filter_by(busy\u003dFalse).first()"}],"source_content_type":"text/x-python","patch_set":28,"id":"6f4fffd1_9a526f8a","line":1697,"range":{"start_line":1694,"start_character":20,"end_line":1697,"end_character":65},"updated":"2022-04-13 16:41:28.000000000","message":"during the PTG, we concluded to not set the operating status of a load balancer in ERROR.\nBecause in the case of ACTIVE_STANDBY load balancer, having a dysfunctional amphora doesn\u0027t mean that the load balancer is not working.\nSo I\u0027m in favor of removing this update.","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"4710941223877f8f47c44742085f229812ed8c5e","unresolved":false,"context_lines":[{"line_number":1691,"context_line":"                                      consts.AMPHORA_FAILOVER_STOPPED):"},{"line_number":1692,"context_line":"                    amp.status \u003d consts.AMPHORA_FAILOVER_STOPPED"},{"line_number":1693,"context_line":"                if amp.load_balancer_id:"},{"line_number":1694,"context_line":"                    load_balancer \u003d session.query("},{"line_number":1695,"context_line":"                        models.LoadBalancer).filter_by("},{"line_number":1696,"context_line":"                            id\u003damp.load_balancer_id).first()"},{"line_number":1697,"context_line":"                    load_balancer.operating_status \u003d consts.ERROR"},{"line_number":1698,"context_line":"            return None"},{"line_number":1699,"context_line":""},{"line_number":1700,"context_line":"        amp \u003d amp_query.filter_by(busy\u003dFalse).first()"}],"source_content_type":"text/x-python","patch_set":28,"id":"de8f48a1_4a2f76c0","line":1697,"range":{"start_line":1694,"start_character":20,"end_line":1697,"end_character":65},"in_reply_to":"6f4fffd1_9a526f8a","updated":"2022-04-20 08:25:54.000000000","message":"Thanks for reminding me.","commit_id":"e94d5f6a651fff96be21acc51c780d8d2105229a"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"3180412545454da8f257cc7afed6cdb471039319","unresolved":true,"context_lines":[{"line_number":1687,"context_line":"            for amp_health in amp_query:"},{"line_number":1688,"context_line":"                amp \u003d session.query(models.Amphora).filter("},{"line_number":1689,"context_line":"                    models.Amphora.id \u003d\u003d amp_health.amphora_id).one()"},{"line_number":1690,"context_line":"                if amp.status not in (consts.PENDING_DELETE,"},{"line_number":1691,"context_line":"                                      consts.AMPHORA_FAILOVER_STOPPED):"},{"line_number":1692,"context_line":"                    amp.status \u003d consts.AMPHORA_FAILOVER_STOPPED"},{"line_number":1693,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":30,"id":"335f83a9_e2b0feb0","line":1690,"range":{"start_line":1690,"start_character":45,"end_line":1690,"end_character":59},"updated":"2022-06-03 12:06:38.000000000","message":"nit: PENDING_DELETE amps should have already been excluded from the query (line 1669)","commit_id":"d4fe3770278006d44eb5825db5c2ace81dd17037"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"5f4ef5ea7b40a7b0cf7296c2f453295670b74d1f","unresolved":false,"context_lines":[{"line_number":1687,"context_line":"            for amp_health in amp_query:"},{"line_number":1688,"context_line":"                amp \u003d session.query(models.Amphora).filter("},{"line_number":1689,"context_line":"                    models.Amphora.id \u003d\u003d amp_health.amphora_id).one()"},{"line_number":1690,"context_line":"                if amp.status not in (consts.PENDING_DELETE,"},{"line_number":1691,"context_line":"                                      consts.AMPHORA_FAILOVER_STOPPED):"},{"line_number":1692,"context_line":"                    amp.status \u003d consts.AMPHORA_FAILOVER_STOPPED"},{"line_number":1693,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":30,"id":"214913fa_50606de4","line":1690,"range":{"start_line":1690,"start_character":45,"end_line":1690,"end_character":59},"in_reply_to":"335f83a9_e2b0feb0","updated":"2022-08-16 12:26:46.000000000","message":"Thanks. Done.","commit_id":"d4fe3770278006d44eb5825db5c2ace81dd17037"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cda0388fc8079493eb65b4f7d8c8dff9d26b1773","unresolved":true,"context_lines":[{"line_number":1664,"context_line":"            seconds\u003dtimeout)"},{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":"        amp_ids_not_deleted \u003d ["},{"line_number":1667,"context_line":"            amp.id for amp in session.query(models.Amphora).filter("},{"line_number":1668,"context_line":"                ~models.Amphora.status.in_("},{"line_number":1669,"context_line":"                    [consts.DELETED, consts.PENDING_DELETE])).all()]"},{"line_number":1670,"context_line":"        amp_query \u003d session.query("}],"source_content_type":"text/x-python","patch_set":38,"id":"a3ce5b9c_921f653f","line":1667,"updated":"2022-08-31 22:21:29.000000000","message":"Can\u0027t we consolidate these queries?\n\nThis went from one round trip to the database to at least five round trips.\n\nAlso, where possible, use SQL COUNT() instead of pulling back records. It is significantly lower overhead on the DB engine, network, and health manager.","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"35abe3f9506ba7f106e723890756ad9ceb37209f","unresolved":false,"context_lines":[{"line_number":1664,"context_line":"            seconds\u003dtimeout)"},{"line_number":1665,"context_line":""},{"line_number":1666,"context_line":"        amp_ids_not_deleted \u003d ["},{"line_number":1667,"context_line":"            amp.id for amp in session.query(models.Amphora).filter("},{"line_number":1668,"context_line":"                ~models.Amphora.status.in_("},{"line_number":1669,"context_line":"                    [consts.DELETED, consts.PENDING_DELETE])).all()]"},{"line_number":1670,"context_line":"        amp_query \u003d session.query("}],"source_content_type":"text/x-python","patch_set":38,"id":"560e2bcb_f6e87768","line":1667,"in_reply_to":"a3ce5b9c_921f653f","updated":"2022-09-02 02:54:59.000000000","message":"Done","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cda0388fc8079493eb65b4f7d8c8dff9d26b1773","unresolved":true,"context_lines":[{"line_number":1667,"context_line":"            amp.id for amp in session.query(models.Amphora).filter("},{"line_number":1668,"context_line":"                ~models.Amphora.status.in_("},{"line_number":1669,"context_line":"                    [consts.DELETED, consts.PENDING_DELETE])).all()]"},{"line_number":1670,"context_line":"        amp_query \u003d session.query("},{"line_number":1671,"context_line":"            self.model_class).with_for_update().filter("},{"line_number":1672,"context_line":"            self.model_class.last_update \u003c expired_time,"},{"line_number":1673,"context_line":"            self.model_class.amphora_id.in_(amp_ids_not_deleted)"}],"source_content_type":"text/x-python","patch_set":38,"id":"022243e7_498a9210","line":1670,"updated":"2022-08-31 22:21:29.000000000","message":"If the caller is using get_session(autocomment\u003dFalse) here, we typically use \"lock_session\" to call out that this method uses sqlalchemy methods that require a autocommit\u003dFalse session (like with_for_update).\nConsider changing the method signature to lock_session.","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"738c6d8e0419db18a643c3f73fd2e8c018833438","unresolved":false,"context_lines":[{"line_number":1667,"context_line":"            amp.id for amp in session.query(models.Amphora).filter("},{"line_number":1668,"context_line":"                ~models.Amphora.status.in_("},{"line_number":1669,"context_line":"                    [consts.DELETED, consts.PENDING_DELETE])).all()]"},{"line_number":1670,"context_line":"        amp_query \u003d session.query("},{"line_number":1671,"context_line":"            self.model_class).with_for_update().filter("},{"line_number":1672,"context_line":"            self.model_class.last_update \u003c expired_time,"},{"line_number":1673,"context_line":"            self.model_class.amphora_id.in_(amp_ids_not_deleted)"}],"source_content_type":"text/x-python","patch_set":38,"id":"5ba06688_a92358d6","line":1670,"in_reply_to":"022243e7_498a9210","updated":"2022-09-01 15:47:17.000000000","message":"Done","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cda0388fc8079493eb65b4f7d8c8dff9d26b1773","unresolved":true,"context_lines":[{"line_number":1684,"context_line":"                      \u0027(%(th)s). %(count)s amphorae were set into \u0027"},{"line_number":1685,"context_line":"                      \u0027FAILOVER_STOPPED status.\u0027,"},{"line_number":1686,"context_line":"                      {\u0027th\u0027: threshold, \u0027count\u0027: amp_query.count()})"},{"line_number":1687,"context_line":"            for amp_health in amp_query:"},{"line_number":1688,"context_line":"                amp \u003d session.query(models.Amphora).filter("},{"line_number":1689,"context_line":"                    models.Amphora.id \u003d\u003d amp_health.amphora_id).one()"},{"line_number":1690,"context_line":"                amp.status \u003d consts.AMPHORA_FAILOVER_STOPPED"}],"source_content_type":"text/x-python","patch_set":38,"id":"1bed11d0_860970f1","line":1687,"updated":"2022-08-31 22:21:29.000000000","message":"Why are we doing these one at a time? Can\u0027t we write a single query that updates all of the impacted amphorae?\nI.e. update where not busy, not deleted, and expired?","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"35abe3f9506ba7f106e723890756ad9ceb37209f","unresolved":false,"context_lines":[{"line_number":1684,"context_line":"                      \u0027(%(th)s). %(count)s amphorae were set into \u0027"},{"line_number":1685,"context_line":"                      \u0027FAILOVER_STOPPED status.\u0027,"},{"line_number":1686,"context_line":"                      {\u0027th\u0027: threshold, \u0027count\u0027: amp_query.count()})"},{"line_number":1687,"context_line":"            for amp_health in amp_query:"},{"line_number":1688,"context_line":"                amp \u003d session.query(models.Amphora).filter("},{"line_number":1689,"context_line":"                    models.Amphora.id \u003d\u003d amp_health.amphora_id).one()"},{"line_number":1690,"context_line":"                amp.status \u003d consts.AMPHORA_FAILOVER_STOPPED"}],"source_content_type":"text/x-python","patch_set":38,"id":"aefae747_fa8366b7","line":1687,"in_reply_to":"1bed11d0_860970f1","updated":"2022-09-02 02:54:59.000000000","message":"Done","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cda0388fc8079493eb65b4f7d8c8dff9d26b1773","unresolved":true,"context_lines":[{"line_number":1699,"context_line":""},{"line_number":1700,"context_line":"        return amp.to_data_model()"},{"line_number":1701,"context_line":""},{"line_number":1702,"context_line":"    def update_failover_stopped(self, all_failover_stopped: Query,"},{"line_number":1703,"context_line":"                                amp_ids_stale: Set[str]) -\u003e None:"},{"line_number":1704,"context_line":"        \"\"\"Updates the status of amps that are FAILOVER_STOPPED"},{"line_number":1705,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"a966220e_91afe180","line":1702,"updated":"2022-08-31 22:21:29.000000000","message":"This could be simplified down to one database update call.","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"35abe3f9506ba7f106e723890756ad9ceb37209f","unresolved":false,"context_lines":[{"line_number":1699,"context_line":""},{"line_number":1700,"context_line":"        return amp.to_data_model()"},{"line_number":1701,"context_line":""},{"line_number":1702,"context_line":"    def update_failover_stopped(self, all_failover_stopped: Query,"},{"line_number":1703,"context_line":"                                amp_ids_stale: Set[str]) -\u003e None:"},{"line_number":1704,"context_line":"        \"\"\"Updates the status of amps that are FAILOVER_STOPPED"},{"line_number":1705,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"da47f591_97955787","line":1702,"in_reply_to":"a966220e_91afe180","updated":"2022-09-02 02:54:59.000000000","message":"Done","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"0f146bf7a51cd1b98d854bb80852b4b4bb2b9ff9","unresolved":true,"context_lines":[{"line_number":1726,"context_line":""},{"line_number":1727,"context_line":"        # We don\u0027t want to attempt to failover amphora that are not"},{"line_number":1728,"context_line":"        # currently in the ALLOCATED state. i.e. Not DELETED, PENDING_*,"},{"line_number":1729,"context_line":"        # FAILOVER_STOPPED, etc."},{"line_number":1730,"context_line":"        allocated_amp_ids_subquery \u003d ("},{"line_number":1731,"context_line":"            select(models.Amphora.id).where("},{"line_number":1732,"context_line":"                models.Amphora.status \u003d\u003d consts.AMPHORA_ALLOCATED))"}],"source_content_type":"text/x-python","patch_set":44,"id":"d07a918f_e45fc983","line":1729,"range":{"start_line":1729,"start_character":10,"end_line":1729,"end_character":26},"updated":"2022-09-02 08:25:01.000000000","message":"the behavior differs from previous patchset, if we keep the new behavior, the doc needs to be updated, it mentions that \"\nAfter the number of stale amphorae falls below the configured threshold value, normal operation resumes and the automatic failover process attempts to restore the remaining stale amphora\".","commit_id":"2b9a47923cc4df579a7e15d0104cbfa50d2f5f60"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"b5dfad9eaebc8975b31276f30e05368e189b23e4","unresolved":false,"context_lines":[{"line_number":1726,"context_line":""},{"line_number":1727,"context_line":"        # We don\u0027t want to attempt to failover amphora that are not"},{"line_number":1728,"context_line":"        # currently in the ALLOCATED state. i.e. Not DELETED, PENDING_*,"},{"line_number":1729,"context_line":"        # FAILOVER_STOPPED, etc."},{"line_number":1730,"context_line":"        allocated_amp_ids_subquery \u003d ("},{"line_number":1731,"context_line":"            select(models.Amphora.id).where("},{"line_number":1732,"context_line":"                models.Amphora.status \u003d\u003d consts.AMPHORA_ALLOCATED))"}],"source_content_type":"text/x-python","patch_set":44,"id":"6ea49805_05b0e7e3","line":1729,"range":{"start_line":1729,"start_character":10,"end_line":1729,"end_character":26},"in_reply_to":"d07a918f_e45fc983","updated":"2022-09-02 10:44:22.000000000","message":"Updated in a follow up patch.","commit_id":"2b9a47923cc4df579a7e15d0104cbfa50d2f5f60"}],"releasenotes/notes/failover-threshold-f5cdf2bbe8a64d6d.yaml":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cda0388fc8079493eb65b4f7d8c8dff9d26b1773","unresolved":true,"context_lines":[{"line_number":8,"context_line":"    database becoming read-only. This feature is not enabled by default, and it"},{"line_number":9,"context_line":"    should be configured carefully based on the size of the environment."},{"line_number":10,"context_line":"    For example, with 100 amphorae a good threshold might be 20 or 30, or"},{"line_number":11,"context_line":"    the typical number of amphorae that would be expected on a single host."}],"source_content_type":"text/x-yaml","patch_set":38,"id":"0cd197b9_74097d48","line":11,"updated":"2022-08-31 22:21:29.000000000","message":"nit: Again, failing over a single host should not be a limit IMO. A single host dying is not that uncommon of an issue.","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"b5dfad9eaebc8975b31276f30e05368e189b23e4","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    database becoming read-only. This feature is not enabled by default, and it"},{"line_number":9,"context_line":"    should be configured carefully based on the size of the environment."},{"line_number":10,"context_line":"    For example, with 100 amphorae a good threshold might be 20 or 30, or"},{"line_number":11,"context_line":"    the typical number of amphorae that would be expected on a single host."}],"source_content_type":"text/x-yaml","patch_set":38,"id":"fc828d95_6626d1e2","line":11,"in_reply_to":"0cd197b9_74097d48","updated":"2022-09-02 10:44:22.000000000","message":"Fixed in a follow-up patch.","commit_id":"6241c67649a8b23fc96f7f7abe9b1f52ae81c2af"}],"requirements.txt":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"eb32a3be01c4340c1e4e5889be115c24e2cdd833","unresolved":true,"context_lines":[{"line_number":42,"context_line":"tenacity\u003e\u003d5.0.4  # Apache-2.0"},{"line_number":43,"context_line":"distro\u003e\u003d1.2.0 # Apache-2.0"},{"line_number":44,"context_line":"jsonschema\u003e\u003d3.2.0 # MIT"},{"line_number":45,"context_line":"octavia-lib\u003e\u003d2.5.0 # Apache-2.0 FIXME update"},{"line_number":46,"context_line":"netaddr\u003e\u003d0.7.19 # BSD"},{"line_number":47,"context_line":"simplejson\u003e\u003d3.13.2 # MIT"},{"line_number":48,"context_line":"setproctitle\u003e\u003d1.1.10 # BSD"}],"source_content_type":"text/plain","patch_set":30,"id":"3542961d_05471d89","line":45,"range":{"start_line":45,"start_character":32,"end_line":45,"end_character":44},"updated":"2022-05-05 09:51:02.000000000","message":"TODO later","commit_id":"d4fe3770278006d44eb5825db5c2ace81dd17037"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"1d837556187fc554c78d8a9f2a87bb5186f3fd8d","unresolved":false,"context_lines":[{"line_number":42,"context_line":"tenacity\u003e\u003d5.0.4  # Apache-2.0"},{"line_number":43,"context_line":"distro\u003e\u003d1.2.0 # Apache-2.0"},{"line_number":44,"context_line":"jsonschema\u003e\u003d3.2.0 # MIT"},{"line_number":45,"context_line":"octavia-lib\u003e\u003d2.5.0 # Apache-2.0 FIXME update"},{"line_number":46,"context_line":"netaddr\u003e\u003d0.7.19 # BSD"},{"line_number":47,"context_line":"simplejson\u003e\u003d3.13.2 # MIT"},{"line_number":48,"context_line":"setproctitle\u003e\u003d1.1.10 # BSD"}],"source_content_type":"text/plain","patch_set":30,"id":"a8a25a1d_5cec5a12","line":45,"range":{"start_line":45,"start_character":32,"end_line":45,"end_character":44},"in_reply_to":"3542961d_05471d89","updated":"2022-08-16 16:16:57.000000000","message":"Done","commit_id":"d4fe3770278006d44eb5825db5c2ace81dd17037"}]}
