)]}'
{"designate/backend/impl_multi.py":[{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"feb42f013d906230c51093a966b320063e99ebc1","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    def delete_tsigkey(self, context, tsigkey):"},{"line_number":76,"context_line":"        self.slave.delete_tsigkey(context, tsigkey)"},{"line_number":77,"context_line":"        self.master.delete_tsigkey(context, tsigkey)"},{"line_number":78,"context_line":"        #TODO(artom) What happens if the delete on master fails?"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def create_domain(self, context, domain):"},{"line_number":81,"context_line":"        self.master.create_domain(context, domain)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FJ74%3D","line":78,"updated":"2013-11-13 16:52:51.000000000","message":"We should re-create it on the slave, and re-raise I think.","commit_id":"e31866147578b25a2389a95e7368bfd4a6ae377c"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"58109273aef62dee3411d55320b47ae962442109","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    def delete_tsigkey(self, context, tsigkey):"},{"line_number":76,"context_line":"        self.slave.delete_tsigkey(context, tsigkey)"},{"line_number":77,"context_line":"        self.master.delete_tsigkey(context, tsigkey)"},{"line_number":78,"context_line":"        #TODO(artom) What happens if the delete on master fails?"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def create_domain(self, context, domain):"},{"line_number":81,"context_line":"        self.master.create_domain(context, domain)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FJbE%3D","line":78,"in_reply_to":"AAAATn%2F%2FJ74%3D","updated":"2013-11-13 20:01:26.000000000","message":"Re-create it? That implies saving it somewhere. For tsigkeys it\u0027s not so bad (we can go through Central\u0027s get_tsigkey), but (see below)...","commit_id":"e31866147578b25a2389a95e7368bfd4a6ae377c"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"33f2e36ebaa3ea8636ec5f7a4c90144b37874040","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    def delete_tsigkey(self, context, tsigkey):"},{"line_number":76,"context_line":"        self.slave.delete_tsigkey(context, tsigkey)"},{"line_number":77,"context_line":"        self.master.delete_tsigkey(context, tsigkey)"},{"line_number":78,"context_line":"        #TODO(artom) What happens if the delete on master fails?"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def create_domain(self, context, domain):"},{"line_number":81,"context_line":"        self.master.create_domain(context, domain)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2B5pI%3D","line":78,"in_reply_to":"AAAATn%2F%2FJbE%3D","updated":"2013-11-18 20:25:24.000000000","message":"Done","commit_id":"e31866147578b25a2389a95e7368bfd4a6ae377c"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"feb42f013d906230c51093a966b320063e99ebc1","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def delete_domain(self, context, domain):"},{"line_number":92,"context_line":"        self.slave.delete_domain(context, domain)"},{"line_number":93,"context_line":"        self.master.delete_domain(context, domain)"},{"line_number":94,"context_line":"        #TODO(artom) What happens if the delete on master fails?"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def create_server(self, context, server):"},{"line_number":97,"context_line":"        self.master.create_server(context, server)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FJ7w%3D","line":94,"updated":"2013-11-13 16:52:51.000000000","message":"Again :) We should re-create it on the slave, and re-raise I think.","commit_id":"e31866147578b25a2389a95e7368bfd4a6ae377c"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"58109273aef62dee3411d55320b47ae962442109","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def delete_domain(self, context, domain):"},{"line_number":92,"context_line":"        self.slave.delete_domain(context, domain)"},{"line_number":93,"context_line":"        self.master.delete_domain(context, domain)"},{"line_number":94,"context_line":"        #TODO(artom) What happens if the delete on master fails?"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def create_server(self, context, server):"},{"line_number":97,"context_line":"        self.master.create_server(context, server)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FJZE%3D","line":94,"in_reply_to":"AAAATn%2F%2FJ7w%3D","updated":"2013-11-13 20:01:26.000000000","message":"... (continued from above) but for domains it would mean we central.get_domain then central.find_records, save all that somewhere and recreate it if master.delete fails. Does it really make sense to go back up to Central for something that should be backend\u0027s responsibility? But then are we willing to add methods to the existing backends that essentially do stash(domain) apply_stash() for only this particular situation?","commit_id":"e31866147578b25a2389a95e7368bfd4a6ae377c"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"33f2e36ebaa3ea8636ec5f7a4c90144b37874040","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def delete_domain(self, context, domain):"},{"line_number":92,"context_line":"        self.slave.delete_domain(context, domain)"},{"line_number":93,"context_line":"        self.master.delete_domain(context, domain)"},{"line_number":94,"context_line":"        #TODO(artom) What happens if the delete on master fails?"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def create_server(self, context, server):"},{"line_number":97,"context_line":"        self.master.create_server(context, server)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2B5pE%3D","line":94,"in_reply_to":"AAAATn%2F%2FJZE%3D","updated":"2013-11-18 20:25:24.000000000","message":"Done","commit_id":"e31866147578b25a2389a95e7368bfd4a6ae377c"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"feb42f013d906230c51093a966b320063e99ebc1","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    def delete_server(self, context, server):"},{"line_number":108,"context_line":"        self.slave.delete_server(context, server)"},{"line_number":109,"context_line":"        self.master.delete_server(context, server)"},{"line_number":110,"context_line":"        #TODO(artom) What happens if the delete on master fails?"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def create_record(self, context, domain, record):"},{"line_number":113,"context_line":"        self.master.create_record(context, domain, record)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FJ7k%3D","line":110,"updated":"2013-11-13 16:52:51.000000000","message":".. :)","commit_id":"e31866147578b25a2389a95e7368bfd4a6ae377c"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"feb42f013d906230c51093a966b320063e99ebc1","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def ping(self, context):"},{"line_number":122,"context_line":"        self.master.ping(context)"},{"line_number":123,"context_line":"        self.slave.ping(context)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def start(self):"},{"line_number":126,"context_line":"        self.master.start()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FJ64%3D","line":123,"updated":"2013-11-13 16:52:51.000000000","message":"ping actually returns some info, We\u0027ll need to \"merge\" the data and return it","commit_id":"e31866147578b25a2389a95e7368bfd4a6ae377c"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"33f2e36ebaa3ea8636ec5f7a4c90144b37874040","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def ping(self, context):"},{"line_number":122,"context_line":"        self.master.ping(context)"},{"line_number":123,"context_line":"        self.slave.ping(context)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def start(self):"},{"line_number":126,"context_line":"        self.master.start()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2B5jo%3D","line":123,"in_reply_to":"AAAATn%2F%2FJ64%3D","updated":"2013-11-18 20:25:24.000000000","message":"Done","commit_id":"e31866147578b25a2389a95e7368bfd4a6ae377c"},{"author":{"_account_id":741,"name":"Kiall Mac Innes","email":"kiall@macinnes.ie","username":"kiall"},"change_message_id":"feb42f013d906230c51093a966b320063e99ebc1","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self.master.ping(context)"},{"line_number":123,"context_line":"        self.slave.ping(context)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def start(self):"},{"line_number":126,"context_line":"        self.master.start()"},{"line_number":127,"context_line":"        self.slave.start()"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FJ7E%3D","line":125,"updated":"2013-11-13 16:52:51.000000000","message":"These start/stop methods should go up to the top, near the constructor,\n\nalso .. a wait method is needed I believe?","commit_id":"e31866147578b25a2389a95e7368bfd4a6ae377c"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"33f2e36ebaa3ea8636ec5f7a4c90144b37874040","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        self.master.ping(context)"},{"line_number":123,"context_line":"        self.slave.ping(context)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def start(self):"},{"line_number":126,"context_line":"        self.master.start()"},{"line_number":127,"context_line":"        self.slave.start()"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2B5oo%3D","line":125,"in_reply_to":"AAAATn%2F%2FJ7E%3D","updated":"2013-11-18 20:25:24.000000000","message":"No wait method that I could find...\n\nBut moved to the top in next patchset.","commit_id":"e31866147578b25a2389a95e7368bfd4a6ae377c"},{"author":{"_account_id":8101,"name":"Emmanuel Ankutse","email":"emmanuel.ankutse@rackspace.com","username":"emmanuel.ankutse"},"change_message_id":"137978ad8c31bb3c6e9923bf551ab9daf70906da","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self.master.stop()"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def create_tsigkey(self, context, tsigkey):"},{"line_number":77,"context_line":"        self.master.create_tsigkey(context, tsigkey)"},{"line_number":78,"context_line":"        try:"},{"line_number":79,"context_line":"            self.slave.create_tsigkey(context, tsigkey)"},{"line_number":80,"context_line":"        except (exceptions.Base, exceptions.Backend):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BvXk%3D","line":77,"updated":"2013-11-20 21:00:36.000000000","message":"If we fail when we try to create on master, should we still try to create on the slave? Or is an exception thrown that gets us out of here completely?","commit_id":"2172352dbacea44fc2384e8a65be11f45305783e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"92aa1bb3937b16566d915b0955a665e06f6f204d","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self.master.stop()"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def create_tsigkey(self, context, tsigkey):"},{"line_number":77,"context_line":"        self.master.create_tsigkey(context, tsigkey)"},{"line_number":78,"context_line":"        try:"},{"line_number":79,"context_line":"            self.slave.create_tsigkey(context, tsigkey)"},{"line_number":80,"context_line":"        except (exceptions.Base, exceptions.Backend):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BvTo%3D","line":77,"in_reply_to":"AAAATn%2F%2BvXk%3D","updated":"2013-11-22 18:06:34.000000000","message":"If master.create raises an exception, it gets propagated and slave.create is never reached.","commit_id":"2172352dbacea44fc2384e8a65be11f45305783e"},{"author":{"_account_id":8101,"name":"Emmanuel Ankutse","email":"emmanuel.ankutse@rackspace.com","username":"emmanuel.ankutse"},"change_message_id":"137978ad8c31bb3c6e9923bf551ab9daf70906da","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        self.master.update_tsigkey(context, tsigkey)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def delete_tsigkey(self, context, tsigkey):"},{"line_number":88,"context_line":"        self.slave.delete_tsigkey(context, tsigkey)"},{"line_number":89,"context_line":"        try:"},{"line_number":90,"context_line":"            self.master.delete_tsigkey(context, tsigkey)"},{"line_number":91,"context_line":"        except (exceptions.Base, exceptions.Backend):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BvW0%3D","line":88,"updated":"2013-11-20 21:00:36.000000000","message":"My previous question/comment from line 77 applies here too","commit_id":"2172352dbacea44fc2384e8a65be11f45305783e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"92aa1bb3937b16566d915b0955a665e06f6f204d","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        self.master.update_tsigkey(context, tsigkey)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def delete_tsigkey(self, context, tsigkey):"},{"line_number":88,"context_line":"        self.slave.delete_tsigkey(context, tsigkey)"},{"line_number":89,"context_line":"        try:"},{"line_number":90,"context_line":"            self.master.delete_tsigkey(context, tsigkey)"},{"line_number":91,"context_line":"        except (exceptions.Base, exceptions.Backend):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BvTc%3D","line":88,"in_reply_to":"AAAATn%2F%2BvW0%3D","updated":"2013-11-22 18:06:34.000000000","message":"Same answer - if slave.delete an exception, it gets propagated and master.delete is never reached.","commit_id":"2172352dbacea44fc2384e8a65be11f45305783e"},{"author":{"_account_id":8101,"name":"Emmanuel Ankutse","email":"emmanuel.ankutse@rackspace.com","username":"emmanuel.ankutse"},"change_message_id":"137978ad8c31bb3c6e9923bf551ab9daf70906da","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                self.slave.create_tsigkey(context, tsigkey)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def create_domain(self, context, domain):"},{"line_number":96,"context_line":"        self.master.create_domain(context, domain)"},{"line_number":97,"context_line":"        try:"},{"line_number":98,"context_line":"            self.slave.create_domain(context, domain)"},{"line_number":99,"context_line":"        except (exceptions.Base, exceptions.Backend):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BvWw%3D","line":96,"updated":"2013-11-20 21:00:36.000000000","message":"My previous question/comment from line 77 applies here too","commit_id":"2172352dbacea44fc2384e8a65be11f45305783e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"92aa1bb3937b16566d915b0955a665e06f6f204d","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                self.slave.create_tsigkey(context, tsigkey)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def create_domain(self, context, domain):"},{"line_number":96,"context_line":"        self.master.create_domain(context, domain)"},{"line_number":97,"context_line":"        try:"},{"line_number":98,"context_line":"            self.slave.create_domain(context, domain)"},{"line_number":99,"context_line":"        except (exceptions.Base, exceptions.Backend):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BvS4%3D","line":96,"in_reply_to":"AAAATn%2F%2BvWw%3D","updated":"2013-11-22 18:06:34.000000000","message":";)","commit_id":"2172352dbacea44fc2384e8a65be11f45305783e"},{"author":{"_account_id":8101,"name":"Emmanuel Ankutse","email":"emmanuel.ankutse@rackspace.com","username":"emmanuel.ankutse"},"change_message_id":"137978ad8c31bb3c6e9923bf551ab9daf70906da","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        except (exceptions.Base, exceptions.Backend):"},{"line_number":137,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":138,"context_line":"                self.slave.create_server(context, server)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def create_record(self, context, domain, record):"},{"line_number":141,"context_line":"        self.master.create_record(context, domain, record)"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BvUs%3D","line":139,"updated":"2013-11-20 21:00:36.000000000","message":"Following three record related methods only call to the master. Should we not be calling to the slave as well?","commit_id":"2172352dbacea44fc2384e8a65be11f45305783e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"92aa1bb3937b16566d915b0955a665e06f6f204d","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        except (exceptions.Base, exceptions.Backend):"},{"line_number":137,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":138,"context_line":"                self.slave.create_server(context, server)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def create_record(self, context, domain, record):"},{"line_number":141,"context_line":"        self.master.create_record(context, domain, record)"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BvS8%3D","line":139,"in_reply_to":"AAAATn%2F%2BvUs%3D","updated":"2013-11-22 18:06:34.000000000","message":"My thinking is that since XFR exists to do zone transfers between master and slaves, records need only be updated on the master. But that\u0027s open to debate...","commit_id":"2172352dbacea44fc2384e8a65be11f45305783e"}],"designate/tests/test_backend/test_multi.py":[{"author":{"_account_id":8101,"name":"Emmanuel Ankutse","email":"emmanuel.ankutse@rackspace.com","username":"emmanuel.ankutse"},"change_message_id":"137978ad8c31bb3c6e9923bf551ab9daf70906da","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.multi.slave.create_tsigkey \u003d MagicMock("},{"line_number":39,"context_line":"            side_effect\u003dexceptions.Backend)"},{"line_number":40,"context_line":"        self.assertRaises(exceptions.Backend, self.multi.create_tsigkey,"},{"line_number":41,"context_line":"                          context, tsigkey)"},{"line_number":42,"context_line":"        self.assertEqual(self.backends.mock_calls,"},{"line_number":43,"context_line":"                         [call.master.create_tsigkey(context, tsigkey),"},{"line_number":44,"context_line":"                          call.slave.create_tsigkey(context, tsigkey),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2Bvgc%3D","line":41,"updated":"2013-11-20 21:00:36.000000000","message":"Please add a short comment here to indicate what is happening here. I think excerpts from comments at the start of impl_multi.py will do.","commit_id":"2172352dbacea44fc2384e8a65be11f45305783e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"92aa1bb3937b16566d915b0955a665e06f6f204d","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.multi.slave.create_tsigkey \u003d MagicMock("},{"line_number":39,"context_line":"            side_effect\u003dexceptions.Backend)"},{"line_number":40,"context_line":"        self.assertRaises(exceptions.Backend, self.multi.create_tsigkey,"},{"line_number":41,"context_line":"                          context, tsigkey)"},{"line_number":42,"context_line":"        self.assertEqual(self.backends.mock_calls,"},{"line_number":43,"context_line":"                         [call.master.create_tsigkey(context, tsigkey),"},{"line_number":44,"context_line":"                          call.slave.create_tsigkey(context, tsigkey),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BvSE%3D","line":41,"in_reply_to":"AAAATn%2F%2Bvgc%3D","updated":"2013-11-22 18:06:34.000000000","message":"Done","commit_id":"2172352dbacea44fc2384e8a65be11f45305783e"}]}
