)]}'
{"devstack/plugin.sh":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"e94af74436bdea3cbd60719691ba3c53a3e4c87d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"3a29b11f_f069ab26","side":"PARENT","line":41,"updated":"2015-10-25 06:04:19.000000000","message":"nit, but doesn\u0027t need a respin","commit_id":"0acc28bf707b68d2e742c2103b1fe1e88cfd3e3c"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"c15630c78593628f836ab1eb68999aa0283fdbe6","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    if is_service_enabled q-sriov-agt; then"},{"line_number":42,"context_line":"        stop_l2_agent_sriov"},{"line_number":43,"context_line":"    fi"},{"line_number":44,"context_line":"fi"}],"source_content_type":"text/x-sh","patch_set":11,"id":"1a26ad4f_c23e8927","line":44,"updated":"2015-11-03 04:11:23.000000000","message":"curious, what is the difference?","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"99714723cf992e63321e22d377c7f2646ce5be56","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    if is_service_enabled q-sriov-agt; then"},{"line_number":42,"context_line":"        stop_l2_agent_sriov"},{"line_number":43,"context_line":"    fi"},{"line_number":44,"context_line":"fi"}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa80f949_1181cd4a","line":44,"in_reply_to":"1a26ad4f_c23e8927","updated":"2015-11-03 21:48:15.000000000","message":"Did a quick check with diff:\n\u003c fi\n\\ No newline at end of file\n---\n\u003e fi\nOld code had no newline at end.  That is bad Unix form for a shell script, dating from C days and POSIX.  Good example of why is when \u0027cat\u0027 is used; with no newline at end, file A\u0027s last line gets mushed into file B\u0027s first line.  Editor saved with conventional newline.","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"aeb6df990cabc9fa1ffd447dc684e0634deb1730","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    if is_service_enabled q-sriov-agt; then"},{"line_number":42,"context_line":"        stop_l2_agent_sriov"},{"line_number":43,"context_line":"    fi"},{"line_number":44,"context_line":"fi"}],"source_content_type":"text/x-sh","patch_set":11,"id":"fa80f949_b1473abb","line":44,"in_reply_to":"fa80f949_1181cd4a","updated":"2015-11-06 04:29:55.000000000","message":"You can run dos2unix on the .sh file and see if it helps?","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"}],"etc/policy.json":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"2f6917afbbd405f82b7b28365bacf3b400615cb0","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    \"get_service_profiles\": \"rule:admin_only\","},{"line_number":182,"context_line":"    \"get_service_profile\": \"rule:admin_only\","},{"line_number":183,"context_line":"    \"create_flavor_service_profile\": \"rule:admin_only\","},{"line_number":184,"context_line":"    \"delete_flavor_service_profile\": \"rule:admin_only\","},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    \"get_policy\": \"rule:regular_user\","},{"line_number":187,"context_line":"    \"create_policy\": \"rule:admin_only\","}],"source_content_type":"application/json","patch_set":10,"id":"3a29b11f_cdd17cfd","line":184,"updated":"2015-10-19 06:38:15.000000000","message":"nit: Better to add at the end.","commit_id":"6a6f9a3fae523a64546753e439222eea6c7dedce"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"45909be247bb1c275883fcd059bdd00c6a8d931f","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    \"get_service_profiles\": \"rule:admin_only\","},{"line_number":182,"context_line":"    \"get_service_profile\": \"rule:admin_only\","},{"line_number":183,"context_line":"    \"create_flavor_service_profile\": \"rule:admin_only\","},{"line_number":184,"context_line":"    \"delete_flavor_service_profile\": \"rule:admin_only\","},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    \"get_policy\": \"rule:regular_user\","},{"line_number":187,"context_line":"    \"create_policy\": \"rule:admin_only\","}],"source_content_type":"application/json","patch_set":10,"id":"3a29b11f_c38fa7ca","line":184,"in_reply_to":"3a29b11f_cdd17cfd","updated":"2015-10-20 23:18:54.000000000","message":"Done","commit_id":"6a6f9a3fae523a64546753e439222eea6c7dedce"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"5b7b25a56a3c630e4cb06bf192758779d729b618","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    \"delete_rbac_policy\": \"rule:admin_or_owner\","},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    \"create_flavor_service_profile\": \"rule:admin_only\","},{"line_number":203,"context_line":"    \"delete_flavor_service_profile\": \"rule:admin_only\""},{"line_number":204,"context_line":"}"}],"source_content_type":"application/json","patch_set":11,"id":"da85f559_cc98676d","line":203,"updated":"2015-11-13 22:57:13.000000000","message":"what about update?","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"0ba43e8a3f05a29e785a2c0fa42ca31e9287a230","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    \"delete_rbac_policy\": \"rule:admin_or_owner\","},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    \"create_flavor_service_profile\": \"rule:admin_only\","},{"line_number":203,"context_line":"    \"delete_flavor_service_profile\": \"rule:admin_only\""},{"line_number":204,"context_line":"}"}],"source_content_type":"application/json","patch_set":11,"id":"ba8a016a_72d122cd","line":203,"in_reply_to":"da85f559_6ce05b97","updated":"2015-11-17 03:46:05.000000000","message":"Gotcha: I got confused with update_service_profile. I wonder if keeping all flavor related policies make more sense though :P","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"4434d844978aea1bd90bbd73e4bac4db86f5afe8","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    \"delete_rbac_policy\": \"rule:admin_or_owner\","},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    \"create_flavor_service_profile\": \"rule:admin_only\","},{"line_number":203,"context_line":"    \"delete_flavor_service_profile\": \"rule:admin_only\""},{"line_number":204,"context_line":"}"}],"source_content_type":"application/json","patch_set":11,"id":"da85f559_6ce05b97","line":203,"in_reply_to":"da85f559_cc98676d","updated":"2015-11-14 02:01:40.000000000","message":"These are the flavor to service profile bindings, i.e. the \u0027associate\u0027 and \u0027disassociate\u0027, so there is no update_flavor_service_profile defined at the database layer or policy to protect.  And \u0027allow_put\u0027 is set to false, so user will get a 400 BAD REQUEST \"Cannot update read-only attribute id\u0027 if they do try a PUT to this subresource.\n\nBut there was no explicit setting for the \u0027get_flavor_service_profile\u0027.  Setting that to \u0027regular_user\u0027 since users can read the flavor, and this binding is a flavor subprofile.","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"}],"neutron/api/v2/attributes.py":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"5e2e66145a89e687ce5afdf38b56218aa40ca0fa","unresolved":false,"context_lines":[{"line_number":40,"context_line":"NAME_MAX_LEN \u003d 255"},{"line_number":41,"context_line":"TENANT_ID_MAX_LEN \u003d 255"},{"line_number":42,"context_line":"DESCRIPTION_MAX_LEN \u003d 255"},{"line_number":43,"context_line":"LONG_DESCRIPTION_MAX_LEN \u003d 1024"},{"line_number":44,"context_line":"DEVICE_ID_MAX_LEN \u003d 255"},{"line_number":45,"context_line":"DEVICE_OWNER_MAX_LEN \u003d 255"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba8a016a_451fd35a","line":43,"updated":"2015-11-19 17:54:48.000000000","message":"If it\u0027s going past 256, then it\u0027s beyond the default string length of the db, so why limit it to 1024? Not sure this requires a respin, though.","commit_id":"8e450954043f62b76ebb4e9a69ab1efe1a2ef238"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"0441bfba031874b6c9b091626f604c48b38d107c","unresolved":false,"context_lines":[{"line_number":40,"context_line":"NAME_MAX_LEN \u003d 255"},{"line_number":41,"context_line":"TENANT_ID_MAX_LEN \u003d 255"},{"line_number":42,"context_line":"DESCRIPTION_MAX_LEN \u003d 255"},{"line_number":43,"context_line":"LONG_DESCRIPTION_MAX_LEN \u003d 1024"},{"line_number":44,"context_line":"DEVICE_ID_MAX_LEN \u003d 255"},{"line_number":45,"context_line":"DEVICE_OWNER_MAX_LEN \u003d 255"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba8a016a_b44eec38","line":43,"in_reply_to":"ba8a016a_451fd35a","updated":"2015-11-19 20:08:59.000000000","message":"The current definition in the flavors_db.py ORM is 1024:\ndescription \u003d sa.Column(sa.String(1024))\n\nAnd the alembic migration script had set up a 1024 column:\nsa.Column(\u0027description\u0027, sa.String(1024)),\n\nMaking REST boundary consistent.  But not sure why 1024 decided as the limit originally.","commit_id":"8e450954043f62b76ebb4e9a69ab1efe1a2ef238"}],"neutron/db/flavors_db.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"1d82cbe5b8e17ff1e8149978a65e61bf3b76432f","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        # Check list of provider dictionaries for this value"},{"line_number":189,"context_line":"        provider \u003d next((item for item in providers if item[\u0027driver\u0027]"},{"line_number":190,"context_line":"                         \u003d\u003d driver), False)"},{"line_number":191,"context_line":"        if not provider:"},{"line_number":192,"context_line":"            raise ServiceProfileDriverNotFound(driver\u003ddriver)"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_192ba783","line":190,"updated":"2015-09-11 16:26:02.000000000","message":"I think we can simplify this a bit.  Consider replacing L189-191:\n\nif driver not in (item[\u0027driver\u0027] for item in providers):","commit_id":"fabd430a0ac133f50bdde665f0d51c68c16b88ff"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"a3fb14d32b9241b5628a6cbd7f95423e5cd48af3","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        # Check list of provider dictionaries for this value"},{"line_number":189,"context_line":"        provider \u003d next((item for item in providers if item[\u0027driver\u0027]"},{"line_number":190,"context_line":"                         \u003d\u003d driver), False)"},{"line_number":191,"context_line":"        if not provider:"},{"line_number":192,"context_line":"            raise ServiceProfileDriverNotFound(driver\u003ddriver)"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_14ee0e22","line":190,"in_reply_to":"da20952f_192ba783","updated":"2015-09-11 18:20:26.000000000","message":"Done","commit_id":"fabd430a0ac133f50bdde665f0d51c68c16b88ff"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"84169184fefd29ae26e2ba844eb01f269af2d300","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        \"\"\"Given flavor, chose service profile and find provider for driver.\"\"\""},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        # This should be a scheduling framework, not"},{"line_number":329,"context_line":"        # just a select first entry."},{"line_number":330,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":331,"context_line":"            bind_qry \u003d context.session.query(FlavorServiceProfileBinding)"},{"line_number":332,"context_line":"            binding \u003d bind_qry.filter_by(flavor_id\u003dflavor_id).first()"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_ff94c544","line":329,"updated":"2015-09-10 16:07:46.000000000","message":"We chatted about that in the Octavia/LBaaS meeting and we haven\u0027t run into a concrete use case where having multiple different service providers behind one flavor (e.g. Flavor \"Gold\" -\u003e (weight:.4, F5), (weight:.6: A10) is needed. So i would put that into Nice-to-have until a real use case emerges...","commit_id":"fabd430a0ac133f50bdde665f0d51c68c16b88ff"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"1d82cbe5b8e17ff1e8149978a65e61bf3b76432f","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        service_type_manager \u003d sdb.ServiceTypeManager.get_instance()"},{"line_number":347,"context_line":"        providers \u003d service_type_manager.get_service_providers(None)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        provider \u003d next((item for item in providers if item[\u0027driver\u0027]"},{"line_number":350,"context_line":"                         \u003d\u003d sp_db.driver), False)"},{"line_number":351,"context_line":"        if not provider:"},{"line_number":352,"context_line":"            raise ServiceProfileDriverNotFound(driver\u003dsp_db.driver)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_79c42391","line":349,"updated":"2015-09-11 16:26:02.000000000","message":"This feels kind of awkward.   Have to think about alternative approaches to suggest.","commit_id":"fabd430a0ac133f50bdde665f0d51c68c16b88ff"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"a3fb14d32b9241b5628a6cbd7f95423e5cd48af3","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        service_type_manager \u003d sdb.ServiceTypeManager.get_instance()"},{"line_number":347,"context_line":"        providers \u003d service_type_manager.get_service_providers(None)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        provider \u003d next((item for item in providers if item[\u0027driver\u0027]"},{"line_number":350,"context_line":"                         \u003d\u003d sp_db.driver), False)"},{"line_number":351,"context_line":"        if not provider:"},{"line_number":352,"context_line":"            raise ServiceProfileDriverNotFound(driver\u003dsp_db.driver)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_7acad150","line":349,"in_reply_to":"da20952f_79c42391","updated":"2015-09-11 18:20:26.000000000","message":"Agreed and open to suggestion.  Reworked to simple loop with break to make clearer for now.","commit_id":"fabd430a0ac133f50bdde665f0d51c68c16b88ff"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"bf13433d15b92c0633a34f8d67866ba65a3dd37b","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                       flavor_id\u003dflavor_id).first())"},{"line_number":251,"context_line":"            if not binding:"},{"line_number":252,"context_line":"                raise FlavorServiceProfileBindingNotFound("},{"line_number":253,"context_line":"                    sp_id\u003d\u0027\u0027, fl_id\u003dflavor_id)"},{"line_number":254,"context_line":"            context.session.delete(binding)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def get_flavor_service_profile(self, context,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_1a71b5e0","line":253,"updated":"2015-09-15 08:44:02.000000000","message":"why change this into \u0027\u0027?","commit_id":"48d1ccd222662586e78a27ea99650cc756433629"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"71daf6c3515dd3de29848c20a40d97620954cdc9","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                       flavor_id\u003dflavor_id).first())"},{"line_number":251,"context_line":"            if not binding:"},{"line_number":252,"context_line":"                raise FlavorServiceProfileBindingNotFound("},{"line_number":253,"context_line":"                    sp_id\u003d\u0027\u0027, fl_id\u003dflavor_id)"},{"line_number":254,"context_line":"            context.session.delete(binding)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def get_flavor_service_profile(self, context,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_037a9bf1","line":253,"in_reply_to":"ba15a1d1_1a71b5e0","updated":"2015-09-15 16:21:18.000000000","message":"Done - put service_profile_id back.","commit_id":"48d1ccd222662586e78a27ea99650cc756433629"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"c805602fe554af2a58f461c6cbbdfc004098ebfa","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            self._ensure_flavor_not_in_use(context, flavor_id)"},{"line_number":203,"context_line":"            fl_db \u003d self._get_flavor(context, flavor_id)"},{"line_number":204,"context_line":"            fl_db.update(fl)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        return self._make_flavor_dict(fl_db)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def get_flavor(self, context, flavor_id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_9a0c903c","side":"PARENT","line":205,"updated":"2015-09-16 20:12:54.000000000","message":"looks like this doesn\u0027t belong to this diff.","commit_id":"eb4bf4cc29c2b1f1be8bdb792195048fcdef82f8"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"c805602fe554af2a58f461c6cbbdfc004098ebfa","unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# Flavor Exceptions"},{"line_number":32,"context_line":"class FlavorNotFound(qexception.NotFound):"},{"line_number":33,"context_line":"    message \u003d _(\"Flavor %(flavor_id)s could not be found.\")"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_7797553a","line":31,"updated":"2015-09-16 20:12:54.000000000","message":"Typically exceptions are in the extension file, that\u0027s the convention I see adopted. Consider moving these there...but don\u0027t mind if you don\u0027t.","commit_id":"33a344d603d4850f4600971989d9ca05e2ff0966"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"3589a53a128d9f399a7b5616c2c7039c22ad021d","unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# Flavor Exceptions"},{"line_number":32,"context_line":"class FlavorNotFound(qexception.NotFound):"},{"line_number":33,"context_line":"    message \u003d _(\"Flavor %(flavor_id)s could not be found.\")"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_108fffcc","line":31,"in_reply_to":"ba15a1d1_7797553a","updated":"2015-10-01 18:32:06.000000000","message":"Moved to extension file.","commit_id":"33a344d603d4850f4600971989d9ca05e2ff0966"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"c805602fe554af2a58f461c6cbbdfc004098ebfa","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class FlavorManager(common_db_mixin.CommonDbMixin):"},{"line_number":108,"context_line":"    \"\"\"Class to support flavors and service profiles.\"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    _instance \u003d None"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_f7d92523","line":108,"updated":"2015-09-16 20:12:54.000000000","message":"this is effectively a service plugin, please consider moving it to:\n\nhttps://github.com/openstack/neutron/blob/master/neutron/services\n\nIt can be done as a separate patch too.","commit_id":"33a344d603d4850f4600971989d9ca05e2ff0966"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"3589a53a128d9f399a7b5616c2c7039c22ad021d","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class FlavorManager(common_db_mixin.CommonDbMixin):"},{"line_number":108,"context_line":"    \"\"\"Class to support flavors and service profiles.\"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    _instance \u003d None"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_cf1c1316","line":108,"in_reply_to":"ba15a1d1_f7d92523","updated":"2015-10-01 18:32:06.000000000","message":"Done","commit_id":"33a344d603d4850f4600971989d9ca05e2ff0966"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"c805602fe554af2a58f461c6cbbdfc004098ebfa","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @classmethod"},{"line_number":115,"context_line":"    def get_instance(cls):"},{"line_number":116,"context_line":"        if cls._instance is None:"},{"line_number":117,"context_line":"            cls._instance \u003d cls()"},{"line_number":118,"context_line":"        return cls._instance"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_97ea29ab","line":116,"updated":"2015-09-16 20:12:54.000000000","message":"why was this singleton necessary?","commit_id":"33a344d603d4850f4600971989d9ca05e2ff0966"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"3589a53a128d9f399a7b5616c2c7039c22ad021d","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @classmethod"},{"line_number":115,"context_line":"    def get_instance(cls):"},{"line_number":116,"context_line":"        if cls._instance is None:"},{"line_number":117,"context_line":"            cls._instance \u003d cls()"},{"line_number":118,"context_line":"        return cls._instance"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_efdb174e","line":116,"in_reply_to":"ba15a1d1_97ea29ab","updated":"2015-10-01 18:32:06.000000000","message":"Changed as part of making a service plugin.","commit_id":"33a344d603d4850f4600971989d9ca05e2ff0966"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"c805602fe554af2a58f461c6cbbdfc004098ebfa","unresolved":false,"context_lines":[{"line_number":183,"context_line":"    def _validate_driver(self, context, driver):"},{"line_number":184,"context_line":"        \"\"\"Confirms a non-empty driver is a valid provider.\"\"\""},{"line_number":185,"context_line":"        service_type_manager \u003d sdb.ServiceTypeManager.get_instance()"},{"line_number":186,"context_line":"        providers \u003d service_type_manager.get_service_providers(None)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        if driver not in (item.get(\u0027driver\u0027, None) for item in providers):"},{"line_number":189,"context_line":"            raise ServiceProfileDriverNotFound(driver\u003ddriver)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_97478976","line":186,"updated":"2015-09-16 20:12:54.000000000","message":"this can simply be:\n\nget_service_providers()\n\nbut you could be more clever than that and user filters? There are examples on how to use flters in:\n\nneutron/tests/unit/services/test_provider_configuration.py","commit_id":"33a344d603d4850f4600971989d9ca05e2ff0966"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"3589a53a128d9f399a7b5616c2c7039c22ad021d","unresolved":false,"context_lines":[{"line_number":183,"context_line":"    def _validate_driver(self, context, driver):"},{"line_number":184,"context_line":"        \"\"\"Confirms a non-empty driver is a valid provider.\"\"\""},{"line_number":185,"context_line":"        service_type_manager \u003d sdb.ServiceTypeManager.get_instance()"},{"line_number":186,"context_line":"        providers \u003d service_type_manager.get_service_providers(None)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        if driver not in (item.get(\u0027driver\u0027, None) for item in providers):"},{"line_number":189,"context_line":"            raise ServiceProfileDriverNotFound(driver\u003ddriver)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_06190979","line":186,"in_reply_to":"ba15a1d1_97478976","updated":"2015-10-01 18:32:06.000000000","message":"Changed to filters.  Thanks for tip.","commit_id":"33a344d603d4850f4600971989d9ca05e2ff0966"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"c805602fe554af2a58f461c6cbbdfc004098ebfa","unresolved":false,"context_lines":[{"line_number":320,"context_line":"                                    page_reverse\u003dpage_reverse)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    def select_provider_name_from_flavor(self, context, flavor_id):"},{"line_number":323,"context_line":"        \"\"\"Given flavor, chose service profile and find provider for driver.\"\"\""},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        # This should be a scheduling framework, not"},{"line_number":326,"context_line":"        # just a select first entry."}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_9a7fb065","line":323,"updated":"2015-09-16 20:12:54.000000000","message":"choose?","commit_id":"33a344d603d4850f4600971989d9ca05e2ff0966"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"3589a53a128d9f399a7b5616c2c7039c22ad021d","unresolved":false,"context_lines":[{"line_number":320,"context_line":"                                    page_reverse\u003dpage_reverse)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    def select_provider_name_from_flavor(self, context, flavor_id):"},{"line_number":323,"context_line":"        \"\"\"Given flavor, chose service profile and find provider for driver.\"\"\""},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        # This should be a scheduling framework, not"},{"line_number":326,"context_line":"        # just a select first entry."}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_b065f31e","line":323,"in_reply_to":"ba15a1d1_9a7fb065","updated":"2015-10-01 18:32:06.000000000","message":"Done","commit_id":"33a344d603d4850f4600971989d9ca05e2ff0966"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"77f507187a0bb1bf1f08ddc9e04165af3ba6fd30","unresolved":false,"context_lines":[{"line_number":322,"context_line":"    def select_provider_name_from_flavor(self, context, flavor_id):"},{"line_number":323,"context_line":"        \"\"\"Given flavor, chose service profile and find provider for driver.\"\"\""},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        # This should be a scheduling framework, not"},{"line_number":326,"context_line":"        # just a select first entry."},{"line_number":327,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":328,"context_line":"            bind_qry \u003d context.session.query(FlavorServiceProfileBinding)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_29ff6468","line":325,"updated":"2015-09-22 09:05:30.000000000","message":"add TODO tag please","commit_id":"33a344d603d4850f4600971989d9ca05e2ff0966"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"3589a53a128d9f399a7b5616c2c7039c22ad021d","unresolved":false,"context_lines":[{"line_number":322,"context_line":"    def select_provider_name_from_flavor(self, context, flavor_id):"},{"line_number":323,"context_line":"        \"\"\"Given flavor, chose service profile and find provider for driver.\"\"\""},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        # This should be a scheduling framework, not"},{"line_number":326,"context_line":"        # just a select first entry."},{"line_number":327,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":328,"context_line":"            bind_qry \u003d context.session.query(FlavorServiceProfileBinding)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_f2b45c83","line":325,"in_reply_to":"ba15a1d1_29ff6468","updated":"2015-10-01 18:32:06.000000000","message":"Done","commit_id":"33a344d603d4850f4600971989d9ca05e2ff0966"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"02c10262220b70c87265798a3f70dc684eda328c","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        if not sp_db.enabled:"},{"line_number":276,"context_line":"            raise ext_flavors.ServiceProfileDisabled()"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        LOG.debug(\"Found driver %s.\" % sp_db.driver)"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        service_type_manager \u003d sdb.ServiceTypeManager.get_instance()"},{"line_number":281,"context_line":"        providers \u003d service_type_manager.get_service_providers("}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_b04d5ac6","line":278,"updated":"2015-11-13 11:40:45.000000000","message":"please use a , instead of the %\n\nLOG.debug(\"Found driver %s.\", sp_db.driver)","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"4434d844978aea1bd90bbd73e4bac4db86f5afe8","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        if not sp_db.enabled:"},{"line_number":276,"context_line":"            raise ext_flavors.ServiceProfileDisabled()"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        LOG.debug(\"Found driver %s.\" % sp_db.driver)"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        service_type_manager \u003d sdb.ServiceTypeManager.get_instance()"},{"line_number":281,"context_line":"        providers \u003d service_type_manager.get_service_providers("}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_81dc7847","line":278,"in_reply_to":"da85f559_b04d5ac6","updated":"2015-11-14 02:01:40.000000000","message":"Done","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"02c10262220b70c87265798a3f70dc684eda328c","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        if not providers:"},{"line_number":286,"context_line":"            raise ext_flavors.ServiceProfileDriverNotFound(driver\u003dsp_db.driver)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        LOG.debug(\"Found providers %s.\" % providers)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        res \u003d {\u0027driver\u0027: sp_db.driver,"},{"line_number":291,"context_line":"               \u0027provider\u0027: providers[0].get(\u0027name\u0027, None)}"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_90f2966e","line":288,"updated":"2015-11-13 11:40:45.000000000","message":"ditto","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"4434d844978aea1bd90bbd73e4bac4db86f5afe8","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        if not providers:"},{"line_number":286,"context_line":"            raise ext_flavors.ServiceProfileDriverNotFound(driver\u003dsp_db.driver)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        LOG.debug(\"Found providers %s.\" % providers)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        res \u003d {\u0027driver\u0027: sp_db.driver,"},{"line_number":291,"context_line":"               \u0027provider\u0027: providers[0].get(\u0027name\u0027, None)}"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_41e77012","line":288,"in_reply_to":"da85f559_90f2966e","updated":"2015-11-14 02:01:40.000000000","message":"Done","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"02c10262220b70c87265798a3f70dc684eda328c","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        LOG.debug(\"Found providers %s.\" % providers)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        res \u003d {\u0027driver\u0027: sp_db.driver,"},{"line_number":291,"context_line":"               \u0027provider\u0027: providers[0].get(\u0027name\u0027, None)}"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        return [self._fields(res, fields)]"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_b0fb1a47","line":291,"updated":"2015-11-13 11:40:45.000000000","message":"By default get returns None\n\nThe name of the method is get_next_provider - here it looks like it returns the first one. Maybe I hve missed something","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"4434d844978aea1bd90bbd73e4bac4db86f5afe8","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        LOG.debug(\"Found providers %s.\" % providers)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        res \u003d {\u0027driver\u0027: sp_db.driver,"},{"line_number":291,"context_line":"               \u0027provider\u0027: providers[0].get(\u0027name\u0027, None)}"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        return [self._fields(res, fields)]"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_4441be38","line":291,"in_reply_to":"da85f559_b0fb1a47","updated":"2015-11-14 02:01:40.000000000","message":"As commented above, with an associated TODO, thiis go-around simply selects the first associated binding.  The plan is to add more sophisticated scheduling capabilities in the future.\n\nShortened the \u0027get\u0027.","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"}],"neutron/extensions/flavors.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"bf13433d15b92c0633a34f8d67866ba65a3dd37b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    },"},{"line_number":70,"context_line":"    SERVICE_PROFILES: {"},{"line_number":71,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":72,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":73,"context_line":"               \u0027is_visible\u0027: True,"},{"line_number":74,"context_line":"               \u0027primary_key\u0027: True},"},{"line_number":75,"context_line":"        \u0027description\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_9a2b8594","line":72,"updated":"2015-09-15 08:44:02.000000000","message":"I don\u0027t think it is needed since this attr cannot be posted or put","commit_id":"48d1ccd222662586e78a27ea99650cc756433629"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"71daf6c3515dd3de29848c20a40d97620954cdc9","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    },"},{"line_number":70,"context_line":"    SERVICE_PROFILES: {"},{"line_number":71,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":72,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":73,"context_line":"               \u0027is_visible\u0027: True,"},{"line_number":74,"context_line":"               \u0027primary_key\u0027: True},"},{"line_number":75,"context_line":"        \u0027description\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_435653d3","line":72,"in_reply_to":"ba15a1d1_9a2b8594","updated":"2015-09-15 16:21:18.000000000","message":"This is the convention on every neutron call - security groups, networks, etc.- not going to make an exception for flavor.  Validation is also not a bad thing on inserted values even if only being set internally...","commit_id":"48d1ccd222662586e78a27ea99650cc756433629"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"c805602fe554af2a58f461c6cbbdfc004098ebfa","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def _validate_flavor_service_type(validate_type, valid_values\u003dNone):"},{"line_number":29,"context_line":"    \"\"\"Ensure flavor service type is one of the expected constants.\"\"\""},{"line_number":30,"context_line":"    ALLOWED_SERVICES \u003d constants.EXT_TO_SERVICE_MAPPING.values()"},{"line_number":31,"context_line":"    if validate_type not in ALLOWED_SERVICES:"},{"line_number":32,"context_line":"        raise InvalidFlavorServiceType(service_type\u003dvalidate_type)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_1a1640f1","line":30,"updated":"2015-09-16 20:12:54.000000000","message":"but what if other external services would want to leverage this framework? We found ourselves in the situation where we lifted this constraint in a reality where the entire neutron codebase is now disaggregated.\n\nWhat if we did a more clever check where we validate the service type against what\u0027s loaded in the server? from the service_plugins list we can enumerate on the service type by calling get_pluging_type() and then ensure that the server can actually honor the request based on what\u0027s available to it.\n\nWhat do you think?","commit_id":"33a344d603d4850f4600971989d9ca05e2ff0966"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"3589a53a128d9f399a7b5616c2c7039c22ad021d","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def _validate_flavor_service_type(validate_type, valid_values\u003dNone):"},{"line_number":29,"context_line":"    \"\"\"Ensure flavor service type is one of the expected constants.\"\"\""},{"line_number":30,"context_line":"    ALLOWED_SERVICES \u003d constants.EXT_TO_SERVICE_MAPPING.values()"},{"line_number":31,"context_line":"    if validate_type not in ALLOWED_SERVICES:"},{"line_number":32,"context_line":"        raise InvalidFlavorServiceType(service_type\u003dvalidate_type)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_cff5f3cb","line":30,"in_reply_to":"ba15a1d1_1a1640f1","updated":"2015-10-01 18:32:06.000000000","message":"An \u0027actually loaded\u0027 check likely makes sense here - changed to verify against the loaded plugins.","commit_id":"33a344d603d4850f4600971989d9ca05e2ff0966"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"92368d032bb88486907b9ebe07696941d8bc862d","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class ServiceProfileEmpty(nexception.InvalidInput):"},{"line_number":56,"context_line":"    message \u003d _(\"Service Profile needs either a driver or metainfo.\")"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class FlavorDisabled(nexception.ServiceUnavailable):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_421919d6","line":56,"updated":"2015-11-03 04:06:48.000000000","message":"metainfo \u003d\u003e meta-info","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"99714723cf992e63321e22d377c7f2646ce5be56","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class ServiceProfileEmpty(nexception.InvalidInput):"},{"line_number":56,"context_line":"    message \u003d _(\"Service Profile needs either a driver or metainfo.\")"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class FlavorDisabled(nexception.ServiceUnavailable):"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa80f949_0c9e9256","line":56,"in_reply_to":"1a26ad4f_421919d6","updated":"2015-11-03 21:48:15.000000000","message":"Disagree.  See below discussion.  Words like \u0027metalanguage\u0027, \u0027metadata\u0027 and \u0027metamorphosis\u0027 are single words.  Or see Apple Style Guide or Microsoft Style guides - one word for terms like \u0027metadata\u0027 not \u0027meta-data\u0027 or \u0027meta data\u0027.","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"02c10262220b70c87265798a3f70dc684eda328c","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class ServiceProfileEmpty(nexception.InvalidInput):"},{"line_number":56,"context_line":"    message \u003d _(\"Service Profile needs either a driver or metainfo.\")"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class FlavorDisabled(nexception.ServiceUnavailable):"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_f07682d7","line":56,"in_reply_to":"fa80f949_0c9e9256","updated":"2015-11-13 11:40:45.000000000","message":"ok","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c3129a6db95453fd8043b702772d01a3f80bf6e6","unresolved":false,"context_lines":[{"line_number":88,"context_line":"               \u0027is_visible\u0027: True,"},{"line_number":89,"context_line":"               \u0027primary_key\u0027: True},"},{"line_number":90,"context_line":"        \u0027name\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":91,"context_line":"                 \u0027validate\u0027: {\u0027type:string\u0027: attr.NAME_MAX_LEN},"},{"line_number":92,"context_line":"                 \u0027is_visible\u0027: True, \u0027default\u0027: \u0027\u0027},"},{"line_number":93,"context_line":"        \u0027description\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":94,"context_line":"                        \u0027validate\u0027: {\u0027type:string_or_none\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_624c55c8","line":91,"updated":"2015-11-03 04:08:10.000000000","message":"is there a unit test fr this change?","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"99714723cf992e63321e22d377c7f2646ce5be56","unresolved":false,"context_lines":[{"line_number":88,"context_line":"               \u0027is_visible\u0027: True,"},{"line_number":89,"context_line":"               \u0027primary_key\u0027: True},"},{"line_number":90,"context_line":"        \u0027name\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":91,"context_line":"                 \u0027validate\u0027: {\u0027type:string\u0027: attr.NAME_MAX_LEN},"},{"line_number":92,"context_line":"                 \u0027is_visible\u0027: True, \u0027default\u0027: \u0027\u0027},"},{"line_number":93,"context_line":"        \u0027description\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":94,"context_line":"                        \u0027validate\u0027: {\u0027type:string_or_none\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa80f949_ece78eaa","line":91,"in_reply_to":"1a26ad4f_624c55c8","updated":"2015-11-03 21:48:15.000000000","message":"No - can be done in future as separate bug if anyone cares since common string attribute length validation used has been verified over and over and is covering a corner case to begin with, though is much preferred to give a user 4xx error about the length than a 500 error due to a database length violation which is why made the change.","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"4434d844978aea1bd90bbd73e4bac4db86f5afe8","unresolved":false,"context_lines":[{"line_number":88,"context_line":"               \u0027is_visible\u0027: True,"},{"line_number":89,"context_line":"               \u0027primary_key\u0027: True},"},{"line_number":90,"context_line":"        \u0027name\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":91,"context_line":"                 \u0027validate\u0027: {\u0027type:string\u0027: attr.NAME_MAX_LEN},"},{"line_number":92,"context_line":"                 \u0027is_visible\u0027: True, \u0027default\u0027: \u0027\u0027},"},{"line_number":93,"context_line":"        \u0027description\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":94,"context_line":"                        \u0027validate\u0027: {\u0027type:string_or_none\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_2f1b2582","line":91,"in_reply_to":"fa80f949_ece78eaa","updated":"2015-11-14 02:01:40.000000000","message":"Done","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c3129a6db95453fd8043b702772d01a3f80bf6e6","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                 \u0027is_visible\u0027: True, \u0027default\u0027: \u0027\u0027},"},{"line_number":93,"context_line":"        \u0027description\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":94,"context_line":"                        \u0027validate\u0027: {\u0027type:string_or_none\u0027:"},{"line_number":95,"context_line":"                                     attr.DESCRIPTION_MAX_LEN},"},{"line_number":96,"context_line":"                        \u0027is_visible\u0027: True, \u0027default\u0027: \u0027\u0027},"},{"line_number":97,"context_line":"        \u0027service_type\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":98,"context_line":"                         \u0027validate\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_824971b9","line":95,"updated":"2015-11-03 04:08:10.000000000","message":"ditto","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"99714723cf992e63321e22d377c7f2646ce5be56","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                 \u0027is_visible\u0027: True, \u0027default\u0027: \u0027\u0027},"},{"line_number":93,"context_line":"        \u0027description\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":94,"context_line":"                        \u0027validate\u0027: {\u0027type:string_or_none\u0027:"},{"line_number":95,"context_line":"                                     attr.DESCRIPTION_MAX_LEN},"},{"line_number":96,"context_line":"                        \u0027is_visible\u0027: True, \u0027default\u0027: \u0027\u0027},"},{"line_number":97,"context_line":"        \u0027service_type\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":98,"context_line":"                         \u0027validate\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa80f949_8cf92250","line":95,"in_reply_to":"1a26ad4f_824971b9","updated":"2015-11-03 21:48:15.000000000","message":"Same reply.","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"4434d844978aea1bd90bbd73e4bac4db86f5afe8","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                 \u0027is_visible\u0027: True, \u0027default\u0027: \u0027\u0027},"},{"line_number":93,"context_line":"        \u0027description\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":94,"context_line":"                        \u0027validate\u0027: {\u0027type:string_or_none\u0027:"},{"line_number":95,"context_line":"                                     attr.DESCRIPTION_MAX_LEN},"},{"line_number":96,"context_line":"                        \u0027is_visible\u0027: True, \u0027default\u0027: \u0027\u0027},"},{"line_number":97,"context_line":"        \u0027service_type\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":98,"context_line":"                         \u0027validate\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_124d2a72","line":95,"in_reply_to":"fa80f949_8cf92250","updated":"2015-11-14 02:01:40.000000000","message":"Added test case.  Which pointed out issue that REST boundary was capping description at 255, whereas database was using 1024.  Setting to 1024 as defined in rst by adding new LONG_DESCRIPTION_MAX_LEN.","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c3129a6db95453fd8043b702772d01a3f80bf6e6","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                             \u0027validate\u0027: {\u0027type:uuid_list\u0027: None},"},{"line_number":107,"context_line":"                             \u0027is_visible\u0027: True, \u0027default\u0027: []},"},{"line_number":108,"context_line":"        \u0027enabled\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":109,"context_line":"                    \u0027convert_to\u0027: attr.convert_to_boolean_if_not_none,"},{"line_number":110,"context_line":"                    \u0027default\u0027: True,"},{"line_number":111,"context_line":"                    \u0027is_visible\u0027: True},"},{"line_number":112,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_42cef92e","line":109,"updated":"2015-11-03 04:08:10.000000000","message":"ditto","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"99714723cf992e63321e22d377c7f2646ce5be56","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                             \u0027validate\u0027: {\u0027type:uuid_list\u0027: None},"},{"line_number":107,"context_line":"                             \u0027is_visible\u0027: True, \u0027default\u0027: []},"},{"line_number":108,"context_line":"        \u0027enabled\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":109,"context_line":"                    \u0027convert_to\u0027: attr.convert_to_boolean_if_not_none,"},{"line_number":110,"context_line":"                    \u0027default\u0027: True,"},{"line_number":111,"context_line":"                    \u0027is_visible\u0027: True},"},{"line_number":112,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa80f949_8c7e02ad","line":109,"in_reply_to":"1a26ad4f_42cef92e","updated":"2015-11-03 21:48:15.000000000","message":"Yes, test cases cover sending in boolean flags that go through the convert_to method.  Or do you want to redo the common attribute convert_to_boolean test cases in every single possible combo again for every single neutron interface that uses them?","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"4434d844978aea1bd90bbd73e4bac4db86f5afe8","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                             \u0027validate\u0027: {\u0027type:uuid_list\u0027: None},"},{"line_number":107,"context_line":"                             \u0027is_visible\u0027: True, \u0027default\u0027: []},"},{"line_number":108,"context_line":"        \u0027enabled\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":109,"context_line":"                    \u0027convert_to\u0027: attr.convert_to_boolean_if_not_none,"},{"line_number":110,"context_line":"                    \u0027default\u0027: True,"},{"line_number":111,"context_line":"                    \u0027is_visible\u0027: True},"},{"line_number":112,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_122c4a49","line":109,"in_reply_to":"fa80f949_8c7e02ad","updated":"2015-11-14 02:01:40.000000000","message":"Added invalid enabled test.","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c3129a6db95453fd8043b702772d01a3f80bf6e6","unresolved":false,"context_lines":[{"line_number":117,"context_line":"               \u0027primary_key\u0027: True},"},{"line_number":118,"context_line":"        \u0027description\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":119,"context_line":"                        \u0027validate\u0027: {\u0027type:string_or_none\u0027:"},{"line_number":120,"context_line":"                                     attr.DESCRIPTION_MAX_LEN},"},{"line_number":121,"context_line":"                        \u0027is_visible\u0027: True, \u0027default\u0027: \u0027\u0027},"},{"line_number":122,"context_line":"        \u0027driver\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":123,"context_line":"                   \u0027validate\u0027: {\u0027type:string\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_e2ce252c","line":120,"updated":"2015-11-03 04:08:10.000000000","message":"ditto","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"4434d844978aea1bd90bbd73e4bac4db86f5afe8","unresolved":false,"context_lines":[{"line_number":117,"context_line":"               \u0027primary_key\u0027: True},"},{"line_number":118,"context_line":"        \u0027description\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":119,"context_line":"                        \u0027validate\u0027: {\u0027type:string_or_none\u0027:"},{"line_number":120,"context_line":"                                     attr.DESCRIPTION_MAX_LEN},"},{"line_number":121,"context_line":"                        \u0027is_visible\u0027: True, \u0027default\u0027: \u0027\u0027},"},{"line_number":122,"context_line":"        \u0027driver\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":123,"context_line":"                   \u0027validate\u0027: {\u0027type:string\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_322f0e40","line":120,"in_reply_to":"1a26ad4f_e2ce252c","updated":"2015-11-14 02:01:40.000000000","message":"Done","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c3129a6db95453fd8043b702772d01a3f80bf6e6","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                        \u0027is_visible\u0027: True, \u0027default\u0027: \u0027\u0027},"},{"line_number":122,"context_line":"        \u0027driver\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":123,"context_line":"                   \u0027validate\u0027: {\u0027type:string\u0027:"},{"line_number":124,"context_line":"                                attr.DESCRIPTION_MAX_LEN},"},{"line_number":125,"context_line":"                   \u0027is_visible\u0027: True,"},{"line_number":126,"context_line":"                   \u0027default\u0027: \u0027\u0027},"},{"line_number":127,"context_line":"        \u0027metainfo\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_02d481ba","line":124,"updated":"2015-11-03 04:08:10.000000000","message":"ditto","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"4434d844978aea1bd90bbd73e4bac4db86f5afe8","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                        \u0027is_visible\u0027: True, \u0027default\u0027: \u0027\u0027},"},{"line_number":122,"context_line":"        \u0027driver\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":123,"context_line":"                   \u0027validate\u0027: {\u0027type:string\u0027:"},{"line_number":124,"context_line":"                                attr.DESCRIPTION_MAX_LEN},"},{"line_number":125,"context_line":"                   \u0027is_visible\u0027: True,"},{"line_number":126,"context_line":"                   \u0027default\u0027: \u0027\u0027},"},{"line_number":127,"context_line":"        \u0027metainfo\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_d225625c","line":124,"in_reply_to":"1a26ad4f_02d481ba","updated":"2015-11-14 02:01:40.000000000","message":"Done","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"92368d032bb88486907b9ebe07696941d8bc862d","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                                attr.DESCRIPTION_MAX_LEN},"},{"line_number":125,"context_line":"                   \u0027is_visible\u0027: True,"},{"line_number":126,"context_line":"                   \u0027default\u0027: \u0027\u0027},"},{"line_number":127,"context_line":"        \u0027metainfo\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":128,"context_line":"                     \u0027is_visible\u0027: True,"},{"line_number":129,"context_line":"                     \u0027default\u0027: \u0027\u0027},"},{"line_number":130,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_621e95bc","line":127,"range":{"start_line":127,"start_character":9,"end_line":127,"end_character":17},"updated":"2015-11-03 04:06:48.000000000","message":"maybe it is too late but I would change this to meta_info","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"99714723cf992e63321e22d377c7f2646ce5be56","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                                attr.DESCRIPTION_MAX_LEN},"},{"line_number":125,"context_line":"                   \u0027is_visible\u0027: True,"},{"line_number":126,"context_line":"                   \u0027default\u0027: \u0027\u0027},"},{"line_number":127,"context_line":"        \u0027metainfo\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":128,"context_line":"                     \u0027is_visible\u0027: True,"},{"line_number":129,"context_line":"                     \u0027default\u0027: \u0027\u0027},"},{"line_number":130,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa80f949_ac4bc62a","line":127,"in_reply_to":"1a26ad4f_621e95bc","updated":"2015-11-03 21:48:15.000000000","message":"The term \u0027metainfo\u0027 is used in the approved spec, at https://github.com/openstack/neutron-specs/blob/master/specs/liberty/neutron-flavor-framework.rst.\n\nSince a change would require updating the spec as well as code churn, why would you change this beyond just a personal preference?  Is there a customer motivated reason and if so why?\n\nLooks like has already evolved from the term \u0027metadata\u0027 to \u0027metainfo\u0027 in July, 2015.  Metadata is in the Oxford dictionary but this field isn\u0027t really \u0027data about data\u0027, is really \u0027descriptive data used for scheduling resource creation beyond normal information\u0027, so \u0027meta\u0027 \u003d\u003d \u0027beyond\u0027 \u0027info\u0027\u003d\u0027information\u0027 hence \u0027metainfo\u0027.","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"92368d032bb88486907b9ebe07696941d8bc862d","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                       \u0027driver\u0027: {\u0027allow_post\u0027: False,"},{"line_number":149,"context_line":"                                  \u0027allow_put\u0027: False,"},{"line_number":150,"context_line":"                                  \u0027is_visible\u0027: True},"},{"line_number":151,"context_line":"                       \u0027metainfo\u0027: {\u0027allow_post\u0027: False,"},{"line_number":152,"context_line":"                                    \u0027allow_put\u0027: False,"},{"line_number":153,"context_line":"                                    \u0027is_visible\u0027: True},"},{"line_number":154,"context_line":"                       \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_227bbdf6","line":151,"updated":"2015-11-03 04:06:48.000000000","message":"ditto","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"99714723cf992e63321e22d377c7f2646ce5be56","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                       \u0027driver\u0027: {\u0027allow_post\u0027: False,"},{"line_number":149,"context_line":"                                  \u0027allow_put\u0027: False,"},{"line_number":150,"context_line":"                                  \u0027is_visible\u0027: True},"},{"line_number":151,"context_line":"                       \u0027metainfo\u0027: {\u0027allow_post\u0027: False,"},{"line_number":152,"context_line":"                                    \u0027allow_put\u0027: False,"},{"line_number":153,"context_line":"                                    \u0027is_visible\u0027: True},"},{"line_number":154,"context_line":"                       \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa80f949_4c633ab2","line":151,"in_reply_to":"1a26ad4f_227bbdf6","updated":"2015-11-03 21:48:15.000000000","message":"Again, would want customer focused reason to motivate changing the approved spec.","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"}],"neutron/manager.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"c15630c78593628f836ab1eb68999aa0283fdbe6","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        self._load_services_from_core_plugin()"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        plugin_providers \u003d cfg.CONF.service_plugins"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        LOG.debug(\"Loading service plugins: %s\", plugin_providers)"},{"line_number":176,"context_line":"        for provider in plugin_providers:"},{"line_number":177,"context_line":"            if provider \u003d\u003d \u0027\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_428039c0","line":174,"updated":"2015-11-03 04:11:23.000000000","message":"no need to do this change","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"92368d032bb88486907b9ebe07696941d8bc862d","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        self._load_services_from_core_plugin()"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        plugin_providers \u003d cfg.CONF.service_plugins"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        LOG.debug(\"Loading service plugins: %s\", plugin_providers)"},{"line_number":176,"context_line":"        for provider in plugin_providers:"},{"line_number":177,"context_line":"            if provider \u003d\u003d \u0027\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a26ad4f_0286c1da","line":174,"updated":"2015-11-03 04:06:48.000000000","message":"unrelated but that is nit picking","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"99714723cf992e63321e22d377c7f2646ce5be56","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        self._load_services_from_core_plugin()"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        plugin_providers \u003d cfg.CONF.service_plugins"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        LOG.debug(\"Loading service plugins: %s\", plugin_providers)"},{"line_number":176,"context_line":"        for provider in plugin_providers:"},{"line_number":177,"context_line":"            if provider \u003d\u003d \u0027\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa80f949_2e57cb03","line":174,"in_reply_to":"1a26ad4f_428039c0","updated":"2015-11-03 21:48:15.000000000","message":"Will remove if do another iteration since really not relevant.","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"4434d844978aea1bd90bbd73e4bac4db86f5afe8","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        self._load_services_from_core_plugin()"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        plugin_providers \u003d cfg.CONF.service_plugins"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        LOG.debug(\"Loading service plugins: %s\", plugin_providers)"},{"line_number":176,"context_line":"        for provider in plugin_providers:"},{"line_number":177,"context_line":"            if provider \u003d\u003d \u0027\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_529f325f","line":174,"in_reply_to":"fa80f949_2e57cb03","updated":"2015-11-14 02:01:40.000000000","message":"Done","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"}],"neutron/services/flavors/flavors_plugin.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"2f6917afbbd405f82b7b28365bacf3b400615cb0","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class FlavorsPlugin(service_base.ServicePluginBase,"},{"line_number":22,"context_line":"                    flavors_db.FlavorsManager):"},{"line_number":23,"context_line":"    \"\"\"Implements Neutron Flavors Service plugin.\"\"\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    supported_extension_aliases \u003d [\u0027flavors\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a29b11f_ad4680bd","line":22,"updated":"2015-10-19 06:38:15.000000000","message":"I am not sure why we do driver manager functionality \"FlavorsManager\" in the db file? I think services/flavor/driver_manager a new file would be better. Any thoughts?","commit_id":"6a6f9a3fae523a64546753e439222eea6c7dedce"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"45909be247bb1c275883fcd059bdd00c6a8d931f","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class FlavorsPlugin(service_base.ServicePluginBase,"},{"line_number":22,"context_line":"                    flavors_db.FlavorsManager):"},{"line_number":23,"context_line":"    \"\"\"Implements Neutron Flavors Service plugin.\"\"\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    supported_extension_aliases \u003d [\u0027flavors\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a29b11f_de977c8e","line":22,"in_reply_to":"3a29b11f_ad4680bd","updated":"2015-10-20 23:18:54.000000000","message":"Likely just a mis-naming issue, as old code used the Manager terminology since was not a true plugin.  This is really just a db mixin that is applied to the plugin, like other entities do, that belongs with db code.  Renaming to make clear.","commit_id":"6a6f9a3fae523a64546753e439222eea6c7dedce"}],"neutron/services/provider_configuration.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"bf13433d15b92c0633a34f8d67866ba65a3dd37b","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            ini \u003d self.ini()"},{"line_number":106,"context_line":"            try:"},{"line_number":107,"context_line":"                for name, value in ini.items(\u0027service_providers\u0027):"},{"line_number":108,"context_line":"                    if \u0027service_provider\u0027 in name:"},{"line_number":109,"context_line":"                        providers.append(value)"},{"line_number":110,"context_line":"            except ConfigParser.NoSectionError:"},{"line_number":111,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_35ea8a10","line":108,"updated":"2015-09-15 08:44:02.000000000","message":"why change it?","commit_id":"48d1ccd222662586e78a27ea99650cc756433629"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"71daf6c3515dd3de29848c20a40d97620954cdc9","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            ini \u003d self.ini()"},{"line_number":106,"context_line":"            try:"},{"line_number":107,"context_line":"                for name, value in ini.items(\u0027service_providers\u0027):"},{"line_number":108,"context_line":"                    if \u0027service_provider\u0027 in name:"},{"line_number":109,"context_line":"                        providers.append(value)"},{"line_number":110,"context_line":"            except ConfigParser.NoSectionError:"},{"line_number":111,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_8869eac0","line":108,"in_reply_to":"ba15a1d1_35ea8a10","updated":"2015-09-15 16:21:18.000000000","message":"Because the default python config parser used in DevStack uses \u0027service_provider\u0027 as a key and want to support multiple service providers with \u0027service_provider2\u0027 also matching.","commit_id":"48d1ccd222662586e78a27ea99650cc756433629"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"c805602fe554af2a58f461c6cbbdfc004098ebfa","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            ini \u003d self.ini()"},{"line_number":106,"context_line":"            try:"},{"line_number":107,"context_line":"                for name, value in ini.items(\u0027service_providers\u0027):"},{"line_number":108,"context_line":"                    if \u0027service_provider\u0027 in name:"},{"line_number":109,"context_line":"                        providers.append(value)"},{"line_number":110,"context_line":"            except ConfigParser.NoSectionError:"},{"line_number":111,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_faefcce6","line":108,"updated":"2015-09-16 20:12:54.000000000","message":"um...how could the name change? This is a static config option. What am I missing?","commit_id":"33a344d603d4850f4600971989d9ca05e2ff0966"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"3589a53a128d9f399a7b5616c2c7039c22ad021d","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            ini \u003d self.ini()"},{"line_number":106,"context_line":"            try:"},{"line_number":107,"context_line":"                for name, value in ini.items(\u0027service_providers\u0027):"},{"line_number":108,"context_line":"                    if \u0027service_provider\u0027 in name:"},{"line_number":109,"context_line":"                        providers.append(value)"},{"line_number":110,"context_line":"            except ConfigParser.NoSectionError:"},{"line_number":111,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_fcaeaf2c","line":108,"in_reply_to":"ba15a1d1_faefcce6","updated":"2015-10-01 18:32:06.000000000","message":"This was a solution to the simple key config parser used in DevStack, where \u0027service_provider\u0027 was the key so would overwrite allowing only one provider per conf file.  Had a few choices: override ConfigParser, use multiline value with added parsing, or use unique keys (service_providerN \u003d ..).  Choice I made was the unique key route with \u0027service_provider\u0027 in name, since would still behave as before if someone accidentally commented out two lines - have to explicity change key for multiple values.  Open to better suggestions.","commit_id":"33a344d603d4850f4600971989d9ca05e2ff0966"}],"neutron/tests/api/test_flavors_extensions.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"5b7b25a56a3c630e4cb06bf192758779d729b618","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        description_flavor \u003d \"flavor is created by tempest\""},{"line_number":45,"context_line":"        name_flavor \u003d \"Best flavor created by tempest\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        # The check above will pass if api_extensions\u003dall, which does"},{"line_number":48,"context_line":"        # not mean flavors extension itself is present."},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            cls.flavor \u003d cls.create_flavor(name_flavor, description_flavor,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_6c713b44","line":47,"updated":"2015-11-13 22:57:13.000000000","message":"The try-catch below would be equivalent to listing the (loaded) extensions and verifying if flavors was in fact present. It would be cleaner IMO, but this test below is usually frowned upon by the QA folks.\n\nAny reason why we would not enable the flavor framework by default? If that was the executive decision we\u0027re going for, then the upstream CI would not need this.\n\nSo what I am saying exactly? I am saying, we should consider if we want to flavor plugin to be loaded by default, and if so, then this try/except can be removed.","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"0ba43e8a3f05a29e785a2c0fa42ca31e9287a230","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        description_flavor \u003d \"flavor is created by tempest\""},{"line_number":45,"context_line":"        name_flavor \u003d \"Best flavor created by tempest\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        # The check above will pass if api_extensions\u003dall, which does"},{"line_number":48,"context_line":"        # not mean flavors extension itself is present."},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            cls.flavor \u003d cls.create_flavor(name_flavor, description_flavor,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba8a016a_b2954ae5","line":47,"in_reply_to":"da85f559_1218ca83","updated":"2015-11-17 03:46:05.000000000","message":"Let\u0027s make sure a few people are involved in the decision, but either way this can be cleaned up later. No need to hold this up, even though it\u0027d be nice to see these tests in action.","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"4434d844978aea1bd90bbd73e4bac4db86f5afe8","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        description_flavor \u003d \"flavor is created by tempest\""},{"line_number":45,"context_line":"        name_flavor \u003d \"Best flavor created by tempest\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        # The check above will pass if api_extensions\u003dall, which does"},{"line_number":48,"context_line":"        # not mean flavors extension itself is present."},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            cls.flavor \u003d cls.create_flavor(name_flavor, description_flavor,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_1218ca83","line":47,"in_reply_to":"da85f559_6c713b44","updated":"2015-11-14 02:01:40.000000000","message":"Made flavors a full plugin but you are correct that if loaded by default wouldn\u0027t need the try/catch logic.\n\nExecutive decision would be welcome here.","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"}],"neutron/tests/etc/policy.json":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"2f6917afbbd405f82b7b28365bacf3b400615cb0","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    \"delete_service_profile\": \"rule:admin_only\","},{"line_number":181,"context_line":"    \"get_service_profiles\": \"rule:admin_only\","},{"line_number":182,"context_line":"    \"get_service_profile\": \"rule:admin_only\","},{"line_number":183,"context_line":"    \"create_flavor_service_profile\": \"rule:admin_only\","},{"line_number":184,"context_line":"    \"delete_flavor_service_profile\": \"rule:admin_only\","},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    \"get_policy\": \"rule:regular_user\","}],"source_content_type":"application/json","patch_set":10,"id":"3a29b11f_ad1d20bf","line":183,"updated":"2015-10-19 06:38:15.000000000","message":"Better to add at the end.","commit_id":"6a6f9a3fae523a64546753e439222eea6c7dedce"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"45909be247bb1c275883fcd059bdd00c6a8d931f","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    \"delete_service_profile\": \"rule:admin_only\","},{"line_number":181,"context_line":"    \"get_service_profiles\": \"rule:admin_only\","},{"line_number":182,"context_line":"    \"get_service_profile\": \"rule:admin_only\","},{"line_number":183,"context_line":"    \"create_flavor_service_profile\": \"rule:admin_only\","},{"line_number":184,"context_line":"    \"delete_flavor_service_profile\": \"rule:admin_only\","},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    \"get_policy\": \"rule:regular_user\","}],"source_content_type":"application/json","patch_set":10,"id":"3a29b11f_be5160da","line":183,"in_reply_to":"3a29b11f_ad1d20bf","updated":"2015-10-20 23:18:54.000000000","message":"Done","commit_id":"6a6f9a3fae523a64546753e439222eea6c7dedce"}],"neutron/tests/unit/extensions/test_flavors.py":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"5e2e66145a89e687ce5afdf38b56218aa40ca0fa","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_config import cfg"},{"line_number":21,"context_line":"from oslo_utils import uuidutils"},{"line_number":22,"context_line":"from webob import exc"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from neutron.api.v2 import attributes as attr"},{"line_number":25,"context_line":"from neutron import context"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba8a016a_c56bc383","line":22,"updated":"2015-11-19 17:54:48.000000000","message":"This isn\u0027t a unit test, though it\u0027s a problem in all our unit tests.","commit_id":"8e450954043f62b76ebb4e9a69ab1efe1a2ef238"}],"setup.cfg":[{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"aeb6df990cabc9fa1ffd447dc684e0634deb1730","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    lbaas \u003d neutron_lbaas.services.loadbalancer.plugin:LoadBalancerPlugin"},{"line_number":117,"context_line":"    vpnaas \u003d neutron_vpnaas.services.vpn.plugin:VPNDriverPlugin"},{"line_number":118,"context_line":"    metering \u003d neutron.services.metering.metering_plugin:MeteringPlugin"},{"line_number":119,"context_line":"    neutron.services.flavors.flavors_plugin.FlavorsPlugin \u003d neutron.services.flavors.flavors_plugin:FlavorsPlugin"},{"line_number":120,"context_line":"    neutron.services.firewall.fwaas_plugin.FirewallPlugin \u003d neutron_fwaas.services.firewall.fwaas_plugin:FirewallPlugin"},{"line_number":121,"context_line":"    neutron.services.loadbalancer.plugin.LoadBalancerPlugin \u003d neutron_lbaas.services.loadbalancer.plugin:LoadBalancerPlugin"},{"line_number":122,"context_line":"    neutron.services.vpn.plugin.VPNDriverPlugin \u003d neutron_vpnaas.services.vpn.plugin:VPNDriverPlugin"}],"source_content_type":"text/x-ttcn-cfg","patch_set":11,"id":"fa80f949_49ae6282","line":119,"updated":"2015-11-06 04:29:55.000000000","message":"(nit)Am not able to understand why you have put these in the middle","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":14556,"name":"Madhusudhan Kandadai","email":"madhusudhan.openstack@gmail.com","username":"madhusudhan-kandadai"},"change_message_id":"6bece77eb73fdc6a04f2bc9e900bc3138590b56f","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    lbaas \u003d neutron_lbaas.services.loadbalancer.plugin:LoadBalancerPlugin"},{"line_number":117,"context_line":"    vpnaas \u003d neutron_vpnaas.services.vpn.plugin:VPNDriverPlugin"},{"line_number":118,"context_line":"    metering \u003d neutron.services.metering.metering_plugin:MeteringPlugin"},{"line_number":119,"context_line":"    neutron.services.flavors.flavors_plugin.FlavorsPlugin \u003d neutron.services.flavors.flavors_plugin:FlavorsPlugin"},{"line_number":120,"context_line":"    neutron.services.firewall.fwaas_plugin.FirewallPlugin \u003d neutron_fwaas.services.firewall.fwaas_plugin:FirewallPlugin"},{"line_number":121,"context_line":"    neutron.services.loadbalancer.plugin.LoadBalancerPlugin \u003d neutron_lbaas.services.loadbalancer.plugin:LoadBalancerPlugin"},{"line_number":122,"context_line":"    neutron.services.vpn.plugin.VPNDriverPlugin \u003d neutron_vpnaas.services.vpn.plugin:VPNDriverPlugin"}],"source_content_type":"text/x-ttcn-cfg","patch_set":11,"id":"da85f559_236155a9","line":119,"in_reply_to":"fa80f949_49ae6282","updated":"2015-11-12 14:49:06.000000000","message":"I believe as long as the mentioned flavors_plugin anywhere, it should be okay. It just recognizes all the plugins while installing neutron services","commit_id":"39d451c8464e75020809c8a1e67f3c87d00ead78"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"5e2e66145a89e687ce5afdf38b56218aa40ca0fa","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    lbaas \u003d neutron_lbaas.services.loadbalancer.plugin:LoadBalancerPlugin"},{"line_number":113,"context_line":"    vpnaas \u003d neutron_vpnaas.services.vpn.plugin:VPNDriverPlugin"},{"line_number":114,"context_line":"    metering \u003d neutron.services.metering.metering_plugin:MeteringPlugin"},{"line_number":115,"context_line":"    neutron.services.flavors.flavors_plugin.FlavorsPlugin \u003d neutron.services.flavors.flavors_plugin:FlavorsPlugin"},{"line_number":116,"context_line":"    neutron.services.firewall.fwaas_plugin.FirewallPlugin \u003d neutron_fwaas.services.firewall.fwaas_plugin:FirewallPlugin"},{"line_number":117,"context_line":"    neutron.services.loadbalancer.plugin.LoadBalancerPlugin \u003d neutron_lbaas.services.loadbalancer.plugin:LoadBalancerPlugin"},{"line_number":118,"context_line":"    neutron.services.vpn.plugin.VPNDriverPlugin \u003d neutron_vpnaas.services.vpn.plugin:VPNDriverPlugin"}],"source_content_type":"text/x-ttcn-cfg","patch_set":12,"id":"ba8a016a_25e64f15","line":115,"updated":"2015-11-19 17:54:48.000000000","message":"This line is not needed. It\u0027s used below to map classes that moved repos.","commit_id":"8e450954043f62b76ebb4e9a69ab1efe1a2ef238"},{"author":{"_account_id":12999,"name":"James Arendt","email":"james.arendt@hpe.com","username":"jwarendt"},"change_message_id":"0441bfba031874b6c9b091626f604c48b38d107c","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    lbaas \u003d neutron_lbaas.services.loadbalancer.plugin:LoadBalancerPlugin"},{"line_number":113,"context_line":"    vpnaas \u003d neutron_vpnaas.services.vpn.plugin:VPNDriverPlugin"},{"line_number":114,"context_line":"    metering \u003d neutron.services.metering.metering_plugin:MeteringPlugin"},{"line_number":115,"context_line":"    neutron.services.flavors.flavors_plugin.FlavorsPlugin \u003d neutron.services.flavors.flavors_plugin:FlavorsPlugin"},{"line_number":116,"context_line":"    neutron.services.firewall.fwaas_plugin.FirewallPlugin \u003d neutron_fwaas.services.firewall.fwaas_plugin:FirewallPlugin"},{"line_number":117,"context_line":"    neutron.services.loadbalancer.plugin.LoadBalancerPlugin \u003d neutron_lbaas.services.loadbalancer.plugin:LoadBalancerPlugin"},{"line_number":118,"context_line":"    neutron.services.vpn.plugin.VPNDriverPlugin \u003d neutron_vpnaas.services.vpn.plugin:VPNDriverPlugin"}],"source_content_type":"text/x-ttcn-cfg","patch_set":12,"id":"ba8a016a_54a780bc","line":115,"in_reply_to":"ba8a016a_25e64f15","updated":"2015-11-19 20:08:59.000000000","message":"Deleting.","commit_id":"8e450954043f62b76ebb4e9a69ab1efe1a2ef238"}]}
