)]}'
{"nova/tests/unit/virt/image/test_model.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"cc1798716cf34197ba3ada3d5c895583fe81225f","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova import exception"},{"line_number":18,"context_line":"from nova import test"},{"line_number":19,"context_line":"from nova.virt.image import model as imgmodel"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class ImageTest(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a961159_7e81ebc1","line":19,"updated":"2014-12-24 09:03:10.000000000","message":"why do we need this as imgmodel? Are we unable to use model?","commit_id":"ac78d4fe314b8755a1487ccc3b1cf32c36280d48"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"d1c0413d9cca21927c340741c15afd69bc68d27a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright (C) 2014 Red Hat, Inc"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_8d01da6f","line":2,"updated":"2015-01-12 13:21:23.000000000","message":"2015","commit_id":"8ec89d44f4376ba4df0e7967b4c04f70db04710d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"5be624eebbc0a907268b0820e20f5a5f88fa07da","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright (C) 2014 Red Hat, Inc"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_55a673ac","line":2,"in_reply_to":"3a961159_8d01da6f","updated":"2015-01-13 09:56:55.000000000","message":"2014 was when this code was written, so is correct.","commit_id":"8ec89d44f4376ba4df0e7967b4c04f70db04710d"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"33eabeb2446f90e306a4541d783154d0ee79e706","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.assertEqual(img1, img2)"},{"line_number":78,"context_line":"        self.assertEqual(img1.__hash__(), img2.__hash__())"},{"line_number":79,"context_line":"        self.assertNotEqual(img1, img3)"},{"line_number":80,"context_line":"        self.assertNotEqual(img4, img5)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def test_stringify(self):"},{"line_number":83,"context_line":"        img \u003d imgmodel.RBDImage("}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_695421ff","line":80,"updated":"2015-02-04 16:58:08.000000000","message":"Also self.assertNotEqual(img1, img4), for the sake of a little extra paranoia?","commit_id":"4922411999497678edd93e5e04b172ad91ccc173"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"33eabeb2446f90e306a4541d783154d0ee79e706","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            [\"rbd.example.org\"])"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        msg \u003d str(img)"},{"line_number":91,"context_line":"        self.assertTrue(msg.find(\"braanes\") \u003d\u003d -1)"},{"line_number":92,"context_line":"        self.assertTrue(msg.find(\"***\") !\u003d -1)"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_49ebdd12","line":91,"updated":"2015-02-04 16:58:08.000000000","message":"Comment here that the point is to check that the password is hidden?","commit_id":"4922411999497678edd93e5e04b172ad91ccc173"}],"nova/tests/virt/image/test_model.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"42df7168942fcdddf1957d4feea8a37313582ca6","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from nova.virt.image import model as imgmodel"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ImageTest(test.NoDBTestCase):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def test_local_file_image(self):"},{"line_number":24,"context_line":"        img \u003d imgmodel.LocalFileImage("}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8c0949_b05fe271","line":21,"updated":"2014-10-30 15:07:50.000000000","message":"It should be greate to assert the __cmp__ is working well.","commit_id":"49c9d79a95269307bffb77adff4afbb35899679d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"22074e6447a68e0be9ab0e317d86a4191bd30cb2","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        img5 \u003d imgmodel.LocalBlockImage("},{"line_number":74,"context_line":"            \"/dev/mapper/vol\")"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.assertEqual(img1, img1)"},{"line_number":77,"context_line":"        self.assertEqual(img1, img2)"},{"line_number":78,"context_line":"        self.assertNotEqual(img1, img3)"},{"line_number":79,"context_line":"        self.assertNotEqual(img4, img5)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_76358145","line":76,"updated":"2014-11-09 08:50:44.000000000","message":"not really sure what you are checking here - img1 will always be equal to img1","commit_id":"39c014aad1216185f93bab16e8df34bd8b874ae0"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"3cbfc52cbbcdf211d31740e9445b4f57eaa1aa3d","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        img5 \u003d imgmodel.LocalBlockImage("},{"line_number":74,"context_line":"            \"/dev/mapper/vol\")"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.assertEqual(img1, img1)"},{"line_number":77,"context_line":"        self.assertEqual(img1, img2)"},{"line_number":78,"context_line":"        self.assertNotEqual(img1, img3)"},{"line_number":79,"context_line":"        self.assertNotEqual(img4, img5)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_00adcb88","line":76,"in_reply_to":"5a890539_76358145","updated":"2014-11-10 09:32:30.000000000","message":"We\u0027ve overriden the \u0027__cmp__\u0027 method, so this is testing our impl actually still works for  self-comparison.","commit_id":"39c014aad1216185f93bab16e8df34bd8b874ae0"}],"nova/virt/image/model.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"42df7168942fcdddf1957d4feea8a37313582ca6","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class LocalImage(Image):"},{"line_number":40,"context_line":"    \"\"\"Class for images that are paths within the"},{"line_number":41,"context_line":"    local filesystem"},{"line_number":42,"context_line":"    \"\"\""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8c0949_10f2769a","line":40,"updated":"2014-10-30 15:07:50.000000000","message":"Well, a one line docstring should be kept on the first line.","commit_id":"49c9d79a95269307bffb77adff4afbb35899679d"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"42df7168942fcdddf1957d4feea8a37313582ca6","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.format \u003d format"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        if format not in ALL_FORMATS:"},{"line_number":69,"context_line":"            raise exception.Invalid(_(\"Unknown image format \u0027%s\u0027\"), format)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class LocalBlockImage(LocalImage):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a8c0949_90fe666a","line":69,"updated":"2014-10-30 15:07:50.000000000","message":"Any reason about why you didn\u0027t create a exception that extends Invalid?","commit_id":"49c9d79a95269307bffb77adff4afbb35899679d"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"31fd7f2fa7bb932e2220f36d9179e0b5d4d12a83","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"ALL_FORMATS \u003d ["},{"line_number":25,"context_line":"    FORMAT_RAW,"},{"line_number":26,"context_line":"    FORMAT_QCOW2,"},{"line_number":27,"context_line":"]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_6f70ce40","line":26,"updated":"2014-12-02 12:11:19.000000000","message":"nit: these look like they want to be a dict, to me:\n\nFORMATS \u003d { \u0027RAW\u0027: \"raw\" ...etc","commit_id":"223ebb7aaa8b3f996b05048afd569e7301b6935d"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"db787c859cc6382ffaaa81d35bf0dd4f70eec123","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"ALL_FORMATS \u003d ["},{"line_number":25,"context_line":"    FORMAT_RAW,"},{"line_number":26,"context_line":"    FORMAT_QCOW2,"},{"line_number":27,"context_line":"]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_9818af85","line":26,"in_reply_to":"5a890539_6a5c3c1a","updated":"2014-12-03 15:12:08.000000000","message":"Yep - now I\u0027ve seen how these are used in later patches it makes sense to have them like this.","commit_id":"223ebb7aaa8b3f996b05048afd569e7301b6935d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"f9443e5e940ddb30fa149c3a985488031e9898bb","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"ALL_FORMATS \u003d ["},{"line_number":25,"context_line":"    FORMAT_RAW,"},{"line_number":26,"context_line":"    FORMAT_QCOW2,"},{"line_number":27,"context_line":"]"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_6a5c3c1a","line":26,"in_reply_to":"5a890539_6f70ce40","updated":"2014-12-02 12:21:35.000000000","message":"Nope, the whole point is that external code uses named constants and not strings / dict lookups.","commit_id":"223ebb7aaa8b3f996b05048afd569e7301b6935d"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f0b28d462e938799f1dd4f24286562e638f6a666","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.format \u003d format"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        if format not in ALL_FORMATS:"},{"line_number":72,"context_line":"            raise exception.InvalidImageFormat(format\u003dformat)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class LocalBlockImage(LocalImage):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_3ea89a8b","line":72,"updated":"2014-12-03 05:12:55.000000000","message":"nit: can put before line 69","commit_id":"46130fa57b765a94b93c383c5bbd09be892bde65"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"780a1cf2a3aec41e4fd21e485bc2ed65e336edcf","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    \"\"\"Base class for all image types.\"\"\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __str__(self):"},{"line_number":34,"context_line":"        msg \u003d self.__class__.__name__ + \":\" + str(self.__dict__)"},{"line_number":35,"context_line":"        return strutils.mask_password(msg)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __eq__(self, other):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_acaa43d0","line":34,"updated":"2014-12-15 16:51:41.000000000","message":"Shouldn\u0027t this implement __repr__ instead of __str__ (str falls through to repr, but repr is used directly some times.\n\nAlso the convention in tree has been to make the repr string be \"\u003cclass: stuff\u003e\"","commit_id":"f3fc7d8f7ade55f151acb73916bec3411c365565"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"981a79123d5e878745ba1489d2855f7dd7f7afd4","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    \"\"\"Base class for all image types.\"\"\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __str__(self):"},{"line_number":34,"context_line":"        msg \u003d self.__class__.__name__ + \":\" + str(self.__dict__)"},{"line_number":35,"context_line":"        return strutils.mask_password(msg)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __eq__(self, other):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_0c8ef727","line":34,"in_reply_to":"3a961159_acaa43d0","updated":"2014-12-15 16:54:25.000000000","message":"Sure, that\u0027d probably work fine - this is just to make unit tests nicer in the end.","commit_id":"f3fc7d8f7ade55f151acb73916bec3411c365565"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"780a1cf2a3aec41e4fd21e485bc2ed65e336edcf","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        msg \u003d self.__class__.__name__ + \":\" + str(self.__dict__)"},{"line_number":35,"context_line":"        return strutils.mask_password(msg)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __eq__(self, other):"},{"line_number":38,"context_line":"        return ((self.__class__ \u003d\u003d other.__class__) and"},{"line_number":39,"context_line":"                (self.__dict__ \u003d\u003d other.__dict__))"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_6c0dbb37","line":37,"updated":"2014-12-15 16:51:41.000000000","message":"I believe we had a whole discussion on IRC the other day about implementing __eq__ without __hash__ leads to some odd behavior when used in complex datastructures. So we should probably have a __hash__ in here as well.","commit_id":"f3fc7d8f7ade55f151acb73916bec3411c365565"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"981a79123d5e878745ba1489d2855f7dd7f7afd4","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        msg \u003d self.__class__.__name__ + \":\" + str(self.__dict__)"},{"line_number":35,"context_line":"        return strutils.mask_password(msg)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __eq__(self, other):"},{"line_number":38,"context_line":"        return ((self.__class__ \u003d\u003d other.__class__) and"},{"line_number":39,"context_line":"                (self.__dict__ \u003d\u003d other.__dict__))"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_ac9ec352","line":37,"in_reply_to":"3a961159_6c0dbb37","updated":"2014-12-15 16:54:25.000000000","message":"Yep, makes sense.","commit_id":"f3fc7d8f7ade55f151acb73916bec3411c365565"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"d1c0413d9cca21927c340741c15afd69bc68d27a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright (C) 2014 Red Hat, Inc"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_cdfbe279","line":2,"updated":"2015-01-12 13:21:23.000000000","message":"2015","commit_id":"8ec89d44f4376ba4df0e7967b4c04f70db04710d"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"33eabeb2446f90e306a4541d783154d0ee79e706","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"class LocalImage(Image):"},{"line_number":46,"context_line":"    \"\"\"Class for images that are paths within the"},{"line_number":47,"context_line":"    local filesystem"},{"line_number":48,"context_line":"    \"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def __init__(self, path):"}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_898075f8","line":47,"updated":"2015-02-04 16:58:08.000000000","message":"I suggest de-pluralizing this and similar comments following.  In my experience that always makes things clearer.\n\nFor example, in this case: \"Class for an image that is a path within the local filesystem\".","commit_id":"4922411999497678edd93e5e04b172ad91ccc173"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"1a1f5299e37e17a20ab21424e520e6ce92a0f50c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.path \u003d path"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class LocalFileImage(LocalImage):"},{"line_number":60,"context_line":"    \"\"\"Class for images that are files on a locally"},{"line_number":61,"context_line":"    accessible filesystem"},{"line_number":62,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"3acd31a7_13555f4f","line":59,"updated":"2015-04-30 13:13:48.000000000","message":"I think this class should be abstract and we need to define a static method \u0027create\u0027 to return two classes RawLocalFileImage and Qcow2LocalFileImage. Those classes will inherit from LocalFileImage","commit_id":"c0b1955f5542467bd0e72a226cc1b3700c419406"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"007a79732ee6880d22ad78869165cb92d16b5784","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.path \u003d path"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class LocalFileImage(LocalImage):"},{"line_number":60,"context_line":"    \"\"\"Class for images that are files on a locally"},{"line_number":61,"context_line":"    accessible filesystem"},{"line_number":62,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"3acd31a7_b0f33a0a","line":59,"in_reply_to":"3acd31a7_0d189b1c","updated":"2015-04-30 15:06:48.000000000","message":"Well I was expected to see those classes finally handle some code logic like a method \u0027extend\u0027. And just for this method we will have to handle two different implementations (cf: http://git.openstack.org/cgit/openstack/nova/tree/nova/virt/libvirt/driver.py#n6383) All of this logic can be handled here and be used by all driver.","commit_id":"c0b1955f5542467bd0e72a226cc1b3700c419406"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"1cce9684adaf2f34f77f3baed401a5a63536adc3","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.path \u003d path"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class LocalFileImage(LocalImage):"},{"line_number":60,"context_line":"    \"\"\"Class for images that are files on a locally"},{"line_number":61,"context_line":"    accessible filesystem"},{"line_number":62,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"3acd31a7_c9f29a9a","line":59,"in_reply_to":"3acd31a7_13555f4f","updated":"2015-04-30 13:58:19.000000000","message":"I was actually intentionally *not* wanting to create subclasses for each different file format. These classes are focused on recording the metadata associated with each type of storage, and in the case of files the only thing that matters is the format. Adding subclasses for each format doesn\u0027t really help matters - in fact it would make complicate it, as we\u0027d have to then turn the subclass names back into a format string when using it.","commit_id":"c0b1955f5542467bd0e72a226cc1b3700c419406"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"3c74948415783f2b609a612daf1a46ae346b7f0d","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.path \u003d path"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class LocalFileImage(LocalImage):"},{"line_number":60,"context_line":"    \"\"\"Class for images that are files on a locally"},{"line_number":61,"context_line":"    accessible filesystem"},{"line_number":62,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"3acd31a7_0d189b1c","line":59,"in_reply_to":"3acd31a7_c9f29a9a","updated":"2015-04-30 14:47:35.000000000","message":"+1 for keeping it as it is right now. There will be no end to it, if we will decide to support other formats as well.","commit_id":"c0b1955f5542467bd0e72a226cc1b3700c419406"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"223d99398c56bd8046d3a901b5e3a21f93fc8fe8","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    the local host"},{"line_number":81,"context_line":"    \"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    pass"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"class RBDImage(Image):"}],"source_content_type":"text/x-python","patch_set":24,"id":"7a016987_0458f254","line":83,"updated":"2015-05-21 16:38:20.000000000","message":"As commented on the VFS patch - this should also probably have a format even if hardcoded to avoid the if elif situation","commit_id":"d6e634c471e95e4f4a640138e4f345547c525087"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"582be703c3dab2a74ed56a5f9a23e62659981f37","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        self.pool \u003d pool"},{"line_number":103,"context_line":"        self.user \u003d user"},{"line_number":104,"context_line":"        self.password \u003d password"},{"line_number":105,"context_line":"        self.servers \u003d servers"}],"source_content_type":"text/x-python","patch_set":24,"id":"7a016987_fe4a0954","line":105,"updated":"2015-05-21 14:42:00.000000000","message":"OK let me see how this is used in subsequent patches but all of this stuff is available to libvirt imagebackend classes. If it is useful outside of the libvirt driver  - it makes sense to have this maybe - but I am not sure that it is.","commit_id":"d6e634c471e95e4f4a640138e4f345547c525087"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"0fb2cdc3743ab319ceaa3fcb07034d93d9b3c3f9","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        self.pool \u003d pool"},{"line_number":103,"context_line":"        self.user \u003d user"},{"line_number":104,"context_line":"        self.password \u003d password"},{"line_number":105,"context_line":"        self.servers \u003d servers"}],"source_content_type":"text/x-python","patch_set":24,"id":"7a016987_c1b9accd","line":105,"in_reply_to":"7a016987_1edcc571","updated":"2015-05-21 15:50:37.000000000","message":"Right - I see that the last patch in the series adds methods to imagebackend classes to provide an instance of these - this would not be my first approach but is reasonable so no need to dwell on this further.","commit_id":"d6e634c471e95e4f4a640138e4f345547c525087"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"600b9bcc48907f7029c17590dfa69bf4e60c31b0","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        self.pool \u003d pool"},{"line_number":103,"context_line":"        self.user \u003d user"},{"line_number":104,"context_line":"        self.password \u003d password"},{"line_number":105,"context_line":"        self.servers \u003d servers"}],"source_content_type":"text/x-python","patch_set":24,"id":"7a016987_1edcc571","line":105,"in_reply_to":"7a016987_fe4a0954","updated":"2015-05-21 14:47:12.000000000","message":"The libvirt imagebackend classes are doing two jobs - they provide a variety of methods for performing operations on images which is mostly libvirt specific, and they record the unique identifying attributes of the image which is fairly generic.\n\nThese new classes are exclusively providing a way to record identifying attributes of the image, and will not have any functional code against them. They solely serve to replace the use of the \u0027filename, use_cow2\u0027 pair of parameters that are passed between the virt drivers, and the nova/virt/disk/* APIs.\n\nI could see the libvirt imagebackend being refactored to use an instance of these new classes to record the identifying attributes, instead of duplicating that.","commit_id":"d6e634c471e95e4f4a640138e4f345547c525087"}]}
