)]}'
{"cinder/tests/test_scality.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"105718f5ebecd2f503eb9bc12af06ddbec68faa3","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from cinder import exception"},{"line_number":23,"context_line":"from cinder import test"},{"line_number":24,"context_line":"from cinder import utils"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from cinder.volume.drivers import scality"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FKe0%3D","line":25,"updated":"2013-02-05 05:49:31.000000000","message":"no space needed here.","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"8a67a4a8b7be15f1b20284cf536225ae02193ac7","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from cinder import exception"},{"line_number":23,"context_line":"from cinder import test"},{"line_number":24,"context_line":"from cinder import utils"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from cinder.volume.drivers import scality"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FE%2BQ%3D","line":25,"in_reply_to":"AAAAM3%2F%2FKe0%3D","updated":"2013-02-07 20:52:11.000000000","message":"Done","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"4363ba89989df4ef73a74a80fc29385941217b92","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 Scality"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2B0Zg%3D","line":1,"updated":"2013-02-18 16:57:11.000000000","message":"Might want to check with your legal department, it\u0027s 2013","commit_id":"94639c0c1c62e9d672b73e01973e3b5b96e5736f"}],"cinder/volume/drivers/scality.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"dcc10364ade3ceb1f480f1895ed3458d05344423","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"volume_opts \u003d ["},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027scality_sofs_config\u0027,"},{"line_number":36,"context_line":"                default\u003dNone,"},{"line_number":37,"context_line":"                help\u003d\u0027Path or URL to Scality SOFS configuration file\u0027),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027scality_sofs_mount_point\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fi9k%3D","line":35,"updated":"2013-01-16 17:08:33.000000000","message":"over-indented","commit_id":"dfaa449ff6e092691b810bc21da9458993fb9da8"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"687e4cbdae620fc70aa8c6780e16cd9e8be0dac2","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"volume_opts \u003d ["},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027scality_sofs_config\u0027,"},{"line_number":36,"context_line":"                default\u003dNone,"},{"line_number":37,"context_line":"                help\u003d\u0027Path or URL to Scality SOFS configuration file\u0027),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027scality_sofs_mount_point\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FgZU%3D","line":35,"in_reply_to":"AAAAM3%2F%2Fi9k%3D","updated":"2013-01-18 01:30:25.000000000","message":"Done","commit_id":"dfaa449ff6e092691b810bc21da9458993fb9da8"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"dcc10364ade3ceb1f480f1895ed3458d05344423","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"volume_opts \u003d ["},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027scality_sofs_config\u0027,"},{"line_number":36,"context_line":"                default\u003dNone,"},{"line_number":37,"context_line":"                help\u003d\u0027Path or URL to Scality SOFS configuration file\u0027),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027scality_sofs_mount_point\u0027,"},{"line_number":39,"context_line":"               default\u003d\u0027$state_path/scality\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fi9g%3D","line":36,"updated":"2013-01-16 17:08:33.000000000","message":"ditto","commit_id":"dfaa449ff6e092691b810bc21da9458993fb9da8"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"687e4cbdae620fc70aa8c6780e16cd9e8be0dac2","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"volume_opts \u003d ["},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027scality_sofs_config\u0027,"},{"line_number":36,"context_line":"                default\u003dNone,"},{"line_number":37,"context_line":"                help\u003d\u0027Path or URL to Scality SOFS configuration file\u0027),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027scality_sofs_mount_point\u0027,"},{"line_number":39,"context_line":"               default\u003d\u0027$state_path/scality\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FgZQ%3D","line":36,"in_reply_to":"AAAAM3%2F%2Fi9g%3D","updated":"2013-01-18 01:30:25.000000000","message":"Done","commit_id":"dfaa449ff6e092691b810bc21da9458993fb9da8"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"dcc10364ade3ceb1f480f1895ed3458d05344423","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            # turn local path into URL"},{"line_number":67,"context_line":"            config \u003d \u0027file://%s\u0027 % config"},{"line_number":68,"context_line":"        try:"},{"line_number":69,"context_line":"            urllib2.urlopen(config, timeout\u003d5).close()"},{"line_number":70,"context_line":"        except URLError as e:"},{"line_number":71,"context_line":"            msg \u003d _(\"Cannot access \u0027scality_sofs_config\u0027: %s\") % e"},{"line_number":72,"context_line":"            LOG.warn(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fi9Y%3D","line":69,"updated":"2013-01-16 17:08:33.000000000","message":"Where are you getting URLError from?","commit_id":"dfaa449ff6e092691b810bc21da9458993fb9da8"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"687e4cbdae620fc70aa8c6780e16cd9e8be0dac2","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            # turn local path into URL"},{"line_number":67,"context_line":"            config \u003d \u0027file://%s\u0027 % config"},{"line_number":68,"context_line":"        try:"},{"line_number":69,"context_line":"            urllib2.urlopen(config, timeout\u003d5).close()"},{"line_number":70,"context_line":"        except URLError as e:"},{"line_number":71,"context_line":"            msg \u003d _(\"Cannot access \u0027scality_sofs_config\u0027: %s\") % e"},{"line_number":72,"context_line":"            LOG.warn(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FgZM%3D","line":69,"in_reply_to":"AAAAM3%2F%2Fi9Y%3D","updated":"2013-01-18 01:30:25.000000000","message":"Done","commit_id":"dfaa449ff6e092691b810bc21da9458993fb9da8"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"dcc10364ade3ceb1f480f1895ed3458d05344423","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        return {"},{"line_number":176,"context_line":"            \u0027driver_volume_type\u0027: \u0027scality\u0027,"},{"line_number":177,"context_line":"            \u0027data\u0027: {"},{"line_number":178,"context_line":"                \u0027sofs_path\u0027: self._sofs_path(volume),"},{"line_number":179,"context_line":"                }"},{"line_number":180,"context_line":"            }"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fi84%3D","line":178,"updated":"2013-01-16 17:08:33.000000000","message":"closing bracket does not match indentation of opening bracket.","commit_id":"dfaa449ff6e092691b810bc21da9458993fb9da8"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"687e4cbdae620fc70aa8c6780e16cd9e8be0dac2","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        return {"},{"line_number":176,"context_line":"            \u0027driver_volume_type\u0027: \u0027scality\u0027,"},{"line_number":177,"context_line":"            \u0027data\u0027: {"},{"line_number":178,"context_line":"                \u0027sofs_path\u0027: self._sofs_path(volume),"},{"line_number":179,"context_line":"                }"},{"line_number":180,"context_line":"            }"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FgZE%3D","line":178,"in_reply_to":"AAAAM3%2F%2Fi84%3D","updated":"2013-01-18 01:30:25.000000000","message":"Done","commit_id":"dfaa449ff6e092691b810bc21da9458993fb9da8"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"dcc10364ade3ceb1f480f1895ed3458d05344423","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            \u0027driver_volume_type\u0027: \u0027scality\u0027,"},{"line_number":177,"context_line":"            \u0027data\u0027: {"},{"line_number":178,"context_line":"                \u0027sofs_path\u0027: self._sofs_path(volume),"},{"line_number":179,"context_line":"                }"},{"line_number":180,"context_line":"            }"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def terminate_connection(self, volume, connector, force\u003dFalse, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fi80%3D","line":179,"updated":"2013-01-16 17:08:33.000000000","message":"ditto","commit_id":"dfaa449ff6e092691b810bc21da9458993fb9da8"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"687e4cbdae620fc70aa8c6780e16cd9e8be0dac2","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            \u0027driver_volume_type\u0027: \u0027scality\u0027,"},{"line_number":177,"context_line":"            \u0027data\u0027: {"},{"line_number":178,"context_line":"                \u0027sofs_path\u0027: self._sofs_path(volume),"},{"line_number":179,"context_line":"                }"},{"line_number":180,"context_line":"            }"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def terminate_connection(self, volume, connector, force\u003dFalse, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FgZI%3D","line":179,"in_reply_to":"AAAAM3%2F%2Fi80%3D","updated":"2013-01-18 01:30:25.000000000","message":"Done","commit_id":"dfaa449ff6e092691b810bc21da9458993fb9da8"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"217abc64a8b615f01334da2cce1a47810439e90c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Scality SOFS Volume Driver."},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import errno"},{"line_number":20,"context_line":"import os"},{"line_number":21,"context_line":"import stat"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Fei0%3D","line":18,"updated":"2013-01-22 07:22:37.000000000","message":"errno is not used","commit_id":"bb8fc5ac59f8cf82a63a29e35440b7406f4e032d"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"7c298c1d337e0220e7191cf990c08f76c470fe8f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Scality SOFS Volume Driver."},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import errno"},{"line_number":20,"context_line":"import os"},{"line_number":21,"context_line":"import stat"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FZ8M%3D","line":18,"in_reply_to":"AAAAM3%2F%2Fei0%3D","updated":"2013-01-23 19:57:16.000000000","message":"Done","commit_id":"bb8fc5ac59f8cf82a63a29e35440b7406f4e032d"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"217abc64a8b615f01334da2cce1a47810439e90c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import errno"},{"line_number":20,"context_line":"import os"},{"line_number":21,"context_line":"import stat"},{"line_number":22,"context_line":"import urllib2"},{"line_number":23,"context_line":"import urlparse"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Feiw%3D","line":20,"updated":"2013-01-22 07:22:37.000000000","message":"stat is not used","commit_id":"bb8fc5ac59f8cf82a63a29e35440b7406f4e032d"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"7c298c1d337e0220e7191cf990c08f76c470fe8f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import errno"},{"line_number":20,"context_line":"import os"},{"line_number":21,"context_line":"import stat"},{"line_number":22,"context_line":"import urllib2"},{"line_number":23,"context_line":"import urlparse"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FZ8I%3D","line":20,"in_reply_to":"AAAAM3%2F%2Feiw%3D","updated":"2013-01-23 19:57:16.000000000","message":"Done","commit_id":"bb8fc5ac59f8cf82a63a29e35440b7406f4e032d"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"217abc64a8b615f01334da2cce1a47810439e90c","unresolved":false,"context_lines":[{"line_number":47,"context_line":"FLAGS.register_opts(volume_opts)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class ScalityDriver(driver.VolumeDriver):"},{"line_number":51,"context_line":"    \"\"\"Scality SOFS cinder driver. Creates sparse files on SOFS for"},{"line_number":52,"context_line":"    hypervisors to use as block devices.\"\"\""},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Fck4%3D","line":50,"updated":"2013-01-22 07:22:37.000000000","message":"Multi line doc should end with newline then close comment block.\n\nhttps://github.com/openstack/cinder/blob/master/HACKING.rst#docstrings","commit_id":"bb8fc5ac59f8cf82a63a29e35440b7406f4e032d"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"7c298c1d337e0220e7191cf990c08f76c470fe8f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"FLAGS.register_opts(volume_opts)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class ScalityDriver(driver.VolumeDriver):"},{"line_number":51,"context_line":"    \"\"\"Scality SOFS cinder driver. Creates sparse files on SOFS for"},{"line_number":52,"context_line":"    hypervisors to use as block devices.\"\"\""},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FZ8E%3D","line":50,"in_reply_to":"AAAAM3%2F%2Fck4%3D","updated":"2013-01-23 19:57:16.000000000","message":"Done","commit_id":"bb8fc5ac59f8cf82a63a29e35440b7406f4e032d"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"217abc64a8b615f01334da2cce1a47810439e90c","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    \"\"\"Scality SOFS cinder driver. Creates sparse files on SOFS for"},{"line_number":52,"context_line":"    hypervisors to use as block devices.\"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _check_prerequisites(self):"},{"line_number":55,"context_line":"        \"\"\"Sanity checks before attempting to mount SOFS\"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        # config is mandatory"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FclA%3D","line":54,"updated":"2013-01-22 07:22:37.000000000","message":"Need a period at the end.","commit_id":"bb8fc5ac59f8cf82a63a29e35440b7406f4e032d"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"7c298c1d337e0220e7191cf990c08f76c470fe8f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    \"\"\"Scality SOFS cinder driver. Creates sparse files on SOFS for"},{"line_number":52,"context_line":"    hypervisors to use as block devices.\"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _check_prerequisites(self):"},{"line_number":55,"context_line":"        \"\"\"Sanity checks before attempting to mount SOFS\"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        # config is mandatory"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FZ8A%3D","line":54,"in_reply_to":"AAAAM3%2F%2FclA%3D","updated":"2013-01-23 19:57:16.000000000","message":"Done","commit_id":"bb8fc5ac59f8cf82a63a29e35440b7406f4e032d"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"217abc64a8b615f01334da2cce1a47810439e90c","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                      \u0027bs\u003d1M\u0027, \u0027conv\u003dfsync,nocreat,notrunc\u0027,"},{"line_number":111,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def do_setup(self, context):"},{"line_number":114,"context_line":"        \"\"\"Any initialization the volume driver does while starting\"\"\""},{"line_number":115,"context_line":"        self._check_prerequisites()"},{"line_number":116,"context_line":"        self._mount_sofs()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FclE%3D","line":113,"updated":"2013-01-22 07:22:37.000000000","message":"Need a period at the end.","commit_id":"bb8fc5ac59f8cf82a63a29e35440b7406f4e032d"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"7c298c1d337e0220e7191cf990c08f76c470fe8f","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                      \u0027bs\u003d1M\u0027, \u0027conv\u003dfsync,nocreat,notrunc\u0027,"},{"line_number":111,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def do_setup(self, context):"},{"line_number":114,"context_line":"        \"\"\"Any initialization the volume driver does while starting\"\"\""},{"line_number":115,"context_line":"        self._check_prerequisites()"},{"line_number":116,"context_line":"        self._mount_sofs()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FZ7U%3D","line":113,"in_reply_to":"AAAAM3%2F%2FclE%3D","updated":"2013-01-23 19:57:16.000000000","message":"Done","commit_id":"bb8fc5ac59f8cf82a63a29e35440b7406f4e032d"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"217abc64a8b615f01334da2cce1a47810439e90c","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        if not os.path.isdir(voldir):"},{"line_number":120,"context_line":"            self._execute(\u0027mkdir\u0027, \u0027-p\u0027, voldir, run_as_root\u003dTrue)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def check_for_setup_error(self):"},{"line_number":123,"context_line":"        \"\"\"Returns an error if prerequisites aren\u0027t met\"\"\""},{"line_number":124,"context_line":"        self._check_prerequisites()"},{"line_number":125,"context_line":"        voldir \u003d os.path.join(FLAGS.scality_sofs_mount_point,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FclI%3D","line":122,"updated":"2013-01-22 07:22:37.000000000","message":"Need a period at the end.","commit_id":"bb8fc5ac59f8cf82a63a29e35440b7406f4e032d"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"7c298c1d337e0220e7191cf990c08f76c470fe8f","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        if not os.path.isdir(voldir):"},{"line_number":120,"context_line":"            self._execute(\u0027mkdir\u0027, \u0027-p\u0027, voldir, run_as_root\u003dTrue)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def check_for_setup_error(self):"},{"line_number":123,"context_line":"        \"\"\"Returns an error if prerequisites aren\u0027t met\"\"\""},{"line_number":124,"context_line":"        self._check_prerequisites()"},{"line_number":125,"context_line":"        voldir \u003d os.path.join(FLAGS.scality_sofs_mount_point,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FZ7Q%3D","line":122,"in_reply_to":"AAAAM3%2F%2FclI%3D","updated":"2013-01-23 19:57:16.000000000","message":"Done","commit_id":"bb8fc5ac59f8cf82a63a29e35440b7406f4e032d"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"217abc64a8b615f01334da2cce1a47810439e90c","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            LOG.warn(msg)"},{"line_number":130,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def create_volume(self, volume):"},{"line_number":133,"context_line":"        \"\"\"Creates a logical volume. Can optionally return a Dictionary of"},{"line_number":134,"context_line":"        changes to the volume object to be persisted.\"\"\""},{"line_number":135,"context_line":"        self._create_file(self.local_path(volume),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Fck0%3D","line":132,"updated":"2013-01-22 07:22:37.000000000","message":"Multi line doc should end with newline then close comment block.\n\nhttps://github.com/openstack/cinder/blob/master/HACKING.rst#docstrings","commit_id":"bb8fc5ac59f8cf82a63a29e35440b7406f4e032d"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"7c298c1d337e0220e7191cf990c08f76c470fe8f","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            LOG.warn(msg)"},{"line_number":130,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def create_volume(self, volume):"},{"line_number":133,"context_line":"        \"\"\"Creates a logical volume. Can optionally return a Dictionary of"},{"line_number":134,"context_line":"        changes to the volume object to be persisted.\"\"\""},{"line_number":135,"context_line":"        self._create_file(self.local_path(volume),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FZ7M%3D","line":132,"in_reply_to":"AAAAM3%2F%2Fck0%3D","updated":"2013-01-23 19:57:16.000000000","message":"Done","commit_id":"bb8fc5ac59f8cf82a63a29e35440b7406f4e032d"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"217abc64a8b615f01334da2cce1a47810439e90c","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        pass"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":208,"context_line":"        \"\"\"Return the current state of the volume service. If \u0027refresh\u0027 is"},{"line_number":209,"context_line":"           True, run the update first.\"\"\""},{"line_number":210,"context_line":"        return None"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2Fck8%3D","line":208,"updated":"2013-01-22 07:22:37.000000000","message":"Multi line doc should end with newline then close comment block.\n\nhttps://github.com/openstack/cinder/blob/master/HACKING.rst#docstrings","commit_id":"bb8fc5ac59f8cf82a63a29e35440b7406f4e032d"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"7c298c1d337e0220e7191cf990c08f76c470fe8f","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        pass"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":208,"context_line":"        \"\"\"Return the current state of the volume service. If \u0027refresh\u0027 is"},{"line_number":209,"context_line":"           True, run the update first.\"\"\""},{"line_number":210,"context_line":"        return None"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FZ7I%3D","line":208,"in_reply_to":"AAAAM3%2F%2Fck8%3D","updated":"2013-01-23 19:57:16.000000000","message":"Done","commit_id":"bb8fc5ac59f8cf82a63a29e35440b7406f4e032d"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f2acff279b3d8f1f0665523152a58a43d0a72236","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        sysdir \u003d os.path.join(mount_path, \u0027sys\u0027)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        if not os.path.isdir(mount_path):"},{"line_number":88,"context_line":"            self._execute(\u0027mkdir\u0027, \u0027-p\u0027, mount_path)"},{"line_number":89,"context_line":"        if not os.path.isdir(sysdir):"},{"line_number":90,"context_line":"            self._execute(\u0027mount\u0027, \u0027-t\u0027, \u0027sofs\u0027, config, mount_path,"},{"line_number":91,"context_line":"                          run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FJ3A%3D","line":88,"updated":"2013-02-05 13:32:03.000000000","message":"Prefer os.makedirs() with try/except","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"8a67a4a8b7be15f1b20284cf536225ae02193ac7","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        sysdir \u003d os.path.join(mount_path, \u0027sys\u0027)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        if not os.path.isdir(mount_path):"},{"line_number":88,"context_line":"            self._execute(\u0027mkdir\u0027, \u0027-p\u0027, mount_path)"},{"line_number":89,"context_line":"        if not os.path.isdir(sysdir):"},{"line_number":90,"context_line":"            self._execute(\u0027mount\u0027, \u0027-t\u0027, \u0027sofs\u0027, config, mount_path,"},{"line_number":91,"context_line":"                          run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FE%2BI%3D","line":88,"in_reply_to":"AAAAM3%2F%2FJ3A%3D","updated":"2013-02-07 20:52:11.000000000","message":"Done","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f2acff279b3d8f1f0665523152a58a43d0a72236","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        return \u0027%sG\u0027 % size_in_g"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _create_file(self, path, sizestr):"},{"line_number":103,"context_line":"        self._execute(\u0027truncate\u0027, \u0027-s\u0027, sizestr, path, run_as_root\u003dTrue)"},{"line_number":104,"context_line":"        self._execute(\u0027chmod\u0027, \u0027ugo+rw\u0027, path, run_as_root\u003dTrue)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _delete_file(self, path):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FJ28%3D","line":103,"updated":"2013-02-05 13:32:03.000000000","message":"Prefer something like:\nwith open(path, \"ab\") as f:\n        f.truncate(size)","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"8a67a4a8b7be15f1b20284cf536225ae02193ac7","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        return \u0027%sG\u0027 % size_in_g"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _create_file(self, path, sizestr):"},{"line_number":103,"context_line":"        self._execute(\u0027truncate\u0027, \u0027-s\u0027, sizestr, path, run_as_root\u003dTrue)"},{"line_number":104,"context_line":"        self._execute(\u0027chmod\u0027, \u0027ugo+rw\u0027, path, run_as_root\u003dTrue)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _delete_file(self, path):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FE%2BE%3D","line":103,"in_reply_to":"AAAAM3%2F%2FJ28%3D","updated":"2013-02-07 20:52:11.000000000","message":"Done","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f2acff279b3d8f1f0665523152a58a43d0a72236","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _create_file(self, path, sizestr):"},{"line_number":103,"context_line":"        self._execute(\u0027truncate\u0027, \u0027-s\u0027, sizestr, path, run_as_root\u003dTrue)"},{"line_number":104,"context_line":"        self._execute(\u0027chmod\u0027, \u0027ugo+rw\u0027, path, run_as_root\u003dTrue)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _delete_file(self, path):"},{"line_number":107,"context_line":"        self._execute(\u0027rm\u0027, \u0027-f\u0027, path, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FJ2Y%3D","line":104,"updated":"2013-02-05 13:32:03.000000000","message":"Prefer os.chmod()","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"8a67a4a8b7be15f1b20284cf536225ae02193ac7","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _create_file(self, path, sizestr):"},{"line_number":103,"context_line":"        self._execute(\u0027truncate\u0027, \u0027-s\u0027, sizestr, path, run_as_root\u003dTrue)"},{"line_number":104,"context_line":"        self._execute(\u0027chmod\u0027, \u0027ugo+rw\u0027, path, run_as_root\u003dTrue)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _delete_file(self, path):"},{"line_number":107,"context_line":"        self._execute(\u0027rm\u0027, \u0027-f\u0027, path, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FE%2BA%3D","line":104,"in_reply_to":"AAAAM3%2F%2FJ2Y%3D","updated":"2013-02-07 20:52:11.000000000","message":"Done","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f2acff279b3d8f1f0665523152a58a43d0a72236","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        self._execute(\u0027chmod\u0027, \u0027ugo+rw\u0027, path, run_as_root\u003dTrue)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _delete_file(self, path):"},{"line_number":107,"context_line":"        self._execute(\u0027rm\u0027, \u0027-f\u0027, path, run_as_root\u003dTrue)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def _copy_file(self, src_path, dest_path):"},{"line_number":110,"context_line":"        self._execute(\u0027dd\u0027, \u0027if\u003d%s\u0027 % src_path, \u0027of\u003d%s\u0027 % dest_path,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FJ20%3D","line":107,"updated":"2013-02-05 13:32:03.000000000","message":"Prefer os.remove()","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"8a67a4a8b7be15f1b20284cf536225ae02193ac7","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        self._execute(\u0027chmod\u0027, \u0027ugo+rw\u0027, path, run_as_root\u003dTrue)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _delete_file(self, path):"},{"line_number":107,"context_line":"        self._execute(\u0027rm\u0027, \u0027-f\u0027, path, run_as_root\u003dTrue)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def _copy_file(self, src_path, dest_path):"},{"line_number":110,"context_line":"        self._execute(\u0027dd\u0027, \u0027if\u003d%s\u0027 % src_path, \u0027of\u003d%s\u0027 % dest_path,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FE98%3D","line":107,"in_reply_to":"AAAAM3%2F%2FJ20%3D","updated":"2013-02-07 20:52:11.000000000","message":"Done","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f2acff279b3d8f1f0665523152a58a43d0a72236","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        voldir \u003d os.path.join(FLAGS.scality_sofs_mount_point,"},{"line_number":119,"context_line":"                              FLAGS.scality_sofs_volume_dir)"},{"line_number":120,"context_line":"        if not os.path.isdir(voldir):"},{"line_number":121,"context_line":"            self._execute(\u0027mkdir\u0027, \u0027-p\u0027, voldir, run_as_root\u003dTrue)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def check_for_setup_error(self):"},{"line_number":124,"context_line":"        \"\"\"Returns an error if prerequisites aren\u0027t met.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FJ2c%3D","line":121,"updated":"2013-02-05 13:32:03.000000000","message":"Same as above","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"8a67a4a8b7be15f1b20284cf536225ae02193ac7","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        voldir \u003d os.path.join(FLAGS.scality_sofs_mount_point,"},{"line_number":119,"context_line":"                              FLAGS.scality_sofs_volume_dir)"},{"line_number":120,"context_line":"        if not os.path.isdir(voldir):"},{"line_number":121,"context_line":"            self._execute(\u0027mkdir\u0027, \u0027-p\u0027, voldir, run_as_root\u003dTrue)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def check_for_setup_error(self):"},{"line_number":124,"context_line":"        \"\"\"Returns an error if prerequisites aren\u0027t met.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FE9c%3D","line":121,"in_reply_to":"AAAAM3%2F%2FJ2c%3D","updated":"2013-02-07 20:52:11.000000000","message":"Done","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f2acff279b3d8f1f0665523152a58a43d0a72236","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        }"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def terminate_connection(self, volume, connector, force\u003dFalse, **kwargs):"},{"line_number":203,"context_line":"        \"\"\"Disallow connection from connector.\"\"\""},{"line_number":204,"context_line":"        pass"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def attach_volume(self, context, volume_id, instance_uuid, mountpoint):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FJ2Q%3D","line":203,"updated":"2013-02-05 13:32:03.000000000","message":"I don\u0027t think the code and comment agree","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"8a67a4a8b7be15f1b20284cf536225ae02193ac7","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        }"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def terminate_connection(self, volume, connector, force\u003dFalse, **kwargs):"},{"line_number":203,"context_line":"        \"\"\"Disallow connection from connector.\"\"\""},{"line_number":204,"context_line":"        pass"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def attach_volume(self, context, volume_id, instance_uuid, mountpoint):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FE8c%3D","line":203,"in_reply_to":"AAAAM3%2F%2FJ2Q%3D","updated":"2013-02-07 20:52:11.000000000","message":"Well the comment is a copy from the base class method, as a reminder. But in this case there is no notion of a \u0027connection\u0027, so it has to be a no-op (the parent class raises NotImplemented). Would you like to see this blurb as an actual comment?","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f2acff279b3d8f1f0665523152a58a43d0a72236","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        volume_path \u003d self.local_path(volume)"},{"line_number":224,"context_line":"        with utils.temporary_chown(volume_path):"},{"line_number":225,"context_line":"            with utils.file_open(volume_path, \"w+b\") as image_file:"},{"line_number":226,"context_line":"                image_service.download(context, image_id, image_file)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def copy_volume_to_image(self, context, volume, image_service, image_id):"},{"line_number":229,"context_line":"        \"\"\"Copy the volume to the specified image.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FJ1w%3D","line":226,"updated":"2013-02-05 13:32:03.000000000","message":"This assumes that the image is \u0027raw\u0027 and will not do any conversion.  See image_utils.fetch_to_raw() for a more complete implementation.","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"8a67a4a8b7be15f1b20284cf536225ae02193ac7","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        volume_path \u003d self.local_path(volume)"},{"line_number":224,"context_line":"        with utils.temporary_chown(volume_path):"},{"line_number":225,"context_line":"            with utils.file_open(volume_path, \"w+b\") as image_file:"},{"line_number":226,"context_line":"                image_service.download(context, image_id, image_file)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def copy_volume_to_image(self, context, volume, image_service, image_id):"},{"line_number":229,"context_line":"        \"\"\"Copy the volume to the specified image.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FE8Y%3D","line":226,"in_reply_to":"AAAAM3%2F%2FJ1w%3D","updated":"2013-02-07 20:52:11.000000000","message":"Replaced as suggested, but untested, I\u0027ll need advice on how to do it!","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f2acff279b3d8f1f0665523152a58a43d0a72236","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            with utils.file_open(volume_path, \"w+b\") as image_file:"},{"line_number":226,"context_line":"                image_service.download(context, image_id, image_file)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def copy_volume_to_image(self, context, volume, image_service, image_id):"},{"line_number":229,"context_line":"        \"\"\"Copy the volume to the specified image.\"\"\""},{"line_number":230,"context_line":"        volume_path \u003d self.local_path(volume)"},{"line_number":231,"context_line":"        with utils.temporary_chown(volume_path):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FJ10%3D","line":228,"updated":"2013-02-05 13:32:03.000000000","message":"This API is outdated - it is now image_meta instead of image_id.  This dictionary includes the keys \u0027id\u0027, \u0027disk_format\u0027, and \u0027container_format\u0027.","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"8a67a4a8b7be15f1b20284cf536225ae02193ac7","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            with utils.file_open(volume_path, \"w+b\") as image_file:"},{"line_number":226,"context_line":"                image_service.download(context, image_id, image_file)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def copy_volume_to_image(self, context, volume, image_service, image_id):"},{"line_number":229,"context_line":"        \"\"\"Copy the volume to the specified image.\"\"\""},{"line_number":230,"context_line":"        volume_path \u003d self.local_path(volume)"},{"line_number":231,"context_line":"        with utils.temporary_chown(volume_path):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FE8U%3D","line":228,"in_reply_to":"AAAAM3%2F%2FJ10%3D","updated":"2013-02-07 20:52:11.000000000","message":"Done","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f2acff279b3d8f1f0665523152a58a43d0a72236","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        volume_path \u003d self.local_path(volume)"},{"line_number":231,"context_line":"        with utils.temporary_chown(volume_path):"},{"line_number":232,"context_line":"            with utils.file_open(volume_path) as volume_file:"},{"line_number":233,"context_line":"                image_service.update(context, image_id, {}, volume_file)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def clone_image(self, volume, image_location):"},{"line_number":236,"context_line":"        \"\"\"Create a volume efficiently from an existing image."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FJ1o%3D","line":233,"updated":"2013-02-05 13:32:03.000000000","message":"You will need to change image_id to image_meta[\u0027id\u0027].  Also, this assumes that the format for the image will be raw, while the user may specify something else.  Consider using image_utils.upload_volume().","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"8a67a4a8b7be15f1b20284cf536225ae02193ac7","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        volume_path \u003d self.local_path(volume)"},{"line_number":231,"context_line":"        with utils.temporary_chown(volume_path):"},{"line_number":232,"context_line":"            with utils.file_open(volume_path) as volume_file:"},{"line_number":233,"context_line":"                image_service.update(context, image_id, {}, volume_file)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def clone_image(self, volume, image_location):"},{"line_number":236,"context_line":"        \"\"\"Create a volume efficiently from an existing image."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2FE8Q%3D","line":233,"in_reply_to":"AAAAM3%2F%2FJ1o%3D","updated":"2013-02-07 20:52:11.000000000","message":"Replaced as suggested, but untested, I\u0027ll need advice on how to do it!","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"8dc9aa4e57b521221aa117a6a066e09ac080559c","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import errno"},{"line_number":20,"context_line":"import os"},{"line_number":21,"context_line":"import stat"},{"line_number":22,"context_line":"import urllib2"},{"line_number":23,"context_line":"import urlparse"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FCmQ%3D","line":21,"updated":"2013-02-09 20:42:40.000000000","message":"stat is never used","commit_id":"a8003cb9e23bfe86908c573caade259fbe327d9f"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"f4bc9e903bf090c1ec54ee757e5f4f3562aa086f","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import errno"},{"line_number":20,"context_line":"import os"},{"line_number":21,"context_line":"import stat"},{"line_number":22,"context_line":"import urllib2"},{"line_number":23,"context_line":"import urlparse"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FBIU%3D","line":21,"in_reply_to":"AAAAM3%2F%2FCmQ%3D","updated":"2013-02-11 15:27:44.000000000","message":"Done","commit_id":"a8003cb9e23bfe86908c573caade259fbe327d9f"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"8dc9aa4e57b521221aa117a6a066e09ac080559c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from cinder import flags"},{"line_number":27,"context_line":"from cinder.openstack.common import cfg"},{"line_number":28,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":29,"context_line":"from cinder import utils"},{"line_number":30,"context_line":"from cinder.volume import driver"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FCmM%3D","line":29,"updated":"2013-02-09 20:42:40.000000000","message":"utils is never used","commit_id":"a8003cb9e23bfe86908c573caade259fbe327d9f"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"f4bc9e903bf090c1ec54ee757e5f4f3562aa086f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from cinder import flags"},{"line_number":27,"context_line":"from cinder.openstack.common import cfg"},{"line_number":28,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":29,"context_line":"from cinder import utils"},{"line_number":30,"context_line":"from cinder.volume import driver"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FBIQ%3D","line":29,"in_reply_to":"AAAAM3%2F%2FCmM%3D","updated":"2013-02-11 15:27:44.000000000","message":"Done","commit_id":"a8003cb9e23bfe86908c573caade259fbe327d9f"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fcba035fef84ce7b88d9f6eb25024c6171100c71","unresolved":false,"context_lines":[{"line_number":227,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"},{"line_number":228,"context_line":"        \"\"\"Fetch the image from image_service and write it to the volume.\"\"\""},{"line_number":229,"context_line":"        self.create_volume(volume)"},{"line_number":230,"context_line":"        image_utils.fetch_to_raw(context,"},{"line_number":231,"context_line":"                                 image_service,"},{"line_number":232,"context_line":"                                 image_id,"},{"line_number":233,"context_line":"                                 self.local_path(volume))"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FBsM%3D","line":230,"updated":"2013-02-11 06:29:54.000000000","message":"I guess you still haven\u0027t tested these 2 functions, as indicated by your replies in the previous patchset.  This function is triggered by \u0027cinder create\u0027, where you pass an image ID from Glance.  copy_volume_to_image is triggered by the \u0027cinder upload-to-image\u0027 command (make sure you have a recent cinder client, as this was added a few weeks ago).","commit_id":"a8003cb9e23bfe86908c573caade259fbe327d9f"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"8dc9aa4e57b521221aa117a6a066e09ac080559c","unresolved":false,"context_lines":[{"line_number":227,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"},{"line_number":228,"context_line":"        \"\"\"Fetch the image from image_service and write it to the volume.\"\"\""},{"line_number":229,"context_line":"        self.create_volume(volume)"},{"line_number":230,"context_line":"        image_utils.fetch_to_raw(context,"},{"line_number":231,"context_line":"                                 image_service,"},{"line_number":232,"context_line":"                                 image_id,"},{"line_number":233,"context_line":"                                 self.local_path(volume))"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FCmE%3D","line":230,"updated":"2013-02-09 20:42:40.000000000","message":"image_utils is undefined.","commit_id":"a8003cb9e23bfe86908c573caade259fbe327d9f"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"f4bc9e903bf090c1ec54ee757e5f4f3562aa086f","unresolved":false,"context_lines":[{"line_number":227,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"},{"line_number":228,"context_line":"        \"\"\"Fetch the image from image_service and write it to the volume.\"\"\""},{"line_number":229,"context_line":"        self.create_volume(volume)"},{"line_number":230,"context_line":"        image_utils.fetch_to_raw(context,"},{"line_number":231,"context_line":"                                 image_service,"},{"line_number":232,"context_line":"                                 image_id,"},{"line_number":233,"context_line":"                                 self.local_path(volume))"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FBIw%3D","line":230,"in_reply_to":"AAAAM3%2F%2FBsM%3D","updated":"2013-02-11 15:27:44.000000000","message":"Avi, you guessed right. Thanks for the tip with \u0027cinder create\u0027, I could check it works (except create_volume has to be called after fetch_to_raw, the latter changes the size of the backing file). However I couldn\u0027t find the commit on master that implements \u0027cinder upload-to-image\u0027, are you sure it is merged?","commit_id":"a8003cb9e23bfe86908c573caade259fbe327d9f"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"8dc9aa4e57b521221aa117a6a066e09ac080559c","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def copy_volume_to_image(self, context, volume, image_service, image_meta):"},{"line_number":236,"context_line":"        \"\"\"Copy the volume to the specified image.\"\"\""},{"line_number":237,"context_line":"        image_utils.upload_volume(context,"},{"line_number":238,"context_line":"                                  image_service,"},{"line_number":239,"context_line":"                                  image_meta,"},{"line_number":240,"context_line":"                                  self.local_path(volume))"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FCmI%3D","line":237,"updated":"2013-02-09 20:42:40.000000000","message":"image_utils is undefined.","commit_id":"a8003cb9e23bfe86908c573caade259fbe327d9f"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"f4bc9e903bf090c1ec54ee757e5f4f3562aa086f","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def copy_volume_to_image(self, context, volume, image_service, image_meta):"},{"line_number":236,"context_line":"        \"\"\"Copy the volume to the specified image.\"\"\""},{"line_number":237,"context_line":"        image_utils.upload_volume(context,"},{"line_number":238,"context_line":"                                  image_service,"},{"line_number":239,"context_line":"                                  image_meta,"},{"line_number":240,"context_line":"                                  self.local_path(volume))"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FBIY%3D","line":237,"in_reply_to":"AAAAM3%2F%2FCmI%3D","updated":"2013-02-11 15:27:44.000000000","message":"Done","commit_id":"a8003cb9e23bfe86908c573caade259fbe327d9f"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"5b874156baa745243500cb81e0e941ce5cf03384","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        \"\"\"Return the current state of the volume service."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        If \u0027refresh\u0027 is True, run the update first."},{"line_number":223,"context_line":"        \"\"\""},{"line_number":224,"context_line":"        return None"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2B6ZE%3D","line":223,"updated":"2013-02-14 17:47:40.000000000","message":"Can some of the volume stats be populated here? The current list of volume stats that should be populated by a cinder driver include:\n\ndriver_version\nfree_capacity_gb\nreserved_percentage\nstorage_protocol\ntotal_capacity_gb\nvendor_name\nvolume_backend_name\nNOTE: If the driver in unable to provide a value for free_capacity_gb or total_capacity_gb, keywords can be provided instead. Please use \u0027unknown\u0027 if the array cannot report the value or \u0027infinite\u0027 if the array has no upper limit.","commit_id":"e657f9a4753e552541eccebcc2f5471ead3961da"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"6432968b55d81ad851f42c46ee6a6237a43fa4e0","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        \"\"\"Return the current state of the volume service."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        If \u0027refresh\u0027 is True, run the update first."},{"line_number":223,"context_line":"        \"\"\""},{"line_number":224,"context_line":"        return None"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2B0wI%3D","line":223,"in_reply_to":"AAAAM3%2F%2B0yE%3D","updated":"2013-02-18 14:36:29.000000000","message":"The storage_protocol in your case I believe should be \u0027scality\u0027 to match your driver volume type from initialize_connection.","commit_id":"e657f9a4753e552541eccebcc2f5471ead3961da"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"3003a7a84b7201b6a3e82d3f681793dd4800d86d","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        \"\"\"Return the current state of the volume service."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        If \u0027refresh\u0027 is True, run the update first."},{"line_number":223,"context_line":"        \"\"\""},{"line_number":224,"context_line":"        return None"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2B0yE%3D","line":223,"in_reply_to":"AAAAM3%2F%2B6ZE%3D","updated":"2013-02-18 14:23:52.000000000","message":"At the moment, the driver is unable to report meaningful stats (it will be added in the future), so it can only report a driver name and \"infinite\" space. BTW, what should the storage_protocol be when it isn\u0027t \"iSCSI\"? And how is it used?","commit_id":"e657f9a4753e552541eccebcc2f5471ead3961da"},{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"4363ba89989df4ef73a74a80fc29385941217b92","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 Scality"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2B0ZQ%3D","line":1,"updated":"2013-02-18 16:57:11.000000000","message":"You may want to check with your legal department, it\u0027s 2013","commit_id":"94639c0c1c62e9d672b73e01973e3b5b96e5736f"}],"etc/cinder/cinder.conf.sample":[{"author":{"_account_id":6043,"name":"Kurt Martin","email":"kurt.f.martin@hpe.com","username":"kurt-f-martin"},"change_message_id":"5b874156baa745243500cb81e0e941ce5cf03384","unresolved":false,"context_lines":[{"line_number":958,"context_line":"#"},{"line_number":959,"context_line":""},{"line_number":960,"context_line":"# Path or URL to Scality SOFS configuration file (string"},{"line_number":961,"context_line":"# value)"},{"line_number":962,"context_line":"#scality_sofs_config\u003d\u003cNone\u003e"},{"line_number":963,"context_line":""},{"line_number":964,"context_line":"# Base dir where Scality SOFS shall be mounted (string value)"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"AAAAM3%2F%2B6Ys%3D","line":961,"updated":"2013-02-14 17:47:40.000000000","message":"nit pick, but this comment should be able to fit on one line","commit_id":"e657f9a4753e552541eccebcc2f5471ead3961da"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"3003a7a84b7201b6a3e82d3f681793dd4800d86d","unresolved":false,"context_lines":[{"line_number":958,"context_line":"#"},{"line_number":959,"context_line":""},{"line_number":960,"context_line":"# Path or URL to Scality SOFS configuration file (string"},{"line_number":961,"context_line":"# value)"},{"line_number":962,"context_line":"#scality_sofs_config\u003d\u003cNone\u003e"},{"line_number":963,"context_line":""},{"line_number":964,"context_line":"# Base dir where Scality SOFS shall be mounted (string value)"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"AAAAM3%2F%2B0x8%3D","line":961,"in_reply_to":"AAAAM3%2F%2B6Ys%3D","updated":"2013-02-18 14:23:52.000000000","message":"This is generated by tools/conf/generate_sample.sh which has \"WORDWRAP_WIDTH \u003d 60\", so nothing I can change here.","commit_id":"e657f9a4753e552541eccebcc2f5471ead3961da"}],"etc/cinder/rootwrap.d/volume.filters":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f2acff279b3d8f1f0665523152a58a43d0a72236","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# cinder/volume/scality.py"},{"line_number":58,"context_line":"mount: CommandFilter, /bin/mount, root"},{"line_number":59,"context_line":"mkdir: CommandFilter, /bin/mkdir, root"},{"line_number":60,"context_line":"truncate: CommandFilter, /usr/bin/truncate, root"},{"line_number":61,"context_line":"chmod: CommandFilter, /bin/chmod, root"},{"line_number":62,"context_line":"rm: CommandFilter, /bin/rm, root"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"AAAAM3%2F%2FJ1k%3D","line":59,"updated":"2013-02-05 13:32:03.000000000","message":"Remove unnecessary commands from here once you use the python equivalents","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"},{"author":{"_account_id":6540,"name":"Jean-Marc Saffroy","email":"jean.marc.saffroy@scality.com","username":"jean-marc-saffroy"},"change_message_id":"8a67a4a8b7be15f1b20284cf536225ae02193ac7","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# cinder/volume/scality.py"},{"line_number":58,"context_line":"mount: CommandFilter, /bin/mount, root"},{"line_number":59,"context_line":"mkdir: CommandFilter, /bin/mkdir, root"},{"line_number":60,"context_line":"truncate: CommandFilter, /usr/bin/truncate, root"},{"line_number":61,"context_line":"chmod: CommandFilter, /bin/chmod, root"},{"line_number":62,"context_line":"rm: CommandFilter, /bin/rm, root"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"AAAAM3%2F%2FE74%3D","line":59,"in_reply_to":"AAAAM3%2F%2FJ1k%3D","updated":"2013-02-07 20:52:11.000000000","message":"Done","commit_id":"9a9ee4109223e980e6bdffa08aeeabde7c46b716"}]}
