)]}'
{"oslo_utils/fixture.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"96a5604a5ece519678adcf4c3fc4c15a6902e994","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        with self._lock:"},{"line_number":85,"context_line":"            if name not in self._sentinels:"},{"line_number":86,"context_line":"                val \u003d uuidutils.generate_uuid()"},{"line_number":87,"context_line":"                while val in self._values:"},{"line_number":88,"context_line":"                    val \u003d uuidutils.generate_uuid()"},{"line_number":89,"context_line":"                self._sentinels[name] \u003d val"},{"line_number":90,"context_line":"                self._values.add(val)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_ebe3ae32","line":87,"updated":"2018-08-27 17:52:34.000000000","message":"I hope we have enough randomness that we don\u0027t need this loop, but I suppose it doesn\u0027t hurt anything.","commit_id":"be67bb9d36280c8ac123f21d08862cd49f45bd6f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4c43ff7f61dfe5d63f6e2423119c73ff2842daac","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        with self._lock:"},{"line_number":85,"context_line":"            if name not in self._sentinels:"},{"line_number":86,"context_line":"                val \u003d uuidutils.generate_uuid()"},{"line_number":87,"context_line":"                while val in self._values:"},{"line_number":88,"context_line":"                    val \u003d uuidutils.generate_uuid()"},{"line_number":89,"context_line":"                self._sentinels[name] \u003d val"},{"line_number":90,"context_line":"                self._values.add(val)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_6be47ee0","line":87,"in_reply_to":"3f79a3b5_8b847a0c","updated":"2018-08-27 18:09:57.000000000","message":"Done","commit_id":"be67bb9d36280c8ac123f21d08862cd49f45bd6f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c6e3089f562c77125f9825d70e77bd88bf9c8a3b","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        with self._lock:"},{"line_number":85,"context_line":"            if name not in self._sentinels:"},{"line_number":86,"context_line":"                val \u003d uuidutils.generate_uuid()"},{"line_number":87,"context_line":"                while val in self._values:"},{"line_number":88,"context_line":"                    val \u003d uuidutils.generate_uuid()"},{"line_number":89,"context_line":"                self._sentinels[name] \u003d val"},{"line_number":90,"context_line":"                self._values.add(val)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_8b847a0c","line":87,"in_reply_to":"3f79a3b5_ebe3ae32","updated":"2018-08-27 18:06:35.000000000","message":"It does hurt if someone has mocked out uuidutils.generate_uuid() in their test and then tries to use this. It\u0027ll be an infinite loop.\n\nI\u0027m pretty sure that within a given process you\u0027ll never hit the same uuid when using the same random seed and other values that go into the generation process. Unless you exhaust nearly the entire bit depth of the space. I think removing this makes more sense to me. LOG.error() if you think it\u0027s necessary, but I don\u0027t.","commit_id":"be67bb9d36280c8ac123f21d08862cd49f45bd6f"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"ad0da0b646660768213c2054b52597c9321f025b","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    Usage:"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        uuids \u003d fixture.UUIDSentinels()"},{"line_number":68,"context_line":"        ..."},{"line_number":69,"context_line":"        foo \u003d uuids.foo"},{"line_number":70,"context_line":"        do_a_thing(foo)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_d6de8e68","line":67,"updated":"2018-08-28 01:32:28.000000000","message":"or we could import uuidsentinel as uuids:\n\nfrom oslo_utils.fixture import uuidsentinel as uuids","commit_id":"8de07b3d5ebcd06c948402ddd0c3a1fb627d4e84"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a337b1d150840ada892eb9d6c5ed5e47628766d2","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    Usage:"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        uuids \u003d fixture.UUIDSentinels()"},{"line_number":68,"context_line":"        ..."},{"line_number":69,"context_line":"        foo \u003d uuids.foo"},{"line_number":70,"context_line":"        do_a_thing(foo)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_2e46827c","line":67,"in_reply_to":"3f79a3b5_d6de8e68","updated":"2018-08-28 12:55:38.000000000","message":"oops, yes, I should fix this.","commit_id":"8de07b3d5ebcd06c948402ddd0c3a1fb627d4e84"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"200197166bd90f5b83285735a60b35832a23814b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    referring to the same attribute will give the same UUID for the life of the"},{"line_number":63,"context_line":"    instance. Plan accordingly."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    Usage:"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        from oslo_utils.fixture import uuidsentinel as uuids"},{"line_number":68,"context_line":"        ..."}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_7a78b18e","line":65,"range":{"start_line":65,"start_character":9,"end_line":65,"end_character":10},"updated":"2018-08-28 14:04:51.000000000","message":"You want a double colon here to ensure the following block is formatted as literal text.","commit_id":"63d7649ed5e0252cbaf6bc1f0a02542f458b221f"}],"oslo_utils/tests/test_uuidutils.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"69fc7552bac257bce45b955e9874207d0a8f38ce","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import six"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from oslo_utils import uuidutils"},{"line_number":23,"context_line":"from oslo_utils.uuidutils import uuidsentinel"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class UUIDUtilsTest(test_base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_0a744f35","line":23,"updated":"2018-08-22 13:55:27.000000000","message":"Our style guides discourage importing individual symbols from modules.","commit_id":"e6c30dcb95f01eb0a45be8f0108fbb3c3021e0ce"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"36a39e4549a547917c3544c01bcd4392e1c276c4","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import six"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from oslo_utils import uuidutils"},{"line_number":23,"context_line":"from oslo_utils.uuidutils import uuidsentinel"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class UUIDUtilsTest(test_base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_90a08192","line":23,"in_reply_to":"3f79a3b5_0a744f35","updated":"2018-08-22 21:20:17.000000000","message":"Done","commit_id":"e6c30dcb95f01eb0a45be8f0108fbb3c3021e0ce"}],"oslo_utils/uuidutils.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"f887f6557ba00203a5375f8ce428d48bf94d8658","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    An instance of this class will dynamically generate attributes as they are"},{"line_number":66,"context_line":"    referenced, associating a random UUID string with each. Thereafter,"},{"line_number":67,"context_line":"    referring to the same attribute will give the same UUID for the life of the"},{"line_number":68,"context_line":"    instance. Plan accordingly."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    Usage:"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_d4ae18e6","line":68,"updated":"2018-08-21 16:26:33.000000000","message":"Do we want the same name to give the same UUID always? We could use a uuid5 instead of uuid4.","commit_id":"792c02654bbcf103ace0149ea6c843074ff3b4df"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0192fa8edf6a296a97979c3c212eea32f74c45cc","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    An instance of this class will dynamically generate attributes as they are"},{"line_number":66,"context_line":"    referenced, associating a random UUID string with each. Thereafter,"},{"line_number":67,"context_line":"    referring to the same attribute will give the same UUID for the life of the"},{"line_number":68,"context_line":"    instance. Plan accordingly."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    Usage:"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_2c4cdc9c","line":68,"in_reply_to":"3f79a3b5_d4ae18e6","updated":"2018-08-21 22:47:05.000000000","message":"I\u0027m going to say not until there\u0027s a request for it. Makes conflict resolution harder (L92-3) as unlikely as that may be. Right now I just want to address the minimum necessary delta from the original.","commit_id":"792c02654bbcf103ace0149ea6c843074ff3b4df"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b87d17361dbaf7d70341faf21f583249966e0318","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def __getattr__(self, name):"},{"line_number":87,"context_line":"        if name.startswith(\u0027_\u0027):"},{"line_number":88,"context_line":"            raise ValueError(\u0027Sentinels must not start with _\u0027)"},{"line_number":89,"context_line":"        with self._lock:"},{"line_number":90,"context_line":"            if name not in self._sentinels:"},{"line_number":91,"context_line":"                val \u003d generate_uuid()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_41ac7a8b","line":88,"updated":"2018-08-22 03:37:33.000000000","message":"It would be good if we could add some case for this, like:\n\n    def test_with_underline_prefix(self):\n        ex \u003d self.assertRaises(ValueError, getattr, uuids, \u0027_foo\u0027)\n        self.assertIn(\"Sentinels must not start with _\", six.text_type(ex))","commit_id":"792c02654bbcf103ace0149ea6c843074ff3b4df"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e81bbce0925423d94b39ee255874e2c1933e89d4","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def __getattr__(self, name):"},{"line_number":87,"context_line":"        if name.startswith(\u0027_\u0027):"},{"line_number":88,"context_line":"            raise ValueError(\u0027Sentinels must not start with _\u0027)"},{"line_number":89,"context_line":"        with self._lock:"},{"line_number":90,"context_line":"            if name not in self._sentinels:"},{"line_number":91,"context_line":"                val \u003d generate_uuid()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_2753843b","line":88,"in_reply_to":"3f79a3b5_41ac7a8b","updated":"2018-08-22 13:37:27.000000000","message":"Done","commit_id":"792c02654bbcf103ace0149ea6c843074ff3b4df"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"69fc7552bac257bce45b955e9874207d0a8f38ce","unresolved":false,"context_lines":[{"line_number":99,"context_line":"# Singleton sentinel instance. Caveat emptor: using this multiple times in the"},{"line_number":100,"context_line":"# same process (including across multiple modules) will result in the same"},{"line_number":101,"context_line":"# values"},{"line_number":102,"context_line":"uuidsentinel \u003d _UUIDSentinels()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_ca8ad719","line":102,"updated":"2018-08-22 13:55:27.000000000","message":"I would prefer that we not set up this global, and let the consumer of the module do that on their own. We could (in a separate patch) add a test fixture class to make that more convenient for test authors.","commit_id":"e6c30dcb95f01eb0a45be8f0108fbb3c3021e0ce"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"36a39e4549a547917c3544c01bcd4392e1c276c4","unresolved":false,"context_lines":[{"line_number":99,"context_line":"# Singleton sentinel instance. Caveat emptor: using this multiple times in the"},{"line_number":100,"context_line":"# same process (including across multiple modules) will result in the same"},{"line_number":101,"context_line":"# values"},{"line_number":102,"context_line":"uuidsentinel \u003d _UUIDSentinels()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_f0b8d5c8","line":102,"in_reply_to":"3f79a3b5_ca8ad719","updated":"2018-08-22 21:20:17.000000000","message":"Done","commit_id":"e6c30dcb95f01eb0a45be8f0108fbb3c3021e0ce"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"a542ce31ffa8856a0a43186cfc7a3f2a461c128b","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        with self._lock:"},{"line_number":90,"context_line":"            if name not in self._sentinels:"},{"line_number":91,"context_line":"                val \u003d generate_uuid()"},{"line_number":92,"context_line":"                while val in self._values:"},{"line_number":93,"context_line":"                    val \u003d generate_uuid()"},{"line_number":94,"context_line":"                self._sentinels[name] \u003d val"},{"line_number":95,"context_line":"                self._values.add(val)"},{"line_number":96,"context_line":"        return self._sentinels[name]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_4c0b2ad5","line":93,"range":{"start_line":92,"start_character":0,"end_line":93,"end_character":41},"updated":"2018-08-23 12:21:00.000000000","message":"So, this is for collision avoidance, but I\u0027m not sure we really need this.\n\nThe disadvantage of it is we need a extra space in self._values and cost a extra time when we detect collision.","commit_id":"e6625ab2a2d9e97420a102195c93c9fe1be09448"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"4ab4eaa17b882a6cfe870a38c70b3a148e38c14f","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        with self._lock:"},{"line_number":90,"context_line":"            if name not in self._sentinels:"},{"line_number":91,"context_line":"                val \u003d generate_uuid()"},{"line_number":92,"context_line":"                while val in self._values:"},{"line_number":93,"context_line":"                    val \u003d generate_uuid()"},{"line_number":94,"context_line":"                self._sentinels[name] \u003d val"},{"line_number":95,"context_line":"                self._values.add(val)"},{"line_number":96,"context_line":"        return self._sentinels[name]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_910b928c","line":93,"range":{"start_line":92,"start_character":0,"end_line":93,"end_character":41},"in_reply_to":"3f79a3b5_4c0b2ad5","updated":"2018-08-23 12:28:35.000000000","message":"I agree that this is redundant. If we need to check for collisions then UUIDs, as a concept, are fundamentally broken. The entire point of the algorithm is that there should not be collisions for a few billion years even if we were to make many per second.","commit_id":"e6625ab2a2d9e97420a102195c93c9fe1be09448"}]}
