)]}'
{"octavia/controller/housekeeping/house_keeping.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"06fc008ec3668e00513b908c8098e186775a690c","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            session, provisioning_status\u003dconstants.DELETED)"},{"line_number":91,"context_line":"        for lb in load_balancers:"},{"line_number":92,"context_line":"            LOG.info(_LI(\u0027Attempting to delete load balancer id : %s\u0027), lb.id)"},{"line_number":93,"context_line":"            self.lb_repo.delete(session, id\u003dlb.id)"},{"line_number":94,"context_line":"            LOG.info(_LI(\u0027Deleted load balancer id : %s\u0027) % lb.id)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_150c0140","line":93,"updated":"2016-06-23 21:44:21.000000000","message":"I think we should have an age out configuration setting for this much like we do for amphora.  For support reasons we like to keep the records in the database for a period of time, maybe a week, so that we can see what was previously used/configured.  This was the motivation behind having a \"DELETED\" state in the database as opposed to just deleting the records.\nThe challenge here is that the VIP would remain for that period of time as well.","commit_id":"601b6e5923a008b09a5a4c7e51117bca9886e72d"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"40404ce3a7e18a58534c32e7b693ed3d245634ce","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            session, provisioning_status\u003dconstants.DELETED)"},{"line_number":91,"context_line":"        for lb in load_balancers:"},{"line_number":92,"context_line":"            LOG.info(_LI(\u0027Attempting to delete load balancer id : %s\u0027), lb.id)"},{"line_number":93,"context_line":"            self.lb_repo.delete(session, id\u003dlb.id)"},{"line_number":94,"context_line":"            LOG.info(_LI(\u0027Deleted load balancer id : %s\u0027) % lb.id)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3aaa91ec_da0a7d25","line":93,"in_reply_to":"3aaa91ec_150c0140","updated":"2016-06-24 15:58:45.000000000","message":"Done","commit_id":"601b6e5923a008b09a5a4c7e51117bca9886e72d"}],"octavia/db/repositories.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"fce94839b291daf713085190d2fa8b467c20876d","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - datetime.timedelta("},{"line_number":342,"context_line":"                seconds\u003d10)"},{"line_number":343,"context_line":"        else:"},{"line_number":344,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - exp_age"},{"line_number":345,"context_line":"        lb \u003d self.get(session, id\u003dlb_id)"},{"line_number":346,"context_line":"        if lb:"},{"line_number":347,"context_line":"            # If a load balancer was never updated use its creation timestamp"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_b4548b21","line":344,"updated":"2016-06-27 20:06:17.000000000","message":"Default on this seems incredibly short, but also didn\u0027t you just define a default elsewhere in the code that is 1 week?","commit_id":"2f716238b9095a02b9f1ca9b16096ddde5cf2f34"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"dd7ad13fccb571c85138eabb9826f324d0b9b20d","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - datetime.timedelta("},{"line_number":342,"context_line":"                seconds\u003d10)"},{"line_number":343,"context_line":"        else:"},{"line_number":344,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - exp_age"},{"line_number":345,"context_line":"        lb \u003d self.get(session, id\u003dlb_id)"},{"line_number":346,"context_line":"        if lb:"},{"line_number":347,"context_line":"            # If a load balancer was never updated use its creation timestamp"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_d673dfb2","line":344,"in_reply_to":"3aaa91ec_0b1b871d","updated":"2016-06-28 18:48:57.000000000","message":"I think that is a good idea, yes. ^_^","commit_id":"2f716238b9095a02b9f1ca9b16096ddde5cf2f34"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"387362842ea05751d53687de7e4cc9fc429f2be5","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - datetime.timedelta("},{"line_number":342,"context_line":"                seconds\u003d10)"},{"line_number":343,"context_line":"        else:"},{"line_number":344,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - exp_age"},{"line_number":345,"context_line":"        lb \u003d self.get(session, id\u003dlb_id)"},{"line_number":346,"context_line":"        if lb:"},{"line_number":347,"context_line":"            # If a load balancer was never updated use its creation timestamp"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_30418e3a","line":344,"in_reply_to":"3aaa91ec_177748d5","updated":"2016-06-28 17:13:17.000000000","message":"Hmm... Then, probably I am mistaken... If so, I am not sure why that method has such a low default timeout either. I will have to do some research on this.","commit_id":"2f716238b9095a02b9f1ca9b16096ddde5cf2f34"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"fa5a1c99a0d15fdde6e8d4238c672cc51fcc8006","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - datetime.timedelta("},{"line_number":342,"context_line":"                seconds\u003d10)"},{"line_number":343,"context_line":"        else:"},{"line_number":344,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - exp_age"},{"line_number":345,"context_line":"        lb \u003d self.get(session, id\u003dlb_id)"},{"line_number":346,"context_line":"        if lb:"},{"line_number":347,"context_line":"            # If a load balancer was never updated use its creation timestamp"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_50bffaa9","line":344,"in_reply_to":"3aaa91ec_30418e3a","updated":"2016-06-28 17:22:00.000000000","message":"Yes, you are correct, I mistook it for the method below (check_stale). Since this is the case, I believe the default timeout there is bad as well.\nYou\u0027ve just defined \"load_balancer_expiry_age\", can we not also use that default value here?","commit_id":"2f716238b9095a02b9f1ca9b16096ddde5cf2f34"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"db0417ce6ca11818f62df7b67617bfd900fd0b4a","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - datetime.timedelta("},{"line_number":342,"context_line":"                seconds\u003d10)"},{"line_number":343,"context_line":"        else:"},{"line_number":344,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - exp_age"},{"line_number":345,"context_line":"        lb \u003d self.get(session, id\u003dlb_id)"},{"line_number":346,"context_line":"        if lb:"},{"line_number":347,"context_line":"            # If a load balancer was never updated use its creation timestamp"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_0b1b871d","line":344,"in_reply_to":"3aaa91ec_50bffaa9","updated":"2016-06-28 17:36:06.000000000","message":"Sure, I\u0027ll use it as default here. Perhaps, we can use amphora_expiry_age as default in check_amphora_expired too? :)","commit_id":"2f716238b9095a02b9f1ca9b16096ddde5cf2f34"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"92f93f3c1699fae5f5fc819cff2bac9aa5b4c2b3","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - datetime.timedelta("},{"line_number":342,"context_line":"                seconds\u003d10)"},{"line_number":343,"context_line":"        else:"},{"line_number":344,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - exp_age"},{"line_number":345,"context_line":"        lb \u003d self.get(session, id\u003dlb_id)"},{"line_number":346,"context_line":"        if lb:"},{"line_number":347,"context_line":"            # If a load balancer was never updated use its creation timestamp"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_177748d5","line":344,"in_reply_to":"3aaa91ec_9117c853","updated":"2016-06-28 09:09:51.000000000","message":"Hmm, not sure if I understand you correctly. check_amphora_expired is used only by housekeeper to purge DELETED amphorae, that are older than amphora_expiry_age, from db. Meanwhile, health manager uses get_stale_amphora method [1][2] to find amphorae that weren\u0027t updated for heartbeat_timeout and then initiates delete of compute resources and marks db entries as deleted.\n\nSo I don\u0027t really get how low exp_age in check_amphora_expired serves for amphorae auto-expiration. \n\n[1] https://github.com/openstack/octavia/blob/master/octavia/controller/healthmanager/health_manager.py#L50\n[2] https://github.com/openstack/octavia/blob/master/octavia/db/repositories.py#L628","commit_id":"2f716238b9095a02b9f1ca9b16096ddde5cf2f34"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"c46bae58e22e9e51746ef982508ed8e1874518f7","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - datetime.timedelta("},{"line_number":342,"context_line":"                seconds\u003d10)"},{"line_number":343,"context_line":"        else:"},{"line_number":344,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - exp_age"},{"line_number":345,"context_line":"        lb \u003d self.get(session, id\u003dlb_id)"},{"line_number":346,"context_line":"        if lb:"},{"line_number":347,"context_line":"            # If a load balancer was never updated use its creation timestamp"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_9117c853","line":344,"in_reply_to":"3aaa91ec_96dcde19","updated":"2016-06-28 08:36:05.000000000","message":"Ah, I was puzzling over why this was happening to begin with... So, that is set so low (and there is a default expiry at all) because that method is designed for Amphora that will auto-expire and be replaced if they don\u0027t send frequent heartbeats...\n\nLoadbalancers, on the other hand, won\u0027t ever be deleted like that! So, I am actually not sure this method makes a lot of sense to be copied from that one. This is a bit odd, we\u0027re just cleaning up deleted rows from the DB in this case, right? Where as the Amphora case, those are non-deleted and are going to be recycled because of failed health checks. VERY different scenario.","commit_id":"2f716238b9095a02b9f1ca9b16096ddde5cf2f34"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"76a3483a63e6112d9ee479797f701ec769ae29b5","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - datetime.timedelta("},{"line_number":342,"context_line":"                seconds\u003d10)"},{"line_number":343,"context_line":"        else:"},{"line_number":344,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - exp_age"},{"line_number":345,"context_line":"        lb \u003d self.get(session, id\u003dlb_id)"},{"line_number":346,"context_line":"        if lb:"},{"line_number":347,"context_line":"            # If a load balancer was never updated use its creation timestamp"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_96dcde19","line":344,"in_reply_to":"3aaa91ec_b4548b21","updated":"2016-06-28 08:12:05.000000000","message":"Here I followed the example set by check_amphora_expired in AmphoraHealthRepository [1]. I\u0027m not against setting another default value for exp_age or just making it non-optional, in any case it would require changing check_amphora_expired too for consistency.\n\nSo what would be your advice on this?\n\n[1] https://github.com/openstack/octavia/blob/master/octavia/db/repositories.py#L617-L618","commit_id":"2f716238b9095a02b9f1ca9b16096ddde5cf2f34"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"377897c7a59606b19104c2bf8e3ecb9c33b823c3","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - datetime.timedelta("},{"line_number":342,"context_line":"                seconds\u003d10)"},{"line_number":343,"context_line":"        else:"},{"line_number":344,"context_line":"            timestamp \u003d datetime.datetime.utcnow() - exp_age"},{"line_number":345,"context_line":"        lb \u003d self.get(session, id\u003dlb_id)"},{"line_number":346,"context_line":"        if lb:"},{"line_number":347,"context_line":"            # If a load balancer was never updated use its creation timestamp"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_dd02c93d","line":344,"in_reply_to":"3aaa91ec_d673dfb2","updated":"2016-06-29 07:53:33.000000000","message":"Done","commit_id":"2f716238b9095a02b9f1ca9b16096ddde5cf2f34"}]}
