)]}'
{"neutron/agent/dhcp/agent.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"699370dbd45ef3a86b1fb5f494d373132911b27e","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        while True:"},{"line_number":153,"context_line":"            for network_id in self._network_bulk_allocations.keys():"},{"line_number":154,"context_line":"                try:"},{"line_number":155,"context_line":"                    with lockutils.lock(\u0027bulk_allocation_%s\u0027 % network_id):"},{"line_number":156,"context_line":"                        network \u003d self.cache.get_network_by_id(network_id)"},{"line_number":157,"context_line":"                        self.call_driver(\u0027bulk_reload_allocations\u0027, network)"},{"line_number":158,"context_line":"                        del self._network_bulk_allocations[network_id]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_c3452919","line":155,"range":{"start_line":155,"start_character":20,"end_line":155,"end_character":75},"updated":"2019-09-18 14:36:02.000000000","message":"You should not block this. Instead, what you can do is retrieve the flag status, reset the flag, make the call and wait:\n\ndef _reload_bulk_allocations(self):\n  while True:\n    if self._network_bulk_allocations.get(network_id):\n      self._network_bulk_allocations[network_id] \u003d False\n      network \u003d self.cache.get_network_by_id(network_id)\n      self.call_driver(\u0027bulk_reload_allocations\u0027, network)\n    eventlet.greenthread.sleep(self.conf.bulk_reload_interval)\n\nThe flag reset should be done at the beginning. If other call is done, the flag will be risen and read in the next loop.","commit_id":"afd72fd30e06ebcd63c4e8d1de2b1761df3af65d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f3544e940b1804917f7fd29e901a138706f6972a","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        while True:"},{"line_number":153,"context_line":"            for network_id in self._network_bulk_allocations.keys():"},{"line_number":154,"context_line":"                try:"},{"line_number":155,"context_line":"                    with lockutils.lock(\u0027bulk_allocation_%s\u0027 % network_id):"},{"line_number":156,"context_line":"                        network \u003d self.cache.get_network_by_id(network_id)"},{"line_number":157,"context_line":"                        self.call_driver(\u0027bulk_reload_allocations\u0027, network)"},{"line_number":158,"context_line":"                        del self._network_bulk_allocations[network_id]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_d3e62c17","line":155,"range":{"start_line":155,"start_character":20,"end_line":155,"end_character":75},"in_reply_to":"3fa7e38b_a4da69e6","updated":"2019-09-20 13:49:03.000000000","message":"1) Reset flag: be definition, a flag is a boolean parameter. It doesn\u0027t matter if you delete it or set to False, whenever you consider None/False the opposite to True.\n\n2) NetworkCache.get_network_by_id: you are right, this can raise an exception. IMO you should modify the method, adding for example raise_exception\u003dFalse input parameter in the function. If True, then use\n  return self.cache.get(network_id, None)","commit_id":"afd72fd30e06ebcd63c4e8d1de2b1761df3af65d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0fe732ee9b834f3aaaa97f7e9a9b8a57f886b213","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        while True:"},{"line_number":153,"context_line":"            for network_id in self._network_bulk_allocations.keys():"},{"line_number":154,"context_line":"                try:"},{"line_number":155,"context_line":"                    with lockutils.lock(\u0027bulk_allocation_%s\u0027 % network_id):"},{"line_number":156,"context_line":"                        network \u003d self.cache.get_network_by_id(network_id)"},{"line_number":157,"context_line":"                        self.call_driver(\u0027bulk_reload_allocations\u0027, network)"},{"line_number":158,"context_line":"                        del self._network_bulk_allocations[network_id]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_a4da69e6","line":155,"range":{"start_line":155,"start_character":20,"end_line":155,"end_character":75},"in_reply_to":"3fa7e38b_c3452919","updated":"2019-09-19 06:03:12.000000000","message":"please see the change. i do not think that the reset flag should be set to false. it should be deleted.\nthe reason i added in the try/catch was that i was concerned that the self.cache.get_network_by_id could raise an exception","commit_id":"afd72fd30e06ebcd63c4e8d1de2b1761df3af65d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"703a5485585ae06df8a18dc3876812ac4d51de8c","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        while True:"},{"line_number":153,"context_line":"            for network_id in self._network_bulk_allocations.keys():"},{"line_number":154,"context_line":"                try:"},{"line_number":155,"context_line":"                    with lockutils.lock(\u0027bulk_allocation_%s\u0027 % network_id):"},{"line_number":156,"context_line":"                        network \u003d self.cache.get_network_by_id(network_id)"},{"line_number":157,"context_line":"                        self.call_driver(\u0027bulk_reload_allocations\u0027, network)"},{"line_number":158,"context_line":"                        del self._network_bulk_allocations[network_id]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_30676128","line":155,"range":{"start_line":155,"start_character":20,"end_line":155,"end_character":75},"in_reply_to":"3fa7e38b_d3e62c17","updated":"2019-09-22 05:31:50.000000000","message":"Comments:\n1. Regarding the reset of the flag:\n - we run over the configured keys (these are the existing networks). so this structure will not grow indefinitely. This is why I pop the value and do not set it to False.\n2. No change needs to be made here:\n\n    def get_network_by_id(self, network_id):\n        return self.cache.get(network_id)\n\nBy default python will return None if the entry is not found. So we should be good","commit_id":"afd72fd30e06ebcd63c4e8d1de2b1761df3af65d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"699370dbd45ef3a86b1fb5f494d373132911b27e","unresolved":false,"context_lines":[{"line_number":156,"context_line":"                        network \u003d self.cache.get_network_by_id(network_id)"},{"line_number":157,"context_line":"                        self.call_driver(\u0027bulk_reload_allocations\u0027, network)"},{"line_number":158,"context_line":"                        del self._network_bulk_allocations[network_id]"},{"line_number":159,"context_line":"                except Exception:"},{"line_number":160,"context_line":"                    LOG.exception(\"Unable to bulk load\")"},{"line_number":161,"context_line":"            eventlet.greenthread.sleep(self.conf.bulk_reload_interval)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def call_driver(self, action, network, **action_kwargs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_e835a4f8","line":160,"range":{"start_line":159,"start_character":16,"end_line":160,"end_character":56},"updated":"2019-09-18 14:36:02.000000000","message":"This is done in self.call_driver. There will be no exception thrown here.","commit_id":"afd72fd30e06ebcd63c4e8d1de2b1761df3af65d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0fe732ee9b834f3aaaa97f7e9a9b8a57f886b213","unresolved":false,"context_lines":[{"line_number":156,"context_line":"                        network \u003d self.cache.get_network_by_id(network_id)"},{"line_number":157,"context_line":"                        self.call_driver(\u0027bulk_reload_allocations\u0027, network)"},{"line_number":158,"context_line":"                        del self._network_bulk_allocations[network_id]"},{"line_number":159,"context_line":"                except Exception:"},{"line_number":160,"context_line":"                    LOG.exception(\"Unable to bulk load\")"},{"line_number":161,"context_line":"            eventlet.greenthread.sleep(self.conf.bulk_reload_interval)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def call_driver(self, action, network, **action_kwargs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_844c0dc8","line":160,"range":{"start_line":159,"start_character":16,"end_line":160,"end_character":56},"in_reply_to":"3fa7e38b_e835a4f8","updated":"2019-09-19 06:03:12.000000000","message":"Done","commit_id":"afd72fd30e06ebcd63c4e8d1de2b1761df3af65d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"699370dbd45ef3a86b1fb5f494d373132911b27e","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                  {\u0027net\u0027: network.id, \u0027action\u0027: action})"},{"line_number":167,"context_line":"        if self.conf.bulk_reloads and action \u003d\u003d \u0027reload_allocations\u0027:"},{"line_number":168,"context_line":"            LOG.debug(\"Call deferred to bulk load\")"},{"line_number":169,"context_line":"            with lockutils.lock(\u0027bulk_allocation_%s\u0027 % network.id):"},{"line_number":170,"context_line":"                self._network_bulk_allocations[network.id] \u003d True"},{"line_number":171,"context_line":"            return True"},{"line_number":172,"context_line":"        if action \u003d\u003d \u0027bulk_reload_allocations\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_28565c2b","line":169,"range":{"start_line":169,"start_character":12,"end_line":169,"end_character":67},"updated":"2019-09-18 14:36:02.000000000","message":"Why do you need this? Instead of this, why don\u0027t you enable the flag [1] and return? This should not be blocking if we have a process in parallel processing the allocations (greenthread).\n\n[1] self._network_bulk_allocations[network.id] \u003d True","commit_id":"afd72fd30e06ebcd63c4e8d1de2b1761df3af65d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0fe732ee9b834f3aaaa97f7e9a9b8a57f886b213","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                  {\u0027net\u0027: network.id, \u0027action\u0027: action})"},{"line_number":167,"context_line":"        if self.conf.bulk_reloads and action \u003d\u003d \u0027reload_allocations\u0027:"},{"line_number":168,"context_line":"            LOG.debug(\"Call deferred to bulk load\")"},{"line_number":169,"context_line":"            with lockutils.lock(\u0027bulk_allocation_%s\u0027 % network.id):"},{"line_number":170,"context_line":"                self._network_bulk_allocations[network.id] \u003d True"},{"line_number":171,"context_line":"            return True"},{"line_number":172,"context_line":"        if action \u003d\u003d \u0027bulk_reload_allocations\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_0461fd36","line":169,"range":{"start_line":169,"start_character":12,"end_line":169,"end_character":67},"in_reply_to":"3fa7e38b_28565c2b","updated":"2019-09-19 06:03:12.000000000","message":"Done","commit_id":"afd72fd30e06ebcd63c4e8d1de2b1761df3af65d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"394814633342db5316489d9b618e3cdb510396fc","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        self.periodic_resync()"},{"line_number":146,"context_line":"        self.start_ready_ports_loop()"},{"line_number":147,"context_line":"        eventlet.spawn_n(self._process_loop)"},{"line_number":148,"context_line":"        if self.conf.bulk_reload_interval:"},{"line_number":149,"context_line":"            eventlet.spawn_n(self._reload_bulk_allocations)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def _reload_bulk_allocations(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_8b15cae7","line":148,"updated":"2019-10-24 14:17:24.000000000","message":"Do we want to check this is \u003e 0, or use min\u003d0 in the config definition?  I guess we don\u0027t always check in other code.","commit_id":"e5203bfbfc3166932ef3e2eac4910c903f06f596"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e65fc311a445dab35ec2a2e056307f06326e7a69","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        self.periodic_resync()"},{"line_number":146,"context_line":"        self.start_ready_ports_loop()"},{"line_number":147,"context_line":"        eventlet.spawn_n(self._process_loop)"},{"line_number":148,"context_line":"        if self.conf.bulk_reload_interval:"},{"line_number":149,"context_line":"            eventlet.spawn_n(self._reload_bulk_allocations)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def _reload_bulk_allocations(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_0f29bf35","line":148,"in_reply_to":"3fa7e38b_8b15cae7","updated":"2019-10-28 09:32:54.000000000","message":"Done","commit_id":"e5203bfbfc3166932ef3e2eac4910c903f06f596"},{"author":{"_account_id":25089,"name":"MarkMielke","email":"mark.mielke@gmail.com","username":"MarkMielke"},"change_message_id":"ff3bc00dd298c83c891534ceae7d474d1c6ef004","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            for network_id in self._network_bulk_allocations.keys():"},{"line_number":154,"context_line":"                network \u003d self.cache.get_network_by_id(network_id)"},{"line_number":155,"context_line":"                self.call_driver(\u0027bulk_reload_allocations\u0027, network)"},{"line_number":156,"context_line":"                del self._network_bulk_allocations[network_id]"},{"line_number":157,"context_line":"            eventlet.greenthread.sleep(self.conf.bulk_reload_interval)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def call_driver(self, action, network, **action_kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_c03e1be2","line":156,"updated":"2019-12-31 17:28:42.000000000","message":"Does the order of these instructions allow for a race condition? I\u0027m wondering if you should do the del first, allowing for new updates to arrive, and ensure that another reload will be scheduled after the next interval passes?","commit_id":"a545da420cad0bbf6a150939af5e0b9c6c424c01"},{"author":{"_account_id":25089,"name":"MarkMielke","email":"mark.mielke@gmail.com","username":"MarkMielke"},"change_message_id":"ff3bc00dd298c83c891534ceae7d474d1c6ef004","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                network \u003d self.cache.get_network_by_id(network_id)"},{"line_number":155,"context_line":"                self.call_driver(\u0027bulk_reload_allocations\u0027, network)"},{"line_number":156,"context_line":"                del self._network_bulk_allocations[network_id]"},{"line_number":157,"context_line":"            eventlet.greenthread.sleep(self.conf.bulk_reload_interval)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def call_driver(self, action, network, **action_kwargs):"},{"line_number":160,"context_line":"        \"\"\"Invoke an action on a DHCP driver instance.\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_06076c19","line":157,"updated":"2019-12-31 17:28:42.000000000","message":"The sleep interval seems an arbitrary limit on how frequently the reload will happen, causing some reloads to be delayed and others to be accelerated depending upon when they are added to the work list, and when the sleep interval elapses. This makes me wonder if 1 second is a good choice to reduce the average latency in the general case, but still permit updates to accumulate?\n\nWhat about this variation?\n\nfrom eventlet import event\nimport eventlet\n...\nself._reload_allocation_networks \u003d {}\nself._reload_allocation_event \u003d event.Event()\n...\ndef _reload_bulk_allocations(self):\n    while True:\n        network_id \u003d self._reload_allocation_event.wait()\n        if network_id in self._reload_allocation_networks:\n            del self._reload_allocation_networks[network_id]\n            network \u003d self.cache.get_network_by_id(network_id)\n            self.call_driver(\u0027bulk_reload_allocations\u0027, network)\n            eventlet.greenthread.sleep(0)\n...\n        self._reload_allocation_networks[network.id] \u003d True\n        self._reload_allocation_event.send(network_id)\n\n\n\nAs written, all reload_allocations should be asynchronous in near real-time, where the time to complete the reload_allocation ends up being the time to accumulate other work. Although, Possibly the sleep(0) is too short to allow other work to get scheduled.\n\nJust a thought... in the end, I think a 1 or 2 second bulk_reload_interval might be a good default choice that allows some work to merge before being actioned.","commit_id":"a545da420cad0bbf6a150939af5e0b9c6c424c01"}],"neutron/conf/agent/dhcp.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"699370dbd45ef3a86b1fb5f494d373132911b27e","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                      \u0027server.\u0027)),"},{"line_number":72,"context_line":"    cfg.BoolOpt(\u0027bulk_reloads\u0027, default\u003dFalse,"},{"line_number":73,"context_line":"                help\u003d_(\"Allows for bulk network updates\")),"},{"line_number":74,"context_line":"    cfg.IntOpt(\u0027bulk_reload_interval\u0027, default\u003d5,"},{"line_number":75,"context_line":"               help\u003d_(\u0027Time to sleep between bulk reloads\u0027)),"},{"line_number":76,"context_line":"]"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_28b5fc31","line":74,"range":{"start_line":74,"start_character":16,"end_line":74,"end_character":36},"updated":"2019-09-18 14:36:02.000000000","message":"nit: In order to reduce the number of config options, can we make this one also a flag to enable/disable?\n\ncfg.IntOpt(\u0027bulk_reload_interval\u0027, default\u003d0,\nhelp\u003d_(\u0027Time to sleep between bulk reloads, If \"0\", bulk network updates are disabled\u0027)","commit_id":"afd72fd30e06ebcd63c4e8d1de2b1761df3af65d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0fe732ee9b834f3aaaa97f7e9a9b8a57f886b213","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                      \u0027server.\u0027)),"},{"line_number":72,"context_line":"    cfg.BoolOpt(\u0027bulk_reloads\u0027, default\u003dFalse,"},{"line_number":73,"context_line":"                help\u003d_(\"Allows for bulk network updates\")),"},{"line_number":74,"context_line":"    cfg.IntOpt(\u0027bulk_reload_interval\u0027, default\u003d5,"},{"line_number":75,"context_line":"               help\u003d_(\u0027Time to sleep between bulk reloads\u0027)),"},{"line_number":76,"context_line":"]"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_64e471ad","line":74,"range":{"start_line":74,"start_character":16,"end_line":74,"end_character":36},"in_reply_to":"3fa7e38b_28b5fc31","updated":"2019-09-19 06:03:12.000000000","message":"Done","commit_id":"afd72fd30e06ebcd63c4e8d1de2b1761df3af65d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"fd135dab66ea9be528fb38fcd1e16b3b05247f88","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                      \u0027Should not exceed connection pool size configured on \u0027"},{"line_number":71,"context_line":"                      \u0027server.\u0027)),"},{"line_number":72,"context_line":"    cfg.IntOpt(\u0027bulk_reload_interval\u0027, default\u003d0,"},{"line_number":73,"context_line":"               help\u003d_(\u0027Time to sleep between bulk reloads. This will only be \u0027"},{"line_number":74,"context_line":"                      \u0027invoked if the value is not 0.\u0027)),"},{"line_number":75,"context_line":"]"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_5f745e68","line":73,"range":{"start_line":73,"start_character":50,"end_line":73,"end_character":57},"updated":"2019-09-23 14:49:43.000000000","message":"nit: reloads of what? Do You think it will be enough to understand this message and what is this config option for without context of the patch?","commit_id":"876236ad2ff69bdb409461077add1faccf14ff11"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b27fed57ff4154e388a484e4e82ff1bd5bad2eb3","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                      \u0027Should not exceed connection pool size configured on \u0027"},{"line_number":71,"context_line":"                      \u0027server.\u0027)),"},{"line_number":72,"context_line":"    cfg.IntOpt(\u0027bulk_reload_interval\u0027, default\u003d0,"},{"line_number":73,"context_line":"               help\u003d_(\u0027Time to sleep between bulk reloads. This will only be \u0027"},{"line_number":74,"context_line":"                      \u0027invoked if the value is not 0.\u0027)),"},{"line_number":75,"context_line":"]"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_43b3204e","line":73,"range":{"start_line":73,"start_character":50,"end_line":73,"end_character":57},"in_reply_to":"3fa7e38b_5f745e68","updated":"2019-09-24 05:30:06.000000000","message":"Done","commit_id":"876236ad2ff69bdb409461077add1faccf14ff11"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"394814633342db5316489d9b618e3cdb510396fc","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                      \u0027This will only be invoked if the value is not 0. \u0027"},{"line_number":75,"context_line":"                      \u0027If a network has N updates in X seconds then \u0027"},{"line_number":76,"context_line":"                      \u0027we will reload once with the port changes in the X \u0027"},{"line_number":77,"context_line":"                      \u0027seconds and not N times.\u0027)),"},{"line_number":78,"context_line":"]"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"DHCP_OPTS \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_eb979e39","line":77,"updated":"2019-10-24 14:17:24.000000000","message":"Is there a reason we don\u0027t want to always do this?  Like default of 1 second (or .5)?  Or set a maximum?","commit_id":"e5203bfbfc3166932ef3e2eac4910c903f06f596"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e65fc311a445dab35ec2a2e056307f06326e7a69","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                      \u0027This will only be invoked if the value is not 0. \u0027"},{"line_number":75,"context_line":"                      \u0027If a network has N updates in X seconds then \u0027"},{"line_number":76,"context_line":"                      \u0027we will reload once with the port changes in the X \u0027"},{"line_number":77,"context_line":"                      \u0027seconds and not N times.\u0027)),"},{"line_number":78,"context_line":"]"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"DHCP_OPTS \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_afe66b15","line":77,"in_reply_to":"3fa7e38b_eb979e39","updated":"2019-10-28 09:32:54.000000000","message":"The reason is just for backwards compat. The new functionality is disabled by default.\nWe have seen a significant improvement when there are many ports created at once and the default is 3 seconds.","commit_id":"e5203bfbfc3166932ef3e2eac4910c903f06f596"}],"releasenotes/notes/dhcp-bulk-updates-0150b764bb1b165f.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"96ccc6da47f29b29d131d9916455391c9b72e98f","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    configuration variable that will enable bulk updates."},{"line_number":9,"context_line":"    This means that the dnsmasq will only be restarted once"},{"line_number":10,"context_line":"    in a period and not N times."},{"line_number":11,"context_line":"    The new option \u0027bulk_reload_interval\u0027 indicates how"},{"line_number":12,"context_line":"    often the agent should be reloaded. The default value"},{"line_number":13,"context_line":"    is 0 which means that the original functionality is the"},{"line_number":14,"context_line":"    default."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3fa7e38b_8d54bb57","line":11,"range":{"start_line":11,"start_character":4,"end_line":11,"end_character":41},"updated":"2020-01-06 17:02:10.000000000","message":"s/A new configuration option, ``bulk_reload_interval``, ...\n\nWithout the `` it will not show as bold in the relnote","commit_id":"a545da420cad0bbf6a150939af5e0b9c6c424c01"}]}
