)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"935aadd5dffb5c11965fee9fc85375a9eedb495e","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If an administrator has enabled the logging of guest"},{"line_number":10,"context_line":"consoles on XCP/XenServer, this enables nova to return"},{"line_number":11,"context_line":"the last MB of those logs to the user."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The management of the logs on the server is a little"},{"line_number":14,"context_line":"tricky, and will be sorted in a later patch."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAPH%2F%2Fhhs%3D","line":11,"updated":"2013-05-31 10:11:29.000000000","message":"Is there a link / simple description of how to enable logging?\nProbably need DocImpact too so we can describe how to enable this functionality.","commit_id":"b97dc5e2275d1d962d1d6a82892ab17d3c084330"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"935aadd5dffb5c11965fee9fc85375a9eedb495e","unresolved":false,"context_lines":[{"line_number":11,"context_line":"the last MB of those logs to the user."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The management of the logs on the server is a little"},{"line_number":14,"context_line":"tricky, and will be sorted in a later patch."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change was based on this previous idea:"},{"line_number":17,"context_line":"https://review.openstack.org/#/c/17959/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAPH%2F%2Fhhc%3D","line":14,"updated":"2013-05-31 10:11:29.000000000","message":"By this do you mean that if you enable logging then you\u0027ll fill up dom0?  Perhaps that should be documented in the same thing as above.  Nova probably doesn\u0027t need a patch for that, but it should be in the OpenStack supplemental pack setup if it enables logging.\n\nAlternatively is there a Nova periodic task we could use to call a plugin to rotate the log files?","commit_id":"b97dc5e2275d1d962d1d6a82892ab17d3c084330"}],"nova/tests/virt/xenapi/test_vmops.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fde21718fe14d3acd3d2fa5c04f93d6d594666a8","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        vm_rec \u003d xenapi_fake.get_record(\"VM\", vm_ref)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        self.assertEqual(vm_rec[\"domid\"], self.vmops._get_dom_id(instance))"},{"line_number":209,"context_line":"        xenapi_fake.destroy_vm(vm_ref)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def test_get_dom_id_works(self):"},{"line_number":212,"context_line":"        instance \u003d {\"name\": \"dummy\"}"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FhJk%3D","line":209,"updated":"2013-05-31 12:59:29.000000000","message":"Should you save the vm_ref in a list and then call destroy_vm in the tearDown method in case something blows up before this is called?","commit_id":"97eac82cbd59cddaeca2aeeb3febdb13a590242a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"33b428b226855b06aa24c52c010c4ad840248c1f","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        vm_rec \u003d xenapi_fake.get_record(\"VM\", vm_ref)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        self.assertEqual(vm_rec[\"domid\"], self.vmops._get_dom_id(instance))"},{"line_number":209,"context_line":"        xenapi_fake.destroy_vm(vm_ref)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def test_get_dom_id_works(self):"},{"line_number":212,"context_line":"        instance \u003d {\"name\": \"dummy\"}"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FhIA%3D","line":209,"in_reply_to":"AAAAPH%2F%2FhJk%3D","updated":"2013-05-31 13:08:47.000000000","message":"yes, just being lazy, we have logic that in another set of tests somewhere.","commit_id":"97eac82cbd59cddaeca2aeeb3febdb13a590242a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fde21718fe14d3acd3d2fa5c04f93d6d594666a8","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        self.assertEqual(vm_rec[\"domid\"], self.vmops._get_dom_id(instance))"},{"line_number":209,"context_line":"        xenapi_fake.destroy_vm(vm_ref)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def test_get_dom_id_works(self):"},{"line_number":212,"context_line":"        instance \u003d {\"name\": \"dummy\"}"},{"line_number":213,"context_line":"        vm_ref \u003d xenapi_fake.create_vm(\"dummy-rescue\", \"Running\")"},{"line_number":214,"context_line":"        vm_rec \u003d xenapi_fake.get_record(\"VM\", vm_ref)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FhJ0%3D","line":211,"updated":"2013-05-31 12:59:29.000000000","message":"Same method name as on line 203?  How does that work?","commit_id":"97eac82cbd59cddaeca2aeeb3febdb13a590242a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"33b428b226855b06aa24c52c010c4ad840248c1f","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        self.assertEqual(vm_rec[\"domid\"], self.vmops._get_dom_id(instance))"},{"line_number":209,"context_line":"        xenapi_fake.destroy_vm(vm_ref)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def test_get_dom_id_works(self):"},{"line_number":212,"context_line":"        instance \u003d {\"name\": \"dummy\"}"},{"line_number":213,"context_line":"        vm_ref \u003d xenapi_fake.create_vm(\"dummy-rescue\", \"Running\")"},{"line_number":214,"context_line":"        vm_rec \u003d xenapi_fake.get_record(\"VM\", vm_ref)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FhIM%3D","line":211,"in_reply_to":"AAAAPH%2F%2FhJ0%3D","updated":"2013-05-31 13:08:47.000000000","message":"oops, it doesn\u0027t, it just runs the second one.","commit_id":"97eac82cbd59cddaeca2aeeb3febdb13a590242a"}],"nova/virt/xenapi/fake.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fde21718fe14d3acd3d2fa5c04f93d6d594666a8","unresolved":false,"context_lines":[{"line_number":611,"context_line":"        return jsonutils.dumps({\"uptime\": \"fake uptime\"})"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def _plugin_console_get_console_log(self, method, args):"},{"line_number":614,"context_line":"        dom_id \u003d args[\"dom_id\"]"},{"line_number":615,"context_line":"        if dom_id \u003d\u003d 0:"},{"line_number":616,"context_line":"            raise Failure(\u0027Guest does not have a console\u0027)"},{"line_number":617,"context_line":"        return base64.b64encode(zlib.compress(\"dom_id: %s\" % dom_id))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FhKE%3D","line":614,"updated":"2013-05-31 12:59:29.000000000","message":"Safer to do args.get(\"dom_id\", 0) to avoid a KeyError?","commit_id":"97eac82cbd59cddaeca2aeeb3febdb13a590242a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2e33745801d3be054fbfc2d77c49fdaa989316d2","unresolved":false,"context_lines":[{"line_number":611,"context_line":"        return jsonutils.dumps({\"uptime\": \"fake uptime\"})"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def _plugin_console_get_console_log(self, method, args):"},{"line_number":614,"context_line":"        dom_id \u003d args[\"dom_id\"]"},{"line_number":615,"context_line":"        if dom_id \u003d\u003d 0:"},{"line_number":616,"context_line":"            raise Failure(\u0027Guest does not have a console\u0027)"},{"line_number":617,"context_line":"        return base64.b64encode(zlib.compress(\"dom_id: %s\" % dom_id))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FhCc%3D","line":614,"in_reply_to":"AAAAPH%2F%2FhFw%3D","updated":"2013-05-31 13:39:38.000000000","message":"True, I will stick with KeyError for now, its seems simpler.","commit_id":"97eac82cbd59cddaeca2aeeb3febdb13a590242a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bc6a213840537af2aad56bbee3db05ee05f91e7c","unresolved":false,"context_lines":[{"line_number":611,"context_line":"        return jsonutils.dumps({\"uptime\": \"fake uptime\"})"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def _plugin_console_get_console_log(self, method, args):"},{"line_number":614,"context_line":"        dom_id \u003d args[\"dom_id\"]"},{"line_number":615,"context_line":"        if dom_id \u003d\u003d 0:"},{"line_number":616,"context_line":"            raise Failure(\u0027Guest does not have a console\u0027)"},{"line_number":617,"context_line":"        return base64.b64encode(zlib.compress(\"dom_id: %s\" % dom_id))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FhFw%3D","line":614,"in_reply_to":"AAAAPH%2F%2FhH4%3D","updated":"2013-05-31 13:27:01.000000000","message":"Yeah, it would blow up with the Failure you raise if dom_id is 0, which I thought was cleaner than the KeyError, but either works.","commit_id":"97eac82cbd59cddaeca2aeeb3febdb13a590242a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"33b428b226855b06aa24c52c010c4ad840248c1f","unresolved":false,"context_lines":[{"line_number":611,"context_line":"        return jsonutils.dumps({\"uptime\": \"fake uptime\"})"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def _plugin_console_get_console_log(self, method, args):"},{"line_number":614,"context_line":"        dom_id \u003d args[\"dom_id\"]"},{"line_number":615,"context_line":"        if dom_id \u003d\u003d 0:"},{"line_number":616,"context_line":"            raise Failure(\u0027Guest does not have a console\u0027)"},{"line_number":617,"context_line":"        return base64.b64encode(zlib.compress(\"dom_id: %s\" % dom_id))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FhH4%3D","line":614,"in_reply_to":"AAAAPH%2F%2FhKE%3D","updated":"2013-05-31 13:08:47.000000000","message":"so I want it to blow up, because if this is missing its a bug.","commit_id":"97eac82cbd59cddaeca2aeeb3febdb13a590242a"}],"nova/virt/xenapi/vmops.py":[{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"935aadd5dffb5c11965fee9fc85375a9eedb495e","unresolved":false,"context_lines":[{"line_number":1424,"context_line":"    def get_console_output(self, instance):"},{"line_number":1425,"context_line":"        \"\"\"Return last few lines of instance console.\"\"\""},{"line_number":1426,"context_line":"        dom_id \u003d self._get_dom_id(instance, check_rescue\u003dTrue)"},{"line_number":1427,"context_line":""},{"line_number":1428,"context_line":"        try:"},{"line_number":1429,"context_line":"            raw_console_data \u003d self._session.call_plugin(\u0027console\u0027,"},{"line_number":1430,"context_line":"                    \u0027get_console_log\u0027, {\u0027dom_id\u0027: dom_id})"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fhg4%3D","line":1427,"updated":"2013-05-31 10:11:29.000000000","message":"Possibly worth checking that dom_id is not 0?","commit_id":"b97dc5e2275d1d962d1d6a82892ab17d3c084330"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fde21718fe14d3acd3d2fa5c04f93d6d594666a8","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"        except self._session.XenAPI.Failure as exc:"},{"line_number":1437,"context_line":"            LOG.exception(exc)"},{"line_number":1438,"context_line":"            msg \u003d _(\"Guest does not have a console available\")"},{"line_number":1439,"context_line":"            raise exception.NovaException(msg)"},{"line_number":1440,"context_line":""},{"line_number":1441,"context_line":"        return zlib.decompress(base64.b64decode(raw_console_data))"},{"line_number":1442,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FhLY%3D","line":1439,"updated":"2013-05-31 12:59:29.000000000","message":"Would nova.exception.ConsoleNotFoundForInstance(instance[\u0027uuid\u0027]) be appropriate here?","commit_id":"97eac82cbd59cddaeca2aeeb3febdb13a590242a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d7fd4d58bffac85f8c36cb4b631b3e0e258c26d1","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"        except self._session.XenAPI.Failure as exc:"},{"line_number":1437,"context_line":"            LOG.exception(exc)"},{"line_number":1438,"context_line":"            msg \u003d _(\"Guest does not have a console available\")"},{"line_number":1439,"context_line":"            raise exception.NovaException(msg)"},{"line_number":1440,"context_line":""},{"line_number":1441,"context_line":"        return zlib.decompress(base64.b64decode(raw_console_data))"},{"line_number":1442,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Fghc%3D","line":1439,"in_reply_to":"AAAAPH%2F%2FhCg%3D","updated":"2013-05-31 15:52:43.000000000","message":"I took a look at that same code and I think it\u0027s wrong (well the console_id argument is not used because it\u0027s not in the message that overrides the message in the base ConsoleNotFound exception).  You must be looking at this:\n\nhttps://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/api.py#L3704\n\nBut compare to this:\n\nhttps://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/api.py#L3680\n\nThose both extend ConsoleNotFound (which has the console_id argument).  So I think you\u0027d be safe with ConsoleNotFoundForInstance.","commit_id":"97eac82cbd59cddaeca2aeeb3febdb13a590242a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2e33745801d3be054fbfc2d77c49fdaa989316d2","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"        except self._session.XenAPI.Failure as exc:"},{"line_number":1437,"context_line":"            LOG.exception(exc)"},{"line_number":1438,"context_line":"            msg \u003d _(\"Guest does not have a console available\")"},{"line_number":1439,"context_line":"            raise exception.NovaException(msg)"},{"line_number":1440,"context_line":""},{"line_number":1441,"context_line":"        return zlib.decompress(base64.b64decode(raw_console_data))"},{"line_number":1442,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FhCg%3D","line":1439,"in_reply_to":"AAAAPH%2F%2FhHk%3D","updated":"2013-05-31 13:39:38.000000000","message":"Turns out that one is only used in the db right now, and needs the console id that I don\u0027t really have down here. Will stick with NovaException for consistency with libvirt. Should probably change them all in a separate patch.","commit_id":"97eac82cbd59cddaeca2aeeb3febdb13a590242a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"33b428b226855b06aa24c52c010c4ad840248c1f","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"        except self._session.XenAPI.Failure as exc:"},{"line_number":1437,"context_line":"            LOG.exception(exc)"},{"line_number":1438,"context_line":"            msg \u003d _(\"Guest does not have a console available\")"},{"line_number":1439,"context_line":"            raise exception.NovaException(msg)"},{"line_number":1440,"context_line":""},{"line_number":1441,"context_line":"        return zlib.decompress(base64.b64decode(raw_console_data))"},{"line_number":1442,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FhHk%3D","line":1439,"in_reply_to":"AAAAPH%2F%2FhLY%3D","updated":"2013-05-31 13:08:47.000000000","message":"Hmm, probably. Here I am mirror what libvirt does for console log when it is missing. But I like your suggestion better.","commit_id":"97eac82cbd59cddaeca2aeeb3febdb13a590242a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fde21718fe14d3acd3d2fa5c04f93d6d594666a8","unresolved":false,"context_lines":[{"line_number":1438,"context_line":"            msg \u003d _(\"Guest does not have a console available\")"},{"line_number":1439,"context_line":"            raise exception.NovaException(msg)"},{"line_number":1440,"context_line":""},{"line_number":1441,"context_line":"        return zlib.decompress(base64.b64decode(raw_console_data))"},{"line_number":1442,"context_line":""},{"line_number":1443,"context_line":"    def get_vnc_console(self, instance):"},{"line_number":1444,"context_line":"        \"\"\"Return connection info for a vnc console.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FhKo%3D","line":1441,"updated":"2013-05-31 12:59:29.000000000","message":"Is there a chance that raw_console_data can be None or the empty string here and if so, does b64decode or zlib.decompress handle gracefully?","commit_id":"97eac82cbd59cddaeca2aeeb3febdb13a590242a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"33b428b226855b06aa24c52c010c4ad840248c1f","unresolved":false,"context_lines":[{"line_number":1438,"context_line":"            msg \u003d _(\"Guest does not have a console available\")"},{"line_number":1439,"context_line":"            raise exception.NovaException(msg)"},{"line_number":1440,"context_line":""},{"line_number":1441,"context_line":"        return zlib.decompress(base64.b64decode(raw_console_data))"},{"line_number":1442,"context_line":""},{"line_number":1443,"context_line":"    def get_vnc_console(self, instance):"},{"line_number":1444,"context_line":"        \"\"\"Return connection info for a vnc console.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FhHU%3D","line":1441,"in_reply_to":"AAAAPH%2F%2FhKo%3D","updated":"2013-05-31 13:08:47.000000000","message":"If its empty or None its a coding error. In other cases there should be an exception.\n\nDidn\u0027t want to litter extra exception handing here, just keeping it simple.","commit_id":"97eac82cbd59cddaeca2aeeb3febdb13a590242a"}],"plugins/xenserver/xenapi/etc/xapi.d/plugins/console":[{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"935aadd5dffb5c11965fee9fc85375a9eedb495e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"and equally should not be able to stop other guests from logging."},{"line_number":25,"context_line":"Adding an removing the following xenstore key will reset the log,"},{"line_number":26,"context_line":"as will be required after a log rotate:"},{"line_number":27,"context_line":"/local/logconsole/\u003cdom_id\u003e"},{"line_number":28,"context_line":"\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from base64 import b64encode"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAPH%2F%2Fhg0%3D","line":27,"updated":"2013-05-31 10:11:29.000000000","message":"This is the docs I was looking for - perhaps commit message could just refer to docs in the plugin?","commit_id":"b97dc5e2275d1d962d1d6a82892ab17d3c084330"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"2d93c708a8c903601b915b6d5972e48bec3c4f77","unresolved":false,"context_lines":[{"line_number":22,"context_line":"You should ensure appropriate log rotation to ensure"},{"line_number":23,"context_line":"guests are not able to consume too much Dom0 disk space,"},{"line_number":24,"context_line":"and equally should not be able to stop other guests from logging."},{"line_number":25,"context_line":"Adding an removing the following xenstore key will reset the log,"},{"line_number":26,"context_line":"as will be required after a log rotate:"},{"line_number":27,"context_line":"/local/logconsole/\u003cdom_id\u003e"},{"line_number":28,"context_line":"\"\"\""}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAPX%2F%2F%2BSQ%3D","line":25,"updated":"2013-06-04 20:25:02.000000000","message":"s/an/and/ (femtonit)","commit_id":"49ee9fa58ec740785e030c1930d9c39765adaef5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"213aefde8b7d2cef001d33797bcf94bd7a6c81b2","unresolved":false,"context_lines":[{"line_number":22,"context_line":"You should ensure appropriate log rotation to ensure"},{"line_number":23,"context_line":"guests are not able to consume too much Dom0 disk space,"},{"line_number":24,"context_line":"and equally should not be able to stop other guests from logging."},{"line_number":25,"context_line":"Adding an removing the following xenstore key will reset the log,"},{"line_number":26,"context_line":"as will be required after a log rotate:"},{"line_number":27,"context_line":"/local/logconsole/\u003cdom_id\u003e"},{"line_number":28,"context_line":"\"\"\""}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAPX%2F%2F9I4%3D","line":25,"in_reply_to":"AAAAPX%2F%2F%2BSQ%3D","updated":"2013-06-05 13:30:01.000000000","message":"oops, thanks.","commit_id":"49ee9fa58ec740785e030c1930d9c39765adaef5"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"2d93c708a8c903601b915b6d5972e48bec3c4f77","unresolved":false,"context_lines":[{"line_number":27,"context_line":"/local/logconsole/\u003cdom_id\u003e"},{"line_number":28,"context_line":"\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from base64 import b64encode"},{"line_number":31,"context_line":"import logging"},{"line_number":32,"context_line":"import os"},{"line_number":33,"context_line":"import XenAPIPlugin"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAPX%2F%2F%2BSM%3D","line":30,"updated":"2013-06-04 20:25:02.000000000","message":"Even in the plugins, we want to import modules rather than objects…","commit_id":"49ee9fa58ec740785e030c1930d9c39765adaef5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"213aefde8b7d2cef001d33797bcf94bd7a6c81b2","unresolved":false,"context_lines":[{"line_number":27,"context_line":"/local/logconsole/\u003cdom_id\u003e"},{"line_number":28,"context_line":"\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from base64 import b64encode"},{"line_number":31,"context_line":"import logging"},{"line_number":32,"context_line":"import os"},{"line_number":33,"context_line":"import XenAPIPlugin"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAPX%2F%2F9I8%3D","line":30,"in_reply_to":"AAAAPX%2F%2F%2BSM%3D","updated":"2013-06-05 13:30:01.000000000","message":"Oops, didn\u0027t spot that one.","commit_id":"49ee9fa58ec740785e030c1930d9c39765adaef5"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"50b7c023f3fae143411972a2ec0f7cf93418a301","unresolved":false,"context_lines":[{"line_number":22,"context_line":"You should ensure appropriate log rotation to ensure"},{"line_number":23,"context_line":"guests are not able to consume too much Dom0 disk space,"},{"line_number":24,"context_line":"and equally should not be able to stop other guests from logging."},{"line_number":25,"context_line":"Adding and removing the following xenstore key will reset the log,"},{"line_number":26,"context_line":"as will be required after a log rotate:"},{"line_number":27,"context_line":"/local/logconsole/\u003cdom_id\u003e"},{"line_number":28,"context_line":"\"\"\""}],"source_content_type":"application/octet-stream","patch_set":8,"id":"AAAAPX%2F%2F8gQ%3D","line":25,"updated":"2013-06-05 15:20:43.000000000","message":"Reopen not reset","commit_id":"77355747c89f6c8ddec669e6a9574254e187c3e8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"911d1c22d4fa01a3cb076e2e889a092037edf3b2","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            raise"},{"line_number":55,"context_line":"    return file_like_object.read()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def get_console_log(session, arg_dict):"},{"line_number":58,"context_line":"    try:"},{"line_number":59,"context_line":"        raw_dom_id \u003d arg_dict[\u0027dom_id\u0027]"},{"line_number":60,"context_line":"    except KeyError:"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"AAAAPX%2F%2F7l8%3D","line":57,"updated":"2013-06-05 19:54:08.000000000","message":"Need an extra blank line before this function declaration to satisfy pep8.  (We must have it turned off for the plugins right now; hmmm…)","commit_id":"2a7b8935f3b46bb1fe2b332cc1c1ca5b6a8192b6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"bbb29db12b71aa8b3723662f63e2a8b1ab0397cb","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            raise"},{"line_number":55,"context_line":"    return file_like_object.read()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def get_console_log(session, arg_dict):"},{"line_number":58,"context_line":"    try:"},{"line_number":59,"context_line":"        raw_dom_id \u003d arg_dict[\u0027dom_id\u0027]"},{"line_number":60,"context_line":"    except KeyError:"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"AAAAPX%2F%2F6Pk%3D","line":57,"in_reply_to":"AAAAPX%2F%2F7l8%3D","updated":"2013-06-06 08:03:38.000000000","message":"Yeah, that used to be one for the plugins.pyflake change must have changed that.","commit_id":"2a7b8935f3b46bb1fe2b332cc1c1ca5b6a8192b6"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"7f3a7a34a7dd8d39e0a5928ce3cae5b61e7f0e29","unresolved":false,"context_lines":[{"line_number":30,"context_line":"import base64"},{"line_number":31,"context_line":"import logging"},{"line_number":32,"context_line":"import os"},{"line_number":33,"context_line":"import XenAPIPlugin"},{"line_number":34,"context_line":"import zlib"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"import pluginlib_nova"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"AAAAPX%2F%2F2RI%3D","line":33,"updated":"2013-06-07 16:53:48.000000000","message":"Third-party imports go down a section.","commit_id":"a9beb44f77a604833fd462230b38a2e114c0f35c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b10ea71ebeb2603cb1605db9f90f6fb6b83e53c7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"import base64"},{"line_number":31,"context_line":"import logging"},{"line_number":32,"context_line":"import os"},{"line_number":33,"context_line":"import XenAPIPlugin"},{"line_number":34,"context_line":"import zlib"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"import pluginlib_nova"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"AAAAPX%2F%2FwVU%3D","line":33,"in_reply_to":"AAAAPX%2F%2F17o%3D","updated":"2013-06-11 10:30:19.000000000","message":"yeah, true...","commit_id":"a9beb44f77a604833fd462230b38a2e114c0f35c"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"5bd97b9fa3abe55bd904c09481efd9e65656a899","unresolved":false,"context_lines":[{"line_number":30,"context_line":"import base64"},{"line_number":31,"context_line":"import logging"},{"line_number":32,"context_line":"import os"},{"line_number":33,"context_line":"import XenAPIPlugin"},{"line_number":34,"context_line":"import zlib"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"import pluginlib_nova"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"AAAAPX%2F%2F17o%3D","line":33,"in_reply_to":"AAAAPX%2F%2F2EE%3D","updated":"2013-06-07 18:51:48.000000000","message":"zlib isn\u0027t third-party, but XenAPIPlugin probably is :)","commit_id":"a9beb44f77a604833fd462230b38a2e114c0f35c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"561cf7b7292b46ea27900442cfa0faa002ef88b9","unresolved":false,"context_lines":[{"line_number":30,"context_line":"import base64"},{"line_number":31,"context_line":"import logging"},{"line_number":32,"context_line":"import os"},{"line_number":33,"context_line":"import XenAPIPlugin"},{"line_number":34,"context_line":"import zlib"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"import pluginlib_nova"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"AAAAPX%2F%2F2EE%3D","line":33,"in_reply_to":"AAAAPX%2F%2F2RI%3D","updated":"2013-06-07 18:12:27.000000000","message":"didn\u0027t think it was third party?\nhttp://docs.python.org/2/library/zlib.html","commit_id":"a9beb44f77a604833fd462230b38a2e114c0f35c"}]}
