)]}'
{"doc/source/contributor/guides/providers.rst":[{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"e11b27566a790bf98c1db06a0dfd97152f92eeee","unresolved":false,"context_lines":[{"line_number":1697,"context_line":"Update Statistics API"},{"line_number":1698,"context_line":"---------------------"},{"line_number":1699,"context_line":""},{"line_number":1700,"context_line":"Provider drivers can update statistics for listeners using the following API."},{"line_number":1701,"context_line":"Similar to the status function above, a single dictionary"},{"line_number":1702,"context_line":"with multiple listener statistics is used to update statistics in a single"},{"line_number":1703,"context_line":"call. If an existing listener is not included, the statistics that object"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f7c97a3_dbe2c702","line":1700,"range":{"start_line":1700,"start_character":21,"end_line":1700,"end_character":52},"updated":"2018-07-16 02:44:28.000000000","message":"Sorry, I have a question about this, is this just a db record, and if we update the statistics, then we show it, we still get the info from db and plus/minus the update request we did? And I guess the requirement about this is reset the old records of listeners? Please feel free to correct if you are free. Thanks","commit_id":"4a9f83d039290a372a66d693e66a559fb98dce97"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3186cbfff7a9c09eb35f1a9ed7e39be0dd3dcb09","unresolved":false,"context_lines":[{"line_number":1697,"context_line":"Update Statistics API"},{"line_number":1698,"context_line":"---------------------"},{"line_number":1699,"context_line":""},{"line_number":1700,"context_line":"Provider drivers can update statistics for listeners using the following API."},{"line_number":1701,"context_line":"Similar to the status function above, a single dictionary"},{"line_number":1702,"context_line":"with multiple listener statistics is used to update statistics in a single"},{"line_number":1703,"context_line":"call. If an existing listener is not included, the statistics that object"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f7c97a3_83b86f78","line":1700,"range":{"start_line":1700,"start_character":21,"end_line":1700,"end_character":52},"in_reply_to":"5f7c97a3_dbe2c702","updated":"2018-07-25 22:55:15.000000000","message":"These are absolute numbers. We will take the value the driver is giving us and replace the database value with the number the driver provided.","commit_id":"4a9f83d039290a372a66d693e66a559fb98dce97"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"967e41ef618d9b80a4b182bf3df42ad0732362c0","unresolved":false,"context_lines":[{"line_number":1700,"context_line":"Provider drivers can update statistics for listeners using the following API."},{"line_number":1701,"context_line":"Similar to the status function above, a single dictionary"},{"line_number":1702,"context_line":"with multiple listener statistics is used to update statistics in a single"},{"line_number":1703,"context_line":"call. If an existing listener is not included, the statistics that object"},{"line_number":1704,"context_line":"remain unchanged."},{"line_number":1705,"context_line":""},{"line_number":1706,"context_line":"The general form of the input dictionary is a list of listener statistics:"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f7c97a3_2df94a4e","line":1703,"updated":"2018-07-25 21:12:23.000000000","message":"nit: statistics of that","commit_id":"4a9f83d039290a372a66d693e66a559fb98dce97"}],"octavia/api/drivers/driver_lib.py":[{"author":{"_account_id":13438,"name":"Kobi Samoray","email":"kobi.samoray@broadcom.com","username":"ksamoray"},"change_message_id":"9eea5c4ba1e62379f448454647e43ee373cce1dc","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        :raises: UpdateStatusError"},{"line_number":74,"context_line":"        :returns: None"},{"line_number":75,"context_line":"        \"\"\""},{"line_number":76,"context_line":"        lbs \u003d status.pop(consts.LOADBALANCERS, [])"},{"line_number":77,"context_line":"        for lb in lbs:"},{"line_number":78,"context_line":"            self._process_status_update(self.loadbalancer_repo,"},{"line_number":79,"context_line":"                                        consts.LOADBALANCERS, lb)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_bd30fa56","line":76,"updated":"2018-06-09 07:27:15.000000000","message":"Shouldn\u0027t the loadbalancer be the last thing to update? Otherwise the LB will be updatable while its child objects are still in a pending state. I guess that members should go first, then pool etc and LB should be last.","commit_id":"8a9103ec59f848d9a1eb654abc10de756ad69208"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"80f0f3d4065166286956f7762dcdadf8e641b99d","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        :raises: UpdateStatusError"},{"line_number":74,"context_line":"        :returns: None"},{"line_number":75,"context_line":"        \"\"\""},{"line_number":76,"context_line":"        lbs \u003d status.pop(consts.LOADBALANCERS, [])"},{"line_number":77,"context_line":"        for lb in lbs:"},{"line_number":78,"context_line":"            self._process_status_update(self.loadbalancer_repo,"},{"line_number":79,"context_line":"                                        consts.LOADBALANCERS, lb)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_761a80c6","line":76,"in_reply_to":"5f7c97a3_bd30fa56","updated":"2018-06-09 17:14:47.000000000","message":"Yes, good point.  Fixed.","commit_id":"8a9103ec59f848d9a1eb654abc10de756ad69208"},{"author":{"_account_id":20363,"name":"Adit Sarfaty","email":"asarfaty@vmware.com","username":"asarfaty"},"change_message_id":"687bc0e96696c582cf09178f7101ea31775c02b8","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            if op_status:"},{"line_number":53,"context_line":"                record_kwargs[consts.OPERATING_STATUS] \u003d op_status"},{"line_number":54,"context_line":"            if prov_status or op_status:"},{"line_number":55,"context_line":"                repo.update(self.db_session, record_id, record_kwargs)"},{"line_number":56,"context_line":"        except Exception as e:"},{"line_number":57,"context_line":"            # We need to raise a failure here to notify the driver it is"},{"line_number":58,"context_line":"            # sending bad status data."}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_da6f3391","line":55,"range":{"start_line":55,"start_character":56,"end_line":55,"end_character":69},"updated":"2018-07-02 07:49:39.000000000","message":"this should be **record_kwargs for the update function to accept it","commit_id":"39f56fe2f1bc3cba22086a3ff07110e5f363906c"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"73ac892e0e586d6483cdc629f3920f7a13b116d3","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            if op_status:"},{"line_number":53,"context_line":"                record_kwargs[consts.OPERATING_STATUS] \u003d op_status"},{"line_number":54,"context_line":"            if prov_status or op_status:"},{"line_number":55,"context_line":"                repo.update(self.db_session, record_id, record_kwargs)"},{"line_number":56,"context_line":"        except Exception as e:"},{"line_number":57,"context_line":"            # We need to raise a failure here to notify the driver it is"},{"line_number":58,"context_line":"            # sending bad status data."}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_73a1e594","line":55,"range":{"start_line":55,"start_character":56,"end_line":55,"end_character":69},"in_reply_to":"5f7c97a3_da6f3391","updated":"2018-07-09 16:18:40.000000000","message":"Yes, thank you! Fixed.","commit_id":"39f56fe2f1bc3cba22086a3ff07110e5f363906c"}],"octavia/db/repositories.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"922f20db9c1c4c85cb914f93db634c2327d83902","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        :returns: None"},{"line_number":170,"context_line":"        \"\"\""},{"line_number":171,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":172,"context_line":"            session.bulk_update_mappings(self.model_class, mappings)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"class Repositories(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_40d6e855","line":172,"updated":"2018-06-06 09:55:42.000000000","message":"So, if this is a status update for a listener (or any sub-object), and the updated status is `provisioning_status: DELETED`, then it will simply update that field and leave the object as-is.\n\nIn the amphora driver, we *delete* the object. This is important, because we expect the object to be *gone* for the purposes of unique constraints like the \"port/lb_id\" constraint on listeners. Right now, drivers that use this function to complete a DELETE call will never be able to re-use a port from a deleted listener, because it will always fail the unique constraint on creation. :(","commit_id":"7ad4f1739cad119ba606daf4c4b7e5265873820d"}],"octavia/tests/functional/db/test_repositories.py":[{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"e11b27566a790bf98c1db06a0dfd97152f92eeee","unresolved":false,"context_lines":[{"line_number":2481,"context_line":"            lb_algorithm\u003dconstants.LB_ALGORITHM_ROUND_ROBIN,"},{"line_number":2482,"context_line":"            provisioning_status\u003dconstants.ACTIVE,"},{"line_number":2483,"context_line":"            operating_status\u003dconstants.ONLINE, enabled\u003dTrue)"},{"line_number":2484,"context_line":"        self.pool2 \u003d self.pool_repo.create("},{"line_number":2485,"context_line":"            self.session, id\u003dself.FAKE_UUID_2, project_id\u003dself.FAKE_UUID_2,"},{"line_number":2486,"context_line":"            name\u003d\"pool2_test\", description\u003d\"pool2_description\","},{"line_number":2487,"context_line":"            protocol\u003dconstants.PROTOCOL_HTTP,"},{"line_number":2488,"context_line":"            lb_algorithm\u003dconstants.LB_ALGORITHM_ROUND_ROBIN,"},{"line_number":2489,"context_line":"            provisioning_status\u003dconstants.ACTIVE,"},{"line_number":2490,"context_line":"            operating_status\u003dconstants.ONLINE, enabled\u003dTrue)"},{"line_number":2491,"context_line":""},{"line_number":2492,"context_line":"    def create_health_monitor(self, hm_id, pool_id):"},{"line_number":2493,"context_line":"        health_monitor \u003d self.hm_repo.create("}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_bbf4ab56","line":2490,"range":{"start_line":2484,"start_character":0,"end_line":2490,"end_character":60},"updated":"2018-07-16 02:44:28.000000000","message":"Nit? Can not find where use it.","commit_id":"4a9f83d039290a372a66d693e66a559fb98dce97"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"967e41ef618d9b80a4b182bf3df42ad0732362c0","unresolved":false,"context_lines":[{"line_number":2481,"context_line":"            lb_algorithm\u003dconstants.LB_ALGORITHM_ROUND_ROBIN,"},{"line_number":2482,"context_line":"            provisioning_status\u003dconstants.ACTIVE,"},{"line_number":2483,"context_line":"            operating_status\u003dconstants.ONLINE, enabled\u003dTrue)"},{"line_number":2484,"context_line":"        self.pool2 \u003d self.pool_repo.create("},{"line_number":2485,"context_line":"            self.session, id\u003dself.FAKE_UUID_2, project_id\u003dself.FAKE_UUID_2,"},{"line_number":2486,"context_line":"            name\u003d\"pool2_test\", description\u003d\"pool2_description\","},{"line_number":2487,"context_line":"            protocol\u003dconstants.PROTOCOL_HTTP,"},{"line_number":2488,"context_line":"            lb_algorithm\u003dconstants.LB_ALGORITHM_ROUND_ROBIN,"},{"line_number":2489,"context_line":"            provisioning_status\u003dconstants.ACTIVE,"},{"line_number":2490,"context_line":"            operating_status\u003dconstants.ONLINE, enabled\u003dTrue)"},{"line_number":2491,"context_line":""},{"line_number":2492,"context_line":"    def create_health_monitor(self, hm_id, pool_id):"},{"line_number":2493,"context_line":"        health_monitor \u003d self.hm_repo.create("}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_8d2bbe99","line":2490,"range":{"start_line":2484,"start_character":0,"end_line":2490,"end_character":60},"in_reply_to":"5f7c97a3_bbf4ab56","updated":"2018-07-25 21:12:23.000000000","message":"+1","commit_id":"4a9f83d039290a372a66d693e66a559fb98dce97"}]}
