)]}'
{"cinder/volume/driver.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d51b115f5ba1990a7476fdc82e079bbaedebda59","unresolved":false,"context_lines":[{"line_number":79,"context_line":"FLAGS \u003d flags.FLAGS"},{"line_number":80,"context_line":"FLAGS.register_opts(volume_opts)"},{"line_number":81,"context_line":"FLAGS.register_opts(xenapi_options.xenapi)"},{"line_number":82,"context_line":"FLAGS.register_opts(xenapi_options.nfs)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class VolumeDriver(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALn%2F%2Fyg0%3D","line":82,"updated":"2012-11-06 14:38:09.000000000","message":"maybe options should just be in this file.","commit_id":"ca311a80c299ee1d9a710aebc7f18b173f3d8edf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d51b115f5ba1990a7476fdc82e079bbaedebda59","unresolved":false,"context_lines":[{"line_number":984,"context_line":"    return \"%s %s %s\" % (chap, name, password)"},{"line_number":985,"context_line":""},{"line_number":986,"context_line":""},{"line_number":987,"context_line":"class XenAPINFSDriver(VolumeDriver):"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    def do_setup(self, context):"},{"line_number":990,"context_line":"        session_factory \u003d xenapi_lib.SessionFactory("}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALn%2F%2Fygw%3D","line":987,"updated":"2012-11-06 14:38:09.000000000","message":"maybe add a comment to say this the \"Cinder specific shim over XenAPI NFS volume operations\"\n\nThis should probably be in a separate file called \"xenapi_sm\" or similar?","commit_id":"ca311a80c299ee1d9a710aebc7f18b173f3d8edf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d51b115f5ba1990a7476fdc82e079bbaedebda59","unresolved":false,"context_lines":[{"line_number":1005,"context_line":"            volume[\u0027display_name\u0027],"},{"line_number":1006,"context_line":"            volume[\u0027display_description\u0027]"},{"line_number":1007,"context_line":"        )"},{"line_number":1008,"context_line":"        return dict(metadata\u003dconnection_data)"},{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":1011,"context_line":"        \"\"\"Allow connection to connector and return connection info.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALn%2F%2Fyfg%3D","line":1008,"updated":"2012-11-06 14:38:09.000000000","message":"Need to look at a good way to \"namespace\" this metadata. Can the enduser access this? try using provider_location and provider_auth","commit_id":"ca311a80c299ee1d9a710aebc7f18b173f3d8edf"}],"cinder/volume/xenapi/lib.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d51b115f5ba1990a7476fdc82e079bbaedebda59","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def get_this_host(self):"},{"line_number":29,"context_line":"        return self.call_xenapi(\u0027session.get_this_host\u0027, self.handle)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def get_pbds(self):"},{"line_number":32,"context_line":"        return self.call_xenapi(\u0027PBD.get_all\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def get_srs(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALn%2F%2FygI%3D","line":31,"updated":"2012-11-06 14:38:09.000000000","message":"Maybe this should be called like:\nsession.PBD.get_all()\nTo better match the XenAPI model","commit_id":"ca311a80c299ee1d9a710aebc7f18b173f3d8edf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d51b115f5ba1990a7476fdc82e079bbaedebda59","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        return connect(self.url, self.user, self.password)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"class NFSConnectionData(dict):"},{"line_number":229,"context_line":"    pass"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALn%2F%2Fygc%3D","line":228,"updated":"2012-11-06 14:38:09.000000000","message":"Maybe either turn into a class or just use a dict?","commit_id":"ca311a80c299ee1d9a710aebc7f18b173f3d8edf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d51b115f5ba1990a7476fdc82e079bbaedebda59","unresolved":false,"context_lines":[{"line_number":243,"context_line":"                vdi_ref \u003d session.create_new_vdi(sr_ref, size)"},{"line_number":244,"context_line":"                vdi_uuid \u003d session.get_vdi_uuid(vdi_ref)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"            return NFSConnectionData("},{"line_number":247,"context_line":"                sr_uuid\u003dsr_uuid,"},{"line_number":248,"context_line":"                vdi_uuid\u003dvdi_uuid,"},{"line_number":249,"context_line":"                server\u003dserver,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALn%2F%2FygM%3D","line":246,"updated":"2012-11-06 14:38:09.000000000","message":"I think we only need the vdi_uuid and sr_uuid, maybe store it as a file path?\n/sr/vdi","commit_id":"ca311a80c299ee1d9a710aebc7f18b173f3d8edf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d51b115f5ba1990a7476fdc82e079bbaedebda59","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                server\u003dserver,"},{"line_number":250,"context_line":"                serverpath\u003dserverpath)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def connect_volume(self, host_uuid, connection_data):"},{"line_number":253,"context_line":"        with self._session_factory.get_session() as session:"},{"line_number":254,"context_line":"            host_ref \u003d session.get_host_by_uuid(host_uuid)"},{"line_number":255,"context_line":"            sr_ref \u003d session.plug_nfs_sr("}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALn%2F%2FygU%3D","line":252,"updated":"2012-11-06 14:38:09.000000000","message":"Maybe add a comment about the connection_data param?","commit_id":"ca311a80c299ee1d9a710aebc7f18b173f3d8edf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c99f96a6ac23f8e8a67c02f198e34a6ac8020f9c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import contextlib"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"class XenAPIException(Exception):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALn%2F%2Fu7U%3D","line":1,"updated":"2012-11-09 15:09:28.000000000","message":"Probably need copyright statements here. \n\nI think it is worth a quick example bit of code to describe how you make an operation such as VDI.create happen.\n\nAlso, add a TODO to move this to openstack common / oslo","commit_id":"9826aff5d4a588ce18cb69d479273e84413c8a16"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c99f96a6ac23f8e8a67c02f198e34a6ac8020f9c","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        return self.call_xenapi(\u0027session.get_this_host\u0027, self.handle)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"class CompoundOperations(object):"},{"line_number":159,"context_line":"    def unplug_pbds_from_sr(self, sr_ref):"},{"line_number":160,"context_line":"        sr_rec \u003d self.SR.get_record(sr_ref)"},{"line_number":161,"context_line":"        for pbd_ref in sr_rec.get(\u0027PBDs\u0027, []):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALn%2F%2Fu7k%3D","line":158,"updated":"2012-11-09 15:09:28.000000000","message":"I would move out these high level functions into a separate file.\n\nIt will help when we come around to moving things into openstackcommon/oslo","commit_id":"9826aff5d4a588ce18cb69d479273e84413c8a16"}],"cinder/volume/xenapi_sm.py":[{"author":{"_account_id":5044,"name":"Mate Lakat","email":"mlakat@suse.com","username":"mate-lakat"},"change_message_id":"24f0da59aa7fb967b2201be3c2cbfe07fb1eeba1","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            driver_volume_type\u003d\u0027xensm\u0027,"},{"line_number":75,"context_line":"            data\u003ddict("},{"line_number":76,"context_line":"                name_label\u003dvolume[\u0027display_name\u0027],"},{"line_number":77,"context_line":"                name_description\u003dvolume[\u0027display_description\u0027],"},{"line_number":78,"context_line":"                sr_uuid\u003dsr_uuid,"},{"line_number":79,"context_line":"                vdi_uuid\u003dvdi_uuid,"},{"line_number":80,"context_line":"                sr_type\u003d\u0027nfs\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALn%2F%2Fuys%3D","line":77,"updated":"2012-11-09 16:29:08.000000000","message":"if volume[\u0027display_description\u0027] or volume[\u0027display_name\u0027] is None, that None will be passed down to the appropriate SR.introduce command, and Xapi will die, as it does not accept None values for name_label or name_description.","commit_id":"9826aff5d4a588ce18cb69d479273e84413c8a16"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c99f96a6ac23f8e8a67c02f198e34a6ac8020f9c","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        )"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def terminate_connection(self, volume, connector, force\u003dFalse, **kwargs):"},{"line_number":88,"context_line":"        pass"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def check_for_setup_error(self):"},{"line_number":91,"context_line":"        \"\"\"To override superclass\u0027 method\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALn%2F%2Fu6w%3D","line":88,"updated":"2012-11-09 15:09:28.000000000","message":"Similar to the export methods, might be worth clarifying.","commit_id":"9826aff5d4a588ce18cb69d479273e84413c8a16"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c99f96a6ac23f8e8a67c02f198e34a6ac8020f9c","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        raise NotImplementedError()"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":103,"context_line":"        pass"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"},{"line_number":106,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALn%2F%2Fu60%3D","line":103,"updated":"2012-11-09 15:09:28.000000000","message":"Maybe group all the exports together, and tell people it is not needed, just to be 100% clear.","commit_id":"9826aff5d4a588ce18cb69d479273e84413c8a16"}]}
