)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":12,"context_line":"A default service type is specified in the configuration file."},{"line_number":13,"context_line":"Even if most of the code is ready, work is still in progress,"},{"line_number":14,"context_line":"as we need to validate how this is wired on adv services API"},{"line_number":15,"context_line":"extensions."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I97d400b941fa7925b0efa0fd0d35c07419ff6bfa"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAAM3%2F%2FzCQ%3D","line":15,"updated":"2013-01-04 19:40:35.000000000","message":"Is this intended as the final commit message?  Seems like an \"inprogress\" commit message.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":12,"context_line":"A default service type is specified in the configuration file."},{"line_number":13,"context_line":"Even if most of the code is ready, work is still in progress,"},{"line_number":14,"context_line":"as we need to validate how this is wired on adv services API"},{"line_number":15,"context_line":"extensions."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I97d400b941fa7925b0efa0fd0d35c07419ff6bfa"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAAM3%2F%2FyY0%3D","line":15,"in_reply_to":"AAAAM3%2F%2FzCQ%3D","updated":"2013-01-04 23:48:08.000000000","message":"ah! Shame on me!","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"}],"etc/policy.json":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9c1c49c136747be706799ecef73173fb2a27fd49","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    \"update_port\": \"rule:admin_or_owner\","},{"line_number":43,"context_line":"    \"update_port:fixed_ips\": \"rule:admin_or_network_owner\","},{"line_number":44,"context_line":"    \"delete_port\": \"rule:admin_or_owner\","},{"line_number":45,"context_line":"    "},{"line_number":46,"context_line":"    \"extension:service_type:view_extended\": \"rule:admin_only\","},{"line_number":47,"context_line":"    \"create_service_type\": \"rule:admin_only\","},{"line_number":48,"context_line":"    \"update_service_type\": \"rule:admin_only\","}],"source_content_type":"application/json","patch_set":1,"id":"AAAAMX%2F%2F5Ng%3D","line":45,"updated":"2012-12-10 08:30:23.000000000","message":"whitespace","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":42,"context_line":"    \"update_port\": \"rule:admin_or_owner\","},{"line_number":43,"context_line":"    \"update_port:fixed_ips\": \"rule:admin_or_network_owner\","},{"line_number":44,"context_line":"    \"delete_port\": \"rule:admin_or_owner\","},{"line_number":45,"context_line":"    "},{"line_number":46,"context_line":"    \"extension:service_type:view_extended\": \"rule:admin_only\","},{"line_number":47,"context_line":"    \"create_service_type\": \"rule:admin_only\","},{"line_number":48,"context_line":"    \"update_service_type\": \"rule:admin_only\","}],"source_content_type":"application/json","patch_set":1,"id":"AAAAM3%2F%2F6IA%3D","line":45,"in_reply_to":"AAAAMX%2F%2F5Ng%3D","updated":"2012-12-21 16:36:38.000000000","message":"Done","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"20422e324f9b309362f92012edcd1f05501e9d57","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    \"extension:service_type:view_extended\": \"rule:admin_only\","},{"line_number":47,"context_line":"    \"create_service_type\": \"rule:admin_only\","},{"line_number":48,"context_line":"    \"update_service_type\": \"rule:admin_only\","},{"line_number":49,"context_line":"    \"update_service_type\": \"rule:admin_only\","},{"line_number":50,"context_line":"    \"get_service_type\": \"rule:regular_user\""},{"line_number":51,"context_line":"}"}],"source_content_type":"application/json","patch_set":1,"id":"AAAAMX%2F%2F5Fo%3D","line":49,"updated":"2012-12-10 15:23:12.000000000","message":"duplicate line, I believe \u0027delete_service_type\u0027 should be here","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":46,"context_line":"    \"extension:service_type:view_extended\": \"rule:admin_only\","},{"line_number":47,"context_line":"    \"create_service_type\": \"rule:admin_only\","},{"line_number":48,"context_line":"    \"update_service_type\": \"rule:admin_only\","},{"line_number":49,"context_line":"    \"update_service_type\": \"rule:admin_only\","},{"line_number":50,"context_line":"    \"get_service_type\": \"rule:regular_user\""},{"line_number":51,"context_line":"}"}],"source_content_type":"application/json","patch_set":1,"id":"AAAAM3%2F%2F6H8%3D","line":49,"in_reply_to":"AAAAMX%2F%2F5Fo%3D","updated":"2012-12-21 16:36:38.000000000","message":"Done","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"}],"etc/quantum.conf":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"[DEFAULT_SERVICETYPE]"},{"line_number":191,"context_line":"description \u003d \"default service type\""},{"line_number":192,"context_line":"service_definition\u003dload_balancing:test_lb_plugin:basic_driver"},{"line_number":193,"context_line":"service_definition\u003ddummy:dummy_plugin"}],"source_content_type":"text/plain","patch_set":4,"id":"AAAAM3%2F%2F4sA%3D","line":192,"updated":"2012-12-26 10:25:16.000000000","message":"Is this ok that it is defined twice?\nMaybe a comment about the format will be useful and helpful","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"[DEFAULT_SERVICETYPE]"},{"line_number":191,"context_line":"description \u003d \"default service type\""},{"line_number":192,"context_line":"service_definition\u003dload_balancing:test_lb_plugin:basic_driver"},{"line_number":193,"context_line":"service_definition\u003ddummy:dummy_plugin"}],"source_content_type":"text/plain","patch_set":4,"id":"AAAAM3%2F%2F4qs%3D","line":192,"in_reply_to":"AAAAM3%2F%2F4sA%3D","updated":"2012-12-26 10:35:30.000000000","message":"Sure!","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":41,"context_line":"core_plugin \u003d quantum.plugins.sample.SamplePlugin.FakePlugin"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# Advanced service modules"},{"line_number":44,"context_line":"# service_plugins \u003d "},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"# Paste configuration file"},{"line_number":47,"context_line":"api_paste_config \u003d api-paste.ini"}],"source_content_type":"text/plain","patch_set":7,"id":"AAAAM3%2F%2F2tc%3D","line":44,"updated":"2013-01-01 06:03:34.000000000","message":"space","commit_id":"d3c7776b38449c469cacbf65a507274d25d09368"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":41,"context_line":"core_plugin \u003d quantum.plugins.sample.SamplePlugin.FakePlugin"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# Advanced service modules"},{"line_number":44,"context_line":"# service_plugins \u003d "},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"# Paste configuration file"},{"line_number":47,"context_line":"api_paste_config \u003d api-paste.ini"}],"source_content_type":"text/plain","patch_set":7,"id":"AAAAM3%2F%2F2mk%3D","line":44,"in_reply_to":"AAAAM3%2F%2F2tc%3D","updated":"2013-01-02 11:37:46.000000000","message":"Done","commit_id":"d3c7776b38449c469cacbf65a507274d25d09368"}],"quantum/db/servicetype_db.py":[{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"5f803ab3cf839e82e46f8137859d7a747da993bd","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            def_svc_type_db \u003d self._create_service_type(ctx, def_service_type)"},{"line_number":141,"context_line":"        else:"},{"line_number":142,"context_line":"            self._update_service_type(ctx, def_service_type,"},{"line_number":143,"context_line":"                                      svc_type_db\u003ddef_svc_type_db)"},{"line_number":144,"context_line":"        LOG.debug(_(\"Default service type record updated in Quantum database. \""},{"line_number":145,"context_line":"                    \"identifier is \u0027%s\u0027\"), def_svc_type_db[\u0027id\u0027])"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMX%2F%2F3%2BM%3D","line":143,"updated":"2012-12-11 14:07:17.000000000","message":"parameter \u0027service_type\u0027 declared in _update_service_type is not filled","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":140,"context_line":"            def_svc_type_db \u003d self._create_service_type(ctx, def_service_type)"},{"line_number":141,"context_line":"        else:"},{"line_number":142,"context_line":"            self._update_service_type(ctx, def_service_type,"},{"line_number":143,"context_line":"                                      svc_type_db\u003ddef_svc_type_db)"},{"line_number":144,"context_line":"        LOG.debug(_(\"Default service type record updated in Quantum database. \""},{"line_number":145,"context_line":"                    \"identifier is \u0027%s\u0027\"), def_svc_type_db[\u0027id\u0027])"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6H4%3D","line":143,"in_reply_to":"AAAAMX%2F%2F3%2BM%3D","updated":"2012-12-21 16:36:38.000000000","message":"Correct - actually \u0027id\u0027 is missing (from a semantic perspective).\nwill fix.","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9c1c49c136747be706799ecef73173fb2a27fd49","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        return svc_type_db[\u0027ref_count\u0027]"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def validate_service_type_request(self, request):"},{"line_number":308,"context_line":"        \"\"\" Validate a request with a service type attribute \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMX%2F%2F5Nc%3D","line":308,"updated":"2012-12-10 08:30:23.000000000","message":"I guess this is due to WIP?","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":305,"context_line":"        return svc_type_db[\u0027ref_count\u0027]"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def validate_service_type_request(self, request):"},{"line_number":308,"context_line":"        \"\"\" Validate a request with a service type attribute \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6Hs%3D","line":308,"in_reply_to":"AAAAMX%2F%2F5Nc%3D","updated":"2012-12-21 16:36:38.000000000","message":"yes, I am not even sure we would need it!","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"33b933d40a4bf194c36f91b44a1e792b706e2282","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        return {c.name: getattr(self, c.name) for c in self.__table__.columns}"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"class ServiceTypeManager(object):"},{"line_number":114,"context_line":"    \"\"\" Manage service type objects in Quantum database \"\"\""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    _instance \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F%2Fj8%3D","line":113,"updated":"2012-12-17 12:41:25.000000000","message":"you may want to make it look similar to other plugins and add \nsupported_extension_aliases with your extension alias.","commit_id":"f6986314ea8dc3d3598904e9393cb7ea5b906e52"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":110,"context_line":"        return {c.name: getattr(self, c.name) for c in self.__table__.columns}"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"class ServiceTypeManager(object):"},{"line_number":114,"context_line":"    \"\"\" Manage service type objects in Quantum database \"\"\""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    _instance \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F6JI%3D","line":113,"in_reply_to":"AAAAM3%2F%2F%2Fj8%3D","updated":"2012-12-21 16:24:17.000000000","message":"It is hard to imagine a set of extension aliases this class should support.\nThis is an extension itself, not a plugin.\n\nIt\u0027s actually the plugin which should probably declare that it support this extensions, so that it is loaded, in my opinion","commit_id":"f6986314ea8dc3d3598904e9393cb7ea5b906e52"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":29,"context_line":"from quantum.openstack.common import cfg"},{"line_number":30,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":31,"context_line":"from quantum import policy"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":"DEFAULT_SVCTYPE_NAME \u003d \u0027default\u0027"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F4r8%3D","line":32,"updated":"2012-12-26 10:25:16.000000000","message":"2 lines here? I am never sure with the HACKING.","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":29,"context_line":"from quantum.openstack.common import cfg"},{"line_number":30,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":31,"context_line":"from quantum import policy"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":"DEFAULT_SVCTYPE_NAME \u003d \u0027default\u0027"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F4qk%3D","line":32,"in_reply_to":"AAAAM3%2F%2F4r8%3D","updated":"2012-12-26 10:35:30.000000000","message":"Abundare melium quam deficere est, ut pep8 quiescat.\nI will remove the extra line","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":57,"context_line":"            try:"},{"line_number":58,"context_line":"                svc_def[\u0027driver\u0027] \u003d split[2]"},{"line_number":59,"context_line":"            except IndexError:"},{"line_number":60,"context_line":"                # Never mind, driver is optional"},{"line_number":61,"context_line":"                pass"},{"line_number":62,"context_line":"            results.append(svc_def)"},{"line_number":63,"context_line":"        return results"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F4r0%3D","line":60,"updated":"2012-12-26 10:25:16.000000000","message":"Maybe it is useful to log something here.","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":57,"context_line":"            try:"},{"line_number":58,"context_line":"                svc_def[\u0027driver\u0027] \u003d split[2]"},{"line_number":59,"context_line":"            except IndexError:"},{"line_number":60,"context_line":"                # Never mind, driver is optional"},{"line_number":61,"context_line":"                pass"},{"line_number":62,"context_line":"            results.append(svc_def)"},{"line_number":63,"context_line":"        return results"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F4qc%3D","line":60,"in_reply_to":"AAAAM3%2F%2F4r0%3D","updated":"2012-12-26 10:35:30.000000000","message":"Done","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class ServiceDefinition(model_base.BASEV2, models_v2.HasId):"},{"line_number":86,"context_line":"    service \u003d sa.Column(sa.String(255), primary_key\u003dTrue)"},{"line_number":87,"context_line":"    plugin \u003d sa.Column(sa.String(255))"},{"line_number":88,"context_line":"    driver \u003d sa.Column(sa.String(255))"},{"line_number":89,"context_line":"    service_type_id \u003d sa.Column(sa.String(36),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F4rk%3D","line":86,"updated":"2012-12-26 10:25:16.000000000","message":"I think that the order of service invocation should also be considered.\nthat is, for inbound traffic one would first want the firewall to treat traffic, then the load balancer,...","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class ServiceDefinition(model_base.BASEV2, models_v2.HasId):"},{"line_number":86,"context_line":"    service \u003d sa.Column(sa.String(255), primary_key\u003dTrue)"},{"line_number":87,"context_line":"    plugin \u003d sa.Column(sa.String(255))"},{"line_number":88,"context_line":"    driver \u003d sa.Column(sa.String(255))"},{"line_number":89,"context_line":"    service_type_id \u003d sa.Column(sa.String(36),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F4os%3D","line":86,"in_reply_to":"AAAAM3%2F%2F4qU%3D","updated":"2012-12-26 11:12:04.000000000","message":"I am fine with us dealing with it later. Just wanted to make sure that it is on the radar and that it has importance.","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class ServiceDefinition(model_base.BASEV2, models_v2.HasId):"},{"line_number":86,"context_line":"    service \u003d sa.Column(sa.String(255), primary_key\u003dTrue)"},{"line_number":87,"context_line":"    plugin \u003d sa.Column(sa.String(255))"},{"line_number":88,"context_line":"    driver \u003d sa.Column(sa.String(255))"},{"line_number":89,"context_line":"    service_type_id \u003d sa.Column(sa.String(36),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F4qU%3D","line":86,"in_reply_to":"AAAAM3%2F%2F4rk%3D","updated":"2012-12-26 10:35:30.000000000","message":"I answered to this comment on patch set 1, I don\u0027t know if you missed it, or if you want this concept of priority of traffic processing to be addressed immediately.","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":303,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":304,"context_line":"            svc_type_db \u003d self._get_service_type(context, id)"},{"line_number":305,"context_line":"            if svc_type_db[\u0027ref_count\u0027] \u003d\u003d 0:"},{"line_number":306,"context_line":"                LOG.warning(_(\"Reference count for service type \u0027%s\u0027 is \""},{"line_number":307,"context_line":"                              \" already 0. Cannot decrease references.\"))"},{"line_number":308,"context_line":"                return"},{"line_number":309,"context_line":"            svc_type_db[\u0027ref_count\u0027] \u003d svc_type_db[\u0027ref_count\u0027] - 1"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F45g%3D","line":306,"updated":"2012-12-26 10:25:16.000000000","message":"%s without variable?","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":303,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":304,"context_line":"            svc_type_db \u003d self._get_service_type(context, id)"},{"line_number":305,"context_line":"            if svc_type_db[\u0027ref_count\u0027] \u003d\u003d 0:"},{"line_number":306,"context_line":"                LOG.warning(_(\"Reference count for service type \u0027%s\u0027 is \""},{"line_number":307,"context_line":"                              \" already 0. Cannot decrease references.\"))"},{"line_number":308,"context_line":"                return"},{"line_number":309,"context_line":"            svc_type_db[\u0027ref_count\u0027] \u003d svc_type_db[\u0027ref_count\u0027] - 1"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F4qQ%3D","line":306,"in_reply_to":"AAAAM3%2F%2F45g%3D","updated":"2012-12-26 10:35:30.000000000","message":"Done","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":310,"context_line":"        return svc_type_db[\u0027ref_count\u0027]"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def validate_service_type_request(self, request):"},{"line_number":313,"context_line":"        \"\"\" Validate a request with a service type attribute \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F4ro%3D","line":313,"updated":"2012-12-26 10:25:16.000000000","message":"is this meant to be empty?","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":310,"context_line":"        return svc_type_db[\u0027ref_count\u0027]"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def validate_service_type_request(self, request):"},{"line_number":313,"context_line":"        \"\"\" Validate a request with a service type attribute \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F4qM%3D","line":313,"in_reply_to":"AAAAM3%2F%2F4ro%3D","updated":"2012-12-26 10:35:30.000000000","message":"will take it out","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":44,"context_line":"                           \u0027using the format: \u003cservice\u003e:\u003cplugin\u003e[:\u003cdriver\u003e]\u0027))"},{"line_number":45,"context_line":"]"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# TODO(salvatore-orlando): database options should be moved to quantum/common"},{"line_number":48,"context_line":"database_opts \u003d ["},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027sql_connection\u0027, default\u003d\u0027sqlite://\u0027),"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027sql_max_retries\u0027, default\u003d-1),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1O8%3D","line":47,"updated":"2013-01-03 08:32:15.000000000","message":"Does this mean that there will be more than one database. That is, one for the base core plugin, and one for the service management?\nAnother question not related - should the base core plugin also be a service?","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":44,"context_line":"                           \u0027using the format: \u003cservice\u003e:\u003cplugin\u003e[:\u003cdriver\u003e]\u0027))"},{"line_number":45,"context_line":"]"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# TODO(salvatore-orlando): database options should be moved to quantum/common"},{"line_number":48,"context_line":"database_opts \u003d ["},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027sql_connection\u0027, default\u003d\u0027sqlite://\u0027),"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027sql_max_retries\u0027, default\u003d-1),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1Mw%3D","line":47,"in_reply_to":"AAAAM3%2F%2F1O8%3D","updated":"2013-01-03 09:03:31.000000000","message":"Ideally not. This is why I want to move these options to Quantum/common. This code is placed here for the same reason as we have connection options for each plugin (and we\u0027ve already said we\u0027d like to refactor that code).\n\nThe service type management module is independent of the dbbase plugin, so it won\u0027t be loaded with the \u0027core\u0027 plugin like all the other extensions.\n\nHowever, advanced services might actually have a different database. It\u0027s not clear yet whether this will actually happen or not, but that\u0027s definitely a possibility.","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":259,"context_line":"            query2 \u003d context.session.query(ServiceType)"},{"line_number":260,"context_line":"            results \u003d query2.filter(ServiceType.default \u003d\u003d expr.true()).all()"},{"line_number":261,"context_line":"            LOG.warning(_(\"Multiple default service type instances found.\""},{"line_number":262,"context_line":"                          \"Will use instance \u0027%s\u0027\" % results[0][\u0027id\u0027]))"},{"line_number":263,"context_line":"            return results[0]"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def _make_svc_type_dict(self, context, svc_type, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1No%3D","line":262,"updated":"2013-01-03 08:55:33.000000000","message":"gettext function should close after \u0027%s\u0027\"","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":259,"context_line":"            query2 \u003d context.session.query(ServiceType)"},{"line_number":260,"context_line":"            results \u003d query2.filter(ServiceType.default \u003d\u003d expr.true()).all()"},{"line_number":261,"context_line":"            LOG.warning(_(\"Multiple default service type instances found.\""},{"line_number":262,"context_line":"                          \"Will use instance \u0027%s\u0027\" % results[0][\u0027id\u0027]))"},{"line_number":263,"context_line":"            return results[0]"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def _make_svc_type_dict(self, context, svc_type, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1Ls%3D","line":262,"in_reply_to":"AAAAM3%2F%2F1No%3D","updated":"2013-01-03 09:03:31.000000000","message":"thanks for the advice!","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":305,"context_line":"        return [self._make_svc_type_dict(context, svc_type, fields)"},{"line_number":306,"context_line":"                for svc_type in query.all()]"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def create_service_type(self, context, service_type):"},{"line_number":309,"context_line":"        \"\"\" Create a new service type \"\"\""},{"line_number":310,"context_line":"        svc_type_data \u003d service_type[\u0027service_type\u0027]"},{"line_number":311,"context_line":"        svc_type_db \u003d self._create_service_type(context, svc_type_data)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1Og%3D","line":308,"updated":"2013-01-03 08:32:15.000000000","message":"Will the Quantum service need to be restarted after the addition of a new service?","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":305,"context_line":"        return [self._make_svc_type_dict(context, svc_type, fields)"},{"line_number":306,"context_line":"                for svc_type in query.all()]"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def create_service_type(self, context, service_type):"},{"line_number":309,"context_line":"        \"\"\" Create a new service type \"\"\""},{"line_number":310,"context_line":"        svc_type_data \u003d service_type[\u0027service_type\u0027]"},{"line_number":311,"context_line":"        svc_type_db \u003d self._create_service_type(context, svc_type_data)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1Mk%3D","line":308,"in_reply_to":"AAAAM3%2F%2F1Og%3D","updated":"2013-01-03 09:03:31.000000000","message":"Yes, as a new service will imply a new plugin.\n\nHowever, service types can be added without restarting the service.","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":309,"context_line":"        \"\"\" Create a new service type \"\"\""},{"line_number":310,"context_line":"        svc_type_data \u003d service_type[\u0027service_type\u0027]"},{"line_number":311,"context_line":"        svc_type_db \u003d self._create_service_type(context, svc_type_data)"},{"line_number":312,"context_line":"        LOG.debug(_(\"Created service type object:%s\" % svc_type_db[\u0027id\u0027]))"},{"line_number":313,"context_line":"        return self._make_svc_type_dict(context, svc_type_db)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def update_service_type(self, context, id, service_type):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1Nk%3D","line":312,"updated":"2013-01-03 08:55:33.000000000","message":"gettext function should close after %s\"","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":309,"context_line":"        \"\"\" Create a new service type \"\"\""},{"line_number":310,"context_line":"        svc_type_data \u003d service_type[\u0027service_type\u0027]"},{"line_number":311,"context_line":"        svc_type_db \u003d self._create_service_type(context, svc_type_data)"},{"line_number":312,"context_line":"        LOG.debug(_(\"Created service type object:%s\" % svc_type_db[\u0027id\u0027]))"},{"line_number":313,"context_line":"        return self._make_svc_type_dict(context, svc_type_db)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def update_service_type(self, context, id, service_type):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1Lo%3D","line":312,"in_reply_to":"AAAAM3%2F%2F1Nk%3D","updated":"2013-01-03 09:03:31.000000000","message":"Done","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":351,"context_line":"            svc_type_db \u003d self._get_service_type(context, id)"},{"line_number":352,"context_line":"            if svc_type_db[\u0027ref_count\u0027] \u003d\u003d 0:"},{"line_number":353,"context_line":"                LOG.warning(_(\"Reference count for service type \u0027%s\u0027 is \""},{"line_number":354,"context_line":"                              \" already 0. Cannot decrease references.\"),"},{"line_number":355,"context_line":"                            svc_type_db[\u0027name\u0027])"},{"line_number":356,"context_line":"                return"},{"line_number":357,"context_line":"            svc_type_db[\u0027ref_count\u0027] \u003d svc_type_db[\u0027ref_count\u0027] - 1"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1Ng%3D","line":354,"updated":"2013-01-03 08:55:33.000000000","message":"extra space before \"already\"","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":351,"context_line":"            svc_type_db \u003d self._get_service_type(context, id)"},{"line_number":352,"context_line":"            if svc_type_db[\u0027ref_count\u0027] \u003d\u003d 0:"},{"line_number":353,"context_line":"                LOG.warning(_(\"Reference count for service type \u0027%s\u0027 is \""},{"line_number":354,"context_line":"                              \" already 0. Cannot decrease references.\"),"},{"line_number":355,"context_line":"                            svc_type_db[\u0027name\u0027])"},{"line_number":356,"context_line":"                return"},{"line_number":357,"context_line":"            svc_type_db[\u0027ref_count\u0027] \u003d svc_type_db[\u0027ref_count\u0027] - 1"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1Lk%3D","line":354,"in_reply_to":"AAAAM3%2F%2F1Ng%3D","updated":"2013-01-03 09:03:31.000000000","message":"Done","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":44,"context_line":"                           \u0027using the format: \u003cservice\u003e:\u003cplugin\u003e[:\u003cdriver\u003e]\u0027))"},{"line_number":45,"context_line":"]"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# TODO(salvatore-orlando): database options should be moved to quantum/common"},{"line_number":48,"context_line":"database_opts \u003d ["},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027sql_connection\u0027, default\u003d\u0027sqlite://\u0027),"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027sql_max_retries\u0027, default\u003d-1),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzUs%3D","line":47,"updated":"2013-01-04 19:40:35.000000000","message":"can we file a bug for this? Or just do it?","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":44,"context_line":"                           \u0027using the format: \u003cservice\u003e:\u003cplugin\u003e[:\u003cdriver\u003e]\u0027))"},{"line_number":45,"context_line":"]"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# TODO(salvatore-orlando): database options should be moved to quantum/common"},{"line_number":48,"context_line":"database_opts \u003d ["},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027sql_connection\u0027, default\u003d\u0027sqlite://\u0027),"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027sql_max_retries\u0027, default\u003d-1),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FxfM%3D","line":47,"in_reply_to":"AAAAM3%2F%2FyYw%3D","updated":"2013-01-06 07:25:18.000000000","message":"I will take care of a patch today. I hope that this may help...\nBug - https://bugs.launchpad.net/quantum/+bug/1096537\nReview - https://review.openstack.org/#/c/19049/\nHope that it suffices.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":44,"context_line":"                           \u0027using the format: \u003cservice\u003e:\u003cplugin\u003e[:\u003cdriver\u003e]\u0027))"},{"line_number":45,"context_line":"]"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# TODO(salvatore-orlando): database options should be moved to quantum/common"},{"line_number":48,"context_line":"database_opts \u003d ["},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027sql_connection\u0027, default\u003d\u0027sqlite://\u0027),"},{"line_number":50,"context_line":"    cfg.IntOpt(\u0027sql_max_retries\u0027, default\u003d-1),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyYw%3D","line":47,"in_reply_to":"AAAAM3%2F%2FzUs%3D","updated":"2013-01-04 23:48:08.000000000","message":"I think garyk has already a bug filed. Let me double check.\nIt\u0027s a quantum-wide issue, so another patch might be more appropriate.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"unresolved":false,"context_lines":[{"line_number":52,"context_line":"    cfg.IntOpt(\u0027sql_min_pool_size\u0027,"},{"line_number":53,"context_line":"               default\u003d1,"},{"line_number":54,"context_line":"               help\u003d\"Minimum number of SQL connections to keep open in a \""},{"line_number":55,"context_line":"                    \"pool\"),"},{"line_number":56,"context_line":"    cfg.IntOpt(\u0027sql_max_pool_size\u0027,"},{"line_number":57,"context_line":"               default\u003d5,"},{"line_number":58,"context_line":"               help\u003d\"Maximum number of SQL connections to keep open in a \""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyG8%3D","line":55,"updated":"2013-01-05 02:24:43.000000000","message":"This need i18n","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":52,"context_line":"    cfg.IntOpt(\u0027sql_min_pool_size\u0027,"},{"line_number":53,"context_line":"               default\u003d1,"},{"line_number":54,"context_line":"               help\u003d\"Minimum number of SQL connections to keep open in a \""},{"line_number":55,"context_line":"                    \"pool\"),"},{"line_number":56,"context_line":"    cfg.IntOpt(\u0027sql_max_pool_size\u0027,"},{"line_number":57,"context_line":"               default\u003d5,"},{"line_number":58,"context_line":"               help\u003d\"Maximum number of SQL connections to keep open in a \""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FwrI%3D","line":55,"in_reply_to":"AAAAM3%2F%2FyG8%3D","updated":"2013-01-07 12:20:29.000000000","message":"hopefully these options will go away thanks to Garyk\u0027s patch","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"unresolved":false,"context_lines":[{"line_number":56,"context_line":"    cfg.IntOpt(\u0027sql_max_pool_size\u0027,"},{"line_number":57,"context_line":"               default\u003d5,"},{"line_number":58,"context_line":"               help\u003d\"Maximum number of SQL connections to keep open in a \""},{"line_number":59,"context_line":"                    \"pool\"),"},{"line_number":60,"context_line":"    cfg.IntOpt(\u0027sql_idle_timeout\u0027,"},{"line_number":61,"context_line":"               default\u003d3600,"},{"line_number":62,"context_line":"               help\u003d\"Timeout in seconds before idle sql connections are \""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyG4%3D","line":59,"updated":"2013-01-05 02:24:43.000000000","message":"ditto","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"unresolved":false,"context_lines":[{"line_number":60,"context_line":"    cfg.IntOpt(\u0027sql_idle_timeout\u0027,"},{"line_number":61,"context_line":"               default\u003d3600,"},{"line_number":62,"context_line":"               help\u003d\"Timeout in seconds before idle sql connections are \""},{"line_number":63,"context_line":"                    \"reaped\"),"},{"line_number":64,"context_line":"    cfg.BoolOpt(\u0027sql_dbpool_enable\u0027,"},{"line_number":65,"context_line":"                default\u003dFalse,"},{"line_number":66,"context_line":"                help\u003d\"Enable the use of eventlet\u0027s db_pool for MySQL\"),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyG0%3D","line":63,"updated":"2013-01-05 02:24:43.000000000","message":"ditto","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    \"reaped\"),"},{"line_number":64,"context_line":"    cfg.BoolOpt(\u0027sql_dbpool_enable\u0027,"},{"line_number":65,"context_line":"                default\u003dFalse,"},{"line_number":66,"context_line":"                help\u003d\"Enable the use of eventlet\u0027s db_pool for MySQL\"),"},{"line_number":67,"context_line":"]"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"cfg.CONF.register_opts(default_servicetype_opts, \u0027DEFAULT_SERVICETYPE\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyGw%3D","line":66,"updated":"2013-01-05 02:24:43.000000000","message":"ditto","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class ServiceTypeInUse(q_exc.InUse):"},{"line_number":106,"context_line":"    message \u003d _(\"There are still active instances of service type \""},{"line_number":107,"context_line":"                \"\u0027%(service_type_id)s\u0027 is instantiated and therefore \""},{"line_number":108,"context_line":"                \"it cannot be removed.\")"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzUg%3D","line":107,"updated":"2013-01-04 19:40:35.000000000","message":"remove \"is\"","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class ServiceTypeInUse(q_exc.InUse):"},{"line_number":106,"context_line":"    message \u003d _(\"There are still active instances of service type \""},{"line_number":107,"context_line":"                \"\u0027%(service_type_id)s\u0027 is instantiated and therefore \""},{"line_number":108,"context_line":"                \"it cannot be removed.\")"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyYs%3D","line":107,"in_reply_to":"AAAAM3%2F%2FzUg%3D","updated":"2013-01-04 23:48:08.000000000","message":"Sometimes I wonder where I learnt english","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"class ServiceDefinition(model_base.BASEV2, models_v2.HasId):"},{"line_number":112,"context_line":"    service \u003d sa.Column(sa.String(255), primary_key\u003dTrue)"},{"line_number":113,"context_line":"    plugin \u003d sa.Column(sa.String(255))"},{"line_number":114,"context_line":"    driver \u003d sa.Column(sa.String(255))"},{"line_number":115,"context_line":"    service_type_id \u003d sa.Column(sa.String(36),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzUQ%3D","line":112,"updated":"2013-01-04 19:40:35.000000000","message":"is this a name or an id?  name could be more clear.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"class ServiceDefinition(model_base.BASEV2, models_v2.HasId):"},{"line_number":112,"context_line":"    service \u003d sa.Column(sa.String(255), primary_key\u003dTrue)"},{"line_number":113,"context_line":"    plugin \u003d sa.Column(sa.String(255))"},{"line_number":114,"context_line":"    driver \u003d sa.Column(sa.String(255))"},{"line_number":115,"context_line":"    service_type_id \u003d sa.Column(sa.String(36),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyYc%3D","line":112,"in_reply_to":"AAAAM3%2F%2FzUQ%3D","updated":"2013-01-04 23:48:08.000000000","message":"it\u0027s a name, but not a symbolic one.\nIts value should be a string out of an enum. Eg. (\u0027lb\u0027, \u0027fw\u0027, \u0027vpn\u0027, etc.)\nI am considering renaming it to service_class","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":115,"context_line":"    service_type_id \u003d sa.Column(sa.String(36),"},{"line_number":116,"context_line":"                                sa.ForeignKey(\u0027servicetypes.id\u0027,"},{"line_number":117,"context_line":"                                              ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":118,"context_line":"                                primary_key\u003dTrue)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class ServiceType(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzUY%3D","line":118,"updated":"2013-01-04 19:40:35.000000000","message":"i think you\u0027ll need to coordinate with mark on the order of merging this patch, as if his goes in first, you\u0027ll need to rebase and add a migration for these db changes, otherwise, if yours goes in first, mark will need to include the migrations in his patch.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":115,"context_line":"    service_type_id \u003d sa.Column(sa.String(36),"},{"line_number":116,"context_line":"                                sa.ForeignKey(\u0027servicetypes.id\u0027,"},{"line_number":117,"context_line":"                                              ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":118,"context_line":"                                primary_key\u003dTrue)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class ServiceType(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyYU%3D","line":118,"in_reply_to":"AAAAM3%2F%2FzUY%3D","updated":"2013-01-04 23:48:08.000000000","message":"Definitely.\nI am actually thinking of adding a migration script anyway, as it won\u0027t make any harm if mark\u0027s patch is not merged yet.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":122,"context_line":"    \"\"\" Service Type Object Model \"\"\""},{"line_number":123,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":124,"context_line":"    description \u003d sa.Column(sa.String(255))"},{"line_number":125,"context_line":"    enabled \u003d sa.Column(sa.Boolean())"},{"line_number":126,"context_line":"    default \u003d sa.Column(sa.Boolean(), nullable\u003dFalse, default\u003dFalse)"},{"line_number":127,"context_line":"    service_definitions \u003d orm.relationship(ServiceDefinition,"},{"line_number":128,"context_line":"                                           backref\u003d\u0027servicetypes\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyYY%3D","line":125,"updated":"2013-01-04 23:48:08.000000000","message":"This will go reflecting comments on the spec document","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":191,"context_line":"        # Register models for service type management"},{"line_number":192,"context_line":"        # Note this might have been already done if configure_db also"},{"line_number":193,"context_line":"        # created the engine"},{"line_number":194,"context_line":"        db.register_models(models_v2.model_base.BASEV2)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def _create_service_type(self, context, service_type):"},{"line_number":197,"context_line":"        svc_defs \u003d service_type.pop(\u0027service_definitions\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzSg%3D","line":194,"updated":"2013-01-04 19:40:35.000000000","message":"most of the models here are specific to core plugins, which I would not expect to be relevant.  But perhaps you want the HasTenant and HasId models?  At some point in the future, it may make sense to split out the \"core plugin models\" from the \"generic base models\" (e.g., HasTenant, HasId).","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":191,"context_line":"        # Register models for service type management"},{"line_number":192,"context_line":"        # Note this might have been already done if configure_db also"},{"line_number":193,"context_line":"        # created the engine"},{"line_number":194,"context_line":"        db.register_models(models_v2.model_base.BASEV2)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def _create_service_type(self, context, service_type):"},{"line_number":197,"context_line":"        svc_defs \u003d service_type.pop(\u0027service_definitions\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyYM%3D","line":194,"in_reply_to":"AAAAM3%2F%2FzSg%3D","updated":"2013-01-04 23:48:08.000000000","message":"This call will register the models which are used by the service type API extension.\nUnlike the L3 extension, the core plugin does not use these models, so we need to register them explicitly.\n\nHasID and HasTenant are not models in sqlalchemy terms, ad they do not inherit from the model base class.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":215,"context_line":"            try:"},{"line_number":216,"context_line":"                svc_defs_map \u003d dict([(svc_def[\u0027service\u0027], svc_def)"},{"line_number":217,"context_line":"                                     for svc_def in"},{"line_number":218,"context_line":"                                     service_type.pop(\u0027service_definitions\u0027)])"},{"line_number":219,"context_line":"            except KeyError:"},{"line_number":220,"context_line":"                # No service defs in request"},{"line_number":221,"context_line":"                svc_defs_map \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzJE%3D","line":218,"updated":"2013-01-04 19:40:35.000000000","message":"do we ever make sure \u0027service\u0027 is unique for each entry in \u0027service_definitions\u0027 (i.e., that there are no duplicates?)  Otherwise I think some of the logic below may be invalid.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":215,"context_line":"            try:"},{"line_number":216,"context_line":"                svc_defs_map \u003d dict([(svc_def[\u0027service\u0027], svc_def)"},{"line_number":217,"context_line":"                                     for svc_def in"},{"line_number":218,"context_line":"                                     service_type.pop(\u0027service_definitions\u0027)])"},{"line_number":219,"context_line":"            except KeyError:"},{"line_number":220,"context_line":"                # No service defs in request"},{"line_number":221,"context_line":"                svc_defs_map \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FvNA%3D","line":218,"in_reply_to":"AAAAM3%2F%2FyYE%3D","updated":"2013-01-08 05:27:21.000000000","message":"yeah, but I was talking about the \u0027service_definitions\u0027 attribute of the service_type dict that is passed in from webservices (i.e., before the data is shoved into the DB).  If the services_defintions array had two entries with the same service_type, wouldn\u0027t one of them be ignored without any kind of an error being generated?","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":215,"context_line":"            try:"},{"line_number":216,"context_line":"                svc_defs_map \u003d dict([(svc_def[\u0027service\u0027], svc_def)"},{"line_number":217,"context_line":"                                     for svc_def in"},{"line_number":218,"context_line":"                                     service_type.pop(\u0027service_definitions\u0027)])"},{"line_number":219,"context_line":"            except KeyError:"},{"line_number":220,"context_line":"                # No service defs in request"},{"line_number":221,"context_line":"                svc_defs_map \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyYE%3D","line":218,"in_reply_to":"AAAAM3%2F%2FzJE%3D","updated":"2013-01-04 23:48:08.000000000","message":"yes, it\u0027s part of the primary_key for service_definition (and the other part is the service type id)","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":218,"context_line":"                                     service_type.pop(\u0027service_definitions\u0027)])"},{"line_number":219,"context_line":"            except KeyError:"},{"line_number":220,"context_line":"                # No service defs in request"},{"line_number":221,"context_line":"                svc_defs_map \u003d {}"},{"line_number":222,"context_line":"            svc_type_db.update(service_type)"},{"line_number":223,"context_line":"            for svc_def_db in svc_type_db.service_definitions:"},{"line_number":224,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzJY%3D","line":221,"updated":"2013-01-04 19:40:35.000000000","message":"could it also be that a particular service def did not include the \u0027service\u0027 key?","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":218,"context_line":"                                     service_type.pop(\u0027service_definitions\u0027)])"},{"line_number":219,"context_line":"            except KeyError:"},{"line_number":220,"context_line":"                # No service defs in request"},{"line_number":221,"context_line":"                svc_defs_map \u003d {}"},{"line_number":222,"context_line":"            svc_type_db.update(service_type)"},{"line_number":223,"context_line":"            for svc_def_db in svc_type_db.service_definitions:"},{"line_number":224,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyYA%3D","line":221,"in_reply_to":"AAAAM3%2F%2FzJY%3D","updated":"2013-01-04 23:48:08.000000000","message":"It\u0027s required by the validator, I think...","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"unresolved":false,"context_lines":[{"line_number":259,"context_line":"            query2 \u003d context.session.query(ServiceType)"},{"line_number":260,"context_line":"            results \u003d query2.filter(ServiceType.default \u003d\u003d expr.true()).all()"},{"line_number":261,"context_line":"            LOG.warning(_(\"Multiple default service type instances found.\""},{"line_number":262,"context_line":"                          \"Will use instance \u0027%s\u0027\") % results[0][\u0027id\u0027])"},{"line_number":263,"context_line":"            return results[0]"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def _make_svc_type_dict(self, context, svc_type, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyGE%3D","line":262,"updated":"2013-01-05 02:24:43.000000000","message":"It should be:\n\nLOG.warning(_(\"Multiple default service type instances found. Will use instance \u0027%s\u0027\"), results[0][\u0027id\u0027])","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":259,"context_line":"            query2 \u003d context.session.query(ServiceType)"},{"line_number":260,"context_line":"            results \u003d query2.filter(ServiceType.default \u003d\u003d expr.true()).all()"},{"line_number":261,"context_line":"            LOG.warning(_(\"Multiple default service type instances found.\""},{"line_number":262,"context_line":"                          \"Will use instance \u0027%s\u0027\") % results[0][\u0027id\u0027])"},{"line_number":263,"context_line":"            return results[0]"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def _make_svc_type_dict(self, context, svc_type, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fwq0%3D","line":262,"in_reply_to":"AAAAM3%2F%2FyGE%3D","updated":"2013-01-07 12:20:29.000000000","message":"Done","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":260,"context_line":"            results \u003d query2.filter(ServiceType.default \u003d\u003d expr.true()).all()"},{"line_number":261,"context_line":"            LOG.warning(_(\"Multiple default service type instances found.\""},{"line_number":262,"context_line":"                          \"Will use instance \u0027%s\u0027\") % results[0][\u0027id\u0027])"},{"line_number":263,"context_line":"            return results[0]"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def _make_svc_type_dict(self, context, svc_type, fields\u003dNone):"},{"line_number":266,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzIA%3D","line":263,"updated":"2013-01-04 19:40:35.000000000","message":"so this implies that there is only one \u0027global\u0027 default service-type, and you cannot have defaults on a per-service basis? I think this model makes sense for the gold/silver/bronze scenario, but may make less sense if service-types map more to a given vendor (as your default lbaas vendor may well not be your default vpnaas vendor).","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":260,"context_line":"            results \u003d query2.filter(ServiceType.default \u003d\u003d expr.true()).all()"},{"line_number":261,"context_line":"            LOG.warning(_(\"Multiple default service type instances found.\""},{"line_number":262,"context_line":"                          \"Will use instance \u0027%s\u0027\") % results[0][\u0027id\u0027])"},{"line_number":263,"context_line":"            return results[0]"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def _make_svc_type_dict(self, context, svc_type, fields\u003dNone):"},{"line_number":266,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyXQ%3D","line":263,"in_reply_to":"AAAAM3%2F%2FzIA%3D","updated":"2013-01-04 23:48:08.000000000","message":"Good point.\nI was thinking that in this case you would put all your default vendors in the default service type.\n\nBut, as I replied to your comment on the spec doc, your way of looking at the problem is equivalent.\n\nLet me see what it would take to define per-service defaults. The default service type is just for the case when an instance of an adv service is created without any svc type identifier. So per-service defaults will make it superflous, I think.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"unresolved":false,"context_lines":[{"line_number":309,"context_line":"        \"\"\" Create a new service type \"\"\""},{"line_number":310,"context_line":"        svc_type_data \u003d service_type[\u0027service_type\u0027]"},{"line_number":311,"context_line":"        svc_type_db \u003d self._create_service_type(context, svc_type_data)"},{"line_number":312,"context_line":"        LOG.debug(_(\"Created service type object:%s\") % svc_type_db[\u0027id\u0027])"},{"line_number":313,"context_line":"        return self._make_svc_type_dict(context, svc_type_db)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def update_service_type(self, context, id, service_type):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyF4%3D","line":312,"updated":"2013-01-05 02:24:43.000000000","message":"LOG.debug(_(\"Created service type object:%s\"), svc_type_db[\u0027id\u0027])","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":309,"context_line":"        \"\"\" Create a new service type \"\"\""},{"line_number":310,"context_line":"        svc_type_data \u003d service_type[\u0027service_type\u0027]"},{"line_number":311,"context_line":"        svc_type_db \u003d self._create_service_type(context, svc_type_data)"},{"line_number":312,"context_line":"        LOG.debug(_(\"Created service type object:%s\") % svc_type_db[\u0027id\u0027])"},{"line_number":313,"context_line":"        return self._make_svc_type_dict(context, svc_type_db)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def update_service_type(self, context, id, service_type):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fwqw%3D","line":312,"in_reply_to":"AAAAM3%2F%2FyF4%3D","updated":"2013-01-07 12:20:29.000000000","message":"Done","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":355,"context_line":"                            svc_type_db[\u0027name\u0027])"},{"line_number":356,"context_line":"                return"},{"line_number":357,"context_line":"            svc_type_db[\u0027ref_count\u0027] \u003d svc_type_db[\u0027ref_count\u0027] - 1"},{"line_number":358,"context_line":"        return svc_type_db[\u0027ref_count\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzDQ%3D","line":358,"updated":"2013-01-04 19:40:35.000000000","message":"the ref_count model just worries me as something that is likely to get out of sync.  For example, what if you start using lbaas plugin X, provision several items, then configure quantum to use lbass plugin Y?  Presumably the instances from the initial plugin would go away (along with its DB), but the ref_count would stay.  \n\nI\u0027m not sure there\u0027s a good answer here.  One possible approach would be to give the service-type logic a way it can interrogate the service plugins themselves about the number of instances using service_type X.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":355,"context_line":"                            svc_type_db[\u0027name\u0027])"},{"line_number":356,"context_line":"                return"},{"line_number":357,"context_line":"            svc_type_db[\u0027ref_count\u0027] \u003d svc_type_db[\u0027ref_count\u0027] - 1"},{"line_number":358,"context_line":"        return svc_type_db[\u0027ref_count\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FvM4%3D","line":358,"in_reply_to":"AAAAM3%2F%2FyXI%3D","updated":"2013-01-08 05:27:21.000000000","message":"that\u0027s a lie.  you know all drinks at the summit are paid for :P","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":355,"context_line":"                            svc_type_db[\u0027name\u0027])"},{"line_number":356,"context_line":"                return"},{"line_number":357,"context_line":"            svc_type_db[\u0027ref_count\u0027] \u003d svc_type_db[\u0027ref_count\u0027] - 1"},{"line_number":358,"context_line":"        return svc_type_db[\u0027ref_count\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyXI%3D","line":358,"in_reply_to":"AAAAM3%2F%2FzDQ%3D","updated":"2013-01-04 23:48:08.000000000","message":"I don\u0027t like it either, but have to admit that I\u0027ve been unable to come with a simple and effective solution.\n\nIf you agree we can go ahead with a FIXME/TODO in the code, with a promise from me to look at a better solution in G-3.\n\nI\u0027ll buy a round of drinks to the whole core dev team at the next summit if I break the promise.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"}],"quantum/extensions/dummy.py":[{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":"#    @author: Salvatore Orlando, VMware"},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from quantum.api.v2 import base"},{"line_number":21,"context_line":"from quantum.api import extensions"},{"line_number":22,"context_line":"from quantum import manager"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMX%2F%2F4Ys%3D","line":20,"updated":"2012-12-11 01:54:36.000000000","message":"This line should go right below line 21","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":"#    @author: Salvatore Orlando, VMware"},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from quantum.api.v2 import base"},{"line_number":21,"context_line":"from quantum.api import extensions"},{"line_number":22,"context_line":"from quantum import manager"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6Hc%3D","line":20,"in_reply_to":"AAAAMX%2F%2F4Ys%3D","updated":"2012-12-21 16:36:38.000000000","message":"thanks a lot!","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @classmethod"},{"line_number":59,"context_line":"    def get_description(cls):"},{"line_number":60,"context_line":"        return (\"Dummy stuff\")"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @classmethod"},{"line_number":63,"context_line":"    def get_namespace(cls):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F2tY%3D","line":60,"updated":"2013-01-01 06:03:34.000000000","message":"redundant parenthesis?","commit_id":"d3c7776b38449c469cacbf65a507274d25d09368"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @classmethod"},{"line_number":59,"context_line":"    def get_description(cls):"},{"line_number":60,"context_line":"        return (\"Dummy stuff\")"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @classmethod"},{"line_number":63,"context_line":"    def get_namespace(cls):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F2mg%3D","line":60,"in_reply_to":"AAAAM3%2F%2F2tY%3D","updated":"2013-01-02 11:37:46.000000000","message":"Done","commit_id":"d3c7776b38449c469cacbf65a507274d25d09368"}],"quantum/extensions/servicetype.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9c1c49c136747be706799ecef73173fb2a27fd49","unresolved":false,"context_lines":[{"line_number":17,"context_line":"#    @author: Salvatore Orlando, VMware"},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import logging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from quantum.api.v2 import attributes"},{"line_number":23,"context_line":"from quantum.api.v2 import base"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMX%2F%2F5NU%3D","line":20,"updated":"2012-12-10 08:30:23.000000000","message":"consider common logging","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":"#    @author: Salvatore Orlando, VMware"},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import logging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from quantum.api.v2 import attributes"},{"line_number":23,"context_line":"from quantum.api.v2 import base"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6Hk%3D","line":20,"in_reply_to":"AAAAMX%2F%2F5NU%3D","updated":"2012-12-21 16:36:38.000000000","message":"Done","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":22,"context_line":"from quantum.api.v2 import attributes"},{"line_number":23,"context_line":"from quantum.api.v2 import base"},{"line_number":24,"context_line":"from quantum.db import servicetype_db"},{"line_number":25,"context_line":"from quantum.api import extensions"},{"line_number":26,"context_line":"from quantum import manager"},{"line_number":27,"context_line":"from quantum.plugins.common import constants"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMX%2F%2F4Yo%3D","line":25,"updated":"2012-12-11 01:54:36.000000000","message":"This line should be placed right above line 22","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":22,"context_line":"from quantum.api.v2 import attributes"},{"line_number":23,"context_line":"from quantum.api.v2 import base"},{"line_number":24,"context_line":"from quantum.db import servicetype_db"},{"line_number":25,"context_line":"from quantum.api import extensions"},{"line_number":26,"context_line":"from quantum import manager"},{"line_number":27,"context_line":"from quantum.plugins.common import constants"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6Hg%3D","line":25,"in_reply_to":"AAAAMX%2F%2F4Yo%3D","updated":"2012-12-21 16:36:38.000000000","message":"thanks","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9c1c49c136747be706799ecef73173fb2a27fd49","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        \u0027service_definitions\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":57,"context_line":"                                \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":58,"context_line":"                                \u0027validate\u0027: {\u0027type:service_definitions\u0027:"},{"line_number":59,"context_line":"                                             None}}"},{"line_number":60,"context_line":"    }"},{"line_number":61,"context_line":"}"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMX%2F%2F5NI%3D","line":59,"updated":"2012-12-10 08:30:23.000000000","message":"Do we want to prioritize services? That is service X should be run before service Y?","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":56,"context_line":"        \u0027service_definitions\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":57,"context_line":"                                \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":58,"context_line":"                                \u0027validate\u0027: {\u0027type:service_definitions\u0027:"},{"line_number":59,"context_line":"                                             None}}"},{"line_number":60,"context_line":"    }"},{"line_number":61,"context_line":"}"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6HY%3D","line":59,"in_reply_to":"AAAAMX%2F%2F5NI%3D","updated":"2012-12-21 16:36:38.000000000","message":"I probably see what you\u0027re aiming to.\nThis would probably send us into a rabbit hole regarding service chaining and traffic processing.\n\nThis should probably be a post-grizzly topic.","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9c1c49c136747be706799ecef73173fb2a27fd49","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    \"\"\" Validate the list of service definitions. \"\"\""},{"line_number":66,"context_line":"    try:"},{"line_number":67,"context_line":"        if len(data) \u003d\u003d 0:"},{"line_number":68,"context_line":"            return _(\"No service type definition was provided. At lest a \""},{"line_number":69,"context_line":"                     \"service type definition must be provided\")"},{"line_number":70,"context_line":"        for svc_def in data:"},{"line_number":71,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMX%2F%2F5NQ%3D","line":68,"updated":"2012-12-10 08:30:23.000000000","message":"typo - lest \u003d\u003e least","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":65,"context_line":"    \"\"\" Validate the list of service definitions. \"\"\""},{"line_number":66,"context_line":"    try:"},{"line_number":67,"context_line":"        if len(data) \u003d\u003d 0:"},{"line_number":68,"context_line":"            return _(\"No service type definition was provided. At lest a \""},{"line_number":69,"context_line":"                     \"service type definition must be provided\")"},{"line_number":70,"context_line":"        for svc_def in data:"},{"line_number":71,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6HU%3D","line":68,"in_reply_to":"AAAAMX%2F%2F5NQ%3D","updated":"2012-12-21 16:36:38.000000000","message":"Done","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"20422e324f9b309362f92012edcd1f05501e9d57","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                             \"definition %s\" %"},{"line_number":87,"context_line":"                             (_validate_service_defs.__name__, svc_def))"},{"line_number":88,"context_line":"                # TODO(salvatore-orlando): This code will need to change when"},{"line_number":89,"context_line":"                # multiple plugins will be supported"},{"line_number":90,"context_line":"                svc_plugin \u003d manager.QuantumManager.get_service_plugins().get("},{"line_number":91,"context_line":"                    svc_name)"},{"line_number":92,"context_line":"                if not svc_plugin:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMX%2F%2F5EY%3D","line":89,"updated":"2012-12-10 15:23:12.000000000","message":"Is this TODO statement actual (since we already have multiple plugins support)?","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":86,"context_line":"                             \"definition %s\" %"},{"line_number":87,"context_line":"                             (_validate_service_defs.__name__, svc_def))"},{"line_number":88,"context_line":"                # TODO(salvatore-orlando): This code will need to change when"},{"line_number":89,"context_line":"                # multiple plugins will be supported"},{"line_number":90,"context_line":"                svc_plugin \u003d manager.QuantumManager.get_service_plugins().get("},{"line_number":91,"context_line":"                    svc_name)"},{"line_number":92,"context_line":"                if not svc_plugin:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6HM%3D","line":89,"in_reply_to":"AAAAMX%2F%2F5EY%3D","updated":"2012-12-21 16:36:38.000000000","message":"multiple plugins per service category (my bad)","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"33b933d40a4bf194c36f91b44a1e792b706e2282","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    @classmethod"},{"line_number":133,"context_line":"    def get_alias(cls):"},{"line_number":134,"context_line":"        return \"service-type\""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @classmethod"},{"line_number":137,"context_line":"    def get_description(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F%2FkE%3D","line":134,"updated":"2012-12-17 12:41:25.000000000","message":"seems like this extension will not be exposed by extension manager since there is no plugin in QuantumManager that supports it.","commit_id":"f6986314ea8dc3d3598904e9393cb7ea5b906e52"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    @classmethod"},{"line_number":133,"context_line":"    def get_alias(cls):"},{"line_number":134,"context_line":"        return \"service-type\""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @classmethod"},{"line_number":137,"context_line":"    def get_description(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F6I4%3D","line":134,"in_reply_to":"AAAAM3%2F%2F%2FkE%3D","updated":"2012-12-21 16:24:17.000000000","message":"Yes, this is what\u0027s going to happen at the moment.\nAfter all, what would be the need of having service types if no plugin supports them?","commit_id":"f6986314ea8dc3d3598904e9393cb7ea5b906e52"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"33b933d40a4bf194c36f91b44a1e792b706e2282","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        \"\"\" Returns Extended Resource for service type management \"\"\""},{"line_number":152,"context_line":"        controller \u003d base.create_resource("},{"line_number":153,"context_line":"            COLLECTION_NAME, RESOURCE_NAME,"},{"line_number":154,"context_line":"            servicetype_db.ServiceTypeManager.get_instance(),"},{"line_number":155,"context_line":"            RESOURCE_ATTRIBUTE_MAP[COLLECTION_NAME])"},{"line_number":156,"context_line":"        return extensions.ResourceExtension(COLLECTION_NAME,"},{"line_number":157,"context_line":"                                            controller)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F%2FkA%3D","line":154,"updated":"2012-12-17 12:41:25.000000000","message":"you may want to explicitly instantiate ServiceTypeManager somewhere around QuantumManager and then access in a regular way:\nQuantumManager.get_plugins()[\u0027Service_Types\u0027]\nThis way it also will load this extension.","commit_id":"f6986314ea8dc3d3598904e9393cb7ea5b906e52"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":151,"context_line":"        \"\"\" Returns Extended Resource for service type management \"\"\""},{"line_number":152,"context_line":"        controller \u003d base.create_resource("},{"line_number":153,"context_line":"            COLLECTION_NAME, RESOURCE_NAME,"},{"line_number":154,"context_line":"            servicetype_db.ServiceTypeManager.get_instance(),"},{"line_number":155,"context_line":"            RESOURCE_ATTRIBUTE_MAP[COLLECTION_NAME])"},{"line_number":156,"context_line":"        return extensions.ResourceExtension(COLLECTION_NAME,"},{"line_number":157,"context_line":"                                            controller)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2F6Ik%3D","line":154,"in_reply_to":"AAAAM3%2F%2F%2FkA%3D","updated":"2012-12-21 16:24:17.000000000","message":"That is correct.\nLooking at service type as a plugin is a way I had considered, but then decided for the standard extension approach.\n\nAs you say however, there is some value in this approach. I will have another look and then take a final decision.","commit_id":"f6986314ea8dc3d3598904e9393cb7ea5b906e52"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from quantum.api.v2 import attributes"},{"line_number":21,"context_line":"from quantum.api.v2 import base"},{"line_number":22,"context_line":"from quantum.api import extensions"},{"line_number":23,"context_line":"from quantum.db import servicetype_db"},{"line_number":24,"context_line":"from quantum import manager"},{"line_number":25,"context_line":"from quantum.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F4rY%3D","line":22,"updated":"2012-12-26 10:25:16.000000000","message":"should this be at line 19?","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from quantum.api.v2 import attributes"},{"line_number":21,"context_line":"from quantum.api.v2 import base"},{"line_number":22,"context_line":"from quantum.api import extensions"},{"line_number":23,"context_line":"from quantum.db import servicetype_db"},{"line_number":24,"context_line":"from quantum import manager"},{"line_number":25,"context_line":"from quantum.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F4qI%3D","line":22,"in_reply_to":"AAAAM3%2F%2F4rY%3D","updated":"2012-12-26 10:35:30.000000000","message":"Done","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":24,"context_line":"from quantum import manager"},{"line_number":25,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":26,"context_line":"from quantum.plugins.common import constants"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"RESOURCE_NAME \u003d \"service-type\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F4rc%3D","line":27,"updated":"2012-12-26 10:25:16.000000000","message":"2 lines?","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":24,"context_line":"from quantum import manager"},{"line_number":25,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":26,"context_line":"from quantum.plugins.common import constants"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"RESOURCE_NAME \u003d \"service-type\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F4qE%3D","line":27,"in_reply_to":"AAAAM3%2F%2F4rc%3D","updated":"2012-12-26 10:35:30.000000000","message":"Done","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":99,"context_line":"                # Validate \u0027service\u0027 attribute"},{"line_number":100,"context_line":"                svc_name \u003d svc_def_copy.get(SERVICE_ATTR)"},{"line_number":101,"context_line":"                if not svc_name in constants.ALLOWED_SERVICES:"},{"line_number":102,"context_line":"                    return _(\"%s: Service name \u0027%s\u0027 unspecified or invalid\" %"},{"line_number":103,"context_line":"                             (_validate_service_defs.__name__,"},{"line_number":104,"context_line":"                              svc_name))"},{"line_number":105,"context_line":"                del svc_def_copy[SERVICE_ATTR]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F2tQ%3D","line":102,"updated":"2013-01-01 06:03:34.000000000","message":"Multiple positional placeholders should use dict to pass values. and the gettext function should close at the end of the string. (same below)","commit_id":"d3c7776b38449c469cacbf65a507274d25d09368"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":99,"context_line":"                # Validate \u0027service\u0027 attribute"},{"line_number":100,"context_line":"                svc_name \u003d svc_def_copy.get(SERVICE_ATTR)"},{"line_number":101,"context_line":"                if not svc_name in constants.ALLOWED_SERVICES:"},{"line_number":102,"context_line":"                    return _(\"%s: Service name \u0027%s\u0027 unspecified or invalid\" %"},{"line_number":103,"context_line":"                             (_validate_service_defs.__name__,"},{"line_number":104,"context_line":"                              svc_name))"},{"line_number":105,"context_line":"                del svc_def_copy[SERVICE_ATTR]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2F2mc%3D","line":102,"in_reply_to":"AAAAM3%2F%2F2tQ%3D","updated":"2013-01-02 11:37:46.000000000","message":"Done","commit_id":"d3c7776b38449c469cacbf65a507274d25d09368"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"# Copyright 2012 OpenStack LLC."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1Ow%3D","line":2,"updated":"2013-01-03 08:32:15.000000000","message":"Do we want to change this to 2013?","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"# Copyright 2012 OpenStack LLC."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1Mg%3D","line":2,"in_reply_to":"AAAAM3%2F%2F1Ow%3D","updated":"2013-01-03 09:03:31.000000000","message":"Done","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":81,"context_line":"        svctype_mgr.get_service_type(context.get_admin_context(),"},{"line_number":82,"context_line":"                                     svc_type_id)"},{"line_number":83,"context_line":"    except servicetype_db.ServiceTypeNotFound:"},{"line_number":84,"context_line":"        return _(\"The service type identifier \u0027%s\u0027 does not exist\" %"},{"line_number":85,"context_line":"                 svc_type_id)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1Nc%3D","line":84,"updated":"2013-01-03 08:55:33.000000000","message":"gettext function should close after exist\"","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":81,"context_line":"        svctype_mgr.get_service_type(context.get_admin_context(),"},{"line_number":82,"context_line":"                                     svc_type_id)"},{"line_number":83,"context_line":"    except servicetype_db.ServiceTypeNotFound:"},{"line_number":84,"context_line":"        return _(\"The service type identifier \u0027%s\u0027 does not exist\" %"},{"line_number":85,"context_line":"                 svc_type_id)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1Mc%3D","line":84,"in_reply_to":"AAAAM3%2F%2F1Nc%3D","updated":"2013-01-03 09:03:31.000000000","message":"thanks!","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":99,"context_line":"                # Validate \u0027service\u0027 attribute"},{"line_number":100,"context_line":"                svc_name \u003d svc_def_copy.get(SERVICE_ATTR)"},{"line_number":101,"context_line":"                if not svc_name in constants.ALLOWED_SERVICES:"},{"line_number":102,"context_line":"                    return _(\"%s: Service name \u0027%s\u0027 unspecified or invalid\" %"},{"line_number":103,"context_line":"                             (_validate_service_defs.__name__,"},{"line_number":104,"context_line":"                              svc_name))"},{"line_number":105,"context_line":"                del svc_def_copy[SERVICE_ATTR]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1NY%3D","line":102,"updated":"2013-01-03 08:55:33.000000000","message":"Multiple placeholder message. gettext function should close after invalid\"","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":99,"context_line":"                # Validate \u0027service\u0027 attribute"},{"line_number":100,"context_line":"                svc_name \u003d svc_def_copy.get(SERVICE_ATTR)"},{"line_number":101,"context_line":"                if not svc_name in constants.ALLOWED_SERVICES:"},{"line_number":102,"context_line":"                    return _(\"%s: Service name \u0027%s\u0027 unspecified or invalid\" %"},{"line_number":103,"context_line":"                             (_validate_service_defs.__name__,"},{"line_number":104,"context_line":"                              svc_name))"},{"line_number":105,"context_line":"                del svc_def_copy[SERVICE_ATTR]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1MY%3D","line":102,"in_reply_to":"AAAAM3%2F%2F1NY%3D","updated":"2013-01-03 09:03:31.000000000","message":"will absolutely fix.","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":115,"context_line":"                svc_plugin \u003d manager.QuantumManager.get_service_plugins().get("},{"line_number":116,"context_line":"                    svc_name)"},{"line_number":117,"context_line":"                if not svc_plugin:"},{"line_number":118,"context_line":"                    return _(\"%s: no plugin for service \u0027%s\u0027 registered \" %"},{"line_number":119,"context_line":"                             (_validate_service_defs.__name__, svc_name))"},{"line_number":120,"context_line":"                if svc_plugin.get_plugin_name() !\u003d plugin_name:"},{"line_number":121,"context_line":"                    return _(\"%s: the plugin name \u0027%s\u0027 is not correct \" %"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1NQ%3D","line":118,"updated":"2013-01-03 08:55:33.000000000","message":"extra space after \u0027registered\u0027. Multiple placeholder message. gettext function should close after registered\".","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":115,"context_line":"                svc_plugin \u003d manager.QuantumManager.get_service_plugins().get("},{"line_number":116,"context_line":"                    svc_name)"},{"line_number":117,"context_line":"                if not svc_plugin:"},{"line_number":118,"context_line":"                    return _(\"%s: no plugin for service \u0027%s\u0027 registered \" %"},{"line_number":119,"context_line":"                             (_validate_service_defs.__name__, svc_name))"},{"line_number":120,"context_line":"                if svc_plugin.get_plugin_name() !\u003d plugin_name:"},{"line_number":121,"context_line":"                    return _(\"%s: the plugin name \u0027%s\u0027 is not correct \" %"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1MQ%3D","line":118,"in_reply_to":"AAAAM3%2F%2F1NQ%3D","updated":"2013-01-03 09:03:31.000000000","message":"thanks","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":118,"context_line":"                    return _(\"%s: no plugin for service \u0027%s\u0027 registered \" %"},{"line_number":119,"context_line":"                             (_validate_service_defs.__name__, svc_name))"},{"line_number":120,"context_line":"                if svc_plugin.get_plugin_name() !\u003d plugin_name:"},{"line_number":121,"context_line":"                    return _(\"%s: the plugin name \u0027%s\u0027 is not correct \" %"},{"line_number":122,"context_line":"                             (_validate_service_defs.__name__,"},{"line_number":123,"context_line":"                              plugin_name))"},{"line_number":124,"context_line":"                del svc_def_copy[PLUGIN_ATTR]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1NI%3D","line":121,"updated":"2013-01-03 08:55:33.000000000","message":"extra space after \u0027correct\u0027. Multiple placeholder message. gettext function should close after correct\".","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":118,"context_line":"                    return _(\"%s: no plugin for service \u0027%s\u0027 registered \" %"},{"line_number":119,"context_line":"                             (_validate_service_defs.__name__, svc_name))"},{"line_number":120,"context_line":"                if svc_plugin.get_plugin_name() !\u003d plugin_name:"},{"line_number":121,"context_line":"                    return _(\"%s: the plugin name \u0027%s\u0027 is not correct \" %"},{"line_number":122,"context_line":"                             (_validate_service_defs.__name__,"},{"line_number":123,"context_line":"                              plugin_name))"},{"line_number":124,"context_line":"                del svc_def_copy[PLUGIN_ATTR]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1MM%3D","line":121,"in_reply_to":"AAAAM3%2F%2F1NI%3D","updated":"2013-01-03 09:03:31.000000000","message":"my apologies for these silly errors.","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":133,"context_line":"                # Anything left - it should be an error"},{"line_number":134,"context_line":"                if len(svc_def_copy):"},{"line_number":135,"context_line":"                    return _(\"%s: Unparseable attributes found in service \""},{"line_number":136,"context_line":"                             \"definition %s\" %"},{"line_number":137,"context_line":"                             (_validate_service_defs.__name__,"},{"line_number":138,"context_line":"                              svc_def_copy))"},{"line_number":139,"context_line":"            except TypeError as e:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1NE%3D","line":136,"updated":"2013-01-03 08:55:33.000000000","message":"Multiple placeholder message. gettext function should close after %s\".","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":133,"context_line":"                # Anything left - it should be an error"},{"line_number":134,"context_line":"                if len(svc_def_copy):"},{"line_number":135,"context_line":"                    return _(\"%s: Unparseable attributes found in service \""},{"line_number":136,"context_line":"                             \"definition %s\" %"},{"line_number":137,"context_line":"                             (_validate_service_defs.__name__,"},{"line_number":138,"context_line":"                              svc_def_copy))"},{"line_number":139,"context_line":"            except TypeError as e:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1MI%3D","line":136,"in_reply_to":"AAAAM3%2F%2F1NE%3D","updated":"2013-01-03 09:03:31.000000000","message":"will fix, sorry","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":137,"context_line":"                             (_validate_service_defs.__name__,"},{"line_number":138,"context_line":"                              svc_def_copy))"},{"line_number":139,"context_line":"            except TypeError as e:"},{"line_number":140,"context_line":"                LOG.exception(_(\"Exception while parsing service definition:%s\""},{"line_number":141,"context_line":"                              % svc_def))"},{"line_number":142,"context_line":"                return _(\"%s: Was expecting a dict for service definition, \""},{"line_number":143,"context_line":"                         \"found the following: %s\" %"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1NA%3D","line":140,"updated":"2013-01-03 08:55:33.000000000","message":"needs a space after colon","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":137,"context_line":"                             (_validate_service_defs.__name__,"},{"line_number":138,"context_line":"                              svc_def_copy))"},{"line_number":139,"context_line":"            except TypeError as e:"},{"line_number":140,"context_line":"                LOG.exception(_(\"Exception while parsing service definition:%s\""},{"line_number":141,"context_line":"                              % svc_def))"},{"line_number":142,"context_line":"                return _(\"%s: Was expecting a dict for service definition, \""},{"line_number":143,"context_line":"                         \"found the following: %s\" %"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1ME%3D","line":140,"in_reply_to":"AAAAM3%2F%2F1NA%3D","updated":"2013-01-03 09:03:31.000000000","message":"Done","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":140,"context_line":"                LOG.exception(_(\"Exception while parsing service definition:%s\""},{"line_number":141,"context_line":"                              % svc_def))"},{"line_number":142,"context_line":"                return _(\"%s: Was expecting a dict for service definition, \""},{"line_number":143,"context_line":"                         \"found the following: %s\" %"},{"line_number":144,"context_line":"                         (_validate_service_defs.__name__, svc_def))"},{"line_number":145,"context_line":"    except TypeError:"},{"line_number":146,"context_line":"        return _(\"%s: provided data are not iterable\" %"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1M8%3D","line":143,"updated":"2013-01-03 08:55:33.000000000","message":"extra space after \u0027%s\"\u0027. Multiple placeholder message. gettext function should close after %s\".","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":140,"context_line":"                LOG.exception(_(\"Exception while parsing service definition:%s\""},{"line_number":141,"context_line":"                              % svc_def))"},{"line_number":142,"context_line":"                return _(\"%s: Was expecting a dict for service definition, \""},{"line_number":143,"context_line":"                         \"found the following: %s\" %"},{"line_number":144,"context_line":"                         (_validate_service_defs.__name__, svc_def))"},{"line_number":145,"context_line":"    except TypeError:"},{"line_number":146,"context_line":"        return _(\"%s: provided data are not iterable\" %"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1MA%3D","line":143,"in_reply_to":"AAAAM3%2F%2F1M8%3D","updated":"2013-01-03 09:03:31.000000000","message":"Done","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":143,"context_line":"                         \"found the following: %s\" %"},{"line_number":144,"context_line":"                         (_validate_service_defs.__name__, svc_def))"},{"line_number":145,"context_line":"    except TypeError:"},{"line_number":146,"context_line":"        return _(\"%s: provided data are not iterable\" %"},{"line_number":147,"context_line":"                 _validate_service_defs.__name__)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"attributes.validators[\u0027type:service_definitions\u0027] \u003d _validate_service_defs"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1M4%3D","line":146,"updated":"2013-01-03 08:55:33.000000000","message":"gettext function should close after iterable\".","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":143,"context_line":"                         \"found the following: %s\" %"},{"line_number":144,"context_line":"                         (_validate_service_defs.__name__, svc_def))"},{"line_number":145,"context_line":"    except TypeError:"},{"line_number":146,"context_line":"        return _(\"%s: provided data are not iterable\" %"},{"line_number":147,"context_line":"                 _validate_service_defs.__name__)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"attributes.validators[\u0027type:service_definitions\u0027] \u003d _validate_service_defs"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1L8%3D","line":146,"in_reply_to":"AAAAM3%2F%2F1M4%3D","updated":"2013-01-03 09:03:31.000000000","message":"Done","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":163,"context_line":"    @classmethod"},{"line_number":164,"context_line":"    def get_description(cls):"},{"line_number":165,"context_line":"        return (\"API for retrieving and managing service types for \""},{"line_number":166,"context_line":"                \"Quantum advanced services\")"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @classmethod"},{"line_number":169,"context_line":"    def get_namespace(cls):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1M0%3D","line":166,"updated":"2013-01-03 08:55:33.000000000","message":"needs gettext wrapping?","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":163,"context_line":"    @classmethod"},{"line_number":164,"context_line":"    def get_description(cls):"},{"line_number":165,"context_line":"        return (\"API for retrieving and managing service types for \""},{"line_number":166,"context_line":"                \"Quantum advanced services\")"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @classmethod"},{"line_number":169,"context_line":"    def get_namespace(cls):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1L4%3D","line":166,"in_reply_to":"AAAAM3%2F%2F1M0%3D","updated":"2013-01-03 09:03:31.000000000","message":"I have no idea, but I will add it as you say?\nDo you think we should wrap also string literals?","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    @classmethod"},{"line_number":173,"context_line":"    def get_updated(cls):"},{"line_number":174,"context_line":"        return \"2012-11-20T10:00:00-00:00\""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    @classmethod"},{"line_number":177,"context_line":"    def get_resources(cls):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1OY%3D","line":174,"updated":"2013-01-03 08:32:15.000000000","message":"2013? Am I pathetic?","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    @classmethod"},{"line_number":173,"context_line":"    def get_updated(cls):"},{"line_number":174,"context_line":"        return \"2012-11-20T10:00:00-00:00\""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    @classmethod"},{"line_number":177,"context_line":"    def get_resources(cls):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1L0%3D","line":174,"in_reply_to":"AAAAM3%2F%2F1OY%3D","updated":"2013-01-03 09:03:31.000000000","message":"Yeah I actually pushed my first patch around that date.\nI did not update it at any push, because I\u0027m a sloppy lazy guy...","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":52,"context_line":"                    \u0027is_visible\u0027: True},"},{"line_number":53,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":54,"context_line":"                      \u0027required_by_policy\u0027: True,"},{"line_number":55,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":56,"context_line":"        \u0027ref_count\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":57,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":58,"context_line":"        \u0027service_definitions\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzRY%3D","line":55,"updated":"2013-01-04 19:40:35.000000000","message":"this seems a bit odd, as service types are not really \"owned\" by anyone, and only admins are allowed to operate on them, right?","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":52,"context_line":"                    \u0027is_visible\u0027: True},"},{"line_number":53,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":54,"context_line":"                      \u0027required_by_policy\u0027: True,"},{"line_number":55,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":56,"context_line":"        \u0027ref_count\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":57,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":58,"context_line":"        \u0027service_definitions\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyXA%3D","line":55,"in_reply_to":"AAAAM3%2F%2FzRY%3D","updated":"2013-01-04 23:48:08.000000000","message":"It\u0027s odd but the API won\u0027t let anything without a tenant_id in...","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":54,"context_line":"                      \u0027required_by_policy\u0027: True,"},{"line_number":55,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":56,"context_line":"        \u0027ref_count\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":57,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":58,"context_line":"        \u0027service_definitions\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":59,"context_line":"                                \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":60,"context_line":"                                \u0027validate\u0027: {\u0027type:service_definitions\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzH4%3D","line":57,"updated":"2013-01-04 19:40:35.000000000","message":"ref_count strikes me as a \u0027developer\u0027 type word.  If this is in the API, I would probably describe it in more \u0027operator\u0027  language, such as \u0027num_active_instances\u0027.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":54,"context_line":"                      \u0027required_by_policy\u0027: True,"},{"line_number":55,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":56,"context_line":"        \u0027ref_count\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":57,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":58,"context_line":"        \u0027service_definitions\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":59,"context_line":"                                \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":60,"context_line":"                                \u0027validate\u0027: {\u0027type:service_definitions\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyW8%3D","line":57,"in_reply_to":"AAAAM3%2F%2FzH4%3D","updated":"2013-01-04 23:48:08.000000000","message":"good idea.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":70,"context_line":"        res \u003d svctype_mgr.get_service_types(context.get_admin_context(),"},{"line_number":71,"context_line":"                                            filters\u003d{\u0027default\u0027: [True]})"},{"line_number":72,"context_line":"        data \u003d res[0][\u0027id\u0027]"},{"line_number":73,"context_line":"    return data"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"def _validate_servicetype_ref(data, valid_values\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzQo%3D","line":73,"updated":"2013-01-04 19:40:35.000000000","message":"i think params and variables could be named with something more descriptive than \u0027data\u0027.  \n\nFor some reason, I found this method very confusing, as its not really converting at all... its just fetching the default id if no id was passed in.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":70,"context_line":"        res \u003d svctype_mgr.get_service_types(context.get_admin_context(),"},{"line_number":71,"context_line":"                                            filters\u003d{\u0027default\u0027: [True]})"},{"line_number":72,"context_line":"        data \u003d res[0][\u0027id\u0027]"},{"line_number":73,"context_line":"    return data"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"def _validate_servicetype_ref(data, valid_values\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyW4%3D","line":73,"in_reply_to":"AAAAM3%2F%2FzQo%3D","updated":"2013-01-04 23:48:08.000000000","message":"I wanted to use the validator initially, but that method does not allow for transforming the value.\n\nWill rename the parameter and add appropriate comments.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":81,"context_line":"        svctype_mgr.get_service_type(context.get_admin_context(),"},{"line_number":82,"context_line":"                                     svc_type_id)"},{"line_number":83,"context_line":"    except servicetype_db.ServiceTypeNotFound:"},{"line_number":84,"context_line":"        return (_(\"The service type identifier \u0027%s\u0027 does not exist\") %"},{"line_number":85,"context_line":"                svc_type_id)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzQc%3D","line":84,"updated":"2013-01-04 19:40:35.000000000","message":"can probably drop \u0027identifier\u0027... we would probably just saying service type \u0027foo\u0027 does not exist.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":81,"context_line":"        svctype_mgr.get_service_type(context.get_admin_context(),"},{"line_number":82,"context_line":"                                     svc_type_id)"},{"line_number":83,"context_line":"    except servicetype_db.ServiceTypeNotFound:"},{"line_number":84,"context_line":"        return (_(\"The service type identifier \u0027%s\u0027 does not exist\") %"},{"line_number":85,"context_line":"                svc_type_id)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyW0%3D","line":84,"in_reply_to":"AAAAM3%2F%2FzQc%3D","updated":"2013-01-04 23:48:08.000000000","message":"Done","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":105,"context_line":"                # Validate \u0027service\u0027 attribute"},{"line_number":106,"context_line":"                if not svc_name in constants.ALLOWED_SERVICES:"},{"line_number":107,"context_line":"                    return (_(\"%(f_name)s: Service name \u0027%(svc_name)s\u0027 \""},{"line_number":108,"context_line":"                              \"unspecified or invalid\") % err_msg_dict)"},{"line_number":109,"context_line":"                del svc_def_copy[SERVICE_ATTR]"},{"line_number":110,"context_line":"                # Validate \u0027plugin\u0027 attribute"},{"line_number":111,"context_line":"                if not plugin_name:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzQY%3D","line":108,"updated":"2013-01-04 19:40:35.000000000","message":"isn\u0027t this message going to be shown to an API user?  If so, we probably shouldn\u0027t include the function name.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":105,"context_line":"                # Validate \u0027service\u0027 attribute"},{"line_number":106,"context_line":"                if not svc_name in constants.ALLOWED_SERVICES:"},{"line_number":107,"context_line":"                    return (_(\"%(f_name)s: Service name \u0027%(svc_name)s\u0027 \""},{"line_number":108,"context_line":"                              \"unspecified or invalid\") % err_msg_dict)"},{"line_number":109,"context_line":"                del svc_def_copy[SERVICE_ATTR]"},{"line_number":110,"context_line":"                # Validate \u0027plugin\u0027 attribute"},{"line_number":111,"context_line":"                if not plugin_name:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyWs%3D","line":108,"in_reply_to":"AAAAM3%2F%2FzQY%3D","updated":"2013-01-04 23:48:08.000000000","message":"ops","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":106,"context_line":"                if not svc_name in constants.ALLOWED_SERVICES:"},{"line_number":107,"context_line":"                    return (_(\"%(f_name)s: Service name \u0027%(svc_name)s\u0027 \""},{"line_number":108,"context_line":"                              \"unspecified or invalid\") % err_msg_dict)"},{"line_number":109,"context_line":"                del svc_def_copy[SERVICE_ATTR]"},{"line_number":110,"context_line":"                # Validate \u0027plugin\u0027 attribute"},{"line_number":111,"context_line":"                if not plugin_name:"},{"line_number":112,"context_line":"                    return (_(\"%(f_name)s: plugin name not specified in \""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzK0%3D","line":109,"updated":"2013-01-04 19:40:35.000000000","message":"is there are reason we use get() and then del, rather than just pop()?","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":106,"context_line":"                if not svc_name in constants.ALLOWED_SERVICES:"},{"line_number":107,"context_line":"                    return (_(\"%(f_name)s: Service name \u0027%(svc_name)s\u0027 \""},{"line_number":108,"context_line":"                              \"unspecified or invalid\") % err_msg_dict)"},{"line_number":109,"context_line":"                del svc_def_copy[SERVICE_ATTR]"},{"line_number":110,"context_line":"                # Validate \u0027plugin\u0027 attribute"},{"line_number":111,"context_line":"                if not plugin_name:"},{"line_number":112,"context_line":"                    return (_(\"%(f_name)s: plugin name not specified in \""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyWo%3D","line":109,"in_reply_to":"AAAAM3%2F%2FzK0%3D","updated":"2013-01-04 23:48:08.000000000","message":"Done","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"unresolved":false,"context_lines":[{"line_number":137,"context_line":"                            err_msg_dict)"},{"line_number":138,"context_line":"            except TypeError:"},{"line_number":139,"context_line":"                LOG.exception(_(\"Exception while parsing service \""},{"line_number":140,"context_line":"                                \"definition:%s\") % svc_def)"},{"line_number":141,"context_line":"                return (_(\"%(f_name)s: Was expecting a dict for service \""},{"line_number":142,"context_line":"                          \"definition,found the following: %(svc_def)s\")"},{"line_number":143,"context_line":"                        % err_msg_dict)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyGU%3D","line":140,"updated":"2013-01-05 02:24:43.000000000","message":"This should be LOG.exception(_(\"Exception while parsing service definition:%s\"), svc_def)","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":137,"context_line":"                            err_msg_dict)"},{"line_number":138,"context_line":"            except TypeError:"},{"line_number":139,"context_line":"                LOG.exception(_(\"Exception while parsing service \""},{"line_number":140,"context_line":"                                \"definition:%s\") % svc_def)"},{"line_number":141,"context_line":"                return (_(\"%(f_name)s: Was expecting a dict for service \""},{"line_number":142,"context_line":"                          \"definition,found the following: %(svc_def)s\")"},{"line_number":143,"context_line":"                        % err_msg_dict)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fwnw%3D","line":140,"in_reply_to":"AAAAM3%2F%2FyGU%3D","updated":"2013-01-07 12:20:29.000000000","message":"Done","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"}],"quantum/plugins/common/constants.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":20,"context_line":"DUMMY \u003d \"DUMMY\""},{"line_number":21,"context_line":"LOADBALANCER \u003d \"LOADBALANCER\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"ALLOWED_SERVICES \u003d [CORE, DUMMY, LOADBALANCER]"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"COMMON_PREFIXES \u003d {"},{"line_number":26,"context_line":"    CORE: \"\","}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzPM%3D","line":23,"updated":"2013-01-04 19:40:35.000000000","message":"I wonder if we should not have this list hardcoded in a file.  Wouldn\u0027t this prevent someone from creating a new service, and installing it as a separate python package along with stock quantum code?","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":20,"context_line":"DUMMY \u003d \"DUMMY\""},{"line_number":21,"context_line":"LOADBALANCER \u003d \"LOADBALANCER\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"ALLOWED_SERVICES \u003d [CORE, DUMMY, LOADBALANCER]"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"COMMON_PREFIXES \u003d {"},{"line_number":26,"context_line":"    CORE: \"\","}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyWg%3D","line":23,"in_reply_to":"AAAAM3%2F%2FzPM%3D","updated":"2013-01-04 23:48:08.000000000","message":"We shouldn\u0027t.\nI was tempted of doing it in this patch, but then though I should file a separate one as this will involve also the API prefixes (COMMON_PREFIXES), and possibly the service_plugins configuration variable.\n\nTo be more specific I also wanted to introduce aliases for plugins, as for instance service_definition now have to use the whole plugin path which is rather cumbersome.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"}],"quantum/plugins/services/dummy/dummy_plugin.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from quantum.plugins.common import constants"},{"line_number":19,"context_line":"from quantum.plugins.services.service_base import ServicePluginBase"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"DUMMY_PLUGIN_NAME \u003d \"dummy_plugin\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F4rM%3D","line":20,"updated":"2012-12-26 10:25:16.000000000","message":"2 lines?","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from quantum.plugins.common import constants"},{"line_number":19,"context_line":"from quantum.plugins.services.service_base import ServicePluginBase"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"DUMMY_PLUGIN_NAME \u003d \"dummy_plugin\""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2F4qA%3D","line":20,"in_reply_to":"AAAAM3%2F%2F4rM%3D","updated":"2012-12-26 10:35:30.000000000","message":"Done","commit_id":"a4b9c32622a640a0e5ce9b016cdf0a62bff0bf21"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack LLC."},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzCI%3D","side":"PARENT","line":3,"updated":"2013-01-04 19:40:35.000000000","message":"Can we add a line to the commit message about why we are removing these?","commit_id":"b5138f28a510e797bdda67c9b2d3a6b63ba7b572"}],"quantum/plugins/services/service_base.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"20422e324f9b309362f92012edcd1f05501e9d57","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @abc.abstractmethod"},{"line_number":33,"context_line":"    def get_plugin_name(self):"},{"line_number":34,"context_line":"        \"\"\" return a symbolic same for the plugin."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        Each service plugin should have a symbolic name. This name"},{"line_number":37,"context_line":"        will be used, for instance, by service definitions in service types"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMX%2F%2F5EQ%3D","line":34,"updated":"2012-12-10 15:23:12.000000000","message":"typo: same -\u003e name","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @abc.abstractmethod"},{"line_number":33,"context_line":"    def get_plugin_name(self):"},{"line_number":34,"context_line":"        \"\"\" return a symbolic same for the plugin."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        Each service plugin should have a symbolic name. This name"},{"line_number":37,"context_line":"        will be used, for instance, by service definitions in service types"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6HE%3D","line":34,"in_reply_to":"AAAAMX%2F%2F5EQ%3D","updated":"2012-12-21 16:36:38.000000000","message":"No I want to return a symbolic same! :)","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"}],"quantum/tests/etc/quantum.conf.test":[{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":29,"context_line":"# by the default service type."},{"line_number":30,"context_line":"# Each service definition should be in the following format:"},{"line_number":31,"context_line":"# \u003cservice\u003e:\u003cplugin\u003e[:driver]"},{"line_number":32,"context_line":"service_definition\u003ddummy:quantum.plugins.services.dummy.dummy_plugin.QuantumDummyPlugin"},{"line_number":33,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAM3%2F%2F2tM%3D","line":32,"updated":"2013-01-01 06:03:34.000000000","message":"Isn\u0027t this module getting deleted?","commit_id":"d3c7776b38449c469cacbf65a507274d25d09368"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":29,"context_line":"# by the default service type."},{"line_number":30,"context_line":"# Each service definition should be in the following format:"},{"line_number":31,"context_line":"# \u003cservice\u003e:\u003cplugin\u003e[:driver]"},{"line_number":32,"context_line":"service_definition\u003ddummy:quantum.plugins.services.dummy.dummy_plugin.QuantumDummyPlugin"},{"line_number":33,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAM3%2F%2F2mY%3D","line":32,"in_reply_to":"AAAAM3%2F%2F2tM%3D","updated":"2013-01-02 11:37:46.000000000","message":"Done","commit_id":"d3c7776b38449c469cacbf65a507274d25d09368"}],"quantum/tests/unit/dummy_plugin.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack LLC."},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzBM%3D","line":2,"updated":"2013-01-04 19:40:35.000000000","message":"ah, pls ignore my previous comment about the dummy plugin removal being mentioned in the commit message.  gerrit won\u0027t let me remove it.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack LLC."},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyWI%3D","line":2,"in_reply_to":"AAAAM3%2F%2FzBM%3D","updated":"2013-01-04 23:48:08.000000000","message":"Gerrit told me there was a comment, but actually did not show it!","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":86,"context_line":"                                             controller)]"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class QuantumDummyPlugin(ServicePluginBase):"},{"line_number":90,"context_line":"    supported_extension_aliases \u003d [\u0027dummy\u0027, servicetype.EXT_ALIAS]"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzBE%3D","line":89,"updated":"2013-01-04 19:40:35.000000000","message":"maybe name this as DummyServicePlugin ?","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":86,"context_line":"                                             controller)]"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class QuantumDummyPlugin(ServicePluginBase):"},{"line_number":90,"context_line":"    supported_extension_aliases \u003d [\u0027dummy\u0027, servicetype.EXT_ALIAS]"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyWE%3D","line":89,"in_reply_to":"AAAAM3%2F%2FzBE%3D","updated":"2013-01-04 23:48:08.000000000","message":"Done","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class QuantumDummyPlugin(ServicePluginBase):"},{"line_number":90,"context_line":"    supported_extension_aliases \u003d [\u0027dummy\u0027, servicetype.EXT_ALIAS]"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def __init__(self):"},{"line_number":93,"context_line":"        self.svctype_mgr \u003d servicetype_db.ServiceTypeManager.get_instance()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzA8%3D","line":90,"updated":"2013-01-04 19:40:35.000000000","message":"A doc-string here would be useful.  Basically explaining that this plugin allows management of logical \"dummy\" instances, which in a real service plugin would be something like a load-balancer or vpn instance.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class QuantumDummyPlugin(ServicePluginBase):"},{"line_number":90,"context_line":"    supported_extension_aliases \u003d [\u0027dummy\u0027, servicetype.EXT_ALIAS]"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def __init__(self):"},{"line_number":93,"context_line":"        self.svctype_mgr \u003d servicetype_db.ServiceTypeManager.get_instance()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyWA%3D","line":90,"in_reply_to":"AAAAM3%2F%2FzA8%3D","updated":"2013-01-04 23:48:08.000000000","message":"Done","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"}],"quantum/tests/unit/metaplugin/test_metaplugin.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":67,"context_line":"    cfg.CONF.set_override(\u0027default_l3_flavor\u0027, \u0027fake1\u0027, \u0027META\u0027)"},{"line_number":68,"context_line":"    cfg.CONF.set_override(\u0027base_mac\u0027, \"12:34:56:78:90:ab\")"},{"line_number":69,"context_line":"    #TODO(nati) remove this after subnet quota change is merged"},{"line_number":70,"context_line":"    cfg.CONF.set_override(\u0027max_dns_nameservers\u0027, 10)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"class MetaQuantumPluginV2Test(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzAw%3D","line":70,"updated":"2013-01-04 19:40:35.000000000","message":"seems like a change that could be committed as a separate patch, as it is not related to service-type (even if it is a prereq for this patch to merge)","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":67,"context_line":"    cfg.CONF.set_override(\u0027default_l3_flavor\u0027, \u0027fake1\u0027, \u0027META\u0027)"},{"line_number":68,"context_line":"    cfg.CONF.set_override(\u0027base_mac\u0027, \"12:34:56:78:90:ab\")"},{"line_number":69,"context_line":"    #TODO(nati) remove this after subnet quota change is merged"},{"line_number":70,"context_line":"    cfg.CONF.set_override(\u0027max_dns_nameservers\u0027, 10)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"class MetaQuantumPluginV2Test(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyV8%3D","line":70,"in_reply_to":"AAAAM3%2F%2FzAw%3D","updated":"2013-01-04 23:48:08.000000000","message":"Yes. I think this can be regarded as a bug.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"}],"quantum/tests/unit/test_config.py":[{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"import os"},{"line_number":17,"context_line":"import unittest"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from quantum.openstack.common import cfg"},{"line_number":20,"context_line":"from quantum.common import config"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMX%2F%2F4Yk%3D","line":19,"updated":"2012-12-11 01:54:36.000000000","message":"These two lines should switch places","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"import os"},{"line_number":17,"context_line":"import unittest"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from quantum.openstack.common import cfg"},{"line_number":20,"context_line":"from quantum.common import config"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6HA%3D","line":19,"in_reply_to":"AAAAMX%2F%2F4Yk%3D","updated":"2012-12-21 16:36:38.000000000","message":"ok","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.assertEqual(\u0027\u0027, cfg.CONF.api_extensions_path)"},{"line_number":30,"context_line":"        self.assertEqual(\u0027policy.json\u0027, cfg.CONF.policy_file)"},{"line_number":31,"context_line":"        self.assertEqual(\u0027keystone\u0027, cfg.CONF.auth_strategy)"},{"line_number":32,"context_line":"        self.assertEqual(\u0027quantum.plugins.sample.SamplePlugin.FakePlugin\u0027,"},{"line_number":33,"context_line":"                         cfg.CONF.core_plugin)"},{"line_number":34,"context_line":"        self.assertEqual(0, len(cfg.CONF.service_plugins))"},{"line_number":35,"context_line":"        self.assertEqual(\u0027fa:16:3e:00:00:00\u0027, cfg.CONF.base_mac)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1OU%3D","line":32,"updated":"2013-01-03 08:32:15.000000000","message":"This is None now. Think you need to rebase.","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.assertEqual(\u0027\u0027, cfg.CONF.api_extensions_path)"},{"line_number":30,"context_line":"        self.assertEqual(\u0027policy.json\u0027, cfg.CONF.policy_file)"},{"line_number":31,"context_line":"        self.assertEqual(\u0027keystone\u0027, cfg.CONF.auth_strategy)"},{"line_number":32,"context_line":"        self.assertEqual(\u0027quantum.plugins.sample.SamplePlugin.FakePlugin\u0027,"},{"line_number":33,"context_line":"                         cfg.CONF.core_plugin)"},{"line_number":34,"context_line":"        self.assertEqual(0, len(cfg.CONF.service_plugins))"},{"line_number":35,"context_line":"        self.assertEqual(\u0027fa:16:3e:00:00:00\u0027, cfg.CONF.base_mac)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2F1Lw%3D","line":32,"in_reply_to":"AAAAM3%2F%2F1OU%3D","updated":"2013-01-03 09:03:31.000000000","message":"yup. I forgot to do that.","commit_id":"cbd720a0278efe9502457fc78620a8a09ee84294"}],"quantum/tests/unit/test_db_plugin.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":100,"context_line":"        cfg.CONF.set_override(\u0027core_plugin\u0027, plugin)"},{"line_number":101,"context_line":"        cfg.CONF.set_override(\u0027base_mac\u0027, \"12:34:56:78:90:ab\")"},{"line_number":102,"context_line":"        cfg.CONF.set_override(\u0027max_dns_nameservers\u0027, 2)"},{"line_number":103,"context_line":"        cfg.CONF.set_override(\u0027max_subnet_host_routes\u0027, 2)"},{"line_number":104,"context_line":"        self.api \u003d APIRouter()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        def _is_native_bulk_supported():"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FzAg%3D","line":103,"updated":"2013-01-04 19:40:35.000000000","message":"same as before, seems unrelated.","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":100,"context_line":"        cfg.CONF.set_override(\u0027core_plugin\u0027, plugin)"},{"line_number":101,"context_line":"        cfg.CONF.set_override(\u0027base_mac\u0027, \"12:34:56:78:90:ab\")"},{"line_number":102,"context_line":"        cfg.CONF.set_override(\u0027max_dns_nameservers\u0027, 2)"},{"line_number":103,"context_line":"        cfg.CONF.set_override(\u0027max_subnet_host_routes\u0027, 2)"},{"line_number":104,"context_line":"        self.api \u003d APIRouter()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        def _is_native_bulk_supported():"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FyV0%3D","line":103,"in_reply_to":"AAAAM3%2F%2FzAg%3D","updated":"2013-01-04 23:48:08.000000000","message":"Done","commit_id":"94591186a1baa41c2289b2c568308d835ce5b359"}],"quantum/tests/unit/test_servicetype.py":[{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":"import webob.exc as webexc"},{"line_number":26,"context_line":"import webtest"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from quantum import context"},{"line_number":29,"context_line":"from quantum.api import extensions"},{"line_number":30,"context_line":"from quantum.db import servicetype_db"},{"line_number":31,"context_line":"from quantum.db import api as db_api"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMX%2F%2F4Yc%3D","line":28,"updated":"2012-12-11 01:54:36.000000000","message":"This line should be below \"from quantum.api import extensions\"","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":"import webob.exc as webexc"},{"line_number":26,"context_line":"import webtest"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from quantum import context"},{"line_number":29,"context_line":"from quantum.api import extensions"},{"line_number":30,"context_line":"from quantum.db import servicetype_db"},{"line_number":31,"context_line":"from quantum.db import api as db_api"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6G8%3D","line":28,"in_reply_to":"AAAAMX%2F%2F4Yc%3D","updated":"2012-12-21 16:36:38.000000000","message":"sure","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from quantum import context"},{"line_number":29,"context_line":"from quantum.api import extensions"},{"line_number":30,"context_line":"from quantum.db import servicetype_db"},{"line_number":31,"context_line":"from quantum.db import api as db_api"},{"line_number":32,"context_line":"from quantum.db import models_v2"},{"line_number":33,"context_line":"from quantum.extensions import servicetype"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAMX%2F%2F4Yg%3D","line":30,"updated":"2012-12-11 01:54:36.000000000","message":"This line should be below \"from quantum.db import models_v2\"","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from quantum import context"},{"line_number":29,"context_line":"from quantum.api import extensions"},{"line_number":30,"context_line":"from quantum.db import servicetype_db"},{"line_number":31,"context_line":"from quantum.db import api as db_api"},{"line_number":32,"context_line":"from quantum.db import models_v2"},{"line_number":33,"context_line":"from quantum.extensions import servicetype"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2F6G4%3D","line":30,"in_reply_to":"AAAAMX%2F%2F4Yg%3D","updated":"2012-12-21 16:36:38.000000000","message":"definitely","commit_id":"64c71565747e4af492082c520129ab22e09cb9c3"}]}
