)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"3c8107c06c48147ffd2254fbddfb4d26596f140e","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Make deployment status consistent with admin_state_up attribute of"},{"line_number":10,"context_line":"pool or vip for HAProxy provider. Since bringing pool or vip down"},{"line_number":11,"context_line":"makes agent to destroy the loadbalancer, corresponding objects should"},{"line_number":12,"context_line":"change their state to PENDING_CREATE. If admin_state_up is changed"},{"line_number":13,"context_line":"back to True the balancer will be picked up by the agent."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I549da30024245bcbde33bb216ea4ae5078c1720a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAATn%2F%2Fd10%3D","line":12,"updated":"2013-11-05 11:43:21.000000000","message":"why not INACTIVE state?","commit_id":"00f97e7cc5adcd10db8fb80d98291129061b4354"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"aae60555ecb19c6eaf3a01b44f7d1b7984b330bc","unresolved":false,"context_lines":[{"line_number":13,"context_line":"back to True the balancer will be picked up by the agent."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I549da30024245bcbde33bb216ea4ae5078c1720a"},{"line_number":16,"context_line":"Closes-Bug: #1242351"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAATn%2F%2Fd1Y%3D","line":16,"updated":"2013-11-05 11:46:45.000000000","message":"It seems you also close bug #1240902 within this change, please add it here as well","commit_id":"00f97e7cc5adcd10db8fb80d98291129061b4354"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4fe946cba3d14071163daf5b928b0e31da19ca3e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"by the agent."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I549da30024245bcbde33bb216ea4ae5078c1720a"},{"line_number":17,"context_line":"Closes-Bug: #1242351"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAATn%2F%2BhP0%3D","line":17,"updated":"2013-11-25 07:54:23.000000000","message":"Please also add Closes\u003dBug: #1240902","commit_id":"89dcdccd10bc574fb020412a971b5d13b88b4f6f"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"0f77b93474c9bee7b5c1b6cea99f75680d99ce90","unresolved":false,"context_lines":[{"line_number":14,"context_line":"by the agent."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I549da30024245bcbde33bb216ea4ae5078c1720a"},{"line_number":17,"context_line":"Closes-Bug: #1242351"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAATn%2F%2BhOI%3D","line":17,"in_reply_to":"AAAATn%2F%2BhP0%3D","updated":"2013-11-25 08:41:57.000000000","message":"Done","commit_id":"89dcdccd10bc574fb020412a971b5d13b88b4f6f"}],"neutron/db/loadbalancer/loadbalancer_db.py":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"4c05cee68a3781a36946d303b3722b496f874864","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        # when loadbalancer instance is introduced"},{"line_number":208,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":209,"context_line":"            pool_db \u003d self._get_resource(context, Pool, pool_id)"},{"line_number":210,"context_line":"            if pool_db.status !\u003d status:"},{"line_number":211,"context_line":"                pool_db.status \u003d status"},{"line_number":212,"context_line":"            for m in pool_db.members:"},{"line_number":213,"context_line":"                if m.status !\u003d status:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2ByXo%3D","line":210,"updated":"2013-11-20 07:37:08.000000000","message":"How about add helper method something like this?\nutils.set_status_if_updated(pool_db, status)","commit_id":"396b4d714eed96258d56ecf982ea31df3e93227b"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"7b70c576e482335afb409c95c0d4b0711916158f","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        # when loadbalancer instance is introduced"},{"line_number":208,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":209,"context_line":"            pool_db \u003d self._get_resource(context, Pool, pool_id)"},{"line_number":210,"context_line":"            if pool_db.status !\u003d status:"},{"line_number":211,"context_line":"                pool_db.status \u003d status"},{"line_number":212,"context_line":"            for m in pool_db.members:"},{"line_number":213,"context_line":"                if m.status !\u003d status:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2ByV4%3D","line":210,"in_reply_to":"AAAATn%2F%2ByXo%3D","updated":"2013-11-20 07:53:27.000000000","message":"honestly i think that such method would be too trivial to extract it","commit_id":"396b4d714eed96258d56ecf982ea31df3e93227b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5f37ee05d2efe4cad27c9ab16dbf8f8d9afbcd27","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            if status_description or v_db[\u0027status_description\u0027]:"},{"line_number":197,"context_line":"                v_db.status_description \u003d status_description"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def update_instance_status(self, context, pool_id, status):"},{"line_number":200,"context_line":"        \"\"\"Update status of all objects connected to the pool."},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        The name of the method contains \u0027instance\u0027 since"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BhW4%3D","line":199,"updated":"2013-11-25 07:06:52.000000000","message":"probably makes sence to set status description of the objects, for ex.: \n member:\n  ...\n  status: INACTIVE\n  status_description: vip admin state is down","commit_id":"89dcdccd10bc574fb020412a971b5d13b88b4f6f"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"0f77b93474c9bee7b5c1b6cea99f75680d99ce90","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            if status_description or v_db[\u0027status_description\u0027]:"},{"line_number":197,"context_line":"                v_db.status_description \u003d status_description"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def update_instance_status(self, context, pool_id, status):"},{"line_number":200,"context_line":"        \"\"\"Update status of all objects connected to the pool."},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        The name of the method contains \u0027instance\u0027 since"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BhOA%3D","line":199,"in_reply_to":"AAAATn%2F%2BhW4%3D","updated":"2013-11-25 08:41:57.000000000","message":"In fact the way this method is used now is not very suitable for providing status description, so i\u0027ll leave it as is for now","commit_id":"89dcdccd10bc574fb020412a971b5d13b88b4f6f"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"079c63d7d84428d9633cfd305cb5f665905fc604","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        Don\u0027t call update_status to save a few subtransactions per call"},{"line_number":205,"context_line":"        \"\"\""},{"line_number":206,"context_line":"        # TODO(enikanor): modify to traverse whole instance graph"},{"line_number":207,"context_line":"        # when loadbalancer instance is introduced"},{"line_number":208,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":209,"context_line":"            pool_db \u003d self._get_resource(context, Pool, pool_id)"},{"line_number":210,"context_line":"            if pool_db.status !\u003d status:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BdG0%3D","line":207,"updated":"2013-11-25 21:24:44.000000000","message":"Is there any hurt in assigning the status value regardless, without checking the current value?","commit_id":"4afb65a27e9b47385f22b817c2376b379daca2e7"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"9882bfbc9ece7924cd10cea2f4cd8cf23a986f5e","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        Don\u0027t call update_status to save a few subtransactions per call"},{"line_number":205,"context_line":"        \"\"\""},{"line_number":206,"context_line":"        # TODO(enikanor): modify to traverse whole instance graph"},{"line_number":207,"context_line":"        # when loadbalancer instance is introduced"},{"line_number":208,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":209,"context_line":"            pool_db \u003d self._get_resource(context, Pool, pool_id)"},{"line_number":210,"context_line":"            if pool_db.status !\u003d status:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2Bcmc%3D","line":207,"in_reply_to":"AAAATn%2F%2BdG0%3D","updated":"2013-11-25 23:18:55.000000000","message":"With checking it does cost an db update, if unnecessary.","commit_id":"4afb65a27e9b47385f22b817c2376b379daca2e7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7513362f7abb7d864fbad8b6a19dda4f36971c4f","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                           primary_key\u003dTrue)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"def _update_object_status(obj, new_status):"},{"line_number":180,"context_line":"    \"\"\"Function to change status of vip, pool, member, health monitor."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    Function doesn\u0027t activate an object if it is administratively put down"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2Br38%3D","line":179,"updated":"2014-01-23 07:41:27.000000000","message":"nit: can define this helper inside LoadBalancerPluginDb.update_instance_status() as it is not used anywhere else.","commit_id":"4b1623c694360bffd2559d7dddee70f1aab44747"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"080da7f5fa52bed545a7f6738fc919edc7466e15","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                           primary_key\u003dTrue)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"def _update_object_status(obj, new_status):"},{"line_number":180,"context_line":"    \"\"\"Function to change status of vip, pool, member, health monitor."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    Function doesn\u0027t activate an object if it is administratively put down"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2BlgI%3D","line":179,"in_reply_to":"AAAAUH%2F%2Br38%3D","updated":"2014-01-24 08:10:19.000000000","message":"Done","commit_id":"4b1623c694360bffd2559d7dddee70f1aab44747"}],"neutron/services/loadbalancer/drivers/haproxy/cfg.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"112774babe9d0c3ba742b40e33c3018940b0c109","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    # add the members"},{"line_number":140,"context_line":"    for member in config[\u0027members\u0027]:"},{"line_number":141,"context_line":"        if member[\u0027status\u0027] in (ACTIVE, INACTIVE) and member[\u0027admin_state_up\u0027]:"},{"line_number":142,"context_line":"            server \u003d ((\u0027server %(id)s %(address)s:%(protocol_port)s \u0027"},{"line_number":143,"context_line":"                       \u0027weight %(weight)s\u0027) % member) + server_addon"},{"line_number":144,"context_line":"            if _has_http_cookie_persistence(config):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2BIfk%3D","side":"PARENT","line":141,"updated":"2013-12-02 07:36:53.000000000","message":"INACTIVE was added here in order to fix the bug: https://bugs.launchpad.net/neutron/+bug/1229082","commit_id":"426ada771a0114ef2b1ba24b2161d718758598ae"}],"neutron/services/loadbalancer/drivers/haproxy/plugin_driver.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"3c8107c06c48147ffd2254fbddfb4d26596f140e","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            self.plugin.update_status(context, ldb.Vip, vip[\u0027id\u0027],"},{"line_number":292,"context_line":"                                      constants.PENDING_CREATE)"},{"line_number":293,"context_line":"            self.plugin.update_status(context, ldb.Pool, vip[\u0027pool_id\u0027],"},{"line_number":294,"context_line":"                                      constants.PENDING_CREATE)"},{"line_number":295,"context_line":"        if vip[\u0027status\u0027] in ACTIVE_PENDING:"},{"line_number":296,"context_line":"            self.agent_rpc.reload_pool(context, vip[\u0027pool_id\u0027], agent[\u0027host\u0027])"},{"line_number":297,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2Fd20%3D","line":294,"updated":"2013-11-05 11:43:21.000000000","message":"what about status of members? Should it be updated as well?","commit_id":"00f97e7cc5adcd10db8fb80d98291129061b4354"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"fc74131d57e614b379847652be174dd7218a1916","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            self.plugin.update_status(context, ldb.Vip, vip[\u0027id\u0027],"},{"line_number":292,"context_line":"                                      constants.PENDING_CREATE)"},{"line_number":293,"context_line":"            self.plugin.update_status(context, ldb.Pool, vip[\u0027pool_id\u0027],"},{"line_number":294,"context_line":"                                      constants.PENDING_CREATE)"},{"line_number":295,"context_line":"        if vip[\u0027status\u0027] in ACTIVE_PENDING:"},{"line_number":296,"context_line":"            self.agent_rpc.reload_pool(context, vip[\u0027pool_id\u0027], agent[\u0027host\u0027])"},{"line_number":297,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FJaE%3D","line":294,"in_reply_to":"AAAATn%2F%2Fd20%3D","updated":"2013-11-14 06:51:31.000000000","message":"Done","commit_id":"00f97e7cc5adcd10db8fb80d98291129061b4354"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"3c8107c06c48147ffd2254fbddfb4d26596f140e","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            self.plugin.update_status(context, ldb.Vip, pool[\u0027id\u0027],"},{"line_number":316,"context_line":"                                      constants.PENDING_CREATE)"},{"line_number":317,"context_line":"            self.plugin.update_status(context, ldb.Pool, pool[\u0027vip_id\u0027],"},{"line_number":318,"context_line":"                                      constants.PENDING_CREATE)"},{"line_number":319,"context_line":"        if pool[\u0027status\u0027] in ACTIVE_PENDING:"},{"line_number":320,"context_line":"            if pool[\u0027vip_id\u0027] is not None:"},{"line_number":321,"context_line":"                self.agent_rpc.reload_pool(context, pool[\u0027id\u0027], agent[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2Fd2g%3D","line":318,"updated":"2013-11-05 11:43:21.000000000","message":"ditto","commit_id":"00f97e7cc5adcd10db8fb80d98291129061b4354"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"fc74131d57e614b379847652be174dd7218a1916","unresolved":false,"context_lines":[{"line_number":315,"context_line":"            self.plugin.update_status(context, ldb.Vip, pool[\u0027id\u0027],"},{"line_number":316,"context_line":"                                      constants.PENDING_CREATE)"},{"line_number":317,"context_line":"            self.plugin.update_status(context, ldb.Pool, pool[\u0027vip_id\u0027],"},{"line_number":318,"context_line":"                                      constants.PENDING_CREATE)"},{"line_number":319,"context_line":"        if pool[\u0027status\u0027] in ACTIVE_PENDING:"},{"line_number":320,"context_line":"            if pool[\u0027vip_id\u0027] is not None:"},{"line_number":321,"context_line":"                self.agent_rpc.reload_pool(context, pool[\u0027id\u0027], agent[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FJaA%3D","line":318,"in_reply_to":"AAAATn%2F%2Fd2g%3D","updated":"2013-11-14 06:51:31.000000000","message":"Done","commit_id":"00f97e7cc5adcd10db8fb80d98291129061b4354"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"ed721bb8f0eed58d40e5dfc3d9af2a81f9593f51","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        agent \u003d self.get_pool_agent(context, vip[\u0027pool_id\u0027])"},{"line_number":277,"context_line":"        if not vip[\u0027admin_state_up\u0027]:"},{"line_number":278,"context_line":"            # update status of whole instance to PENDING_CREATE"},{"line_number":279,"context_line":"            self.plugin.update_instance_status(context, vip[\u0027pool_id\u0027],"},{"line_number":280,"context_line":"                                               constants.PENDING_CREATE)"},{"line_number":281,"context_line":"        if vip[\u0027status\u0027] in ACTIVE_PENDING:"},{"line_number":282,"context_line":"            self.agent_rpc.reload_pool(context, vip[\u0027pool_id\u0027], agent[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2ByJ4%3D","line":279,"updated":"2013-11-20 08:59:53.000000000","message":"updating status to PENDING_CREATE will have no effect as loadbalancer will still be deployed (#282) and status will be returned to ACTIVE. I think we should change status to INACTIVE","commit_id":"396b4d714eed96258d56ecf982ea31df3e93227b"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5f37ee05d2efe4cad27c9ab16dbf8f8d9afbcd27","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def _is_vip_up(self, context, vip_id):"},{"line_number":283,"context_line":"        if not vip_id:"},{"line_number":284,"context_line":"            # if pool doesn\u0027t have vip, pool_id is None and we"},{"line_number":285,"context_line":"            # don\u0027t care about the pool\u0027s state"},{"line_number":286,"context_line":"            return True"},{"line_number":287,"context_line":"        return self.plugin.get_vip(context, vip_id)[\u0027admin_state_up\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BhXc%3D","line":284,"updated":"2013-11-25 07:06:52.000000000","message":"vip_id is None?","commit_id":"89dcdccd10bc574fb020412a971b5d13b88b4f6f"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"0f77b93474c9bee7b5c1b6cea99f75680d99ce90","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def _is_vip_up(self, context, vip_id):"},{"line_number":283,"context_line":"        if not vip_id:"},{"line_number":284,"context_line":"            # if pool doesn\u0027t have vip, pool_id is None and we"},{"line_number":285,"context_line":"            # don\u0027t care about the pool\u0027s state"},{"line_number":286,"context_line":"            return True"},{"line_number":287,"context_line":"        return self.plugin.get_vip(context, vip_id)[\u0027admin_state_up\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BhLA%3D","line":284,"in_reply_to":"AAAATn%2F%2BhXc%3D","updated":"2013-11-25 08:41:57.000000000","message":"Done","commit_id":"89dcdccd10bc574fb020412a971b5d13b88b4f6f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5f37ee05d2efe4cad27c9ab16dbf8f8d9afbcd27","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    def _is_vip_up(self, context, vip_id):"},{"line_number":283,"context_line":"        if not vip_id:"},{"line_number":284,"context_line":"            # if pool doesn\u0027t have vip, pool_id is None and we"},{"line_number":285,"context_line":"            # don\u0027t care about the pool\u0027s state"},{"line_number":286,"context_line":"            return True"},{"line_number":287,"context_line":"        return self.plugin.get_vip(context, vip_id)[\u0027admin_state_up\u0027]"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BhWg%3D","line":285,"updated":"2013-11-25 07:06:52.000000000","message":"vip\u0027s state?","commit_id":"89dcdccd10bc574fb020412a971b5d13b88b4f6f"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"0f77b93474c9bee7b5c1b6cea99f75680d99ce90","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    def _is_vip_up(self, context, vip_id):"},{"line_number":283,"context_line":"        if not vip_id:"},{"line_number":284,"context_line":"            # if pool doesn\u0027t have vip, pool_id is None and we"},{"line_number":285,"context_line":"            # don\u0027t care about the pool\u0027s state"},{"line_number":286,"context_line":"            return True"},{"line_number":287,"context_line":"        return self.plugin.get_vip(context, vip_id)[\u0027admin_state_up\u0027]"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BhV0%3D","line":285,"in_reply_to":"AAAATn%2F%2BhWg%3D","updated":"2013-11-25 08:41:57.000000000","message":"right, this line should be fixed","commit_id":"89dcdccd10bc574fb020412a971b5d13b88b4f6f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"3b2e2156b96c7996f53416e0ad8720bc3abaa447","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                          else constants.INACTIVE)"},{"line_number":297,"context_line":"            vip[\u0027status\u0027] \u003d new_status"},{"line_number":298,"context_line":"            self.plugin.update_instance_status(context, vip[\u0027pool_id\u0027],"},{"line_number":299,"context_line":"                                               new_status)"},{"line_number":300,"context_line":"        if vip[\u0027status\u0027] in ACTIVE_PENDING:"},{"line_number":301,"context_line":"            self.agent_rpc.reload_pool(context, vip[\u0027pool_id\u0027], agent[\u0027host\u0027])"},{"line_number":302,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BPEM%3D","line":299,"updated":"2013-11-28 14:03:40.000000000","message":"if the vip is administrativelly down, you will bring make inactive also the pool and all the other resources.\n\nIs this consistent with the lb instance concept as well as the scheduled changes in vip/pool mappings? I was thinking that the pool you\u0027re making inactive could be associated to another vip which is administratively up","commit_id":"4afb65a27e9b47385f22b817c2376b379daca2e7"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"455c3c442f4f1a98ac7200c8be5a83e904a77832","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                          else constants.INACTIVE)"},{"line_number":297,"context_line":"            vip[\u0027status\u0027] \u003d new_status"},{"line_number":298,"context_line":"            self.plugin.update_instance_status(context, vip[\u0027pool_id\u0027],"},{"line_number":299,"context_line":"                                               new_status)"},{"line_number":300,"context_line":"        if vip[\u0027status\u0027] in ACTIVE_PENDING:"},{"line_number":301,"context_line":"            self.agent_rpc.reload_pool(context, vip[\u0027pool_id\u0027], agent[\u0027host\u0027])"},{"line_number":302,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BO2c%3D","line":299,"in_reply_to":"AAAATn%2F%2BPEM%3D","updated":"2013-11-28 15:03:02.000000000","message":"That\u0027s a good question.\nThis particular implementation reflects HAProxy-provider behavior which is single vip-pool.\nIf API compatibility is concerned, then I think the proposed solution works with m:n vip-pool model if modified in such way that pool becomes inactive iff all of it\u0027s vips are inactive. same for the vip.\nIn other words, this on is a particular case of more generic solution that could be implemented for m:n vip-pools.","commit_id":"4afb65a27e9b47385f22b817c2376b379daca2e7"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"0209c1f48cb67128f2f6a27969e485fd390b6dde","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                    )"},{"line_number":124,"context_line":"            retval[\u0027members\u0027] \u003d ["},{"line_number":125,"context_line":"                self.plugin._make_member_dict(m)"},{"line_number":126,"context_line":"                for m in pool.members if m.status in (constants.ACTIVE,"},{"line_number":127,"context_line":"                                                      constants.INACTIVE)"},{"line_number":128,"context_line":"            ]"},{"line_number":129,"context_line":"            retval[\u0027healthmonitors\u0027] \u003d ["}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2B4js%3D","line":126,"updated":"2014-01-21 05:10:10.000000000","message":"This contradicts the commit message about member handling.","commit_id":"4bd1b75be106f8e466a27cf7f9f68b440f685010"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"1e6588f34496ffd1858f3745cc00bbed4ddb3763","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                    )"},{"line_number":124,"context_line":"            retval[\u0027members\u0027] \u003d ["},{"line_number":125,"context_line":"                self.plugin._make_member_dict(m)"},{"line_number":126,"context_line":"                for m in pool.members if m.status in (constants.ACTIVE,"},{"line_number":127,"context_line":"                                                      constants.INACTIVE)"},{"line_number":128,"context_line":"            ]"},{"line_number":129,"context_line":"            retval[\u0027healthmonitors\u0027] \u003d ["}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Br5w%3D","line":126,"in_reply_to":"AAAAUH%2F%2B4js%3D","updated":"2014-01-23 07:23:11.000000000","message":"You\u0027re right. We need to pass both active and inactive members to the agent/driver, so commit message should be fixed.","commit_id":"4bd1b75be106f8e466a27cf7f9f68b440f685010"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"eabc741d2bccfe86fc723d7816cacdacd4351fa6","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        agent \u003d self.get_pool_agent(context, vip[\u0027pool_id\u0027])"},{"line_number":364,"context_line":"        self.agent_rpc.create_vip(context, vip, agent[\u0027host\u0027])"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def _is_pool_up(self, context, pool_id):"},{"line_number":367,"context_line":"        if not pool_id:"},{"line_number":368,"context_line":"            # if vip doesn\u0027t have pool, pool_id is None and we"},{"line_number":369,"context_line":"            # don\u0027t care about the pool\u0027s state"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F9wdM%3D","line":366,"updated":"2014-02-04 10:05:20.000000000","message":"this is internal method so not really a biggie ... but this could just be called _pool_exists_up for example... and return False for not pool_id (dealing with the return appropriately). seems a bit confusing to return True for \u0027is pool up\u0027, even when the pool doesn\u0027t exist at all","commit_id":"a5412e1a6a0695f4843e512577b0a4062999df96"},{"author":{"_account_id":8449,"name":"Marios Andreou","email":"marios.andreou@gmail.com","username":"marios"},"change_message_id":"eabc741d2bccfe86fc723d7816cacdacd4351fa6","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        if vip[\u0027admin_state_up\u0027] !\u003d old_vip[\u0027admin_state_up\u0027]:"},{"line_number":383,"context_line":"            # have to check pool state as well"},{"line_number":384,"context_line":"            new_status \u003d (constants.PENDING_CREATE"},{"line_number":385,"context_line":"                          if vip[\u0027admin_state_up\u0027] and"},{"line_number":386,"context_line":"                          self._is_pool_up(context, vip[\u0027pool_id\u0027])"},{"line_number":387,"context_line":"                          else constants.INACTIVE)"},{"line_number":388,"context_line":"            vip[\u0027status\u0027] \u003d new_status"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F9wdA%3D","line":385,"updated":"2014-02-04 10:05:20.000000000","message":"why not self._is_vip_up ?","commit_id":"a5412e1a6a0695f4843e512577b0a4062999df96"}],"neutron/tests/unit/services/loadbalancer/drivers/haproxy/test_plugin_driver.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7513362f7abb7d864fbad8b6a19dda4f36971c4f","unresolved":false,"context_lines":[{"line_number":558,"context_line":""},{"line_number":559,"context_line":"    def test_update_pool_with_admin_state_down(self):"},{"line_number":560,"context_line":"        with self.pool() as pool:"},{"line_number":561,"context_line":"            with self.vip(pool\u003dpool) as vip:"},{"line_number":562,"context_line":"                with contextlib.nested("},{"line_number":563,"context_line":"                    self.member(pool_id\u003dpool[\u0027pool\u0027][\u0027id\u0027]),"},{"line_number":564,"context_line":"                    self.health_monitor()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2Br3U%3D","line":561,"updated":"2014-01-23 07:41:27.000000000","message":"nit: can put into contextlib.nested as well. Also applies for below tests.","commit_id":"4b1623c694360bffd2559d7dddee70f1aab44747"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"080da7f5fa52bed545a7f6738fc919edc7466e15","unresolved":false,"context_lines":[{"line_number":558,"context_line":""},{"line_number":559,"context_line":"    def test_update_pool_with_admin_state_down(self):"},{"line_number":560,"context_line":"        with self.pool() as pool:"},{"line_number":561,"context_line":"            with self.vip(pool\u003dpool) as vip:"},{"line_number":562,"context_line":"                with contextlib.nested("},{"line_number":563,"context_line":"                    self.member(pool_id\u003dpool[\u0027pool\u0027][\u0027id\u0027]),"},{"line_number":564,"context_line":"                    self.health_monitor()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2BliU%3D","line":561,"in_reply_to":"AAAAUH%2F%2Br3U%3D","updated":"2014-01-24 08:10:19.000000000","message":"Done","commit_id":"4b1623c694360bffd2559d7dddee70f1aab44747"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7513362f7abb7d864fbad8b6a19dda4f36971c4f","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        with self.pool() as pool:"},{"line_number":588,"context_line":"            with self.vip(pool\u003dpool):"},{"line_number":589,"context_line":"                with contextlib.nested("},{"line_number":590,"context_line":"                    self.member(pool_id\u003dpool[\u0027pool\u0027][\u0027id\u0027]),"},{"line_number":591,"context_line":"                    self.health_monitor()"},{"line_number":592,"context_line":"                ) as (member, hm):"},{"line_number":593,"context_line":"                    ctx \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2Br2g%3D","line":590,"updated":"2014-01-23 07:41:27.000000000","message":"nit: member is not used in the test","commit_id":"4b1623c694360bffd2559d7dddee70f1aab44747"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"080da7f5fa52bed545a7f6738fc919edc7466e15","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        with self.pool() as pool:"},{"line_number":588,"context_line":"            with self.vip(pool\u003dpool):"},{"line_number":589,"context_line":"                with contextlib.nested("},{"line_number":590,"context_line":"                    self.member(pool_id\u003dpool[\u0027pool\u0027][\u0027id\u0027]),"},{"line_number":591,"context_line":"                    self.health_monitor()"},{"line_number":592,"context_line":"                ) as (member, hm):"},{"line_number":593,"context_line":"                    ctx \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2BlgU%3D","line":590,"in_reply_to":"AAAAUH%2F%2Br2g%3D","updated":"2014-01-24 08:10:19.000000000","message":"Done","commit_id":"4b1623c694360bffd2559d7dddee70f1aab44747"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7513362f7abb7d864fbad8b6a19dda4f36971c4f","unresolved":false,"context_lines":[{"line_number":615,"context_line":"        with self.pool() as pool:"},{"line_number":616,"context_line":"            with self.vip(pool\u003dpool) as vip:"},{"line_number":617,"context_line":"                with contextlib.nested("},{"line_number":618,"context_line":"                    self.member(pool_id\u003dpool[\u0027pool\u0027][\u0027id\u0027]),"},{"line_number":619,"context_line":"                    self.health_monitor()"},{"line_number":620,"context_line":"                ) as (member, hm):"},{"line_number":621,"context_line":"                    ctx \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2Br2M%3D","line":618,"updated":"2014-01-23 07:41:27.000000000","message":"ditto","commit_id":"4b1623c694360bffd2559d7dddee70f1aab44747"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"080da7f5fa52bed545a7f6738fc919edc7466e15","unresolved":false,"context_lines":[{"line_number":615,"context_line":"        with self.pool() as pool:"},{"line_number":616,"context_line":"            with self.vip(pool\u003dpool) as vip:"},{"line_number":617,"context_line":"                with contextlib.nested("},{"line_number":618,"context_line":"                    self.member(pool_id\u003dpool[\u0027pool\u0027][\u0027id\u0027]),"},{"line_number":619,"context_line":"                    self.health_monitor()"},{"line_number":620,"context_line":"                ) as (member, hm):"},{"line_number":621,"context_line":"                    ctx \u003d context.get_admin_context()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2BlgQ%3D","line":618,"in_reply_to":"AAAAUH%2F%2Br2M%3D","updated":"2014-01-24 08:10:19.000000000","message":"Done","commit_id":"4b1623c694360bffd2559d7dddee70f1aab44747"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"44de31c8a9596d03cf29039d586f5eb600ffb3a2","unresolved":false,"context_lines":[{"line_number":589,"context_line":"                self.vip(pool\u003dpool),"},{"line_number":590,"context_line":"                self.member(pool_id\u003dpool[\u0027pool\u0027][\u0027id\u0027]),"},{"line_number":591,"context_line":"                self.health_monitor()"},{"line_number":592,"context_line":"            ) as (vip, member, hm):"},{"line_number":593,"context_line":"                ctx \u003d context.get_admin_context()"},{"line_number":594,"context_line":"                # associating healthmon with the pool"},{"line_number":595,"context_line":"                self.plugin_instance.create_pool_health_monitor("}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2Bj1Y%3D","line":592,"updated":"2014-01-24 11:43:58.000000000","message":"Oleg\u0027s comment on member not being used in these two functions... not addressed.","commit_id":"634a641f7343783bfe86b46f46e04125a96c5b95"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"2afa256e0768cce6ccf2c941074b4c6b000217b0","unresolved":false,"context_lines":[{"line_number":589,"context_line":"                self.vip(pool\u003dpool),"},{"line_number":590,"context_line":"                self.member(pool_id\u003dpool[\u0027pool\u0027][\u0027id\u0027]),"},{"line_number":591,"context_line":"                self.health_monitor()"},{"line_number":592,"context_line":"            ) as (vip, member, hm):"},{"line_number":593,"context_line":"                ctx \u003d context.get_admin_context()"},{"line_number":594,"context_line":"                # associating healthmon with the pool"},{"line_number":595,"context_line":"                self.plugin_instance.create_pool_health_monitor("}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2BQyA%3D","line":592,"in_reply_to":"AAAAUH%2F%2Bj1Y%3D","updated":"2014-01-28 15:41:21.000000000","message":"In fact it is used: check lines 610 and 636, while variable itself is not needed, but can\u0027t be skipped","commit_id":"634a641f7343783bfe86b46f46e04125a96c5b95"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"08fcf580f4e98696299407207884406ff544ac06","unresolved":false,"context_lines":[{"line_number":633,"context_line":"                self.assertEqual(p[\u0027status\u0027], constants.INACTIVE)"},{"line_number":634,"context_line":"                self.assertEqual(p[\u0027health_monitors_status\u0027][0][\u0027status\u0027],"},{"line_number":635,"context_line":"                                 constants.INACTIVE)"},{"line_number":636,"context_line":"                self.assertEqual(p[\u0027members\u0027][0][\u0027status\u0027],"},{"line_number":637,"context_line":"                                 constants.INACTIVE)"},{"line_number":638,"context_line":"                self.mock_api.delete_vip.assert_called_once_with("},{"line_number":639,"context_line":"                    mock.ANY, mock.ANY, \u0027host\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F98d0%3D","line":636,"updated":"2014-01-31 20:03:07.000000000","message":"*** TypeError: TypeError(\u0027string indices must be integers\u0027,)\n\nwhere \n \n(Pdb) p p[\u0027members\u0027]\n[u\u00277c52b7aa-ac97-4df1-8b26-563d68b2d42d\u0027]\n\nand \n\n(Pdb) p p\n{\u0027status\u0027: u\u0027INACTIVE\u0027, \u0027lb_method\u0027: u\u0027ROUND_ROBIN\u0027, \u0027protocol\u0027: u\u0027HTTP\u0027, \u0027description\u0027: u\u0027\u0027, \u0027health_monitors\u0027: [u\u002702b4009d-f252-49db-a094-4cd3de90b1cc\u0027], \u0027members\u0027: [u\u00277c52b7aa-ac97-4df1-8b26-563d68b2d42d\u0027], \u0027status_description\u0027: None, \u0027id\u0027: u\u0027c1955c91-7c00-42ab-ab8d-1a8243bb0d9e\u0027, \u0027vip_id\u0027: u\u00273b663941-eb6d-458d-aecb-0e067573b967\u0027, \u0027name\u0027: u\u0027pool1\u0027, \u0027admin_state_up\u0027: True, \u0027subnet_id\u0027: u\u00270c798ed8-33ba-11e2-8b28-000c291c4d14\u0027, \u0027tenant_id\u0027: u\u0027test-tenant\u0027, \u0027health_monitors_status\u0027: [{\u0027monitor_id\u0027: u\u002702b4009d-f252-49db-a094-4cd3de90b1cc\u0027, \u0027status\u0027: \u0027INACTIVE\u0027, \u0027status_description\u0027: None}], \u0027provider\u0027: u\u0027lbaas\u0027}","commit_id":"634a641f7343783bfe86b46f46e04125a96c5b95"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"5d3aa82998f878d9d9bd801c5c6c0831f5609c34","unresolved":false,"context_lines":[{"line_number":633,"context_line":"                self.assertEqual(p[\u0027status\u0027], constants.INACTIVE)"},{"line_number":634,"context_line":"                self.assertEqual(p[\u0027health_monitors_status\u0027][0][\u0027status\u0027],"},{"line_number":635,"context_line":"                                 constants.INACTIVE)"},{"line_number":636,"context_line":"                self.assertEqual(p[\u0027members\u0027][0][\u0027status\u0027],"},{"line_number":637,"context_line":"                                 constants.INACTIVE)"},{"line_number":638,"context_line":"                self.mock_api.delete_vip.assert_called_once_with("},{"line_number":639,"context_line":"                    mock.ANY, mock.ANY, \u0027host\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F9590%3D","line":636,"in_reply_to":"AAAAUH%2F98d0%3D","updated":"2014-02-02 05:57:39.000000000","message":"Done","commit_id":"634a641f7343783bfe86b46f46e04125a96c5b95"}]}
