)]}'
{"cinder/brick/local_dev/lvm.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"09dbc3df0752b71006306626b0e2637736548bca","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        :returns: List of Dictionaries with VG info"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        \"\"\""},{"line_number":255,"context_line":"        cmd \u003d [\u0027env\u0027, \u0027LC_ALL\u003dC\u0027, \u0027LANG\u003dC\u0027, \u0027vgs\u0027, \u0027--noheadings\u0027, \u0027--unit\u003dg\u0027,"},{"line_number":256,"context_line":"               \u0027-o\u0027, \u0027name,size,free,lv_count,uuid\u0027, \u0027--separator\u0027, \u0027:\u0027]"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        if no_suffix:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2Filo%3D","line":255,"updated":"2013-11-01 17:53:13.000000000","message":"Gathered here","commit_id":"8da5bc83f6aac77816b7cd55ffbd47b8b2da9146"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"09dbc3df0752b71006306626b0e2637736548bca","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            LOG.error(_(\u0027Unable to find VG: %s\u0027) % self.vg_name)"},{"line_number":294,"context_line":"            raise exception.VolumeGroupNotFound(vg_name\u003dself.vg_name)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        self.vg_size \u003d vg_list[0][\u0027size\u0027]"},{"line_number":297,"context_line":"        self.vg_free_space \u003d vg_list[0][\u0027available\u0027]"},{"line_number":298,"context_line":"        self.vg_lv_count \u003d vg_list[0][\u0027lv_count\u0027]"},{"line_number":299,"context_line":"        self.vg_uuid \u003d vg_list[0][\u0027uuid\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2Filg%3D","line":296,"updated":"2013-11-01 17:53:13.000000000","message":"And here","commit_id":"8da5bc83f6aac77816b7cd55ffbd47b8b2da9146"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"09dbc3df0752b71006306626b0e2637736548bca","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                                    root_helper\u003dself._root_helper,"},{"line_number":328,"context_line":"                                    run_as_root\u003dTrue)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        (vg_size, vg_free) \u003d out.strip().split(separator)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        if vg_size !\u003d vg_free:"},{"line_number":333,"context_line":"            LOG.warn(_(\"Volume group to contain thin pool is not empty\"))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2Fils%3D","line":330,"updated":"2013-11-01 17:53:13.000000000","message":"This information should already be available in self.vg_size and self.vg_free_space, should not require running \"vgs\" again.  (See above.)\n\nProbably just need to call self.update_volume_group_info().","commit_id":"8da5bc83f6aac77816b7cd55ffbd47b8b2da9146"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"8a0fab0600910246962ff032a019525579403171","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                                    root_helper\u003dself._root_helper,"},{"line_number":328,"context_line":"                                    run_as_root\u003dTrue)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        (vg_size, vg_free) \u003d out.strip().split(separator)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        if vg_size !\u003d vg_free:"},{"line_number":333,"context_line":"            LOG.warn(_(\"Volume group to contain thin pool is not empty\"))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FijA%3D","line":330,"in_reply_to":"AAAATn%2F%2FikM%3D","updated":"2013-11-01 18:13:25.000000000","message":"I struggled with this, everything is assumed to be GB, which makes precise calculations impossible.  I feel it should be gathered in bytes, and converted for the user if they expect GB - but this is another patch entirely.","commit_id":"8da5bc83f6aac77816b7cd55ffbd47b8b2da9146"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bc77f065debd086d0eb32fd289daaa4c4bf83e12","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                                    root_helper\u003dself._root_helper,"},{"line_number":328,"context_line":"                                    run_as_root\u003dTrue)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        (vg_size, vg_free) \u003d out.strip().split(separator)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        if vg_size !\u003d vg_free:"},{"line_number":333,"context_line":"            LOG.warn(_(\"Volume group to contain thin pool is not empty\"))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2FikM%3D","line":330,"in_reply_to":"AAAATn%2F%2Fils%3D","updated":"2013-11-01 17:55:22.000000000","message":"Oh, but you wanted it in bytes.  Hmmm.","commit_id":"8da5bc83f6aac77816b7cd55ffbd47b8b2da9146"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"2c580e6ee968f5d3ae02a599d44bb9844f9eaa2b","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        self.update_volume_group_info()"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        # leave 5% free for metadata"},{"line_number":324,"context_line":"        return \"%sg\" % (float(self.vg_free_space) * 0.95)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def create_thin_pool(self, name\u003dNone, size_str\u003d0):"},{"line_number":327,"context_line":"        \"\"\"Creates a thin provisioning pool for this VG."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FfW8%3D","line":324,"updated":"2013-11-06 02:35:41.000000000","message":"So, the the volume is always going to be 5% smaller than the user requested?  Would it not be better to allocate 5% overhead, if possible, so that the user gets the volume size expected?","commit_id":"82c6a4b96d91ecd4ac492fb6a80ccb0a16ad95e1"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d2f00eec15fce8936f2700c2122068830a3da30","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        self.update_volume_group_info()"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        # leave 5% free for metadata"},{"line_number":324,"context_line":"        return \"%sg\" % (float(self.vg_free_space) * 0.95)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def create_thin_pool(self, name\u003dNone, size_str\u003d0):"},{"line_number":327,"context_line":"        \"\"\"Creates a thin provisioning pool for this VG."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FbEE%3D","line":324,"in_reply_to":"AAAATn%2F%2FcSM%3D","updated":"2013-11-06 15:20:55.000000000","message":"Ah, I see.  Thanks for the explanation Eric.","commit_id":"82c6a4b96d91ecd4ac492fb6a80ccb0a16ad95e1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b2d6634dca673e79234a8a58008ea88143e534a4","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        self.update_volume_group_info()"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        # leave 5% free for metadata"},{"line_number":324,"context_line":"        return \"%sg\" % (float(self.vg_free_space) * 0.95)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def create_thin_pool(self, name\u003dNone, size_str\u003d0):"},{"line_number":327,"context_line":"        \"\"\"Creates a thin provisioning pool for this VG."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FcSM%3D","line":324,"in_reply_to":"AAAATn%2F%2FfW8%3D","updated":"2013-11-06 05:28:22.000000000","message":"This is creation of the LVM thin pool used to store volumes, not a volume itself.  The user doesn\u0027t request this space, it\u0027s implicitly created if the user hasn\u0027t created a pool.","commit_id":"82c6a4b96d91ecd4ac492fb6a80ccb0a16ad95e1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"526c3a1e27d71e8acedea17c815eaaf69ddd17df","unresolved":false,"context_lines":[{"line_number":304,"context_line":"                    self.vg_thin_pool_size \u003d lv[\u0027size\u0027]"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    def _calculate_thin_pool_size(self):"},{"line_number":307,"context_line":"        \"\"\"Calculates the correct size for a thin logical volume."},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        Ideally we would use 100% of the containing volume group and be done."},{"line_number":310,"context_line":"        But the 100%VG notation to lvcreate is not implemented and thus cannot"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2B0%2Bo%3D","line":307,"updated":"2013-11-19 16:47:41.000000000","message":"\"logical volume\" would be less confusingly referred to as \"thin pool\" or \"thin pool LV\".","commit_id":"e5c89ea7c5cd95b139fd19dd9de06a02c5f98cfd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"526c3a1e27d71e8acedea17c815eaaf69ddd17df","unresolved":false,"context_lines":[{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        Ideally we would use 100% of the containing volume group and be done."},{"line_number":310,"context_line":"        But the 100%VG notation to lvcreate is not implemented and thus cannot"},{"line_number":311,"context_line":"        be used."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        Further, some amount of free space must remain in the volume group for"},{"line_number":314,"context_line":"        metadata for the contained logical volumes.  The exact amount depends"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2B0%2Bc%3D","line":311,"updated":"2013-11-19 16:47:41.000000000","message":"Handy to reference a bug ID here if one exists.","commit_id":"e5c89ea7c5cd95b139fd19dd9de06a02c5f98cfd"},{"author":{"_account_id":7236,"name":"Kiyohiro Adachi","email":"kiy-adachi@vx.jp.nec.com","username":"kadachi"},"change_message_id":"14f1465021bdd47ab0437ba8318b5f5311842480","unresolved":false,"context_lines":[{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        if size_str \u003d\u003d 0:"},{"line_number":350,"context_line":"            size_str \u003d self._calculate_thin_pool_size()"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"        cmd \u003d [\u0027lvcreate\u0027, \u0027-T\u0027, \u0027-L\u0027, size_str, self.vg_pool_name]"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        self._execute(*cmd,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2B3uk%3D","line":351,"updated":"2013-11-19 06:00:23.000000000","message":"If size_str is not 0, the following process is still needed, I think.\n\nsize_str \u003d re.sub(r\u0027\\.\\d*\u0027, \u0027\u0027, size_str)","commit_id":"e5c89ea7c5cd95b139fd19dd9de06a02c5f98cfd"},{"author":{"_account_id":7236,"name":"Kiyohiro Adachi","email":"kiy-adachi@vx.jp.nec.com","username":"kadachi"},"change_message_id":"1d365c7ef07a5994a79ccbda7911e48455e89986","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        if not size_str:"},{"line_number":351,"context_line":"            size_str \u003d self._calculate_thin_pool_size()"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        cmd \u003d [\u0027lvcreate\u0027, \u0027-T\u0027, \u0027-L\u0027, size_str, self.vg_pool_name]"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        self._execute(*cmd,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Bybo%3D","line":352,"updated":"2013-11-20 07:52:21.000000000","message":"Please tell me why you deleted the following code.\n\nsize_str \u003d re.sub(r\u0027\\.\\d*\u0027, \u0027\u0027, size_str)\n\nIf you reason that no one set size_str, It is strange that it\u0027s an argument of \u0027def create_thin_pool(self, name\u003dNone, size_str\u003dNone):\u0027.\n\nOnly ’self.vg.create_thin_pool(pool_name, \"1G\")\u0027 is set size_str explicitly in cinder/tests/brick/test_brick_lvm.py.","commit_id":"5f7e5c8995f17eb62f81d44d307668e202193590"},{"author":{"_account_id":7236,"name":"Kiyohiro Adachi","email":"kiy-adachi@vx.jp.nec.com","username":"kadachi"},"change_message_id":"5aec3ed0ff41fb6fa9a31ba8fd5a3bc1648992f9","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        if not size_str:"},{"line_number":351,"context_line":"            size_str \u003d self._calculate_thin_pool_size()"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        cmd \u003d [\u0027lvcreate\u0027, \u0027-T\u0027, \u0027-L\u0027, size_str, self.vg_pool_name]"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        self._execute(*cmd,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2BvE0%3D","line":352,"in_reply_to":"AAAATn%2F%2BxNI%3D","updated":"2013-11-20 22:25:23.000000000","message":"Thank you for your comment.\nI think I also can remove size_str, and will be happy to everyone.","commit_id":"5f7e5c8995f17eb62f81d44d307668e202193590"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"624584b619815d3f73fa0fe2dd4f4a37e2ade990","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        if not size_str:"},{"line_number":351,"context_line":"            size_str \u003d self._calculate_thin_pool_size()"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        cmd \u003d [\u0027lvcreate\u0027, \u0027-T\u0027, \u0027-L\u0027, size_str, self.vg_pool_name]"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        self._execute(*cmd,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2BxNI%3D","line":352,"in_reply_to":"AAAATn%2F%2Bybo%3D","updated":"2013-11-20 13:07:37.000000000","message":"Sure, what does that line of code do?  It removes all digits after the decimal, effectively a floor operation (but less efficient).  This is not the behaviour we want, there is no need to round down in this case.\n\nThe size_str parameter could possibly be removed as it is never passed to this function except in the unit tests.  I\u0027m happy to make this change in a future commit.","commit_id":"5f7e5c8995f17eb62f81d44d307668e202193590"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"8c1a989ea4e993e74f1142481fc2316836afd409","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        Further, some amount of free space must remain in the volume group for"},{"line_number":367,"context_line":"        metadata for the contained logical volumes.  The exact amount depends"},{"line_number":368,"context_line":"        on how much volume sharing you expect."},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        :returns: An lvcreate-ready string for the number of calculated bytes."},{"line_number":371,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F%2Bp04%3D","line":368,"updated":"2013-11-21 23:41:32.000000000","message":"Actually I believe this is incorrect.  IIRC the metadata is actually stored in the thin-pool itself.  That\u0027s why trying to do something like: \"lvcreate -l 100%FREE\" didn\u0027t work here, there\u0027s an overhead which is 2 Meg minimum, more depending on size/chunks.","commit_id":"24ec99da20f14eef1eed66bd0bed4f8ae0e6b50a"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"352c2f6c59a2d4602fee6312e2d31f456e632454","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        Further, some amount of free space must remain in the volume group for"},{"line_number":367,"context_line":"        metadata for the contained logical volumes.  The exact amount depends"},{"line_number":368,"context_line":"        on how much volume sharing you expect."},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        :returns: An lvcreate-ready string for the number of calculated bytes."},{"line_number":371,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F%2BmP4%3D","line":368,"in_reply_to":"AAAATn%2F%2Bm%2Fg%3D","updated":"2013-11-22 16:50:22.000000000","message":"This is correct.  I had originally spoke with agk on #lvm about this and he suggested otherwise, but I misunderstood.  I just confirmed for myself, metadata is stored in the LV, not in any free (unallocated) space in the vg.\n\nI will update this patch accordingly.","commit_id":"24ec99da20f14eef1eed66bd0bed4f8ae0e6b50a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8db64195f43d2635bb9c9ed1c4a31ae652234b32","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        Further, some amount of free space must remain in the volume group for"},{"line_number":367,"context_line":"        metadata for the contained logical volumes.  The exact amount depends"},{"line_number":368,"context_line":"        on how much volume sharing you expect."},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        :returns: An lvcreate-ready string for the number of calculated bytes."},{"line_number":371,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F%2Bm%2Fg%3D","line":368,"in_reply_to":"AAAATn%2F%2Bp04%3D","updated":"2013-11-22 14:44:58.000000000","message":"Yes, I think there is a little confusion.  AIUI, this fix isn\u0027t really about storage loss due to metadata calculations, but rounding differences between \"we want X GB\" and LVM\u0027s \"you can have Y# extents of size Z\".\n\nIs the ideal fix here not to add the number of free extents to the LVM object, and then call \"lvcreate -T -l \u003cno_extents\u003e \u003cpool_name\u003e\" ?    (Add free_count to the list of stats processed from \"vgs\" in get_all_volume_groups.)\n\nThis would let us use 100% of space as it doesn\u0027t hit the rounding issues at all.","commit_id":"24ec99da20f14eef1eed66bd0bed4f8ae0e6b50a"}]}
