)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"236e43d0a4db4ca2ee3948d3bbacb30a99f1747a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Implement LVM thin provisioning support."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As of LVM2 version 2.02.89 the ability to do thin provisioning"},{"line_number":10,"context_line":"was made available in LVM, this provides some cool new features"},{"line_number":11,"context_line":"but also addresses some problems with things like terribel LVM"},{"line_number":12,"context_line":"LVM snapshot performance."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAM3%2F%2FeMU%3D","line":10,"updated":"2013-01-21 08:04:22.000000000","message":"terrible*","commit_id":"159272a7277c192d9caaa3e0a9f4d84c5cc80191"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"673c879d19d82c371f4f81fd5b5fa52afb3a00f6","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Implement LVM thin provisioning support."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As of LVM2 version 2.02.89 the ability to do thin provisioning"},{"line_number":10,"context_line":"was made available in LVM, this provides some cool new features"},{"line_number":11,"context_line":"but also addresses some problems with things like terribel LVM"},{"line_number":12,"context_line":"LVM snapshot performance."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAM3%2F%2FXDM%3D","line":10,"in_reply_to":"AAAAM3%2F%2FeMU%3D","updated":"2013-01-25 16:56:21.000000000","message":"Done","commit_id":"159272a7277c192d9caaa3e0a9f4d84c5cc80191"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"236e43d0a4db4ca2ee3948d3bbacb30a99f1747a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As of LVM2 version 2.02.89 the ability to do thin provisioning"},{"line_number":10,"context_line":"was made available in LVM, this provides some cool new features"},{"line_number":11,"context_line":"but also addresses some problems with things like terribel LVM"},{"line_number":12,"context_line":"LVM snapshot performance."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Currently the version of LVM in Ubuntu 12.04 does NOT support LVM thin,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAM3%2F%2FeMQ%3D","line":11,"updated":"2013-01-21 08:04:22.000000000","message":"Remove extra LVM","commit_id":"159272a7277c192d9caaa3e0a9f4d84c5cc80191"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"673c879d19d82c371f4f81fd5b5fa52afb3a00f6","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As of LVM2 version 2.02.89 the ability to do thin provisioning"},{"line_number":10,"context_line":"was made available in LVM, this provides some cool new features"},{"line_number":11,"context_line":"but also addresses some problems with things like terribel LVM"},{"line_number":12,"context_line":"LVM snapshot performance."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Currently the version of LVM in Ubuntu 12.04 does NOT support LVM thin,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAM3%2F%2FXDI%3D","line":11,"in_reply_to":"AAAAM3%2F%2FeMQ%3D","updated":"2013-01-25 16:56:21.000000000","message":"Done","commit_id":"159272a7277c192d9caaa3e0a9f4d84c5cc80191"}],"cinder/volume/drivers/lvm.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"59961e737f42872173514589ab4c6f8764c50a9b","unresolved":false,"context_lines":[{"line_number":470,"context_line":"        super(ThinLVMVolumeDriver, self).__init__(*args, **kwargs)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"    def check_for_setup_error(self):"},{"line_number":473,"context_line":"        \"\"\"Returns an error if prerequisites aren\u0027t met\"\"\""},{"line_number":474,"context_line":"        out, err \u003d self._execute(\u0027lvs\u0027, \u0027--noheadings\u0027, \u0027-o\u0027, \u0027name\u0027,"},{"line_number":475,"context_line":"                                 run_as_root\u003dTrue)"},{"line_number":476,"context_line":"        volume_groups \u003d out.split()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FoQw%3D","line":473,"updated":"2013-01-11 22:54:01.000000000","message":"Rework this... don\u0027t require volume_pool, but ask for pool_size....\n\nThen in setup here, we check if the pool exists, if it doesn\u0027t we create it using the requested size... default to 100% of the VGroup.","commit_id":"a646e84fa26dc79a26e7a0c71c28d48eb38ccf1e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d4189bcfa457051223f9e6b72565870090f0cf99","unresolved":false,"context_lines":[{"line_number":473,"context_line":"    def check_for_setup_error(self):"},{"line_number":474,"context_line":"        \"\"\"Returns an error if prerequisites aren\u0027t met\"\"\""},{"line_number":475,"context_line":"        out, err \u003d utils.trycmd(\u0027lvs\u0027, \u0027--option\u0027, \u0027name\u0027,"},{"line_number":476,"context_line":"                                \u0027--noheadings\u0027, run_as_root\u003dTrue)"},{"line_number":477,"context_line":"        pool_name \u003d \"%s-thin-pool\" % FLAGS.volume_group"},{"line_number":478,"context_line":"        if pool_name not in out:"},{"line_number":479,"context_line":"            size \u003d \"%sG\" % FLAGS.pool_size"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Flpc%3D","line":476,"updated":"2013-01-14 21:58:30.000000000","message":"If \"lvs\" is missing from the rootwrap conf, this command passes, and you get a failure below from lvcreate.  (Pool already exists.)\n\nShouldn\u0027t this error if we fail to run \"lvs\"?  It looks like something stricter than trycmd() is appropriate.","commit_id":"39e524e61e28a61a896dd062a98bed2c0071cd04"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a88423c30b0ad5af05750b1ee841cebc0f82d645","unresolved":false,"context_lines":[{"line_number":485,"context_line":""},{"line_number":486,"context_line":"            pool_path \u003d \u0027%s/%s\u0027 % (FLAGS.volume_group, pool_name)"},{"line_number":487,"context_line":"            out, err \u003d self._execute(\u0027lvcreate\u0027, \u0027-T\u0027, \u0027-L\u0027, size,"},{"line_number":488,"context_line":"                                     pool_path, run_as_root\u003dTrue)"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    def _do_lvm_snapshot(self, src_lvm_name, dest_vref, is_cinder_snap\u003dTrue):"},{"line_number":491,"context_line":"            if is_cinder_snap:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Fnho%3D","line":488,"updated":"2013-01-13 00:12:29.000000000","message":"Should you raise an exception here if there\u0027s an error creating the pool so the manager will get it?","commit_id":"39e524e61e28a61a896dd062a98bed2c0071cd04"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"048638369d2f9f4d5687cddca05f7c91a932d08b","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    cfg.StrOpt(\u0027volume_group\u0027,"},{"line_number":40,"context_line":"               default\u003d\u0027cinder-volumes\u0027,"},{"line_number":41,"context_line":"               help\u003d\u0027Name for the VG that will contain exported volumes\u0027),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027pool_size\u0027,"},{"line_number":43,"context_line":"               default\u003d0,"},{"line_number":44,"context_line":"               help\u003d\u0027Size of thin provisioning pool \u0027"},{"line_number":45,"context_line":"                    \u0027(0 uses entire cinder VG)\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FkB4%3D","line":42,"updated":"2013-01-15 21:33:08.000000000","message":"You shouldn\u0027t default a str opt to 0. How about defaulting it to None and using if not pool_size? That way you can leave it blank or \u0027\u0027 to get the entire vg.","commit_id":"15c8521383230769e06a90cad4c30d250337d97a"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"0262b3ac33795c05afbb073980ae52041987f2e6","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    cfg.StrOpt(\u0027volume_group\u0027,"},{"line_number":40,"context_line":"               default\u003d\u0027cinder-volumes\u0027,"},{"line_number":41,"context_line":"               help\u003d\u0027Name for the VG that will contain exported volumes\u0027),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027pool_size\u0027,"},{"line_number":43,"context_line":"               default\u003d0,"},{"line_number":44,"context_line":"               help\u003d\u0027Size of thin provisioning pool \u0027"},{"line_number":45,"context_line":"                    \u0027(0 uses entire cinder VG)\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAM3%2F%2FkAw%3D","line":42,"in_reply_to":"AAAAM3%2F%2FkB4%3D","updated":"2013-01-15 21:45:09.000000000","message":"Done","commit_id":"15c8521383230769e06a90cad4c30d250337d97a"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"a77ae32f44a2259cd74dddae6c3f19005df401c7","unresolved":false,"context_lines":[{"line_number":483,"context_line":"                                         \u0027name,size\u0027, run_as_root\u003dTrue)"},{"line_number":484,"context_line":"                size \u003d re.sub(r\u0027[\\.][\\d][\\d]\u0027, \u0027\u0027, out.split()[1])"},{"line_number":485,"context_line":"            else:"},{"line_number":486,"context_line":"                size \u003d \"%sG\" % FLAGS.pool_size"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"            pool_path \u003d \u0027%s/%s\u0027 % (FLAGS.volume_group, pool_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Fj%2FM%3D","line":486,"updated":"2013-01-15 21:49:57.000000000","message":"one more thing. Since it is a string, why not allow them to pass the units as well?","commit_id":"cdbd355ec59e52d7e29c1ae0bcf5babbf7036edd"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"236e43d0a4db4ca2ee3948d3bbacb30a99f1747a","unresolved":false,"context_lines":[{"line_number":471,"context_line":"        super(ThinLVMVolumeDriver, self).__init__(*args, **kwargs)"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"    def check_for_setup_error(self):"},{"line_number":474,"context_line":"        \"\"\"Returns an error if prerequisites aren\u0027t met\"\"\""},{"line_number":475,"context_line":"        out, err \u003d self._execute(\u0027lvs\u0027, \u0027--option\u0027,"},{"line_number":476,"context_line":"                                 \u0027name\u0027, \u0027--noheadings\u0027,"},{"line_number":477,"context_line":"                                 run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FeL4%3D","line":474,"updated":"2013-01-21 08:04:22.000000000","message":"nothing uses err","commit_id":"159272a7277c192d9caaa3e0a9f4d84c5cc80191"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"1c66d401c8825efed094c1e3e1dafe50ac4ef955","unresolved":false,"context_lines":[{"line_number":471,"context_line":"        super(ThinLVMVolumeDriver, self).__init__(*args, **kwargs)"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"    def check_for_setup_error(self):"},{"line_number":474,"context_line":"        \"\"\"Returns an error if prerequisites aren\u0027t met\"\"\""},{"line_number":475,"context_line":"        out, err \u003d self._execute(\u0027lvs\u0027, \u0027--option\u0027,"},{"line_number":476,"context_line":"                                 \u0027name\u0027, \u0027--noheadings\u0027,"},{"line_number":477,"context_line":"                                 run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FXDU%3D","line":474,"in_reply_to":"AAAAM3%2F%2FeL4%3D","updated":"2013-01-25 16:55:52.000000000","message":"True, was using it before... I agree with avoiding capturing and not using, however since _execute returns a tuple and we do want \u0027out\u0027 I think this seems appropriate.","commit_id":"159272a7277c192d9caaa3e0a9f4d84c5cc80191"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"236e43d0a4db4ca2ee3948d3bbacb30a99f1747a","unresolved":false,"context_lines":[{"line_number":477,"context_line":"                                 run_as_root\u003dTrue)"},{"line_number":478,"context_line":"        pool_name \u003d \"%s-pool\" % FLAGS.volume_group"},{"line_number":479,"context_line":"        if pool_name not in out:"},{"line_number":480,"context_line":"            if not FLAGS.pool_size:"},{"line_number":481,"context_line":"                out, err \u003d self._execute(\u0027vgs\u0027, FLAGS.volume_group,"},{"line_number":482,"context_line":"                                         \u0027--noheadings\u0027, \u0027--options\u0027,"},{"line_number":483,"context_line":"                                         \u0027name,size\u0027, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FeMA%3D","line":480,"updated":"2013-01-21 08:04:22.000000000","message":"nothing uses err","commit_id":"159272a7277c192d9caaa3e0a9f4d84c5cc80191"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"236e43d0a4db4ca2ee3948d3bbacb30a99f1747a","unresolved":false,"context_lines":[{"line_number":485,"context_line":"            else:"},{"line_number":486,"context_line":"                size \u003d \"%s\" % FLAGS.pool_size"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"            pool_path \u003d \u0027%s/%s\u0027 % (FLAGS.volume_group, pool_name)"},{"line_number":489,"context_line":"            out, err \u003d self._execute(\u0027lvcreate\u0027, \u0027-T\u0027, \u0027-L\u0027, size,"},{"line_number":490,"context_line":"                                     pool_path, run_as_root\u003dTrue)"},{"line_number":491,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FeL8%3D","line":488,"updated":"2013-01-21 08:04:22.000000000","message":"nothing uses err","commit_id":"159272a7277c192d9caaa3e0a9f4d84c5cc80191"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"236e43d0a4db4ca2ee3948d3bbacb30a99f1747a","unresolved":false,"context_lines":[{"line_number":508,"context_line":""},{"line_number":509,"context_line":"    def delete_volume(self, volume):"},{"line_number":510,"context_line":"        \"\"\"Deletes a logical volume.\"\"\""},{"line_number":511,"context_line":"        if self._volume_not_present(volume[\u0027name\u0027]):"},{"line_number":512,"context_line":"            return True"},{"line_number":513,"context_line":"        self._try_execute(\u0027lvremove\u0027, \u0027-f\u0027, \"%s/%s\" %"},{"line_number":514,"context_line":"                          (FLAGS.volume_group,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FeLk%3D","line":511,"updated":"2013-01-21 08:04:22.000000000","message":"Why do we return true if the volume was not present and the delete failed? I noticed LVMVolumeDriver has been doing this already, but it doesn\u0027t seem right.","commit_id":"159272a7277c192d9caaa3e0a9f4d84c5cc80191"}]}
