)]}'
{"nova/tests/test_utils.py":[{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"0ecef0d1b95c3ac8d36323cf52b57e768a6536d0","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        self.assertRaises(AttributeError, set_readonly_Ti)"},{"line_number":156,"context_line":"        self.assertRaises(AttributeError, set_readonly_Pi)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def test_sigleton_unit(self):"},{"line_number":159,"context_line":"        unit_one \u003d utils.Unit()"},{"line_number":160,"context_line":"        unit_two \u003d utils.Unit()"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2Fp%2Fw%3D","line":158,"updated":"2013-10-11 16:41:27.000000000","message":"Typo in \"sigleton\", but I think the whole singleton pattern should be removed from this change.","commit_id":"d322b672242fa54a89c8c3d12f9a36c0d1e6faec"},{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"8f4cfa9a3dae2cc40360d53ed1ed927209ad0d60","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        self.assertRaises(AttributeError, set_readonly_Ti)"},{"line_number":156,"context_line":"        self.assertRaises(AttributeError, set_readonly_Pi)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def test_sigleton_unit(self):"},{"line_number":159,"context_line":"        unit_one \u003d utils.Unit()"},{"line_number":160,"context_line":"        unit_two \u003d utils.Unit()"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2Fok8%3D","line":158,"in_reply_to":"AAAATH%2F%2Fp%2Fw%3D","updated":"2013-10-12 01:19:03.000000000","message":"will remove this  :) thanks","commit_id":"d322b672242fa54a89c8c3d12f9a36c0d1e6faec"}],"nova/unit.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"dcedda9e8af5b2c989f23150f8689fcf2bb01aa6","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    Pi \u003d property(attrgetter(\"_Pi\"))"},{"line_number":47,"context_line":"    Ei \u003d property(attrgetter(\"_Ei\"))"},{"line_number":48,"context_line":"    Zi \u003d property(attrgetter(\"_Zi\"))"},{"line_number":49,"context_line":"    Yi \u003d property(attrgetter(\"_Yi\"))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"byte \u003d ByteUnit()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2FHms%3D","line":49,"updated":"2013-10-22 22:14:17.000000000","message":"Why put these in a class, or even an instance of a class as you\u0027re doing here?  Why not just have the file contain:\n\n    Ki \u003d 1024\n    Mi \u003d 1024 ** 2\n    Gi \u003d 1024 ** 3\n    …\n\nThen, all client code needs to do is:\n\n    from nova import unit\n\n    value \u003d number * unit.Ki\n\nWhereas with what you\u0027ve got here, it has to be:\n\n    from nova import unit\n\n    value \u003d number * unit.byte.Ki\n\n(If you\u0027re doing this just to keep the constants from being updated, I don\u0027t see the point; we use constants all over the place without worrying about that.  See, e.g., nova/compute/instance_actions.py.)","commit_id":"8d8ffba2d4eac55314370d44e0259c3c44c4be4d"},{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"454164e24c90786b4226451bf915ccc4cefeaf73","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    Pi \u003d property(attrgetter(\"_Pi\"))"},{"line_number":47,"context_line":"    Ei \u003d property(attrgetter(\"_Ei\"))"},{"line_number":48,"context_line":"    Zi \u003d property(attrgetter(\"_Zi\"))"},{"line_number":49,"context_line":"    Yi \u003d property(attrgetter(\"_Yi\"))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"byte \u003d ByteUnit()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2FHLQ%3D","line":49,"in_reply_to":"AAAATH%2F%2FHms%3D","updated":"2013-10-23 01:42:08.000000000","message":"Thanks for your suggestion , will keep this simple :)\nwill update this","commit_id":"8d8ffba2d4eac55314370d44e0259c3c44c4be4d"}],"nova/utils.py":[{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"2c86855e6651cef6acc65c785f8971728ead36dc","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        if cls not in instances:"},{"line_number":114,"context_line":"            instances[cls] \u003d cls()"},{"line_number":115,"context_line":"        return instances[cls]"},{"line_number":116,"context_line":"    return getinstance"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"# NOTE(guochbo): Instance of Unit guarantee its member"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FqHY%3D","line":116,"updated":"2013-10-11 16:16:24.000000000","message":"This isn\u0027t threadsafe (even with greenthreads).  Imagine the case where a switch happens inside of cls()","commit_id":"5fe8b2d2cbce34485c5bac066030c3a111657aa8"},{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"07f92910c521653542b8b697871c672c469b9a66","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        if cls not in instances:"},{"line_number":114,"context_line":"            instances[cls] \u003d cls()"},{"line_number":115,"context_line":"        return instances[cls]"},{"line_number":116,"context_line":"    return getinstance"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"# NOTE(guochbo): Instance of Unit guarantee its member"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FqDg%3D","line":116,"in_reply_to":"AAAATH%2F%2FqHY%3D","updated":"2013-10-11 16:25:15.000000000","message":"Russell , \nare right ,  will address this in next patch later :)","commit_id":"5fe8b2d2cbce34485c5bac066030c3a111657aa8"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"0ecef0d1b95c3ac8d36323cf52b57e768a6536d0","unresolved":false,"context_lines":[{"line_number":122,"context_line":"# This is usage example:"},{"line_number":123,"context_line":"# from nova.utils  import unit"},{"line_number":124,"context_line":"# disk_root_gb \u003d 5 * unit.Gi"},{"line_number":125,"context_line":"@singleton"},{"line_number":126,"context_line":"class Unit(object):"},{"line_number":127,"context_line":"    def __init__(self):"},{"line_number":128,"context_line":"        self._Ki \u003d 1024"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2FqCI%3D","line":125,"updated":"2013-10-11 16:41:27.000000000","message":"Why enforce this as a singleton?  There\u0027s nothing inherently singular about this data, and you\u0027re already creating a single instance below which is what users of this code will reference.  This doesn\u0027t solve any problem.\n\nAlso, removing the singleton-ness eliminates the thread-safety issues Russell brought up.","commit_id":"d322b672242fa54a89c8c3d12f9a36c0d1e6faec"},{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"8f4cfa9a3dae2cc40360d53ed1ed927209ad0d60","unresolved":false,"context_lines":[{"line_number":122,"context_line":"# This is usage example:"},{"line_number":123,"context_line":"# from nova.utils  import unit"},{"line_number":124,"context_line":"# disk_root_gb \u003d 5 * unit.Gi"},{"line_number":125,"context_line":"@singleton"},{"line_number":126,"context_line":"class Unit(object):"},{"line_number":127,"context_line":"    def __init__(self):"},{"line_number":128,"context_line":"        self._Ki \u003d 1024"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATH%2F%2Fok0%3D","line":125,"in_reply_to":"AAAATH%2F%2FqCI%3D","updated":"2013-10-12 01:19:03.000000000","message":"thanks for your suggestion :)","commit_id":"d322b672242fa54a89c8c3d12f9a36c0d1e6faec"}]}
