)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"18db92da631cd19183c806f6c8f14e29911d3cd2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Parent:     6f723a6b (Merge \"Remove usage of locals() for formatting from cinder.tests.*\")"},{"line_number":2,"context_line":"Author:     Dinesh Subhraveti \u003csubhraveti@gmail.com\u003e"},{"line_number":3,"context_line":"AuthorDate: 2013-06-24 18:15:24 -0700"},{"line_number":4,"context_line":"Commit:     Dinesh Subhraveti \u003csubhraveti@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-06-24 18:15:24 -0700"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAPn%2F%2Fr0Y%3D","line":2,"updated":"2013-06-25 10:27:38.000000000","message":"This is coming from IBM, please us your IBM address in the commit.","commit_id":"5d13e37b33f2e8ca833b62712cfef91baa5ec8c8"}],"cinder/tests/test_gpfs.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"18db92da631cd19183c806f6c8f14e29911d3cd2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright IBM Corp. 2013"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"from oslo.config import cfg"},{"line_number":6,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2Fr0I%3D","line":3,"updated":"2013-06-25 10:27:38.000000000","message":"missing license","commit_id":"5d13e37b33f2e8ca833b62712cfef91baa5ec8c8"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo.config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from cinder import context"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp9w%3D","line":16,"updated":"2013-06-26 04:26:55.000000000","message":"fix import ordering https://github.com/openstack/cinder/blob/master/HACKING.rst#imports","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo.config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from cinder import context"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2FY%3D","line":16,"in_reply_to":"AAAAPn%2F%2Fp9w%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo.config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from cinder import context"},{"line_number":20,"context_line":"from cinder import db"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp9o%3D","line":17,"updated":"2013-06-26 04:26:55.000000000","message":"cfg is never used.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo.config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from cinder import context"},{"line_number":20,"context_line":"from cinder import db"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2FU%3D","line":17,"in_reply_to":"AAAAPn%2F%2Fp9o%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from cinder.image import image_utils"},{"line_number":24,"context_line":"from cinder.openstack.common import importutils"},{"line_number":25,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":26,"context_line":"from cinder.openstack.common import timeutils"},{"line_number":27,"context_line":"from cinder import test"},{"line_number":28,"context_line":"from cinder.tests.image import fake as fake_image"},{"line_number":29,"context_line":"from cinder.tests.test_volume import DriverTestCase"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp9c%3D","line":26,"updated":"2013-06-26 04:26:55.000000000","message":"timeutils is never used.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from cinder.image import image_utils"},{"line_number":24,"context_line":"from cinder.openstack.common import importutils"},{"line_number":25,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":26,"context_line":"from cinder.openstack.common import timeutils"},{"line_number":27,"context_line":"from cinder import test"},{"line_number":28,"context_line":"from cinder.tests.image import fake as fake_image"},{"line_number":29,"context_line":"from cinder.tests.test_volume import DriverTestCase"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2FQ%3D","line":26,"in_reply_to":"AAAAPn%2F%2Fp9c%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":26,"context_line":"from cinder.openstack.common import timeutils"},{"line_number":27,"context_line":"from cinder import test"},{"line_number":28,"context_line":"from cinder.tests.image import fake as fake_image"},{"line_number":29,"context_line":"from cinder.tests.test_volume import DriverTestCase"},{"line_number":30,"context_line":"from cinder import utils"},{"line_number":31,"context_line":"from cinder.volume import configuration as conf"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp9U%3D","line":28,"updated":"2013-06-26 04:26:55.000000000","message":"fake_image is never used.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":26,"context_line":"from cinder.openstack.common import timeutils"},{"line_number":27,"context_line":"from cinder import test"},{"line_number":28,"context_line":"from cinder.tests.image import fake as fake_image"},{"line_number":29,"context_line":"from cinder.tests.test_volume import DriverTestCase"},{"line_number":30,"context_line":"from cinder import utils"},{"line_number":31,"context_line":"from cinder.volume import configuration as conf"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2FM%3D","line":28,"in_reply_to":"AAAAPn%2F%2Fp9U%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from cinder.openstack.common import timeutils"},{"line_number":27,"context_line":"from cinder import test"},{"line_number":28,"context_line":"from cinder.tests.image import fake as fake_image"},{"line_number":29,"context_line":"from cinder.tests.test_volume import DriverTestCase"},{"line_number":30,"context_line":"from cinder import utils"},{"line_number":31,"context_line":"from cinder.volume import configuration as conf"},{"line_number":32,"context_line":"from cinder.volume.drivers.gpfs import GpfsDriver"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp9Q%3D","line":29,"updated":"2013-06-26 04:26:55.000000000","message":"DriverTestCase is never used.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from cinder.openstack.common import timeutils"},{"line_number":27,"context_line":"from cinder import test"},{"line_number":28,"context_line":"from cinder.tests.image import fake as fake_image"},{"line_number":29,"context_line":"from cinder.tests.test_volume import DriverTestCase"},{"line_number":30,"context_line":"from cinder import utils"},{"line_number":31,"context_line":"from cinder.volume import configuration as conf"},{"line_number":32,"context_line":"from cinder.volume.drivers.gpfs import GpfsDriver"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2FI%3D","line":29,"in_reply_to":"AAAAPn%2F%2Fp9Q%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from cinder.volume import configuration as conf"},{"line_number":32,"context_line":"from cinder.volume.drivers.gpfs import GpfsDriver"},{"line_number":33,"context_line":"import os"},{"line_number":34,"context_line":"import pdb"},{"line_number":35,"context_line":"import shutil"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp9I%3D","line":34,"updated":"2013-06-26 04:26:55.000000000","message":"pdb is never used and shouldn\u0027t be in the final merge.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from cinder.volume import configuration as conf"},{"line_number":32,"context_line":"from cinder.volume.drivers.gpfs import GpfsDriver"},{"line_number":33,"context_line":"import os"},{"line_number":34,"context_line":"import pdb"},{"line_number":35,"context_line":"import shutil"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2FE%3D","line":34,"in_reply_to":"AAAAPn%2F%2Fp9I%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from cinder.volume.drivers.gpfs import GpfsDriver"},{"line_number":33,"context_line":"import os"},{"line_number":34,"context_line":"import pdb"},{"line_number":35,"context_line":"import shutil"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp9E%3D","line":35,"updated":"2013-06-26 04:26:55.000000000","message":"shutil is never used.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from cinder.volume.drivers.gpfs import GpfsDriver"},{"line_number":33,"context_line":"import os"},{"line_number":34,"context_line":"import pdb"},{"line_number":35,"context_line":"import shutil"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2FA%3D","line":35,"in_reply_to":"AAAAPn%2F%2Fp9E%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bd9e14a7524dcebf0c354541a9957e6ecd0b76e2","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.backing_file \u003d None"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def _gpfs_backend_available():"},{"line_number":59,"context_line":"    try:"},{"line_number":60,"context_line":"        out, err \u003d utils.execute(\u0027mmgetstate\u0027, \u0027-Y\u0027, run_as_root\u003dTrue)"},{"line_number":61,"context_line":"    except exception.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FpjY%3D","line":58,"updated":"2013-06-25 23:42:19.000000000","message":"The unit tests need to always operate independently of the system. That means you always stub out the actual (in this case) utils.exec() methods for the unit tests.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.backing_file \u003d None"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def _gpfs_backend_available():"},{"line_number":59,"context_line":"    try:"},{"line_number":60,"context_line":"        out, err \u003d utils.execute(\u0027mmgetstate\u0027, \u0027-Y\u0027, run_as_root\u003dTrue)"},{"line_number":61,"context_line":"    except exception.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2Bs%3D","line":58,"in_reply_to":"AAAAPn%2F%2FpjY%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        return db.volume_create(context.get_admin_context(), vol)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_create_delete_volume_full_backing_file(self):"},{"line_number":143,"context_line":"        \u0027\u0027\u0027create and delete vol with full creation method\u0027\u0027\u0027"},{"line_number":144,"context_line":"        FLAGS.gpfs_sparsed_volumes \u003d False"},{"line_number":145,"context_line":"        vol \u003d self._create_volume(size\u003d1)"},{"line_number":146,"context_line":"        volume_id \u003d vol[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp8o%3D","line":143,"updated":"2013-06-26 04:26:55.000000000","message":"double quotes for doc string for consistency https://github.com/openstack/cinder/blob/master/HACKING.rst#docstrings","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        return db.volume_create(context.get_admin_context(), vol)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_create_delete_volume_full_backing_file(self):"},{"line_number":143,"context_line":"        \u0027\u0027\u0027create and delete vol with full creation method\u0027\u0027\u0027"},{"line_number":144,"context_line":"        FLAGS.gpfs_sparsed_volumes \u003d False"},{"line_number":145,"context_line":"        vol \u003d self._create_volume(size\u003d1)"},{"line_number":146,"context_line":"        volume_id \u003d vol[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2B0%3D","line":143,"in_reply_to":"AAAAPn%2F%2Fp8o%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        self.assertTrue(os.path.exists(self.volumes_path))"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_create_delete_volume_sparse_backing_file(self):"},{"line_number":157,"context_line":"        \u0027\u0027\u0027create and delete vol with default sparse creation method\u0027\u0027\u0027"},{"line_number":158,"context_line":"        FLAGS.gpfs_sparsed_volumes \u003d True"},{"line_number":159,"context_line":"        vol \u003d self._create_volume(size\u003d1)"},{"line_number":160,"context_line":"        volume_id \u003d vol[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp8c%3D","line":157,"updated":"2013-06-26 04:26:55.000000000","message":"double quotes for doc string for consistency https://github.com/openstack/cinder/blob/master/HACKING.rst#docstrings","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        self.assertTrue(os.path.exists(self.volumes_path))"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def test_create_delete_volume_sparse_backing_file(self):"},{"line_number":157,"context_line":"        \u0027\u0027\u0027create and delete vol with default sparse creation method\u0027\u0027\u0027"},{"line_number":158,"context_line":"        FLAGS.gpfs_sparsed_volumes \u003d True"},{"line_number":159,"context_line":"        vol \u003d self._create_volume(size\u003d1)"},{"line_number":160,"context_line":"        volume_id \u003d vol[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2Bw%3D","line":157,"in_reply_to":"AAAAPn%2F%2Fp8c%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bd9e14a7524dcebf0c354541a9957e6ecd0b76e2","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        self.volume.delete_volume(self.context, volume_src[\u0027id\u0027])"},{"line_number":294,"context_line":"        self.volume.delete_snapshot(self.context, snapshot_id)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def test_copy_image_to_volume(self):"},{"line_number":297,"context_line":"        \u0027\u0027\u0027"},{"line_number":298,"context_line":"        Test the function of copy_image_to_volume"},{"line_number":299,"context_line":"        focus on the integretion of the image_util"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FpjA%3D","line":296,"updated":"2013-06-25 23:42:19.000000000","message":"IMHO, this should be four tests, not one that tests something four different ways.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        self.volume.delete_volume(self.context, volume_src[\u0027id\u0027])"},{"line_number":294,"context_line":"        self.volume.delete_snapshot(self.context, snapshot_id)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def test_copy_image_to_volume(self):"},{"line_number":297,"context_line":"        \u0027\u0027\u0027"},{"line_number":298,"context_line":"        Test the function of copy_image_to_volume"},{"line_number":299,"context_line":"        focus on the integretion of the image_util"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2BM%3D","line":296,"in_reply_to":"AAAAPn%2F%2FpjA%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bd9e14a7524dcebf0c354541a9957e6ecd0b76e2","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self.volume.delete_snapshot(self.context, snapshot_id)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def test_copy_image_to_volume(self):"},{"line_number":297,"context_line":"        \u0027\u0027\u0027"},{"line_number":298,"context_line":"        Test the function of copy_image_to_volume"},{"line_number":299,"context_line":"        focus on the integretion of the image_util"},{"line_number":300,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FpjQ%3D","line":297,"updated":"2013-06-25 23:42:19.000000000","message":"Not only should you be consistent about your quote style(s) in a given file, but PEP8 recommends using only double quotes for multiline strings.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self.volume.delete_snapshot(self.context, snapshot_id)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def test_copy_image_to_volume(self):"},{"line_number":297,"context_line":"        \u0027\u0027\u0027"},{"line_number":298,"context_line":"        Test the function of copy_image_to_volume"},{"line_number":299,"context_line":"        focus on the integretion of the image_util"},{"line_number":300,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp8w%3D","line":297,"updated":"2013-06-26 04:26:55.000000000","message":"fix this docstring https://github.com/openstack/cinder/blob/master/HACKING.rst#docstrings","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self.volume.delete_snapshot(self.context, snapshot_id)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def test_copy_image_to_volume(self):"},{"line_number":297,"context_line":"        \u0027\u0027\u0027"},{"line_number":298,"context_line":"        Test the function of copy_image_to_volume"},{"line_number":299,"context_line":"        focus on the integretion of the image_util"},{"line_number":300,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2Bk%3D","line":297,"in_reply_to":"AAAAPn%2F%2Fp8w%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self.volume.delete_snapshot(self.context, snapshot_id)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def test_copy_image_to_volume(self):"},{"line_number":297,"context_line":"        \u0027\u0027\u0027"},{"line_number":298,"context_line":"        Test the function of copy_image_to_volume"},{"line_number":299,"context_line":"        focus on the integretion of the image_util"},{"line_number":300,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2Bo%3D","line":297,"in_reply_to":"AAAAPn%2F%2FpjQ%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        Test the function of copy_image_to_volume"},{"line_number":299,"context_line":"        focus on the integretion of the image_util"},{"line_number":300,"context_line":"        \u0027\u0027\u0027"},{"line_number":301,"context_line":"        FakeVolume \u003d None"},{"line_number":302,"context_line":"        image_id \u003d self.image_id"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        if not self.gpfs_avail:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp9A%3D","line":301,"updated":"2013-06-26 04:26:55.000000000","message":"FakeVolume is never used.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        Test the function of copy_image_to_volume"},{"line_number":299,"context_line":"        focus on the integretion of the image_util"},{"line_number":300,"context_line":"        \u0027\u0027\u0027"},{"line_number":301,"context_line":"        FakeVolume \u003d None"},{"line_number":302,"context_line":"        image_id \u003d self.image_id"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        if not self.gpfs_avail:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2Bc%3D","line":301,"in_reply_to":"AAAAPn%2F%2Fp9A%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bd9e14a7524dcebf0c354541a9957e6ecd0b76e2","unresolved":false,"context_lines":[{"line_number":306,"context_line":"            self.stubs.Set(image_utils, \u0027qemu_img_info\u0027,"},{"line_number":307,"context_line":"                           self._fake_qemu_raw_image_info)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        # gpfs_images_share_mode \u003d \u0027copy_on_write\u0027 and  glance_images_dir"},{"line_number":310,"context_line":"        # is not none. Expect that volume path exists."},{"line_number":311,"context_line":"        volume \u003d self._create_volume()"},{"line_number":312,"context_line":"        volumepath \u003d os.path.join(self.volumes_path, volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FpjM%3D","line":309,"updated":"2013-06-25 23:42:19.000000000","message":"extra space between \"and\" and \"glance\"","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":306,"context_line":"            self.stubs.Set(image_utils, \u0027qemu_img_info\u0027,"},{"line_number":307,"context_line":"                           self._fake_qemu_raw_image_info)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        # gpfs_images_share_mode \u003d \u0027copy_on_write\u0027 and  glance_images_dir"},{"line_number":310,"context_line":"        # is not none. Expect that volume path exists."},{"line_number":311,"context_line":"        volume \u003d self._create_volume()"},{"line_number":312,"context_line":"        volumepath \u003d os.path.join(self.volumes_path, volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2BY%3D","line":309,"in_reply_to":"AAAAPn%2F%2FpjM%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bd9e14a7524dcebf0c354541a9957e6ecd0b76e2","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        self.volume.delete_volume(self.context, volume[\u0027id\u0027])"},{"line_number":321,"context_line":"        self.assertFalse(os.path.exists(volumepath))"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        # gpfs_images_share_mode \u003d \u0027copy\u0027 and  glance_images_dir is not none"},{"line_number":324,"context_line":"        # expect that volume path exists"},{"line_number":325,"context_line":"        volume \u003d self._create_volume()"},{"line_number":326,"context_line":"        volumepath \u003d os.path.join(self.volumes_path, volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FpjI%3D","line":323,"updated":"2013-06-25 23:42:19.000000000","message":"here too.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        self.volume.delete_volume(self.context, volume[\u0027id\u0027])"},{"line_number":321,"context_line":"        self.assertFalse(os.path.exists(volumepath))"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        # gpfs_images_share_mode \u003d \u0027copy\u0027 and  glance_images_dir is not none"},{"line_number":324,"context_line":"        # expect that volume path exists"},{"line_number":325,"context_line":"        volume \u003d self._create_volume()"},{"line_number":326,"context_line":"        volumepath \u003d os.path.join(self.volumes_path, volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2BU%3D","line":323,"in_reply_to":"AAAAPn%2F%2FpjI%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bd9e14a7524dcebf0c354541a9957e6ecd0b76e2","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        self.volume.delete_volume(self.context, volume[\u0027id\u0027])"},{"line_number":335,"context_line":"        self.assertFalse(os.path.exists(volumepath))"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        # gpfs_images_share_mode \u003d \u0027copy\u0027 and  glance_images_dir is none"},{"line_number":338,"context_line":"        # expect that volume path does exist"},{"line_number":339,"context_line":"        volume \u003d self._create_volume()"},{"line_number":340,"context_line":"        volumepath \u003d os.path.join(self.volumes_path, volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FpjE%3D","line":337,"updated":"2013-06-25 23:42:19.000000000","message":"and here.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        self.volume.delete_volume(self.context, volume[\u0027id\u0027])"},{"line_number":335,"context_line":"        self.assertFalse(os.path.exists(volumepath))"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        # gpfs_images_share_mode \u003d \u0027copy\u0027 and  glance_images_dir is none"},{"line_number":338,"context_line":"        # expect that volume path does exist"},{"line_number":339,"context_line":"        volume \u003d self._create_volume()"},{"line_number":340,"context_line":"        volumepath \u003d os.path.join(self.volumes_path, volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2BQ%3D","line":337,"in_reply_to":"AAAAPn%2F%2FpjE%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"}],"cinder/volume/drivers/gpfs.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"18db92da631cd19183c806f6c8f14e29911d3cd2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright IBM Corp. 2013"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"\"\"\""},{"line_number":6,"context_line":"GPFS Volume Driver."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2Fr0U%3D","line":3,"updated":"2013-06-25 10:27:38.000000000","message":"Missing license header","commit_id":"5d13e37b33f2e8ca833b62712cfef91baa5ec8c8"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"18db92da631cd19183c806f6c8f14e29911d3cd2","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from cinder import context"},{"line_number":17,"context_line":"from cinder import db"},{"line_number":18,"context_line":"from cinder import exception"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from cinder.image import image_utils"},{"line_number":21,"context_line":"from cinder.openstack.common import fileutils"},{"line_number":22,"context_line":"from cinder.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2Fr0Q%3D","line":19,"updated":"2013-06-25 10:27:38.000000000","message":"why this break?","commit_id":"5d13e37b33f2e8ca833b62712cfef91baa5ec8c8"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import math"},{"line_number":22,"context_line":"import os"},{"line_number":23,"context_line":"import re"},{"line_number":24,"context_line":"import tempfile"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from oslo.config import cfg"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp8Y%3D","line":24,"updated":"2013-06-26 04:26:55.000000000","message":"tempfile is never used.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import math"},{"line_number":22,"context_line":"import os"},{"line_number":23,"context_line":"import re"},{"line_number":24,"context_line":"import tempfile"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from oslo.config import cfg"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2BE%3D","line":24,"in_reply_to":"AAAAPn%2F%2Fp8Y%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from oslo.config import cfg"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cinder import context"},{"line_number":29,"context_line":"from cinder import db"},{"line_number":30,"context_line":"from cinder import exception"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp8U%3D","line":28,"updated":"2013-06-26 04:26:55.000000000","message":"context is never used.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from oslo.config import cfg"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cinder import context"},{"line_number":29,"context_line":"from cinder import db"},{"line_number":30,"context_line":"from cinder import exception"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm%2BA%3D","line":28,"in_reply_to":"AAAAPn%2F%2Fp8U%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from oslo.config import cfg"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cinder import context"},{"line_number":29,"context_line":"from cinder import db"},{"line_number":30,"context_line":"from cinder import exception"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from cinder.image import image_utils"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp8Q%3D","line":29,"updated":"2013-06-26 04:26:55.000000000","message":"db is never used.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from oslo.config import cfg"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cinder import context"},{"line_number":29,"context_line":"from cinder import db"},{"line_number":30,"context_line":"from cinder import exception"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from cinder.image import image_utils"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm98%3D","line":29,"in_reply_to":"AAAAPn%2F%2Fp8Q%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from cinder.image import image_utils"},{"line_number":33,"context_line":"from cinder.openstack.common import fileutils"},{"line_number":34,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":35,"context_line":"from cinder import utils"},{"line_number":36,"context_line":"from cinder.volume import driver"},{"line_number":37,"context_line":"from cinder.volume import rpcapi as volume_rpcapi"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp8M%3D","line":35,"updated":"2013-06-26 04:26:55.000000000","message":"utils is never used.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from cinder.image import image_utils"},{"line_number":33,"context_line":"from cinder.openstack.common import fileutils"},{"line_number":34,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":35,"context_line":"from cinder import utils"},{"line_number":36,"context_line":"from cinder.volume import driver"},{"line_number":37,"context_line":"from cinder.volume import rpcapi as volume_rpcapi"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm94%3D","line":35,"in_reply_to":"AAAAPn%2F%2Fp8M%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":35,"context_line":"from cinder import utils"},{"line_number":36,"context_line":"from cinder.volume import driver"},{"line_number":37,"context_line":"from cinder.volume import rpcapi as volume_rpcapi"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"VERSION \u003d 1.0"},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp8I%3D","line":37,"updated":"2013-06-26 04:26:55.000000000","message":"volume_rpcapi is never used.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":35,"context_line":"from cinder import utils"},{"line_number":36,"context_line":"from cinder.volume import driver"},{"line_number":37,"context_line":"from cinder.volume import rpcapi as volume_rpcapi"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"VERSION \u003d 1.0"},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm90%3D","line":37,"in_reply_to":"AAAAPn%2F%2Fp8I%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":39,"context_line":"VERSION \u003d 1.0"},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"gpfs_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027gpfs_volumes_dir\u0027,"},{"line_number":44,"context_line":"               default\u003dNone,"},{"line_number":45,"context_line":"               help\u003d\u0027Path to the directory on GPFS mount point where \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp7U%3D","line":42,"updated":"2013-06-26 04:26:55.000000000","message":"cinder.conf.sample should be updated","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"VERSION \u003d 1.0"},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"gpfs_opts \u003d ["},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027gpfs_volumes_dir\u0027,"},{"line_number":44,"context_line":"               default\u003dNone,"},{"line_number":45,"context_line":"               help\u003d\u0027Path to the directory on GPFS mount point where \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm9s%3D","line":42,"in_reply_to":"AAAAPn%2F%2Fp7U%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    def _check_gpfs_state(self):"},{"line_number":89,"context_line":"        out \u003d self._get_gpfs_state()"},{"line_number":90,"context_line":"        lines \u003d out.splitlines()"},{"line_number":91,"context_line":"        hdr \u003d lines[0]"},{"line_number":92,"context_line":"        state_token \u003d lines[0].split(\u0027:\u0027).index(\u0027state\u0027)"},{"line_number":93,"context_line":"        gpfs_state \u003d lines[1].split(\u0027:\u0027)[state_token]"},{"line_number":94,"context_line":"        if gpfs_state !\u003d \u0027active\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp8E%3D","line":91,"updated":"2013-06-26 04:26:55.000000000","message":"hdr is never used.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    def _check_gpfs_state(self):"},{"line_number":89,"context_line":"        out \u003d self._get_gpfs_state()"},{"line_number":90,"context_line":"        lines \u003d out.splitlines()"},{"line_number":91,"context_line":"        hdr \u003d lines[0]"},{"line_number":92,"context_line":"        state_token \u003d lines[0].split(\u0027:\u0027).index(\u0027state\u0027)"},{"line_number":93,"context_line":"        gpfs_state \u003d lines[1].split(\u0027:\u0027)[state_token]"},{"line_number":94,"context_line":"        if gpfs_state !\u003d \u0027active\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm9o%3D","line":91,"in_reply_to":"AAAAPn%2F%2Fp8E%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        self._execute(\u0027chmod\u0027, \u0027666\u0027, path, run_as_root\u003dTrue)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def _create_regular_file(self, path, size):"},{"line_number":165,"context_line":"        \"\"\"Creates regular file of given size. Takes a lot of time for large"},{"line_number":166,"context_line":"        files."},{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fp78%3D","line":165,"updated":"2013-06-26 04:26:55.000000000","message":"fix multiline doc string https://github.com/openstack/cinder/blob/master/HACKING.rst#docstrings","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        self._execute(\u0027chmod\u0027, \u0027666\u0027, path, run_as_root\u003dTrue)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def _create_regular_file(self, path, size):"},{"line_number":165,"context_line":"        \"\"\"Creates regular file of given size. Takes a lot of time for large"},{"line_number":166,"context_line":"        files."},{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm9g%3D","line":165,"in_reply_to":"AAAAPn%2F%2Fp78%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bd9e14a7524dcebf0c354541a9957e6ecd0b76e2","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        files."},{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        MiB \u003d 1024 * 1024"},{"line_number":170,"context_line":"        GiB \u003d MiB * 1024"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        block_size_mb \u003d 1"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fpi4%3D","line":169,"updated":"2013-06-25 23:42:19.000000000","message":"Personally, I think these should be all lowercase. PEP8 leans this way for most things as well.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        files."},{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        MiB \u003d 1024 * 1024"},{"line_number":170,"context_line":"        GiB \u003d MiB * 1024"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        block_size_mb \u003d 1"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm8s%3D","line":169,"in_reply_to":"AAAAPn%2F%2FoqM%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"3370264d4761de9c13acd0e395763c5a94d79d08","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        files."},{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        MiB \u003d 1024 * 1024"},{"line_number":170,"context_line":"        GiB \u003d MiB * 1024"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        block_size_mb \u003d 1"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FoqM%3D","line":169,"in_reply_to":"AAAAPn%2F%2Fpi4%3D","updated":"2013-06-26 09:12:44.000000000","message":"These are actually defined in cinder/units.py, and should not be redefined here.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bd9e14a7524dcebf0c354541a9957e6ecd0b76e2","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        (out, err) \u003d self._execute(\u0027mmclone\u0027, \u0027show\u0027, fchild, run_as_root\u003dTrue)"},{"line_number":222,"context_line":"        fparent \u003d None"},{"line_number":223,"context_line":"        reInode \u003d re.compile("},{"line_number":224,"context_line":"            \u0027.*\\s+(?:yes|no)\\s+\\d+\\s+(?P\u003cinode\u003e\\d+)\u0027, re.M | re.S)"},{"line_number":225,"context_line":"        match \u003d reInode.match(out)"},{"line_number":226,"context_line":"        if match:"},{"line_number":227,"context_line":"            inode \u003d match.group(\u0027inode\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FpiY%3D","line":224,"updated":"2013-06-25 23:42:19.000000000","message":"Man, is there really no better way to interact with the thing other than scraping its output? Are the outputs of these commands stable interfaces?","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        (out, err) \u003d self._execute(\u0027mmclone\u0027, \u0027show\u0027, fchild, run_as_root\u003dTrue)"},{"line_number":222,"context_line":"        fparent \u003d None"},{"line_number":223,"context_line":"        reInode \u003d re.compile("},{"line_number":224,"context_line":"            \u0027.*\\s+(?:yes|no)\\s+\\d+\\s+(?P\u003cinode\u003e\\d+)\u0027, re.M | re.S)"},{"line_number":225,"context_line":"        match \u003d reInode.match(out)"},{"line_number":226,"context_line":"        if match:"},{"line_number":227,"context_line":"            inode \u003d match.group(\u0027inode\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm5M%3D","line":224,"in_reply_to":"AAAAPn%2F%2FpiY%3D","updated":"2013-07-08 15:54:59.000000000","message":"This is the best available so far.  We might expose a more direct  interface in a later version of GPFS, at which point, I\u0027ll come back and fix this.","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0820f43d8319ab9e9d295aef2e7ec8ebd177dcf1","unresolved":false,"context_lines":[{"line_number":442,"context_line":"                raise exception.ImageUnacceptable("},{"line_number":443,"context_line":"                    image_id\u003dimage_id,"},{"line_number":444,"context_line":"                    reason\u003d_(\"fmt\u003d%(fmt)s backed by:\""},{"line_number":445,"context_line":"                             \"%(backing_file)s\") % locals())"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"            LOG.debug(\"%s was %s, converting to raw\" % (image_id, fmt))"},{"line_number":448,"context_line":"            image_utils.convert_image(tmp, dest, \u0027raw\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FpeI%3D","line":445,"updated":"2013-06-26 04:26:55.000000000","message":"no locals https://github.com/openstack/cinder/blob/master/HACKING.rst#general","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"fdfb40fb5ed191fd65c2ab5ef2d14f413812872f","unresolved":false,"context_lines":[{"line_number":442,"context_line":"                raise exception.ImageUnacceptable("},{"line_number":443,"context_line":"                    image_id\u003dimage_id,"},{"line_number":444,"context_line":"                    reason\u003d_(\"fmt\u003d%(fmt)s backed by:\""},{"line_number":445,"context_line":"                             \"%(backing_file)s\") % locals())"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"            LOG.debug(\"%s was %s, converting to raw\" % (image_id, fmt))"},{"line_number":448,"context_line":"            image_utils.convert_image(tmp, dest, \u0027raw\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fm8g%3D","line":445,"in_reply_to":"AAAAPn%2F%2FpeI%3D","updated":"2013-07-08 15:54:59.000000000","message":"Done","commit_id":"55bae7eb28689aff77c587ed4f89699d2ec11eb2"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"09521407ecfad75ff7497b9cee379fde92cf7f48","unresolved":false,"context_lines":[{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"gpfs_opts \u003d ["},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027gpfs_volumes_dir\u0027,"},{"line_number":39,"context_line":"               default\u003dNone,"},{"line_number":40,"context_line":"               help\u003d\u0027Path to the directory on GPFS mount point where \u0027"},{"line_number":41,"context_line":"                    \u0027volumes are stored\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2Fcjg%3D","line":38,"updated":"2013-07-01 19:46:19.000000000","message":"Two things:\n1) This is required so it should probably not be default\u003dNone (likely $state_path/mnt?)\n\n2) If I understand correctly, NFS and GlusterFS drivers call this \u003cx\u003efs_mount_point_base.  Should probably use the same naming scheme here for consistency?  (Tell me if this doesn\u0027t make sense.)","commit_id":"182481c101136ed66a34c63249600c4350514a23"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"723f048a76d8831c78ad2b67184b718cb070018d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"gpfs_opts \u003d ["},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027gpfs_volumes_dir\u0027,"},{"line_number":39,"context_line":"               default\u003dNone,"},{"line_number":40,"context_line":"               help\u003d\u0027Path to the directory on GPFS mount point where \u0027"},{"line_number":41,"context_line":"                    \u0027volumes are stored\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FZWs%3D","line":38,"in_reply_to":"AAAAPn%2F%2Fcjg%3D","updated":"2013-07-08 15:55:38.000000000","message":"Done","commit_id":"182481c101136ed66a34c63249600c4350514a23"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"09521407ecfad75ff7497b9cee379fde92cf7f48","unresolved":false,"context_lines":[{"line_number":68,"context_line":"CONF.register_opts(gpfs_opts)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class GpfsDriver(driver.VolumeDriver):"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    \"\"\"Implements volume functions using GPFS primitives\"\"\""},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2Fcis%3D","line":71,"updated":"2013-07-01 19:46:19.000000000","message":"Consider basing on nfs.RemoteFsDriver to avoid duplicating methods, if this makes sense here.","commit_id":"182481c101136ed66a34c63249600c4350514a23"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"723f048a76d8831c78ad2b67184b718cb070018d","unresolved":false,"context_lines":[{"line_number":68,"context_line":"CONF.register_opts(gpfs_opts)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class GpfsDriver(driver.VolumeDriver):"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    \"\"\"Implements volume functions using GPFS primitives\"\"\""},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FZU0%3D","line":71,"in_reply_to":"AAAAPn%2F%2Fcis%3D","updated":"2013-07-08 15:55:38.000000000","message":"Those duplicate methods will diverge from their counterparts in RemoteFsDriver when GPFS specific features like per-volume replication and placement are implemented in the next revision.","commit_id":"182481c101136ed66a34c63249600c4350514a23"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"09521407ecfad75ff7497b9cee379fde92cf7f48","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        try:"},{"line_number":382,"context_line":"            self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":383,"context_line":"        except exception.ProcessExecutionError as exc:"},{"line_number":384,"context_line":"            exception_message \u003d (\"Failed mkfs command, \""},{"line_number":385,"context_line":"                                 \"error message was: %s\""},{"line_number":386,"context_line":"                                 % exc.stderr)"},{"line_number":387,"context_line":"            raise exception.VolumeBackendAPIException("}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FciQ%3D","line":384,"updated":"2013-07-01 19:46:19.000000000","message":"Internationalization for message","commit_id":"182481c101136ed66a34c63249600c4350514a23"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"723f048a76d8831c78ad2b67184b718cb070018d","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        try:"},{"line_number":382,"context_line":"            self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":383,"context_line":"        except exception.ProcessExecutionError as exc:"},{"line_number":384,"context_line":"            exception_message \u003d (\"Failed mkfs command, \""},{"line_number":385,"context_line":"                                 \"error message was: %s\""},{"line_number":386,"context_line":"                                 % exc.stderr)"},{"line_number":387,"context_line":"            raise exception.VolumeBackendAPIException("}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPn%2F%2FZUw%3D","line":384,"in_reply_to":"AAAAPn%2F%2FciQ%3D","updated":"2013-07-08 15:55:38.000000000","message":"Done","commit_id":"182481c101136ed66a34c63249600c4350514a23"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"58470155f4471c407f8f6fc511e1d5082dfff518","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                    \u0027could have impact on performance.  This option limits \u0027"},{"line_number":58,"context_line":"                    \u0027the number of indirections required to reach a specific \u0027"},{"line_number":59,"context_line":"                    \u0027block. 0 indicates unlimited.\u0027),"},{"line_number":60,"context_line":"    cfg.BoolOpt(\u0027gpfs_sparsed_volumes\u0027,"},{"line_number":61,"context_line":"                default\u003dTrue,"},{"line_number":62,"context_line":"                help\u003d(\u0027Create volumes as sparsed files which take no space. \u0027"},{"line_number":63,"context_line":"                      \u0027If set to False volume is created as regular file. \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2FTRg%3D","line":60,"updated":"2013-07-04 15:00:15.000000000","message":"Should be \u0027sparse\u0027, not \u0027sparsed\u0027 (change all instances)","commit_id":"33aaabe10c145bc266773f8d5f49d114ef3ea919"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"03ec99b793a02e73ac8f198dedb0ccc9b3bab07b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                    \u0027could have impact on performance.  This option limits \u0027"},{"line_number":58,"context_line":"                    \u0027the number of indirections required to reach a specific \u0027"},{"line_number":59,"context_line":"                    \u0027block. 0 indicates unlimited.\u0027),"},{"line_number":60,"context_line":"    cfg.BoolOpt(\u0027gpfs_sparsed_volumes\u0027,"},{"line_number":61,"context_line":"                default\u003dTrue,"},{"line_number":62,"context_line":"                help\u003d(\u0027Create volumes as sparsed files which take no space. \u0027"},{"line_number":63,"context_line":"                      \u0027If set to False volume is created as regular file. \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2FTGU%3D","line":60,"in_reply_to":"AAAAPn%2F%2FTRg%3D","updated":"2013-07-08 15:55:56.000000000","message":"Done.  \n\nnfs.py and glusterfs.py use \u0027sparsed\u0027, by the way","commit_id":"33aaabe10c145bc266773f8d5f49d114ef3ea919"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"58470155f4471c407f8f6fc511e1d5082dfff518","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        src \u003d self.local_path(src_vref)"},{"line_number":202,"context_line":"        dest \u003d self.local_path(volume)"},{"line_number":203,"context_line":"        self._create_gpfs_clone(src, dest)"},{"line_number":204,"context_line":"        data \u003d image_utils.qemu_img_info(dest)"},{"line_number":205,"context_line":"        return {\u0027size\u0027: math.ceil(data.virtual_size / 1024.0 ** 3)}"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _delete_gpfs_file(self, fchild):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2FTQw%3D","line":204,"updated":"2013-07-04 15:00:15.000000000","message":"Why do you assume that dest is an image?","commit_id":"33aaabe10c145bc266773f8d5f49d114ef3ea919"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"03ec99b793a02e73ac8f198dedb0ccc9b3bab07b","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        src \u003d self.local_path(src_vref)"},{"line_number":202,"context_line":"        dest \u003d self.local_path(volume)"},{"line_number":203,"context_line":"        self._create_gpfs_clone(src, dest)"},{"line_number":204,"context_line":"        data \u003d image_utils.qemu_img_info(dest)"},{"line_number":205,"context_line":"        return {\u0027size\u0027: math.ceil(data.virtual_size / 1024.0 ** 3)}"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _delete_gpfs_file(self, fchild):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2FTGY%3D","line":204,"in_reply_to":"AAAAPn%2F%2FTQw%3D","updated":"2013-07-08 15:55:56.000000000","message":"It\u0027s a raw image of a volume.  qemu-img is good that way.","commit_id":"33aaabe10c145bc266773f8d5f49d114ef3ea919"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"58470155f4471c407f8f6fc511e1d5082dfff518","unresolved":false,"context_lines":[{"line_number":285,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":286,"context_line":"        \"\"\"Deletes a GPFS snapshot\"\"\""},{"line_number":287,"context_line":"        # A snapshot file is deleted as a part of delete_volume when"},{"line_number":288,"context_line":"        # all volumes derived from it are deleted."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def local_path(self, volume):"},{"line_number":291,"context_line":"        return os.path.join(self.configuration.gpfs_mount_point_base,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2FTQE%3D","line":288,"updated":"2013-07-04 15:00:15.000000000","message":"You don\u0027t delete snapshots?  Is that sound?","commit_id":"33aaabe10c145bc266773f8d5f49d114ef3ea919"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"03ec99b793a02e73ac8f198dedb0ccc9b3bab07b","unresolved":false,"context_lines":[{"line_number":285,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":286,"context_line":"        \"\"\"Deletes a GPFS snapshot\"\"\""},{"line_number":287,"context_line":"        # A snapshot file is deleted as a part of delete_volume when"},{"line_number":288,"context_line":"        # all volumes derived from it are deleted."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def local_path(self, volume):"},{"line_number":291,"context_line":"        return os.path.join(self.configuration.gpfs_mount_point_base,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2FTGM%3D","line":288,"in_reply_to":"AAAAPn%2F%2FTQE%3D","updated":"2013-07-08 15:55:56.000000000","message":"GPFS doesn\u0027t allow deleting a snapshot file while there are children derived from it.  It is deleted eventually when its volumes are deleted.  Since snapshots are implemented through copy-on-write, they don\u0027t consume any additional space beyond that consumed by their children -- no resource penalty for deferred delete.","commit_id":"33aaabe10c145bc266773f8d5f49d114ef3ea919"},{"author":{"_account_id":1773,"name":"oliver-leahy-l","email":"oliver.leahy@hpe.com","username":"oliver-leahy-l"},"change_message_id":"a45443a2f91573440a6687cbc3d21dc18661c929","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        self._check_gpfs_state()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        if(self.configuration.gpfs_mount_point_base is None):"},{"line_number":107,"context_line":"            msg \u003d _(\u0027Option gpfs_mount_point_base is not set correctly.\u0027)"},{"line_number":108,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        if(self.configuration.gpfs_images_share_mode and"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPn%2F%2FSDk%3D","line":107,"updated":"2013-07-05 09:17:22.000000000","message":"Should error messages be written to the log, or is it ok to rely on the caller to log? This comment applies generally to errors throughout the module.","commit_id":"a030f5c208228805dbf287d81e22dc2807900d32"},{"author":{"_account_id":1773,"name":"oliver-leahy-l","email":"oliver.leahy@hpe.com","username":"oliver-leahy-l"},"change_message_id":"a45443a2f91573440a6687cbc3d21dc18661c929","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                fparent \u003d out.split(\u0027\\n\u0027, 1)[0]"},{"line_number":222,"context_line":"        self._execute("},{"line_number":223,"context_line":"            \u0027rm\u0027, \u0027-f\u0027, fchild, check_exit_code\u003dFalse, run_as_root\u003dTrue)"},{"line_number":224,"context_line":"        if not os.path.exists(fchild) and fparent:"},{"line_number":225,"context_line":"            fpbase \u003d os.path.basename(fparent)"},{"line_number":226,"context_line":"            if (fpbase.startswith(\u0027snapshot-\u0027) or fpbase.endswith(\u0027.snap\u0027)):"},{"line_number":227,"context_line":"                self._delete_gpfs_file(fparent)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPn%2F%2FSJk%3D","line":224,"updated":"2013-07-05 09:17:22.000000000","message":"I don\u0027t see any test that the parent is not referenced by another volume, is that correct?","commit_id":"a030f5c208228805dbf287d81e22dc2807900d32"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"018684681552f5138b6b1e8afee09124568c0f71","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                fparent \u003d out.split(\u0027\\n\u0027, 1)[0]"},{"line_number":222,"context_line":"        self._execute("},{"line_number":223,"context_line":"            \u0027rm\u0027, \u0027-f\u0027, fchild, check_exit_code\u003dFalse, run_as_root\u003dTrue)"},{"line_number":224,"context_line":"        if not os.path.exists(fchild) and fparent:"},{"line_number":225,"context_line":"            fpbase \u003d os.path.basename(fparent)"},{"line_number":226,"context_line":"            if (fpbase.startswith(\u0027snapshot-\u0027) or fpbase.endswith(\u0027.snap\u0027)):"},{"line_number":227,"context_line":"                self._delete_gpfs_file(fparent)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2F%2FoY%3D","line":224,"in_reply_to":"AAAAPn%2F%2FSJk%3D","updated":"2013-07-08 15:54:44.000000000","message":"This code needs some clarification.  I added a comment here.\n\nThere is no need to check for volume references on this snapshot because \u0027rm -f\u0027 itself serves as a simple and implicit check.  If the parent is referenced by another volume, GPFS doesn\u0027t allow deleting it.  \u0027rm -f\u0027 silently fails and the subsequent check on the path indicates whether there are any volumes derived from that snapshot.  If there are such volumes, we quit recursion and let the other volumes delete the snapshot later.  If there are no references, rm would succeed and the snapshot is deleted.","commit_id":"a030f5c208228805dbf287d81e22dc2807900d32"},{"author":{"_account_id":1773,"name":"oliver-leahy-l","email":"oliver.leahy@hpe.com","username":"oliver-leahy-l"},"change_message_id":"a45443a2f91573440a6687cbc3d21dc18661c929","unresolved":false,"context_lines":[{"line_number":285,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":286,"context_line":"        \"\"\"Deletes a GPFS snapshot\"\"\""},{"line_number":287,"context_line":"        # A snapshot file is deleted as a part of delete_volume when"},{"line_number":288,"context_line":"        # all volumes derived from it are deleted."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def local_path(self, volume):"},{"line_number":291,"context_line":"        return os.path.join(self.configuration.gpfs_mount_point_base,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPn%2F%2FSJ8%3D","line":288,"updated":"2013-07-05 09:17:22.000000000","message":"Is this correct? The method create_volume_from_snapshot() calls _gpfs_redirect(), the documentation for mmclone redirect says that this operation \"Splits a file clone from the immediate clone parent\", does that not imply that the volume will no longer be pointing at the snapshot? In that case the snapshot can\u0027t be deleted by a delete operation on the volume?","commit_id":"a030f5c208228805dbf287d81e22dc2807900d32"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"018684681552f5138b6b1e8afee09124568c0f71","unresolved":false,"context_lines":[{"line_number":285,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":286,"context_line":"        \"\"\"Deletes a GPFS snapshot\"\"\""},{"line_number":287,"context_line":"        # A snapshot file is deleted as a part of delete_volume when"},{"line_number":288,"context_line":"        # all volumes derived from it are deleted."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def local_path(self, volume):"},{"line_number":291,"context_line":"        return os.path.join(self.configuration.gpfs_mount_point_base,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2F%2Foc%3D","line":288,"in_reply_to":"AAAAPn%2F%2FSJ8%3D","updated":"2013-07-08 15:54:44.000000000","message":"Yes, the newly created volume will no longer point to the snapshot but that\u0027s okay because it is a new volume unrelated to the snapshot from which it is created.  The original snapshot is still referenced by the volume which it is a part of.  It will be deleted when that \"host\" volume is deleted.","commit_id":"a030f5c208228805dbf287d81e22dc2807900d32"},{"author":{"_account_id":1773,"name":"oliver-leahy-l","email":"oliver.leahy@hpe.com","username":"oliver-leahy-l"},"change_message_id":"a45443a2f91573440a6687cbc3d21dc18661c929","unresolved":false,"context_lines":[{"line_number":383,"context_line":"        except exception.ProcessExecutionError as exc:"},{"line_number":384,"context_line":"            exception_message \u003d (_(\"Failed mkfs command, \""},{"line_number":385,"context_line":"                                   \"error message was: %s\")"},{"line_number":386,"context_line":"                                 % exc.stderr)"},{"line_number":387,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":388,"context_line":"                data\u003dexception_message)"},{"line_number":389,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAPn%2F%2FSIs%3D","line":386,"updated":"2013-07-05 09:17:22.000000000","message":"Again, should you log an error here, as well as passing information back to the UI. If you do you should include volume id.","commit_id":"a030f5c208228805dbf287d81e22dc2807900d32"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"018684681552f5138b6b1e8afee09124568c0f71","unresolved":false,"context_lines":[{"line_number":383,"context_line":"        except exception.ProcessExecutionError as exc:"},{"line_number":384,"context_line":"            exception_message \u003d (_(\"Failed mkfs command, \""},{"line_number":385,"context_line":"                                   \"error message was: %s\")"},{"line_number":386,"context_line":"                                 % exc.stderr)"},{"line_number":387,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":388,"context_line":"                data\u003dexception_message)"},{"line_number":389,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2F%2FoQ%3D","line":386,"in_reply_to":"AAAAPn%2F%2FSIs%3D","updated":"2013-07-08 15:54:44.000000000","message":"Done","commit_id":"a030f5c208228805dbf287d81e22dc2807900d32"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"23580d7f1c920fc7d57590664e99bfce87b898b7","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"class GPFSDriver(driver.VolumeDriver):"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    \"\"\"Implements volume functions using GPFS primitives\"\"\""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":76,"context_line":"        super(GPFSDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAP3%2F%2F8%2F8%3D","line":73,"updated":"2013-07-08 17:06:18.000000000","message":"silly nit.. but need a period at the end of one line doc strings here.","commit_id":"54a061014858abeadb9db2d69e0a935a34ec5b7d"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"6f7545d26a2ba6a2127e97449ab7a239435a21fc","unresolved":false,"context_lines":[{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":311,"context_line":"        \"\"\"Safely and synchronously recreates an export for a logical"},{"line_number":312,"context_line":"        volume."},{"line_number":313,"context_line":"        \"\"\""},{"line_number":314,"context_line":"        pass"},{"line_number":315,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2F6iI%3D","line":312,"updated":"2013-07-09 09:32:55.000000000","message":"Ahh you messed it up - now it\u0027s a multi-line docstring! :)\n\nSee the \"Docstrings\" section here: https://github.com/openstack/cinder/blob/master/HACKING.rst","commit_id":"e8e3dd38e10bd59363816d096a0e47093a193f9b"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"e06113a268c83f8a8dcda5c42937739c8887f498","unresolved":false,"context_lines":[{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":311,"context_line":"        \"\"\"Safely and synchronously recreates an export for a logical"},{"line_number":312,"context_line":"        volume."},{"line_number":313,"context_line":"        \"\"\""},{"line_number":314,"context_line":"        pass"},{"line_number":315,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2F5Zk%3D","line":312,"in_reply_to":"AAAAP3%2F%2F6iI%3D","updated":"2013-07-09 16:14:49.000000000","message":"Good grief :)\n\nUploaded the change.","commit_id":"e8e3dd38e10bd59363816d096a0e47093a193f9b"}],"etc/cinder/rootwrap.d/volume.filters":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"09521407ecfad75ff7497b9cee379fde92cf7f48","unresolved":false,"context_lines":[{"line_number":63,"context_line":"multipath: CommandFilter, multipath, root"},{"line_number":64,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":65,"context_line":"# cinder/volume/drivers/gpfs.py"},{"line_number":66,"context_line":"mmgetstate: CommandFilter, /usr/lpp/mmfs/bin/mmgetstate, root"},{"line_number":67,"context_line":"mmclone: CommandFilter, /usr/lpp/mmfs/bin/mmclone, root"},{"line_number":68,"context_line":"mmlsattr: CommandFilter, /usr/lpp/mmfs/bin/mmlsattr, root"},{"line_number":69,"context_line":"find: CommandFilter, find, root"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAPn%2F%2Fcj4%3D","line":66,"updated":"2013-07-01 19:46:19.000000000","message":"Are these really always in /usr/lpp/mmfs?  Is it possible to assume they are in $PATH?","commit_id":"182481c101136ed66a34c63249600c4350514a23"},{"author":{"_account_id":7201,"name":"Dinesh Subhraveti","email":"dineshs@us.ibm.com","username":"subhraveti"},"change_message_id":"723f048a76d8831c78ad2b67184b718cb070018d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"multipath: CommandFilter, multipath, root"},{"line_number":64,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":65,"context_line":"# cinder/volume/drivers/gpfs.py"},{"line_number":66,"context_line":"mmgetstate: CommandFilter, /usr/lpp/mmfs/bin/mmgetstate, root"},{"line_number":67,"context_line":"mmclone: CommandFilter, /usr/lpp/mmfs/bin/mmclone, root"},{"line_number":68,"context_line":"mmlsattr: CommandFilter, /usr/lpp/mmfs/bin/mmlsattr, root"},{"line_number":69,"context_line":"find: CommandFilter, find, root"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAPn%2F%2FZSw%3D","line":66,"in_reply_to":"AAAAPn%2F%2Fcj4%3D","updated":"2013-07-08 15:55:38.000000000","message":"Since some of these are used to verify proper GPFS installation, probably best to use the path directly rather than relying on it being in $PATH.  Also that path is very unlikely to change.","commit_id":"182481c101136ed66a34c63249600c4350514a23"}]}
