)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"285547009cf19846747d939a1c9db61d6bce2aa8","unresolved":false,"context_lines":[{"line_number":13,"context_line":"to a specific port, for example, if DHCP is enabled on a subnet"},{"line_number":14,"context_line":"then only one IP may be configured per port."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This will enable this logic to be enformced by the plugin. Until"},{"line_number":17,"context_line":"now this was enforced by configuring the configuration variable"},{"line_number":18,"context_line":"max_fixed_ips_per_port. That has been deprecated."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa7ab95a_85182086","line":16,"range":{"start_line":16,"start_character":34,"end_line":16,"end_character":43},"updated":"2016-09-01 10:24:41.000000000","message":"nit typo: enforced","commit_id":"19ec5f9c116df6df67237c120f81a07f544683c7"}],"neutron/callbacks/events.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"29714b35e0f37f4afc91033e9a2c2416dd369e92","unresolved":false,"context_lines":[{"line_number":15,"context_line":"BEFORE_READ \u003d \u0027before_read\u0027"},{"line_number":16,"context_line":"BEFORE_UPDATE \u003d \u0027before_update\u0027"},{"line_number":17,"context_line":"BEFORE_DELETE \u003d \u0027before_delete\u0027"},{"line_number":18,"context_line":"BEFORE_IP_ALLOCATE \u003d \u0027before_ip_allocate\u0027"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"PRECOMMIT_CREATE \u003d \u0027precommit_create\u0027"},{"line_number":21,"context_line":"PRECOMMIT_UPDATE \u003d \u0027precommit_update\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_8f0e6539","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":18},"updated":"2016-09-06 21:50:31.000000000","message":"This doesn\u0027t really fit the pattern of generic events that have been established.","commit_id":"acedcf2737015c89cea74071cecd6efdcc7f5be0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a2395d57610ce225c4cef7e30e4a81c75f3445af","unresolved":false,"context_lines":[{"line_number":15,"context_line":"BEFORE_READ \u003d \u0027before_read\u0027"},{"line_number":16,"context_line":"BEFORE_UPDATE \u003d \u0027before_update\u0027"},{"line_number":17,"context_line":"BEFORE_DELETE \u003d \u0027before_delete\u0027"},{"line_number":18,"context_line":"BEFORE_IP_ALLOCATE \u003d \u0027before_ip_allocate\u0027"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"PRECOMMIT_CREATE \u003d \u0027precommit_create\u0027"},{"line_number":21,"context_line":"PRECOMMIT_UPDATE \u003d \u0027precommit_update\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_5dd7a64a","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":18},"in_reply_to":"9a89bdaa_8f0e6539","updated":"2016-09-07 06:56:41.000000000","message":"Agree. That was my concern. I feel that this is certainly something that requires discussion.\nOriginally I wanted to introduce a new resource called IPAM. I felt that that would give us a generic way to bind to the IPAM resources and have the generic callbacks for create, update and delete.\nPiggybacking on existing resources is problematic (please see the comments in the second file)","commit_id":"acedcf2737015c89cea74071cecd6efdcc7f5be0"}],"neutron/callbacks/resources.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"bae8e00f0805b38cda57cb7c2ce13cc43a4cd39e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"AGENT \u003d \u0027agent\u0027"},{"line_number":15,"context_line":"EXTERNAL_NETWORK \u003d \u0027external_network\u0027"},{"line_number":16,"context_line":"FLOATING_IP \u003d \u0027floating_ip\u0027"},{"line_number":17,"context_line":"IPAM \u003d \u0027ipam\u0027"},{"line_number":18,"context_line":"NETWORK \u003d \u0027network\u0027"},{"line_number":19,"context_line":"NETWORKS \u003d \u0027networks\u0027"},{"line_number":20,"context_line":"PORT \u003d \u0027port\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_1f79aafc","line":17,"updated":"2016-09-01 15:30:07.000000000","message":"IPAM is not a resource.","commit_id":"19ec5f9c116df6df67237c120f81a07f544683c7"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"94765c124d8597082488dbf641b81765da5bf42a","unresolved":false,"context_lines":[{"line_number":14,"context_line":"AGENT \u003d \u0027agent\u0027"},{"line_number":15,"context_line":"EXTERNAL_NETWORK \u003d \u0027external_network\u0027"},{"line_number":16,"context_line":"FLOATING_IP \u003d \u0027floating_ip\u0027"},{"line_number":17,"context_line":"IPAM \u003d \u0027ipam\u0027"},{"line_number":18,"context_line":"NETWORK \u003d \u0027network\u0027"},{"line_number":19,"context_line":"NETWORKS \u003d \u0027networks\u0027"},{"line_number":20,"context_line":"PORT \u003d \u0027port\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_f8009904","line":17,"in_reply_to":"fa7ab95a_1f79aafc","updated":"2016-09-01 16:57:22.000000000","message":"What would you suggest? Using PORT and then the EVENT being a IP_ALLOCATION?","commit_id":"19ec5f9c116df6df67237c120f81a07f544683c7"}],"neutron/db/ipam_backend_mixin.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"bae8e00f0805b38cda57cb7c2ce13cc43a4cd39e","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                resources.IPAM, events.BEFORE_UPDATE, self, **kwargs)"},{"line_number":335,"context_line":"        except exc.CallbackFailure as e:"},{"line_number":336,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":337,"context_line":"                # NOTE(armax): preserve old check\u0027s behavior"},{"line_number":338,"context_line":"                if len(e.errors) \u003d\u003d 1:"},{"line_number":339,"context_line":"                    raise e.errors[0].error"},{"line_number":340,"context_line":"                raise exc.InvalidInput(error_message\u003de)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_9f3f7a24","line":337,"updated":"2016-09-01 15:30:07.000000000","message":"this is not my note, don\u0027t use my name in vain :)","commit_id":"19ec5f9c116df6df67237c120f81a07f544683c7"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"14000ef0882a1ee986a336518f7e053639406eff","unresolved":false,"context_lines":[{"line_number":331,"context_line":"                      \u0027fixed_ip_list\u0027: fixed_ip_list,"},{"line_number":332,"context_line":"                      \u0027device_owner\u0027: device_owner}"},{"line_number":333,"context_line":"            registry.notify("},{"line_number":334,"context_line":"                resources.PORT, events.BEFORE_ALLOCATE, self, **kwargs)"},{"line_number":335,"context_line":"        except exc.CallbackFailure as e:"},{"line_number":336,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":337,"context_line":"                if len(e.errors) \u003d\u003d 1:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_107fa2e0","line":334,"range":{"start_line":334,"start_character":39,"end_line":334,"end_character":54},"updated":"2016-09-02 14:01:13.000000000","message":"maybe this should be BEFORE_IP_ALLOCATION. Any thoughts?","commit_id":"ecbae925048c932eac56725bda843c5ac782b7db"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"29714b35e0f37f4afc91033e9a2c2416dd369e92","unresolved":false,"context_lines":[{"line_number":331,"context_line":"                      \u0027fixed_ip_list\u0027: fixed_ip_list,"},{"line_number":332,"context_line":"                      \u0027device_owner\u0027: device_owner}"},{"line_number":333,"context_line":"            registry.notify("},{"line_number":334,"context_line":"                resources.PORT, events.BEFORE_IP_ALLOCATE, self, **kwargs)"},{"line_number":335,"context_line":"        except exc.CallbackFailure as e:"},{"line_number":336,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":337,"context_line":"                if len(e.errors) \u003d\u003d 1:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_6f8681dc","line":334,"range":{"start_line":334,"start_character":16,"end_line":334,"end_character":57},"updated":"2016-09-06 21:50:31.000000000","message":"Do we need a new kind of event? Could this be validated with a BEFORE_CREATE / UPDATE event on the PORT resource? I assume that a before create / update event would pass the port from which you could read the fixed_ips.\n\nThe problem is that I don\u0027t think we have anything emitting a before create / update event on the port resource unless I am missing it somewhere. So, we\u0027d have to add the event.","commit_id":"acedcf2737015c89cea74071cecd6efdcc7f5be0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a2395d57610ce225c4cef7e30e4a81c75f3445af","unresolved":false,"context_lines":[{"line_number":331,"context_line":"                      \u0027fixed_ip_list\u0027: fixed_ip_list,"},{"line_number":332,"context_line":"                      \u0027device_owner\u0027: device_owner}"},{"line_number":333,"context_line":"            registry.notify("},{"line_number":334,"context_line":"                resources.PORT, events.BEFORE_IP_ALLOCATE, self, **kwargs)"},{"line_number":335,"context_line":"        except exc.CallbackFailure as e:"},{"line_number":336,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":337,"context_line":"                if len(e.errors) \u003d\u003d 1:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_5dc16653","line":334,"range":{"start_line":334,"start_character":16,"end_line":334,"end_character":57},"in_reply_to":"9a89bdaa_6f8681dc","updated":"2016-09-07 06:56:41.000000000","message":"I am not sure that create and update events here are relevant - we could just implement those directly in the plugin and have all of the data. This means that we would need to do it at least twice (we have two plugins where this is relevant). I am sure that other non ML2 plugins will also have the same issues here. So the idea here was to have a generic event where plugins could add in their own logic and only do that once instead of N times.\nMy pain point with the callbacks is that they are really ML2 specific and not at a generic layer in the code (some are and others are not). I know that I may be going on a tangent here. Maybe its a topic to discuss at the next summit","commit_id":"acedcf2737015c89cea74071cecd6efdcc7f5be0"}]}
