)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b074bc84b282750087cfe5e59f14b78fd62ce1f5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Evgeny Fedoruk \u003cevgenyf@radware.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-11-13 22:48:39 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding more tests and fixes driver as a result"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adding more driver tests."},{"line_number":10,"context_line":"Adding new exception module for the radware lbaas driver."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAATn%2F%2B384%3D","line":7,"updated":"2013-11-19 04:22:20.000000000","message":"Could you add some keyword indicating this patch is related to radware lbaas driver. It really helps us to see the log or review list.","commit_id":"de567fc7cb068202fdd2ce96c1d3ba2ab540c661"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"db554649e08b194672a628da8d0dbaa797301989","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Evgeny Fedoruk \u003cevgenyf@radware.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-11-13 22:48:39 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding more tests and fixes driver as a result"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adding more driver tests."},{"line_number":10,"context_line":"Adding new exception module for the radware lbaas driver."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAATn%2F%2B3Zs%3D","line":7,"in_reply_to":"AAAATn%2F%2B384%3D","updated":"2013-11-19 07:34:52.000000000","message":"Done","commit_id":"de567fc7cb068202fdd2ce96c1d3ba2ab540c661"}],"neutron/services/loadbalancer/drivers/radware/driver.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"f5d08031ccb5c4eb4ed7a21796bab7dfac89bcc3","unresolved":false,"context_lines":[{"line_number":504,"context_line":"                    break"},{"line_number":505,"context_line":"        for wf, found in workflows.items():"},{"line_number":506,"context_line":"            if not found:"},{"line_number":507,"context_line":"                msg \u003d (_(\u0027The workflow %s does not exist on vDirect.\u0027),"},{"line_number":508,"context_line":"                       wf)"},{"line_number":509,"context_line":"                raise q_exc.NeutronException(m\u003dmsg)"},{"line_number":510,"context_line":"        self.workflow_templates_exists \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2Fzew%3D","line":507,"updated":"2013-10-28 19:57:30.000000000","message":"it\u0027s not a logging method, so string substitution should use % operator, not comma","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"c145758f76cd6c58d1c8bf7c1f85f7fc6a65aaae","unresolved":false,"context_lines":[{"line_number":504,"context_line":"                    break"},{"line_number":505,"context_line":"        for wf, found in workflows.items():"},{"line_number":506,"context_line":"            if not found:"},{"line_number":507,"context_line":"                msg \u003d (_(\u0027The workflow %s does not exist on vDirect.\u0027),"},{"line_number":508,"context_line":"                       wf)"},{"line_number":509,"context_line":"                raise q_exc.NeutronException(m\u003dmsg)"},{"line_number":510,"context_line":"        self.workflow_templates_exists \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2Fx4U%3D","line":507,"in_reply_to":"AAAATn%2F%2Fzew%3D","updated":"2013-10-29 07:46:04.000000000","message":"Done","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5aecf6167a412dfefb21853a272c911cc572f1de","unresolved":false,"context_lines":[{"line_number":506,"context_line":"            if not found:"},{"line_number":507,"context_line":"                msg \u003d (_(\u0027The workflow %s does not exist on vDirect.\u0027),"},{"line_number":508,"context_line":"                       wf)"},{"line_number":509,"context_line":"                raise q_exc.NeutronException(m\u003dmsg)"},{"line_number":510,"context_line":"        self.workflow_templates_exists \u003d True"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2Fxt0%3D","line":509,"updated":"2013-10-29 08:10:26.000000000","message":"what does m parameter mean? Looking at NeutronException I don\u0027t see it is expected/used.","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"b9b1703ce43696fd33e32f4937214df5c0309962","unresolved":false,"context_lines":[{"line_number":506,"context_line":"            if not found:"},{"line_number":507,"context_line":"                msg \u003d (_(\u0027The workflow %s does not exist on vDirect.\u0027),"},{"line_number":508,"context_line":"                       wf)"},{"line_number":509,"context_line":"                raise q_exc.NeutronException(m\u003dmsg)"},{"line_number":510,"context_line":"        self.workflow_templates_exists \u003d True"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2Fxjc%3D","line":509,"in_reply_to":"AAAATn%2F%2Fxt0%3D","updated":"2013-10-29 12:11:57.000000000","message":"Created specific Exception called WorkflowMissing, inherits from new RadwareLBaasException, inheriting from NeutronException. See new file - exception.py. Should get kwargs for message parameters substitution","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5aecf6167a412dfefb21853a272c911cc572f1de","unresolved":false,"context_lines":[{"line_number":697,"context_line":"def _rest_wrapper(response, success_codes\u003d[202]):"},{"line_number":698,"context_line":"    \"\"\"Wrap a REST call and make sure a valid status is returned.\"\"\""},{"line_number":699,"context_line":"    if response[RESP_STATUS] not in success_codes:"},{"line_number":700,"context_line":"        exc_msg \u003d \u0027%s:%s. Error description: %s\u0027 % ("},{"line_number":701,"context_line":"            response[RESP_STATUS], response[RESP_REASON], response[RESP_STR])"},{"line_number":702,"context_line":"        raise q_exc.NeutronException(m\u003dexc_msg)"},{"line_number":703,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FxtA%3D","line":700,"updated":"2013-10-29 08:10:26.000000000","message":"Need to wrap with _(), also please use named format parameters if have more than one: _(%(status)s...) % {\u0027status\u0027: response[RESP_STATUS], ...}","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"b9b1703ce43696fd33e32f4937214df5c0309962","unresolved":false,"context_lines":[{"line_number":697,"context_line":"def _rest_wrapper(response, success_codes\u003d[202]):"},{"line_number":698,"context_line":"    \"\"\"Wrap a REST call and make sure a valid status is returned.\"\"\""},{"line_number":699,"context_line":"    if response[RESP_STATUS] not in success_codes:"},{"line_number":700,"context_line":"        exc_msg \u003d \u0027%s:%s. Error description: %s\u0027 % ("},{"line_number":701,"context_line":"            response[RESP_STATUS], response[RESP_REASON], response[RESP_STR])"},{"line_number":702,"context_line":"        raise q_exc.NeutronException(m\u003dexc_msg)"},{"line_number":703,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2Fxh4%3D","line":700,"in_reply_to":"AAAATn%2F%2FxtA%3D","updated":"2013-10-29 12:11:57.000000000","message":"Done.\nGeneric handling by new RESTRequestException","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"f5d08031ccb5c4eb4ed7a21796bab7dfac89bcc3","unresolved":false,"context_lines":[{"line_number":699,"context_line":"    if response[RESP_STATUS] not in success_codes:"},{"line_number":700,"context_line":"        exc_msg \u003d \u0027%s:%s. Error description: %s\u0027 % ("},{"line_number":701,"context_line":"            response[RESP_STATUS], response[RESP_REASON], response[RESP_STR])"},{"line_number":702,"context_line":"        raise q_exc.NeutronException(m\u003dexc_msg)"},{"line_number":703,"context_line":"    else:"},{"line_number":704,"context_line":"        return response[RESP_DATA]"},{"line_number":705,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2Fza4%3D","line":702,"updated":"2013-10-28 19:57:30.000000000","message":"More specific exception should be raised, i think.","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5aecf6167a412dfefb21853a272c911cc572f1de","unresolved":false,"context_lines":[{"line_number":699,"context_line":"    if response[RESP_STATUS] not in success_codes:"},{"line_number":700,"context_line":"        exc_msg \u003d \u0027%s:%s. Error description: %s\u0027 % ("},{"line_number":701,"context_line":"            response[RESP_STATUS], response[RESP_REASON], response[RESP_STR])"},{"line_number":702,"context_line":"        raise q_exc.NeutronException(m\u003dexc_msg)"},{"line_number":703,"context_line":"    else:"},{"line_number":704,"context_line":"        return response[RESP_DATA]"},{"line_number":705,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2Fxs8%3D","line":702,"updated":"2013-10-29 08:10:26.000000000","message":"ditto on m parameter","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"b9b1703ce43696fd33e32f4937214df5c0309962","unresolved":false,"context_lines":[{"line_number":699,"context_line":"    if response[RESP_STATUS] not in success_codes:"},{"line_number":700,"context_line":"        exc_msg \u003d \u0027%s:%s. Error description: %s\u0027 % ("},{"line_number":701,"context_line":"            response[RESP_STATUS], response[RESP_REASON], response[RESP_STR])"},{"line_number":702,"context_line":"        raise q_exc.NeutronException(m\u003dexc_msg)"},{"line_number":703,"context_line":"    else:"},{"line_number":704,"context_line":"        return response[RESP_DATA]"},{"line_number":705,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2Fxh8%3D","line":702,"in_reply_to":"AAAATn%2F%2Fxs8%3D","updated":"2013-10-29 12:11:57.000000000","message":"Done","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"b9b1703ce43696fd33e32f4937214df5c0309962","unresolved":false,"context_lines":[{"line_number":699,"context_line":"    if response[RESP_STATUS] not in success_codes:"},{"line_number":700,"context_line":"        exc_msg \u003d \u0027%s:%s. Error description: %s\u0027 % ("},{"line_number":701,"context_line":"            response[RESP_STATUS], response[RESP_REASON], response[RESP_STR])"},{"line_number":702,"context_line":"        raise q_exc.NeutronException(m\u003dexc_msg)"},{"line_number":703,"context_line":"    else:"},{"line_number":704,"context_line":"        return response[RESP_DATA]"},{"line_number":705,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FxiE%3D","line":702,"in_reply_to":"AAAATn%2F%2Fxx0%3D","updated":"2013-10-29 12:11:57.000000000","message":"Created specific Exception called RESTRequestFailure, inherits from NeutronException, should get kwargs for message parameters substitution","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"c145758f76cd6c58d1c8bf7c1f85f7fc6a65aaae","unresolved":false,"context_lines":[{"line_number":699,"context_line":"    if response[RESP_STATUS] not in success_codes:"},{"line_number":700,"context_line":"        exc_msg \u003d \u0027%s:%s. Error description: %s\u0027 % ("},{"line_number":701,"context_line":"            response[RESP_STATUS], response[RESP_REASON], response[RESP_STR])"},{"line_number":702,"context_line":"        raise q_exc.NeutronException(m\u003dexc_msg)"},{"line_number":703,"context_line":"    else:"},{"line_number":704,"context_line":"        return response[RESP_DATA]"},{"line_number":705,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2Fxx0%3D","line":702,"in_reply_to":"AAAATn%2F%2Fza4%3D","updated":"2013-10-29 07:46:04.000000000","message":"You mean the Exception type itself or the exception message?\nThere is no appropriate exception for REST request failure.","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2b9f9a288adbdd0fef39420e08a5f5ca09064990","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            ids \u003d params.pop(\u0027__ids__\u0027, None)"},{"line_number":363,"context_line":"            if not ids:"},{"line_number":364,"context_line":"                raise n_exc.NeutronException("},{"line_number":365,"context_line":"                    _(\u0027params must contain __ids__ field!\u0027)"},{"line_number":366,"context_line":"                )"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"            oper \u003d OperationAttributes(response[\u0027uri\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FwvM%3D","line":365,"updated":"2013-10-29 13:23:42.000000000","message":"NeutronException accepts only keyword parameters, passing message string seems has no effect (most probably results in error). I see this wasn\u0027t introduced within this patch but may be worth adding ut and fixing.","commit_id":"8541890330773f69cf575fdaaa47663cc4abea75"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"704744375196dc1c8374a2d5afba5b16431dff2a","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            ids \u003d params.pop(\u0027__ids__\u0027, None)"},{"line_number":363,"context_line":"            if not ids:"},{"line_number":364,"context_line":"                raise n_exc.NeutronException("},{"line_number":365,"context_line":"                    _(\u0027params must contain __ids__ field!\u0027)"},{"line_number":366,"context_line":"                )"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"            oper \u003d OperationAttributes(response[\u0027uri\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FwiQ%3D","line":365,"in_reply_to":"AAAATn%2F%2FwvM%3D","updated":"2013-10-29 14:04:50.000000000","message":"You are absolutely right!\nStill, I prefer handling the issue not in scope of this change.\n\nBug for the issue is reported:   https://bugs.launchpad.net/neutron/+bug/1245892\nI plan fixing it soon.","commit_id":"8541890330773f69cf575fdaaa47663cc4abea75"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2b9f9a288adbdd0fef39420e08a5f5ca09064990","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        ids \u003d params.pop(\u0027__ids__\u0027, None)"},{"line_number":379,"context_line":"        if not ids:"},{"line_number":380,"context_line":"            raise n_exc.NeutronException("},{"line_number":381,"context_line":"                _(\u0027params must contain __ids__ field!\u0027)"},{"line_number":382,"context_line":"            )"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        wf_name \u003d ids[\u0027pool\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FwvI%3D","line":381,"updated":"2013-10-29 13:23:42.000000000","message":"ditto","commit_id":"8541890330773f69cf575fdaaa47663cc4abea75"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"704744375196dc1c8374a2d5afba5b16431dff2a","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        ids \u003d params.pop(\u0027__ids__\u0027, None)"},{"line_number":379,"context_line":"        if not ids:"},{"line_number":380,"context_line":"            raise n_exc.NeutronException("},{"line_number":381,"context_line":"                _(\u0027params must contain __ids__ field!\u0027)"},{"line_number":382,"context_line":"            )"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        wf_name \u003d ids[\u0027pool\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FwiM%3D","line":381,"in_reply_to":"AAAATn%2F%2FwvI%3D","updated":"2013-10-29 14:04:50.000000000","message":"ditto","commit_id":"8541890330773f69cf575fdaaa47663cc4abea75"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"704744375196dc1c8374a2d5afba5b16431dff2a","unresolved":false,"context_lines":[{"line_number":530,"context_line":"            self.auth \u003d self.auth.replace(\u0027\\n\u0027, \u0027\u0027)"},{"line_number":531,"context_line":"        else:"},{"line_number":532,"context_line":"            msg \u003d _(\u0027User and password must be specified\u0027)"},{"line_number":533,"context_line":"            raise n_exc.NeutronException(msg)"},{"line_number":534,"context_line":"        debug_params \u003d {\u0027server\u0027: self.server,"},{"line_number":535,"context_line":"                        \u0027port\u0027: self.port,"},{"line_number":536,"context_line":"                        \u0027ssl\u0027: self.ssl}"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Fwhs%3D","line":533,"updated":"2013-10-29 14:04:50.000000000","message":"ditto","commit_id":"8541890330773f69cf575fdaaa47663cc4abea75"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2b9f9a288adbdd0fef39420e08a5f5ca09064990","unresolved":false,"context_lines":[{"line_number":762,"context_line":"        plugin._delete_db_pool(context, oper.entity_id)"},{"line_number":763,"context_line":"    else:"},{"line_number":764,"context_line":"        raise n_exc.NeutronException("},{"line_number":765,"context_line":"            _(\u0027Tried to remove unsupported lbaas entity %s!\u0027),"},{"line_number":766,"context_line":"            str(oper.lbaas_entity)"},{"line_number":767,"context_line":"        )"},{"line_number":768,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Fwto%3D","line":765,"updated":"2013-10-29 13:23:42.000000000","message":"ditto","commit_id":"8541890330773f69cf575fdaaa47663cc4abea75"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"704744375196dc1c8374a2d5afba5b16431dff2a","unresolved":false,"context_lines":[{"line_number":762,"context_line":"        plugin._delete_db_pool(context, oper.entity_id)"},{"line_number":763,"context_line":"    else:"},{"line_number":764,"context_line":"        raise n_exc.NeutronException("},{"line_number":765,"context_line":"            _(\u0027Tried to remove unsupported lbaas entity %s!\u0027),"},{"line_number":766,"context_line":"            str(oper.lbaas_entity)"},{"line_number":767,"context_line":"        )"},{"line_number":768,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FwiE%3D","line":765,"in_reply_to":"AAAATn%2F%2Fwto%3D","updated":"2013-10-29 14:04:50.000000000","message":"ditto","commit_id":"8541890330773f69cf575fdaaa47663cc4abea75"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7136422d228494628d2f85c459df48da2f489866","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import eventlet"},{"line_number":28,"context_line":"from oslo.config import cfg"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"import exceptions as r_exc"},{"line_number":31,"context_line":"from neutron.common import log as call_log"},{"line_number":32,"context_line":"from neutron import context"},{"line_number":33,"context_line":"import neutron.db.loadbalancer.loadbalancer_db as lb_db"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FUqs%3D","line":30,"updated":"2013-11-10 23:27:26.000000000","message":"Please do not use relative import.\n\n  from neutron.services.loadbalancer.drivers.radware import exceptions as r_exc","commit_id":"af0e4ba09b1f65639cac27b96fbef288e61258e8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6031957b0a30601eb5110fbde7a0f312ffb79230","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import eventlet"},{"line_number":28,"context_line":"from oslo.config import cfg"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"import exceptions as r_exc"},{"line_number":31,"context_line":"from neutron.common import log as call_log"},{"line_number":32,"context_line":"from neutron import context"},{"line_number":33,"context_line":"import neutron.db.loadbalancer.loadbalancer_db as lb_db"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FNxc%3D","line":30,"in_reply_to":"AAAATn%2F%2FT7A%3D","updated":"2013-11-12 18:55:09.000000000","message":"I can\u0027t understand \"Once the driver will be integrated as part of a release\" because you are proposing a patch to the upstream OpenStack repository. In Neutron repository and other OpenStack projects, there is a consensus to use absolute imports even in the same module.","commit_id":"af0e4ba09b1f65639cac27b96fbef288e61258e8"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"ef878f97c64949cf1a09a23ed90762e3e8e434bd","unresolved":false,"context_lines":[{"line_number":27,"context_line":"import eventlet"},{"line_number":28,"context_line":"from oslo.config import cfg"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"import exceptions as r_exc"},{"line_number":31,"context_line":"from neutron.common import log as call_log"},{"line_number":32,"context_line":"from neutron import context"},{"line_number":33,"context_line":"import neutron.db.loadbalancer.loadbalancer_db as lb_db"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FT7A%3D","line":30,"in_reply_to":"AAAATn%2F%2FUqs%3D","updated":"2013-11-11 09:32:34.000000000","message":"I did the relative import because the driver will be installed separately as PYPI package. Inside the package there will be not full package path. Once the driver will be integrated as part of a release, it will be changed to absolute import","commit_id":"af0e4ba09b1f65639cac27b96fbef288e61258e8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7136422d228494628d2f85c459df48da2f489866","unresolved":false,"context_lines":[{"line_number":30,"context_line":"import exceptions as r_exc"},{"line_number":31,"context_line":"from neutron.common import log as call_log"},{"line_number":32,"context_line":"from neutron import context"},{"line_number":33,"context_line":"import neutron.db.loadbalancer.loadbalancer_db as lb_db"},{"line_number":34,"context_line":"from neutron.extensions import loadbalancer"},{"line_number":35,"context_line":"from neutron.openstack.common import jsonutils as json"},{"line_number":36,"context_line":"from neutron.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FUqk%3D","line":33,"updated":"2013-11-10 23:27:26.000000000","message":"It is better to use the following for consistency:\n\n  from neutron.db.loadbalancer import loadbalancer_db as lb_db","commit_id":"af0e4ba09b1f65639cac27b96fbef288e61258e8"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"ef878f97c64949cf1a09a23ed90762e3e8e434bd","unresolved":false,"context_lines":[{"line_number":30,"context_line":"import exceptions as r_exc"},{"line_number":31,"context_line":"from neutron.common import log as call_log"},{"line_number":32,"context_line":"from neutron import context"},{"line_number":33,"context_line":"import neutron.db.loadbalancer.loadbalancer_db as lb_db"},{"line_number":34,"context_line":"from neutron.extensions import loadbalancer"},{"line_number":35,"context_line":"from neutron.openstack.common import jsonutils as json"},{"line_number":36,"context_line":"from neutron.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FT6M%3D","line":33,"in_reply_to":"AAAATn%2F%2FUqk%3D","updated":"2013-11-11 09:32:34.000000000","message":"Done","commit_id":"af0e4ba09b1f65639cac27b96fbef288e61258e8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f0915a47db868c8be32f39e58307905086c4a340","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        First delete it from the device. If deletion ended OK"},{"line_number":207,"context_line":"        - remove data from DB as well."},{"line_number":208,"context_line":"        If the deletion failed - mark elements with error status in DB"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        \"\"\""},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FPtI%3D","line":208,"updated":"2013-11-12 11:38:04.000000000","message":"please clarify which exact elements - vip graph or only vip?","commit_id":"5f21277a661334473cc2bc9e7c8c50d5a5e6df7f"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"58506b50606af64182d2e0aba50962ff0278e823","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        First delete it from the device. If deletion ended OK"},{"line_number":207,"context_line":"        - remove data from DB as well."},{"line_number":208,"context_line":"        If the deletion failed - mark elements with error status in DB"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        \"\"\""},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FPWk%3D","line":208,"in_reply_to":"AAAATn%2F%2FPtI%3D","updated":"2013-11-12 13:16:53.000000000","message":"It should by vip only.\nDone.","commit_id":"5f21277a661334473cc2bc9e7c8c50d5a5e6df7f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f0915a47db868c8be32f39e58307905086c4a340","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                          \u0027Going to set vip object graph to ERROR status\u0027),"},{"line_number":225,"context_line":"                          pool_id)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"            self.plugin.update_status(context, lb_db.Vip, ids[\u0027vip\u0027],"},{"line_number":228,"context_line":"                                      constants.ERROR)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def create_pool(self, context, pool):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FPtk%3D","line":227,"updated":"2013-11-12 11:38:04.000000000","message":"Log says \u0027Going to set vip object graph to ERROR\u0027 while actually only vip status is updated, so why changing this behavior?","commit_id":"5f21277a661334473cc2bc9e7c8c50d5a5e6df7f"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"58506b50606af64182d2e0aba50962ff0278e823","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                          \u0027Going to set vip object graph to ERROR status\u0027),"},{"line_number":225,"context_line":"                          pool_id)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"            self.plugin.update_status(context, lb_db.Vip, ids[\u0027vip\u0027],"},{"line_number":228,"context_line":"                                      constants.ERROR)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def create_pool(self, context, pool):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FPWc%3D","line":227,"in_reply_to":"AAAATn%2F%2FPtk%3D","updated":"2013-11-12 13:16:53.000000000","message":"It should by vip only. Done","commit_id":"5f21277a661334473cc2bc9e7c8c50d5a5e6df7f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f0915a47db868c8be32f39e58307905086c4a340","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    def _remove_workflow(self, ids, context):"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        wf_name \u003d ids[\u0027pool\u0027]"},{"line_number":379,"context_line":"        LOG.debug(_(\u0027Remove the workflow %s\u0027) % wf_name)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        resource \u003d \u0027/api/workflow/%s\u0027 % (wf_name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FPsk%3D","line":378,"updated":"2013-11-12 11:38:04.000000000","message":"do you need to check if ids is None?","commit_id":"5f21277a661334473cc2bc9e7c8c50d5a5e6df7f"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"622ca6b585992fc61b1c5e811a580fec93e9db8d","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    def _remove_workflow(self, ids, context):"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        wf_name \u003d ids[\u0027pool\u0027]"},{"line_number":379,"context_line":"        LOG.debug(_(\u0027Remove the workflow %s\u0027) % wf_name)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        resource \u003d \u0027/api/workflow/%s\u0027 % (wf_name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FPKY%3D","line":378,"in_reply_to":"AAAATn%2F%2FPOQ%3D","updated":"2013-11-12 14:24:57.000000000","message":"Done","commit_id":"5f21277a661334473cc2bc9e7c8c50d5a5e6df7f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6a15211d0895849dcae785896da5618b6643cf6e","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    def _remove_workflow(self, ids, context):"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        wf_name \u003d ids[\u0027pool\u0027]"},{"line_number":379,"context_line":"        LOG.debug(_(\u0027Remove the workflow %s\u0027) % wf_name)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        resource \u003d \u0027/api/workflow/%s\u0027 % (wf_name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FPOQ%3D","line":378,"in_reply_to":"AAAATn%2F%2FPWQ%3D","updated":"2013-11-12 13:24:55.000000000","message":"Then probably no need to have default None on #215 which is confusing if ids can never be None","commit_id":"5f21277a661334473cc2bc9e7c8c50d5a5e6df7f"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"58506b50606af64182d2e0aba50962ff0278e823","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    def _remove_workflow(self, ids, context):"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        wf_name \u003d ids[\u0027pool\u0027]"},{"line_number":379,"context_line":"        LOG.debug(_(\u0027Remove the workflow %s\u0027) % wf_name)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        resource \u003d \u0027/api/workflow/%s\u0027 % (wf_name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FPWQ%3D","line":378,"in_reply_to":"AAAATn%2F%2FPsk%3D","updated":"2013-11-12 13:16:53.000000000","message":"No. ids is never None.\nThat check was unnecessary","commit_id":"5f21277a661334473cc2bc9e7c8c50d5a5e6df7f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"910b2e6bcfa7ce8e2daaf39b4b2eeb4fb4f6ee28","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        extended_vip \u003d self.plugin.populate_vip_graph(context, vip)"},{"line_number":213,"context_line":"        params \u003d _translate_vip_object_graph(extended_vip,"},{"line_number":214,"context_line":"                                             self.plugin, context)"},{"line_number":215,"context_line":"        ids \u003d params.pop(\u0027__ids__\u0027)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        try:"},{"line_number":218,"context_line":"            # removing the WF will cause deletion of the configuration from the"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FKH8%3D","line":215,"updated":"2013-11-13 16:03:21.000000000","message":"should you not have a default here incase that the \u0027__ids__\u0027 is not found?","commit_id":"9f4238bff85e442db9514642db5d70fa0cdb52df"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"5fb86c71fe58bde956cfdcea8edee19f4a57ee19","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        extended_vip \u003d self.plugin.populate_vip_graph(context, vip)"},{"line_number":213,"context_line":"        params \u003d _translate_vip_object_graph(extended_vip,"},{"line_number":214,"context_line":"                                             self.plugin, context)"},{"line_number":215,"context_line":"        ids \u003d params.pop(\u0027__ids__\u0027)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        try:"},{"line_number":218,"context_line":"            # removing the WF will cause deletion of the configuration from the"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FHu8%3D","line":215,"in_reply_to":"AAAATn%2F%2FKH8%3D","updated":"2013-11-14 06:49:17.000000000","message":"__ids__ will never be None","commit_id":"9f4238bff85e442db9514642db5d70fa0cdb52df"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"910b2e6bcfa7ce8e2daaf39b4b2eeb4fb4f6ee28","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        except r_exc.RESTRequestFailure:"},{"line_number":222,"context_line":"            pool_id \u003d extended_vip[\u0027pool_id\u0027]"},{"line_number":223,"context_line":"            LOG.exception(_(\u0027Failed to remove workflow %s. \u0027"},{"line_number":224,"context_line":"                          \u0027Going to set vip to ERROR status\u0027),"},{"line_number":225,"context_line":"                          pool_id)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"            self.plugin.update_status(context, lb_db.Vip, ids[\u0027vip\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FKHo%3D","line":224,"updated":"2013-11-13 16:03:21.000000000","message":"\u0027 should be under the \u0027","commit_id":"9f4238bff85e442db9514642db5d70fa0cdb52df"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"5fb86c71fe58bde956cfdcea8edee19f4a57ee19","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        except r_exc.RESTRequestFailure:"},{"line_number":222,"context_line":"            pool_id \u003d extended_vip[\u0027pool_id\u0027]"},{"line_number":223,"context_line":"            LOG.exception(_(\u0027Failed to remove workflow %s. \u0027"},{"line_number":224,"context_line":"                          \u0027Going to set vip to ERROR status\u0027),"},{"line_number":225,"context_line":"                          pool_id)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"            self.plugin.update_status(context, lb_db.Vip, ids[\u0027vip\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FHuk%3D","line":224,"in_reply_to":"AAAATn%2F%2FKHo%3D","updated":"2013-11-14 06:49:17.000000000","message":"Done","commit_id":"9f4238bff85e442db9514642db5d70fa0cdb52df"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"7990f5674f9b1b54ab8d1c3b5fe47f67dccba724","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        wf_name \u003d ids[\u0027pool\u0027]"},{"line_number":379,"context_line":"        LOG.debug(_(\u0027Remove the workflow %s\u0027) % wf_name)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        resource \u003d \u0027/api/workflow/%s\u0027 % (wf_name)"},{"line_number":382,"context_line":"        response \u003d _rest_wrapper(self.rest_client.call(\u0027DELETE\u0027, resource,"},{"line_number":383,"context_line":"                                 None, None),"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2B3%2Bo%3D","line":380,"updated":"2013-11-19 03:57:35.000000000","message":"nit: is this related change?","commit_id":"de567fc7cb068202fdd2ce96c1d3ba2ab540c661"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"db554649e08b194672a628da8d0dbaa797301989","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        wf_name \u003d ids[\u0027pool\u0027]"},{"line_number":379,"context_line":"        LOG.debug(_(\u0027Remove the workflow %s\u0027) % wf_name)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        resource \u003d \u0027/api/workflow/%s\u0027 % (wf_name)"},{"line_number":382,"context_line":"        response \u003d _rest_wrapper(self.rest_client.call(\u0027DELETE\u0027, resource,"},{"line_number":383,"context_line":"                                 None, None),"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2B3aA%3D","line":380,"in_reply_to":"AAAATn%2F%2B3%2Bo%3D","updated":"2013-11-19 07:34:52.000000000","message":"No. Removed","commit_id":"de567fc7cb068202fdd2ce96c1d3ba2ab540c661"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"7990f5674f9b1b54ab8d1c3b5fe47f67dccba724","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        self.ssl \u003d ssl"},{"line_number":521,"context_line":"        self.base_uri \u003d base_uri"},{"line_number":522,"context_line":"        self.timeout \u003d timeout"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"        if user and password:"},{"line_number":525,"context_line":"            self.auth \u003d base64.encodestring(\u0027%s:%s\u0027 % (user, password))"},{"line_number":526,"context_line":"            self.auth \u003d self.auth.replace(\u0027\\n\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2B3%2Bg%3D","line":523,"updated":"2013-11-19 03:57:35.000000000","message":"nit:is this related?","commit_id":"de567fc7cb068202fdd2ce96c1d3ba2ab540c661"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b074bc84b282750087cfe5e59f14b78fd62ce1f5","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        self.ssl \u003d ssl"},{"line_number":521,"context_line":"        self.base_uri \u003d base_uri"},{"line_number":522,"context_line":"        self.timeout \u003d timeout"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"        if user and password:"},{"line_number":525,"context_line":"            self.auth \u003d base64.encodestring(\u0027%s:%s\u0027 % (user, password))"},{"line_number":526,"context_line":"            self.auth \u003d self.auth.replace(\u0027\\n\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2B37c%3D","line":523,"in_reply_to":"AAAATn%2F%2B3%2Bg%3D","updated":"2013-11-19 04:22:20.000000000","message":"I think this kind of changes is acceptable in a large patch if it helps readability.","commit_id":"de567fc7cb068202fdd2ce96c1d3ba2ab540c661"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"db554649e08b194672a628da8d0dbaa797301989","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        self.ssl \u003d ssl"},{"line_number":521,"context_line":"        self.base_uri \u003d base_uri"},{"line_number":522,"context_line":"        self.timeout \u003d timeout"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"        if user and password:"},{"line_number":525,"context_line":"            self.auth \u003d base64.encodestring(\u0027%s:%s\u0027 % (user, password))"},{"line_number":526,"context_line":"            self.auth \u003d self.auth.replace(\u0027\\n\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2B3Z0%3D","line":523,"in_reply_to":"AAAATn%2F%2B3%2Bg%3D","updated":"2013-11-19 07:34:52.000000000","message":"No. Removed","commit_id":"de567fc7cb068202fdd2ce96c1d3ba2ab540c661"}],"neutron/services/loadbalancer/drivers/radware/exceptions.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2b9f9a288adbdd0fef39420e08a5f5ca09064990","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class RadwareLBaasException(exceptions.NeutronException):"},{"line_number":24,"context_line":"    pass"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class WorkflowMissing(RadwareLBaasException):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Fwsc%3D","line":24,"updated":"2013-10-29 13:23:42.000000000","message":"Consider overriding message member with smth like:\n \"An unknown Radware LBaaS driver exception occurred.\"","commit_id":"8541890330773f69cf575fdaaa47663cc4abea75"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"704744375196dc1c8374a2d5afba5b16431dff2a","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class RadwareLBaasException(exceptions.NeutronException):"},{"line_number":24,"context_line":"    pass"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class WorkflowMissing(RadwareLBaasException):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2FwgE%3D","line":24,"in_reply_to":"AAAATn%2F%2Fwsc%3D","updated":"2013-10-29 14:04:50.000000000","message":"Done","commit_id":"8541890330773f69cf575fdaaa47663cc4abea75"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"c4e2679a35071fea342a60f6a4760a2b8d213258","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class RadwareLBaasException(exceptions.NeutronException):"},{"line_number":24,"context_line":"    message \u003d _(\"An unknown exception occurred in Radware LBaaS provider.\")"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class WorkflowMissing(RadwareLBaasException):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2Fv98%3D","line":24,"updated":"2013-10-29 15:24:55.000000000","message":"minor nit: be consistent in using \u0027 and \" across the module","commit_id":"4f9ad69514d3d331200c17107ece960cdbbb14aa"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"59c5ef0ad89fd4f31d89851a336f94679946cf15","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class RadwareLBaasException(exceptions.NeutronException):"},{"line_number":24,"context_line":"    message \u003d _(\"An unknown exception occurred in Radware LBaaS provider.\")"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class WorkflowMissing(RadwareLBaasException):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2Fv34%3D","line":24,"in_reply_to":"AAAATn%2F%2Fv98%3D","updated":"2013-10-29 15:38:54.000000000","message":"Done","commit_id":"4f9ad69514d3d331200c17107ece960cdbbb14aa"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7136422d228494628d2f85c459df48da2f489866","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class WorkflowMissing(RadwareLBaasException):"},{"line_number":37,"context_line":"    message \u003d _(\u0027Workflow %(workflow)s is missing on vDirect server.\u0027"},{"line_number":38,"context_line":"                \u0027Upload missing workflow\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FUpQ%3D","line":37,"updated":"2013-11-10 23:27:26.000000000","message":"Need a space at EOL or BOL of the next line.","commit_id":"af0e4ba09b1f65639cac27b96fbef288e61258e8"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"ef878f97c64949cf1a09a23ed90762e3e8e434bd","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class WorkflowMissing(RadwareLBaasException):"},{"line_number":37,"context_line":"    message \u003d _(\u0027Workflow %(workflow)s is missing on vDirect server.\u0027"},{"line_number":38,"context_line":"                \u0027Upload missing workflow\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FT6E%3D","line":37,"in_reply_to":"AAAATn%2F%2FUpQ%3D","updated":"2013-11-11 09:32:34.000000000","message":"Done","commit_id":"af0e4ba09b1f65639cac27b96fbef288e61258e8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7136422d228494628d2f85c459df48da2f489866","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class RESTRequestFailure(RadwareLBaasException):"},{"line_number":42,"context_line":"    message \u003d _(\u0027REST request failed with status %(status)s. \u0027"},{"line_number":43,"context_line":"                \u0027Reason: %(reason)s, Description: %(description)s.\u0027"},{"line_number":44,"context_line":"                \u0027Success status codes are %(success_codes)s\u0027)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FUpM%3D","line":43,"updated":"2013-11-10 23:27:26.000000000","message":"Ditto","commit_id":"af0e4ba09b1f65639cac27b96fbef288e61258e8"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"ef878f97c64949cf1a09a23ed90762e3e8e434bd","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class RESTRequestFailure(RadwareLBaasException):"},{"line_number":42,"context_line":"    message \u003d _(\u0027REST request failed with status %(status)s. \u0027"},{"line_number":43,"context_line":"                \u0027Reason: %(reason)s, Description: %(description)s.\u0027"},{"line_number":44,"context_line":"                \u0027Success status codes are %(success_codes)s\u0027)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FT58%3D","line":43,"in_reply_to":"AAAATn%2F%2FUpM%3D","updated":"2013-11-11 09:32:34.000000000","message":"Done","commit_id":"af0e4ba09b1f65639cac27b96fbef288e61258e8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"910b2e6bcfa7ce8e2daaf39b4b2eeb4fb4f6ee28","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class UnsupportedEntityOperation(RadwareLBaasException):"},{"line_number":44,"context_line":"    message \u003d _(\u0027%(operation) operation is not supported for %(entity)s.\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FKHQ%3D","line":44,"updated":"2013-11-13 16:03:21.000000000","message":"%(operation) \u003d\u003e %(operation)s","commit_id":"9f4238bff85e442db9514642db5d70fa0cdb52df"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"5fb86c71fe58bde956cfdcea8edee19f4a57ee19","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class UnsupportedEntityOperation(RadwareLBaasException):"},{"line_number":44,"context_line":"    message \u003d _(\u0027%(operation) operation is not supported for %(entity)s.\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FHuY%3D","line":44,"in_reply_to":"AAAATn%2F%2FKHQ%3D","updated":"2013-11-14 06:49:17.000000000","message":"Done","commit_id":"9f4238bff85e442db9514642db5d70fa0cdb52df"}],"neutron/tests/unit/services/loadbalancer/drivers/radware/test_plugin_driver.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5aecf6167a412dfefb21853a272c911cc572f1de","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Copyright 2013 Radware LTD."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2Fxs4%3D","line":1,"updated":"2013-10-29 08:10:26.000000000","message":"unrelated, blank line should be removed","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"b9b1703ce43696fd33e32f4937214df5c0309962","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Copyright 2013 Radware LTD."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2Fxmc%3D","line":1,"in_reply_to":"AAAATn%2F%2Fxs4%3D","updated":"2013-10-29 12:11:57.000000000","message":"Done","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5aecf6167a412dfefb21853a272c911cc572f1de","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import eventlet"},{"line_number":23,"context_line":"import mock"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from neutron.common import exceptions as q_exc"},{"line_number":26,"context_line":"from neutron import context"},{"line_number":27,"context_line":"from neutron.extensions import loadbalancer"},{"line_number":28,"context_line":"from neutron import manager"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FxsM%3D","line":25,"updated":"2013-10-29 08:10:26.000000000","message":"nit: n_exc","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"b9b1703ce43696fd33e32f4937214df5c0309962","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import eventlet"},{"line_number":23,"context_line":"import mock"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from neutron.common import exceptions as q_exc"},{"line_number":26,"context_line":"from neutron import context"},{"line_number":27,"context_line":"from neutron.extensions import loadbalancer"},{"line_number":28,"context_line":"from neutron import manager"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FxnI%3D","line":25,"in_reply_to":"AAAATn%2F%2FxsM%3D","updated":"2013-10-29 12:11:57.000000000","message":"Done","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5aecf6167a412dfefb21853a272c911cc572f1de","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    if resource \u003d\u003d GET_200[2]:"},{"line_number":56,"context_line":"        if rest_call_function_mock.TEMPLATES_MISSING:"},{"line_number":57,"context_line":"            data \u003d json.loads("},{"line_number":58,"context_line":"                \u0027[]\u0027"},{"line_number":59,"context_line":"            )"},{"line_number":60,"context_line":"        else:"},{"line_number":61,"context_line":"            data \u003d json.loads("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2Fxso%3D","line":58,"updated":"2013-10-29 08:10:26.000000000","message":"no need for new line: data \u003d json.loads(\u0027[]\u0027)","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"b9b1703ce43696fd33e32f4937214df5c0309962","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    if resource \u003d\u003d GET_200[2]:"},{"line_number":56,"context_line":"        if rest_call_function_mock.TEMPLATES_MISSING:"},{"line_number":57,"context_line":"            data \u003d json.loads("},{"line_number":58,"context_line":"                \u0027[]\u0027"},{"line_number":59,"context_line":"            )"},{"line_number":60,"context_line":"        else:"},{"line_number":61,"context_line":"            data \u003d json.loads("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2Fxmg%3D","line":58,"in_reply_to":"AAAATn%2F%2Fxso%3D","updated":"2013-10-29 12:11:57.000000000","message":"Done","commit_id":"56ff1a9e9e188563ceb38be8290f77c4384ec2e4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7136422d228494628d2f85c459df48da2f489866","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":134,"context_line":"        with self.network(do_delete\u003dFalse) as network:"},{"line_number":135,"context_line":"            with self.subnet(network\u003dnetwork, do_delete\u003dFalse) as subnet:"},{"line_number":136,"context_line":"                with self.pool(no_delete\u003dTrue, provider\u003d\u0027radware\u0027) as pool:"},{"line_number":137,"context_line":"                    vip_data \u003d {"},{"line_number":138,"context_line":"                        \u0027name\u0027: \u0027vip1\u0027,"},{"line_number":139,"context_line":"                        \u0027subnet_id\u0027: subnet[\u0027subnet\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FUpc%3D","line":136,"updated":"2013-11-10 23:27:26.000000000","message":"(just question) Why is no_delete needed?","commit_id":"af0e4ba09b1f65639cac27b96fbef288e61258e8"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6031957b0a30601eb5110fbde7a0f312ffb79230","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":134,"context_line":"        with self.network(do_delete\u003dFalse) as network:"},{"line_number":135,"context_line":"            with self.subnet(network\u003dnetwork, do_delete\u003dFalse) as subnet:"},{"line_number":136,"context_line":"                with self.pool(no_delete\u003dTrue, provider\u003d\u0027radware\u0027) as pool:"},{"line_number":137,"context_line":"                    vip_data \u003d {"},{"line_number":138,"context_line":"                        \u0027name\u0027: \u0027vip1\u0027,"},{"line_number":139,"context_line":"                        \u0027subnet_id\u0027: subnet[\u0027subnet\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FNw8%3D","line":136,"in_reply_to":"AAAATn%2F%2FT10%3D","updated":"2013-11-12 18:55:09.000000000","message":"Thanks for the clarification. Sounds reasonable.","commit_id":"af0e4ba09b1f65639cac27b96fbef288e61258e8"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"ef878f97c64949cf1a09a23ed90762e3e8e434bd","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":134,"context_line":"        with self.network(do_delete\u003dFalse) as network:"},{"line_number":135,"context_line":"            with self.subnet(network\u003dnetwork, do_delete\u003dFalse) as subnet:"},{"line_number":136,"context_line":"                with self.pool(no_delete\u003dTrue, provider\u003d\u0027radware\u0027) as pool:"},{"line_number":137,"context_line":"                    vip_data \u003d {"},{"line_number":138,"context_line":"                        \u0027name\u0027: \u0027vip1\u0027,"},{"line_number":139,"context_line":"                        \u0027subnet_id\u0027: subnet[\u0027subnet\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FT10%3D","line":136,"in_reply_to":"AAAATn%2F%2FUpc%3D","updated":"2013-11-11 09:32:34.000000000","message":"no_delete and do_delete needed because auto-deletion of the with statement fails, since port is created before VIP creation and pool/subnet/network may not be deleted while there is active port on them.","commit_id":"af0e4ba09b1f65639cac27b96fbef288e61258e8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f0915a47db868c8be32f39e58307905086c4a340","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    def test_create_vip_failure(self):"},{"line_number":132,"context_line":"        \"\"\"Test the rest call failure handling by Exception raising.\"\"\""},{"line_number":133,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":134,"context_line":"        with self.network(do_delete\u003dFalse) as network:"},{"line_number":135,"context_line":"            with self.subnet(network\u003dnetwork, do_delete\u003dFalse) as subnet:"},{"line_number":136,"context_line":"                with self.pool(no_delete\u003dTrue, provider\u003d\u0027radware\u0027) as pool:"},{"line_number":137,"context_line":"                    vip_data \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FPjc%3D","line":134,"updated":"2013-11-12 11:38:04.000000000","message":"Given that do_delete\u003dFalse and no_delete for pool is True the test seems to leave db with stale objects after passing which is not good.","commit_id":"5f21277a661334473cc2bc9e7c8c50d5a5e6df7f"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"58506b50606af64182d2e0aba50962ff0278e823","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    def test_create_vip_failure(self):"},{"line_number":132,"context_line":"        \"\"\"Test the rest call failure handling by Exception raising.\"\"\""},{"line_number":133,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":134,"context_line":"        with self.network(do_delete\u003dFalse) as network:"},{"line_number":135,"context_line":"            with self.subnet(network\u003dnetwork, do_delete\u003dFalse) as subnet:"},{"line_number":136,"context_line":"                with self.pool(no_delete\u003dTrue, provider\u003d\u0027radware\u0027) as pool:"},{"line_number":137,"context_line":"                    vip_data \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FPTw%3D","line":134,"in_reply_to":"AAAATn%2F%2FPjc%3D","updated":"2013-11-12 13:16:53.000000000","message":"tearDown() of derived NeutronDbPluginV2TestCase cleans the DB.\nEach test, be definition, is isolated","commit_id":"5f21277a661334473cc2bc9e7c8c50d5a5e6df7f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f0915a47db868c8be32f39e58307905086c4a340","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":288,"context_line":"        plugin \u003d self.plugin_instance"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        with self.network(do_delete\u003dFalse) as network:"},{"line_number":291,"context_line":"            with self.subnet(network\u003dnetwork, do_delete\u003dFalse) as subnet:"},{"line_number":292,"context_line":"                with self.pool(no_delete\u003dTrue, provider\u003d\u0027radware\u0027) as pool:"},{"line_number":293,"context_line":"                    with self.member(pool_id\u003dpool[\u0027pool\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FPjQ%3D","line":290,"updated":"2013-11-12 11:38:04.000000000","message":"same comment on do_delete\u003dFalse here and for other objects. Please redesign the test so that it does not leave db objects after passing.","commit_id":"5f21277a661334473cc2bc9e7c8c50d5a5e6df7f"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"58506b50606af64182d2e0aba50962ff0278e823","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":288,"context_line":"        plugin \u003d self.plugin_instance"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        with self.network(do_delete\u003dFalse) as network:"},{"line_number":291,"context_line":"            with self.subnet(network\u003dnetwork, do_delete\u003dFalse) as subnet:"},{"line_number":292,"context_line":"                with self.pool(no_delete\u003dTrue, provider\u003d\u0027radware\u0027) as pool:"},{"line_number":293,"context_line":"                    with self.member(pool_id\u003dpool[\u0027pool\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FPTg%3D","line":290,"in_reply_to":"AAAATn%2F%2FPjQ%3D","updated":"2013-11-12 13:16:53.000000000","message":"tearDown() of derived NeutronDbPluginV2TestCase cleans the DB.\nEach test, be definition, is isolated","commit_id":"5f21277a661334473cc2bc9e7c8c50d5a5e6df7f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"f0915a47db868c8be32f39e58307905086c4a340","unresolved":false,"context_lines":[{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    def test_create_hm_with_vip(self):"},{"line_number":535,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":536,"context_line":"        with self.subnet() as subnet:"},{"line_number":537,"context_line":"            with self.health_monitor() as hm:"},{"line_number":538,"context_line":"                with self.pool(provider\u003d\u0027radware\u0027) as pool:"},{"line_number":539,"context_line":"                    with self.vip(pool\u003dpool, subnet\u003dsubnet):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FPio%3D","line":536,"updated":"2013-11-12 11:38:04.000000000","message":"can use contextlib.nested()","commit_id":"5f21277a661334473cc2bc9e7c8c50d5a5e6df7f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6a15211d0895849dcae785896da5618b6643cf6e","unresolved":false,"context_lines":[{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    def test_create_hm_with_vip(self):"},{"line_number":535,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":536,"context_line":"        with self.subnet() as subnet:"},{"line_number":537,"context_line":"            with self.health_monitor() as hm:"},{"line_number":538,"context_line":"                with self.pool(provider\u003d\u0027radware\u0027) as pool:"},{"line_number":539,"context_line":"                    with self.vip(pool\u003dpool, subnet\u003dsubnet):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FPNI%3D","line":536,"in_reply_to":"AAAATn%2F%2FPPQ%3D","updated":"2013-11-12 13:24:55.000000000","message":"Yeah, I meant can use nested for objects which have no dependencies: subnet, health_monitor and pool in this case and in the next test case. However this is a nit only.","commit_id":"5f21277a661334473cc2bc9e7c8c50d5a5e6df7f"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"58506b50606af64182d2e0aba50962ff0278e823","unresolved":false,"context_lines":[{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    def test_create_hm_with_vip(self):"},{"line_number":535,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":536,"context_line":"        with self.subnet() as subnet:"},{"line_number":537,"context_line":"            with self.health_monitor() as hm:"},{"line_number":538,"context_line":"                with self.pool(provider\u003d\u0027radware\u0027) as pool:"},{"line_number":539,"context_line":"                    with self.vip(pool\u003dpool, subnet\u003dsubnet):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2FPPQ%3D","line":536,"in_reply_to":"AAAATn%2F%2FPio%3D","updated":"2013-11-12 13:16:53.000000000","message":"Can\u0027t use nested for all entities. vip is using pool and subnet which will be unrecognized in case of nesting. Prefer to leave it this way","commit_id":"5f21277a661334473cc2bc9e7c8c50d5a5e6df7f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"910b2e6bcfa7ce8e2daaf39b4b2eeb4fb4f6ee28","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from neutron.services.loadbalancer.drivers.radware import exceptions as r_exc"},{"line_number":31,"context_line":"from neutron.tests.unit.db.loadbalancer import test_db_loadbalancer"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"eventlet.monkey_patch(thread\u003dTrue)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"GET_200 \u003d (\u0027/api/workflow/\u0027, \u0027/api/service/\u0027, \u0027/api/workflowTemplate\u0027)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FKHM%3D","line":33,"updated":"2013-11-13 16:03:21.000000000","message":"why do you need to patch here?","commit_id":"9f4238bff85e442db9514642db5d70fa0cdb52df"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"5fb86c71fe58bde956cfdcea8edee19f4a57ee19","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from neutron.services.loadbalancer.drivers.radware import exceptions as r_exc"},{"line_number":31,"context_line":"from neutron.tests.unit.db.loadbalancer import test_db_loadbalancer"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"eventlet.monkey_patch(thread\u003dTrue)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"GET_200 \u003d (\u0027/api/workflow/\u0027, \u0027/api/service/\u0027, \u0027/api/workflowTemplate\u0027)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FHtw%3D","line":33,"in_reply_to":"AAAATn%2F%2FKHM%3D","updated":"2013-11-14 06:49:17.000000000","message":"No Need. Done","commit_id":"9f4238bff85e442db9514642db5d70fa0cdb52df"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"1932a8ed76704b8d347f080bf98b18cf206afdc2","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    def test_create_vip_failure(self):"},{"line_number":130,"context_line":"        \"\"\"Test the rest call failure handling by Exception raising.\"\"\""},{"line_number":131,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":132,"context_line":"        with self.network(do_delete\u003dFalse) as network:"},{"line_number":133,"context_line":"            with self.subnet(network\u003dnetwork, do_delete\u003dFalse) as subnet:"},{"line_number":134,"context_line":"                with self.pool(no_delete\u003dTrue, provider\u003d\u0027radware\u0027) as pool:"},{"line_number":135,"context_line":"                    vip_data \u003d {"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2B24M%3D","line":132,"updated":"2013-11-19 09:56:22.000000000","message":"do_delete\u003dFalse leaves network in the db, while db should be cleared at the end of the test.\nIn this particular test this flag seems to be unnecessary at first glance, but in case it is really needed, network and subnet should be deleted manually.\nThat also applies to the do_delete option usages below.","commit_id":"821116d7a7bb10618b45fbc5000d524fe917ebbd"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"597c821257b83df6fd24a13208d71eeb68352da8","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    def test_create_vip_failure(self):"},{"line_number":130,"context_line":"        \"\"\"Test the rest call failure handling by Exception raising.\"\"\""},{"line_number":131,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":132,"context_line":"        with self.network(do_delete\u003dFalse) as network:"},{"line_number":133,"context_line":"            with self.subnet(network\u003dnetwork, do_delete\u003dFalse) as subnet:"},{"line_number":134,"context_line":"                with self.pool(no_delete\u003dTrue, provider\u003d\u0027radware\u0027) as pool:"},{"line_number":135,"context_line":"                    vip_data \u003d {"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2B0U8%3D","line":132,"in_reply_to":"AAAATn%2F%2B1ok%3D","updated":"2013-11-19 19:11:18.000000000","message":"my fault, I\u0027ve double checked - you\u0027re right.","commit_id":"821116d7a7bb10618b45fbc5000d524fe917ebbd"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"0d6108e37f6f530cf67eb6bd86dc3086fb9ba83e","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    def test_create_vip_failure(self):"},{"line_number":130,"context_line":"        \"\"\"Test the rest call failure handling by Exception raising.\"\"\""},{"line_number":131,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":132,"context_line":"        with self.network(do_delete\u003dFalse) as network:"},{"line_number":133,"context_line":"            with self.subnet(network\u003dnetwork, do_delete\u003dFalse) as subnet:"},{"line_number":134,"context_line":"                with self.pool(no_delete\u003dTrue, provider\u003d\u0027radware\u0027) as pool:"},{"line_number":135,"context_line":"                    vip_data \u003d {"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2B2kU%3D","line":132,"in_reply_to":"AAAATn%2F%2B24M%3D","updated":"2013-11-19 11:41:53.000000000","message":"Eugene, I may be mistaken, if so please correct me, but each test should be isolated and tearDown() of a test class should handle it.\ntearDown() of the derived test class performs clear_db() which, in his turn, unregisters models and cleans sessions.\nDB and other resources should remain virgin for each test and this is a basic assumption when using any unit testing suite.\n\nI could make the cleanup for \"a good measure\", but in this particular case I can\u0027t, since I have no vip id which is needed for deletion.","commit_id":"821116d7a7bb10618b45fbc5000d524fe917ebbd"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"7a3dada4c542faf0166bcc90931fdd4d1711b747","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    def test_create_vip_failure(self):"},{"line_number":130,"context_line":"        \"\"\"Test the rest call failure handling by Exception raising.\"\"\""},{"line_number":131,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":132,"context_line":"        with self.network(do_delete\u003dFalse) as network:"},{"line_number":133,"context_line":"            with self.subnet(network\u003dnetwork, do_delete\u003dFalse) as subnet:"},{"line_number":134,"context_line":"                with self.pool(no_delete\u003dTrue, provider\u003d\u0027radware\u0027) as pool:"},{"line_number":135,"context_line":"                    vip_data \u003d {"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2B1ok%3D","line":132,"in_reply_to":"AAAATn%2F%2B2Ko%3D","updated":"2013-11-19 14:41:22.000000000","message":"Below is a path to tearDown:\ntests.unit.services.loadbalancer.drivers.radware.test_plugin_driver.TestLoadBalancerPlugin\n\t-\u003etests.unit.services.loadbalancer.drivers.radware.test_plugin_driver.TestLoadBalancerPluginBase\n\t\t-\u003etests.unit.db.loadbalancer.LoadBalancerPluginDbTestCase\n\t\t\t-\u003etests.unit.test_db_plugin.NeutronDbPluginV2TestCase\n\t\t\t  tearDown() calls db.clear_db()","commit_id":"821116d7a7bb10618b45fbc5000d524fe917ebbd"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"e95c43a850b073f57f7fa7f1dd0a8b975f30ce2a","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    def test_create_vip_failure(self):"},{"line_number":130,"context_line":"        \"\"\"Test the rest call failure handling by Exception raising.\"\"\""},{"line_number":131,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":132,"context_line":"        with self.network(do_delete\u003dFalse) as network:"},{"line_number":133,"context_line":"            with self.subnet(network\u003dnetwork, do_delete\u003dFalse) as subnet:"},{"line_number":134,"context_line":"                with self.pool(no_delete\u003dTrue, provider\u003d\u0027radware\u0027) as pool:"},{"line_number":135,"context_line":"                    vip_data \u003d {"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2B2Ko%3D","line":132,"in_reply_to":"AAAATn%2F%2B2kU%3D","updated":"2013-11-19 12:27:02.000000000","message":"Evgeny, as far as i\u0027ve traversed test class hierarchy, no class is implementing custom tearDown with db cleanup. So it either should be done in tearDown or addCleanup(db.clear_db) (for the local TestLoadBalancerPlugin class).\nI think the second way is preferable.","commit_id":"821116d7a7bb10618b45fbc5000d524fe917ebbd"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"597c821257b83df6fd24a13208d71eeb68352da8","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                self.rest_call_mock.assert_has_calls(calls, any_order\u003dTrue)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"                # sleep to wait for the operation completion"},{"line_number":215,"context_line":"                eventlet.greenthread.sleep(1)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"                #Test DB"},{"line_number":218,"context_line":"                new_vip \u003d self.plugin_instance.get_vip("}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2B0Rc%3D","line":215,"updated":"2013-11-19 19:11:18.000000000","message":"question: can it be reduced to 0 (e.g. just to switch contexts).\nIt would be good if we avoid slowing tests down on purpose.","commit_id":"821116d7a7bb10618b45fbc5000d524fe917ebbd"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"06aa1d271d21ff7acb41587e66a24164654bfddf","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                self.rest_call_mock.assert_has_calls(calls, any_order\u003dTrue)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"                # sleep to wait for the operation completion"},{"line_number":215,"context_line":"                eventlet.greenthread.sleep(1)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"                #Test DB"},{"line_number":218,"context_line":"                new_vip \u003d self.plugin_instance.get_vip("}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2ByRM%3D","line":215,"in_reply_to":"AAAATn%2F%2B0Rc%3D","updated":"2013-11-20 09:05:25.000000000","message":"Yes, I\u0027m changing it to zero in scenarios where it\u0027s possible. In other cases, where are more than one pending operations, 1 sec. is necessary, because the handling thread is going to sleep too in specific conditions (to prevent busy-wait REST bombing of the back-end system).\nThanks for your comment, it will save us several seconds.","commit_id":"821116d7a7bb10618b45fbc5000d524fe917ebbd"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"597c821257b83df6fd24a13208d71eeb68352da8","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                                 constants.PENDING_UPDATE)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"                # sleep to wait for the operation completion"},{"line_number":275,"context_line":"                eventlet.greenthread.sleep(1)"},{"line_number":276,"context_line":"                updated_vip \u003d self.plugin_instance.get_vip("},{"line_number":277,"context_line":"                    context.get_admin_context(), vip[\u0027id\u0027])"},{"line_number":278,"context_line":"                self.assertEqual(updated_vip[\u0027status\u0027], constants.ACTIVE)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2B0RY%3D","line":275,"updated":"2013-11-19 19:11:18.000000000","message":"same as above","commit_id":"821116d7a7bb10618b45fbc5000d524fe917ebbd"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"597c821257b83df6fd24a13208d71eeb68352da8","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        with self.network(do_delete\u003dFalse) as network:"},{"line_number":289,"context_line":"            with self.subnet(network\u003dnetwork, do_delete\u003dFalse) as subnet:"},{"line_number":290,"context_line":"                with self.pool(no_delete\u003dTrue, provider\u003d\u0027radware\u0027) as pool:"},{"line_number":291,"context_line":"                    with self.member(pool_id\u003dpool[\u0027pool\u0027][\u0027id\u0027],"},{"line_number":292,"context_line":"                                     no_delete\u003dTrue) as mem1:"},{"line_number":293,"context_line":"                        with self.member(pool_id\u003dpool[\u0027pool\u0027][\u0027id\u0027],"},{"line_number":294,"context_line":"                                         no_delete\u003dTrue)as mem2:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2B0RE%3D","line":291,"updated":"2013-11-19 19:11:18.000000000","message":"in fact contextlib.nested could be used here to increase readability:\n with contextlib.nested(\n     self.member(pool_id\u003dpool[\u0027pool\u0027][\u0027id\u0027], no_delete\u003dTrue),\n     self.member(pool_id\u003dpool[\u0027pool\u0027][\u0027id\u0027], no_delete\u003dTrue),\n     self.health_monitor(no_delete\u003dTrue),\n     self.vip(pool\u003dpool, subnet\u003dsubnet, no_delete\u003dTrue)\n ) as (mem1, mem2, hm, vip):\n   ...","commit_id":"821116d7a7bb10618b45fbc5000d524fe917ebbd"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"06aa1d271d21ff7acb41587e66a24164654bfddf","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        with self.network(do_delete\u003dFalse) as network:"},{"line_number":289,"context_line":"            with self.subnet(network\u003dnetwork, do_delete\u003dFalse) as subnet:"},{"line_number":290,"context_line":"                with self.pool(no_delete\u003dTrue, provider\u003d\u0027radware\u0027) as pool:"},{"line_number":291,"context_line":"                    with self.member(pool_id\u003dpool[\u0027pool\u0027][\u0027id\u0027],"},{"line_number":292,"context_line":"                                     no_delete\u003dTrue) as mem1:"},{"line_number":293,"context_line":"                        with self.member(pool_id\u003dpool[\u0027pool\u0027][\u0027id\u0027],"},{"line_number":294,"context_line":"                                         no_delete\u003dTrue)as mem2:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2ByM0%3D","line":291,"in_reply_to":"AAAATn%2F%2B0RE%3D","updated":"2013-11-20 09:05:25.000000000","message":"Done","commit_id":"821116d7a7bb10618b45fbc5000d524fe917ebbd"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"1932a8ed76704b8d347f080bf98b18cf206afdc2","unresolved":false,"context_lines":[{"line_number":342,"context_line":"                                                     constants.ACTIVE)"},{"line_number":343,"context_line":"                                    self.assertEqual(u_phm[\u0027status\u0027],"},{"line_number":344,"context_line":"                                                     constants.ACTIVE)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    def test_delete_vip(self):"},{"line_number":347,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":348,"context_line":"        with self.subnet() as subnet:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2B23w%3D","line":345,"updated":"2013-11-19 09:56:22.000000000","message":"no_delete for the pool was used - need to delete it manually","commit_id":"821116d7a7bb10618b45fbc5000d524fe917ebbd"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"0d6108e37f6f530cf67eb6bd86dc3086fb9ba83e","unresolved":false,"context_lines":[{"line_number":342,"context_line":"                                                     constants.ACTIVE)"},{"line_number":343,"context_line":"                                    self.assertEqual(u_phm[\u0027status\u0027],"},{"line_number":344,"context_line":"                                                     constants.ACTIVE)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    def test_delete_vip(self):"},{"line_number":347,"context_line":"        self.rest_call_mock.reset_mock()"},{"line_number":348,"context_line":"        with self.subnet() as subnet:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2B2j8%3D","line":345,"in_reply_to":"AAAATn%2F%2B23w%3D","updated":"2013-11-19 11:41:53.000000000","message":"Done.","commit_id":"821116d7a7bb10618b45fbc5000d524fe917ebbd"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"597c821257b83df6fd24a13208d71eeb68352da8","unresolved":false,"context_lines":[{"line_number":486,"context_line":"                        # Changed status from PENDING-CREATE"},{"line_number":487,"context_line":"                        # to ACTIVE"},{"line_number":488,"context_line":"                        self.rest_call_mock.reset_mock()"},{"line_number":489,"context_line":"                        eventlet.greenthread.sleep(1)"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"                        self.plugin_instance.delete_member("},{"line_number":492,"context_line":"                            context.get_admin_context(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2B0Q4%3D","line":489,"updated":"2013-11-19 19:11:18.000000000","message":"same as above on sleeping","commit_id":"821116d7a7bb10618b45fbc5000d524fe917ebbd"}]}
