)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"61b06b0d6e4653e9942439c782da173f82a3e7de","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Allows registration to time out, avoiding immediate ring rebalances."},{"line_number":10,"context_line":"- Useful for restart situations, such as upgrade."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ie40a7f878c2845dc9cb8fc8082df5d88adb28d0b"},{"line_number":13,"context_line":"Closes-bug: 1418474"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da86d52c_25434914","line":11,"updated":"2015-02-17 22:19:40.000000000","message":"I think we should add a DocImpact tag, because it is worth documenting this.\n\nAlso, might be useful to be more explicit/add more about \u0027registration to time out\u0027: so that ring rebalances will happen after the timeout which is configured via the xyz config variable (defaults to 60 seconds).\n\n(Add more details here makes it easier to remember/know what to write in whatever install docn will be updated.)","commit_id":"d9cf76dfc33aa23b124587375ae3408cbf0aec0f"}],"ironic/common/service.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c8b91c24693d41a9c8eaab20f25d19f8e3be21c4","unresolved":false,"context_lines":[{"line_number":51,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def _set_sigusr1_handler(handler):"},{"line_number":55,"context_line":"    signal.signal(signal.SIGUSR1, handler)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_405be7f5","line":54,"updated":"2015-02-17 11:28:54.000000000","message":"nit: this single-line function only makes code harder to read, better inline it","commit_id":"d9cf76dfc33aa23b124587375ae3408cbf0aec0f"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"5b7ada58da5deab488cc78b91d72a83fd065135d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def _set_sigusr1_handler(handler):"},{"line_number":55,"context_line":"    signal.signal(signal.SIGUSR1, handler)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_d54769a1","line":54,"in_reply_to":"da86d52c_405be7f5","updated":"2015-02-18 12:02:26.000000000","message":"Done","commit_id":"d9cf76dfc33aa23b124587375ae3408cbf0aec0f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f277eca2f32d8176b93c11e3fb113395bb145e06","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                 {\u0027service\u0027: self.topic, \u0027host\u0027: self.host})"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def _handle_signal(self, signo, frame):"},{"line_number":110,"context_line":"        _set_sigusr1_handler(signal.SIG_DFL)"},{"line_number":111,"context_line":"        self.deregister \u003d False"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def handle_signal(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_6d7d2db2","line":110,"updated":"2015-02-17 21:24:53.000000000","message":"Wondering -- why do this? Does it matter if _handle_signal is called again?","commit_id":"d9cf76dfc33aa23b124587375ae3408cbf0aec0f"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"5b7ada58da5deab488cc78b91d72a83fd065135d","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                 {\u0027service\u0027: self.topic, \u0027host\u0027: self.host})"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def _handle_signal(self, signo, frame):"},{"line_number":110,"context_line":"        _set_sigusr1_handler(signal.SIG_DFL)"},{"line_number":111,"context_line":"        self.deregister \u003d False"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def handle_signal(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_b5f8354b","line":110,"in_reply_to":"da86d52c_6d7d2db2","updated":"2015-02-18 12:02:26.000000000","message":"Not really, no - I just copied the pattern from openstack.common.service. Removed.","commit_id":"d9cf76dfc33aa23b124587375ae3408cbf0aec0f"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"24c2e7362e0afb8316544a029c745d6ff4503450","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                 {\u0027service\u0027: self.topic, \u0027host\u0027: self.host})"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _handle_signal(self, signo, frame):"},{"line_number":106,"context_line":"        self.deregister \u003d False"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def handle_signal(self):"},{"line_number":109,"context_line":"        \"\"\"Add a signal handler for SIGUSR1."}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_0abff7d0","line":106,"updated":"2015-02-19 02:24:32.000000000","message":"* There should be some logging here - I would vote for a LOG.info\n\n* Should we just invert self.deregister (set to True if it is False, set to False if it is True) just in case for some reason somebody wants to revert it back to the normal state ?","commit_id":"58412a1bec7f36bc525649164e0a4924621c0278"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"eee0db7c425755b4f422f208e700394da3bc58a8","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                 {\u0027service\u0027: self.topic, \u0027host\u0027: self.host})"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _handle_signal(self, signo, frame):"},{"line_number":106,"context_line":"        self.deregister \u003d False"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def handle_signal(self):"},{"line_number":109,"context_line":"        \"\"\"Add a signal handler for SIGUSR1."}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_be8548ae","line":106,"in_reply_to":"da86d52c_0abff7d0","updated":"2015-02-19 09:38:39.000000000","message":"Logging - done.\n\nInversion - this starts to make the trigger a little more complex. Rather than being idempotent, it is now a toggle switch. As there is no feedback channel (besides grepping the logs after the above addition), odd corner cases might start to creep in. Of course, with no feedback channel you can\u0027t guarantee it\u0027s been successful either... Perhaps if someone can think of a sensible use case for a toggle then it should be added.","commit_id":"58412a1bec7f36bc525649164e0a4924621c0278"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"a21d905f5c8608a7543033d78b030c12dbd20b0b","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                 {\u0027service\u0027: self.topic, \u0027host\u0027: self.host})"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _handle_signal(self, signo, frame):"},{"line_number":106,"context_line":"        self.deregister \u003d False"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def handle_signal(self):"},{"line_number":109,"context_line":"        \"\"\"Add a signal handler for SIGUSR1."}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_ef41c763","line":106,"in_reply_to":"da86d52c_be8548ae","updated":"2015-02-19 11:35:53.000000000","message":"Agreed for the toggle.  That was just a question.","commit_id":"58412a1bec7f36bc525649164e0a4924621c0278"}],"ironic/tests/conductor/test_manager.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f277eca2f32d8176b93c11e3fb113395bb145e06","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        res \u003d objects.Conductor.get_by_hostname(self.context, self.hostname)"},{"line_number":204,"context_line":"        self.assertEqual(self.hostname, res[\u0027hostname\u0027])"},{"line_number":205,"context_line":"        self.service.del_host(deregister\u003dFalse)"},{"line_number":206,"context_line":"        self.assertEqual(self.hostname, res[\u0027hostname\u0027])"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @mock.patch.object(driver_factory.DriverFactory, \u0027__getitem__\u0027,"},{"line_number":209,"context_line":"                       lambda *args: mock.MagicMock())"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_93a36442","line":206,"updated":"2015-02-17 21:24:53.000000000","message":"I\u0027m not sure, but don\u0027t you want to call objects.Conductor.get_by_hostname() again, to see that self. hostname is still there?","commit_id":"d9cf76dfc33aa23b124587375ae3408cbf0aec0f"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"5b7ada58da5deab488cc78b91d72a83fd065135d","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        res \u003d objects.Conductor.get_by_hostname(self.context, self.hostname)"},{"line_number":204,"context_line":"        self.assertEqual(self.hostname, res[\u0027hostname\u0027])"},{"line_number":205,"context_line":"        self.service.del_host(deregister\u003dFalse)"},{"line_number":206,"context_line":"        self.assertEqual(self.hostname, res[\u0027hostname\u0027])"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @mock.patch.object(driver_factory.DriverFactory, \u0027__getitem__\u0027,"},{"line_number":209,"context_line":"                       lambda *args: mock.MagicMock())"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_95adf133","line":206,"in_reply_to":"da86d52c_93a36442","updated":"2015-02-18 12:02:26.000000000","message":"Done","commit_id":"d9cf76dfc33aa23b124587375ae3408cbf0aec0f"}]}
