)]}'
{"cinder/volume/driver.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b586d760424f2c97b466e32e261dba5ac4680a9d","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":164,"context_line":"class BaseVD(object):"},{"line_number":165,"context_line":"    \"\"\"Executes commands relating to Volumes."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"       Base Driver for Cinder Volume Control Path,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_7ee36805","line":164,"updated":"2014-10-11 20:26:11.000000000","message":"create/delete snapshot, create volume from snapshot, create cloned volume, and extend volume are all required Cinder driver functions.  So they should all belong to the base class.","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"8f76fb3ca35e5244a91b534ce34ce465c1a190aa","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":164,"context_line":"class BaseVD(object):"},{"line_number":165,"context_line":"    \"\"\"Executes commands relating to Volumes."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"       Base Driver for Cinder Volume Control Path,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_78093530","line":164,"in_reply_to":"baa201ad_28321410","updated":"2014-11-25 06:14:29.000000000","message":"Sahara relies on that driver.","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"4b027c3e8922edbac48a53ce9416c56878da3af0","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":164,"context_line":"class BaseVD(object):"},{"line_number":165,"context_line":"    \"\"\"Executes commands relating to Volumes."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"       Base Driver for Cinder Volume Control Path,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_28321410","line":164,"in_reply_to":"baa201ad_7ee36805","updated":"2014-10-16 06:57:33.000000000","message":"Annoyingly, we still have one driver that doesn\u0027t support snaps (the raw block device driver). Maybe we should just kill that driver?","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"523999c60821c005997afa0be81c7cfd65e479e7","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        \"\"\""},{"line_number":330,"context_line":"        return None"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def copy_volume_data(self, context, src_vol, dest_vol, remote\u003dNone):"},{"line_number":333,"context_line":"        \"\"\"Copy data from src_vol to dest_vol.\"\"\""},{"line_number":334,"context_line":"        LOG.debug((\u0027copy_data_between_volumes %(src)s -\u003e %(dest)s.\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_cc084b94","line":331,"updated":"2014-10-10 11:34:16.000000000","message":"While we are doing a cleanup, I\u0027d rather these helper methods were moved to their own place, rather than hanging off the driver class. A good clue they shouldn\u0027t be here is that they don\u0027t reference \u0027self\u0027 anywhere.\n\nMaybe that is too big a change for this patch series though?","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"4b027c3e8922edbac48a53ce9416c56878da3af0","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        \"\"\""},{"line_number":330,"context_line":"        return None"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def copy_volume_data(self, context, src_vol, dest_vol, remote\u003dNone):"},{"line_number":333,"context_line":"        \"\"\"Copy data from src_vol to dest_vol.\"\"\""},{"line_number":334,"context_line":"        LOG.debug((\u0027copy_data_between_volumes %(src)s -\u003e %(dest)s.\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_883dc0df","line":331,"in_reply_to":"baa201ad_0b1d55be","updated":"2014-10-16 06:57:33.000000000","message":"Sounds like a plan, just thought I\u0027d note it in passing","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"219bfc0d783e0d8ad0618cb4d29ba26df91e5d05","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        \"\"\""},{"line_number":330,"context_line":"        return None"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def copy_volume_data(self, context, src_vol, dest_vol, remote\u003dNone):"},{"line_number":333,"context_line":"        \"\"\"Copy data from src_vol to dest_vol.\"\"\""},{"line_number":334,"context_line":"        LOG.debug((\u0027copy_data_between_volumes %(src)s -\u003e %(dest)s.\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_0b1d55be","line":331,"in_reply_to":"baa201ad_cc084b94","updated":"2014-10-15 20:47:52.000000000","message":"I think that is a good candidate for a follow on patch.","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b586d760424f2c97b466e32e261dba5ac4680a9d","unresolved":false,"context_lines":[{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    # #######  Interface methods for DataPath (Connector) ########"},{"line_number":549,"context_line":"    @abc.abstractmethod"},{"line_number":550,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":551,"context_line":"        \"\"\"Synchronously recreates an export for a volume.\"\"\""},{"line_number":552,"context_line":"        return"},{"line_number":553,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_9ec72c64","line":550,"updated":"2014-10-11 20:26:11.000000000","message":"For some drivers, this function is not needed.  If you make it an abstract class, they will have to pass.  Same with create_export and remove_export.","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"219bfc0d783e0d8ad0618cb4d29ba26df91e5d05","unresolved":false,"context_lines":[{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    # #######  Interface methods for DataPath (Connector) ########"},{"line_number":549,"context_line":"    @abc.abstractmethod"},{"line_number":550,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":551,"context_line":"        \"\"\"Synchronously recreates an export for a volume.\"\"\""},{"line_number":552,"context_line":"        return"},{"line_number":553,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_ab5c497e","line":550,"in_reply_to":"baa201ad_9ec72c64","updated":"2014-10-15 20:47:52.000000000","message":"I think it\u0027s a good idea to require driver\u0027s to implement them, even if they are a noop.  The idea behind ABC is that it creates a concrete contract in the interface.   If 8 out of 10 drivers implement the method and do a noop, so be it.   The important thing is the contract and the interface as a definition here.","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"523999c60821c005997afa0be81c7cfd65e479e7","unresolved":false,"context_lines":[{"line_number":619,"context_line":"        return"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"    @abc.abstractmethod"},{"line_number":622,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot):"},{"line_number":623,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""},{"line_number":624,"context_line":"        return"},{"line_number":625,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_8ce1e39c","line":622,"updated":"2014-10-10 11:34:16.000000000","message":"cg is a different functional set to snap","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"8f76fb3ca35e5244a91b534ce34ce465c1a190aa","unresolved":false,"context_lines":[{"line_number":619,"context_line":"        return"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"    @abc.abstractmethod"},{"line_number":622,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot):"},{"line_number":623,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""},{"line_number":624,"context_line":"        return"},{"line_number":625,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_3b7ec76a","line":622,"in_reply_to":"baa201ad_8ce1e39c","updated":"2014-11-25 06:14:29.000000000","message":"Done","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"523999c60821c005997afa0be81c7cfd65e479e7","unresolved":false,"context_lines":[{"line_number":666,"context_line":"        return None, False"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"    @abc.abstractmethod"},{"line_number":669,"context_line":"    def create_replica_test_volume(self, volume, src_vref):"},{"line_number":670,"context_line":"        \"\"\"Creates a test replica clone of the specified replicated volume."},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"        Create a clone of the replicated (secondary) volume."}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_4cd7fbbf","line":669,"updated":"2014-10-10 11:34:16.000000000","message":"This is part of the replicate functionality, not clone","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"8f76fb3ca35e5244a91b534ce34ce465c1a190aa","unresolved":false,"context_lines":[{"line_number":666,"context_line":"        return None, False"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"    @abc.abstractmethod"},{"line_number":669,"context_line":"    def create_replica_test_volume(self, volume, src_vref):"},{"line_number":670,"context_line":"        \"\"\"Creates a test replica clone of the specified replicated volume."},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"        Create a clone of the replicated (secondary) volume."}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_5b98f3bf","line":669,"in_reply_to":"baa201ad_4cd7fbbf","updated":"2014-11-25 06:14:29.000000000","message":"Done","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"8f76fb3ca35e5244a91b534ce34ce465c1a190aa","unresolved":false,"context_lines":[{"line_number":666,"context_line":"        return None, False"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"    @abc.abstractmethod"},{"line_number":669,"context_line":"    def create_replica_test_volume(self, volume, src_vref):"},{"line_number":670,"context_line":"        \"\"\"Creates a test replica clone of the specified replicated volume."},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"        Create a clone of the replicated (secondary) volume."}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_7bda0f79","line":669,"in_reply_to":"baa201ad_4cd7fbbf","updated":"2014-11-25 06:14:29.000000000","message":"Done","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"523999c60821c005997afa0be81c7cfd65e479e7","unresolved":false,"context_lines":[{"line_number":676,"context_line":""},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":679,"context_line":"class ModifiableVD(object):"},{"line_number":680,"context_line":"    @abc.abstractmethod"},{"line_number":681,"context_line":"    def extend_volume(self, volume, new_size):"},{"line_number":682,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_6c767f08","line":679,"updated":"2014-10-10 11:34:16.000000000","message":"Transfer, extend and migrate really are totally different functionality sets and should be separate, I know that adds more classes, maybe once we have the total list of classes we can look at some consolidation?","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"8f76fb3ca35e5244a91b534ce34ce465c1a190aa","unresolved":false,"context_lines":[{"line_number":676,"context_line":""},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":679,"context_line":"class ModifiableVD(object):"},{"line_number":680,"context_line":"    @abc.abstractmethod"},{"line_number":681,"context_line":"    def extend_volume(self, volume, new_size):"},{"line_number":682,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_5bdf1369","line":679,"in_reply_to":"baa201ad_6c767f08","updated":"2014-11-25 06:14:29.000000000","message":"Done","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"523999c60821c005997afa0be81c7cfd65e479e7","unresolved":false,"context_lines":[{"line_number":733,"context_line":""},{"line_number":734,"context_line":""},{"line_number":735,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":736,"context_line":"class ImportableVD(object):"},{"line_number":737,"context_line":"    @abc.abstractmethod"},{"line_number":738,"context_line":"    def manage_existing(self, volume, existing_ref):"},{"line_number":739,"context_line":"        \"\"\"Brings an existing backend storage object under Cinder management."}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_cccbeb1c","line":736,"updated":"2014-10-10 11:34:16.000000000","message":"The tools and APIs all call this \u0027manage\u0027, not import, so we should probably call this \u0027Manageable\u0027 not \u0027Importable\u0027","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"8f76fb3ca35e5244a91b534ce34ce465c1a190aa","unresolved":false,"context_lines":[{"line_number":733,"context_line":""},{"line_number":734,"context_line":""},{"line_number":735,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":736,"context_line":"class ImportableVD(object):"},{"line_number":737,"context_line":"    @abc.abstractmethod"},{"line_number":738,"context_line":"    def manage_existing(self, volume, existing_ref):"},{"line_number":739,"context_line":"        \"\"\"Brings an existing backend storage object under Cinder management."}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_9be5fb39","line":736,"in_reply_to":"baa201ad_cccbeb1c","updated":"2014-11-25 06:14:29.000000000","message":"Done","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"3fe9827698c38f9846f7ee20a1576691a88398a7","unresolved":false,"context_lines":[{"line_number":773,"context_line":"        \"\"\""},{"line_number":774,"context_line":"        return"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    def unmanage(self, volume):"},{"line_number":777,"context_line":"        \"\"\"Removes the specified volume from Cinder management."},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"        Does not delete the underlying backend storage object."}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_fe9f58b2","line":776,"updated":"2014-10-11 18:48:39.000000000","message":"No ABC for this method?","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"8f76fb3ca35e5244a91b534ce34ce465c1a190aa","unresolved":false,"context_lines":[{"line_number":773,"context_line":"        \"\"\""},{"line_number":774,"context_line":"        return"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    def unmanage(self, volume):"},{"line_number":777,"context_line":"        \"\"\"Removes the specified volume from Cinder management."},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"        Does not delete the underlying backend storage object."}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_bbe0f726","line":776,"in_reply_to":"baa201ad_2bdf79d7","updated":"2014-11-25 06:14:29.000000000","message":"Done","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"219bfc0d783e0d8ad0618cb4d29ba26df91e5d05","unresolved":false,"context_lines":[{"line_number":773,"context_line":"        \"\"\""},{"line_number":774,"context_line":"        return"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    def unmanage(self, volume):"},{"line_number":777,"context_line":"        \"\"\"Removes the specified volume from Cinder management."},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"        Does not delete the underlying backend storage object."}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_2bdf79d7","line":776,"in_reply_to":"baa201ad_fe9f58b2","updated":"2014-10-15 20:47:52.000000000","message":"This should have abc as well.","commit_id":"42fee3b538e048ece7ef61b73a7124b0957f410d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a3654f6cc0a94f2c7f4c2822a6d5f6c2f19b4e42","unresolved":false,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":"    @abc.abstractmethod"},{"line_number":592,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":593,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""},{"line_number":594,"context_line":"        return"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_e08d5132","line":593,"updated":"2014-11-25 17:59:03.000000000","message":"Do you want create_consistencygroup to be an abstractmethod in the BaseVD?  It is not supported by most drivers yet.  It should be moved to ConsistencyGroupVD.","commit_id":"38efbba5a37d62ac7656e8ef0457d7ab201aa24b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a3654f6cc0a94f2c7f4c2822a6d5f6c2f19b4e42","unresolved":false,"context_lines":[{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    @abc.abstractmethod"},{"line_number":597,"context_line":"    def delete_consistencygroup(self, context, group):"},{"line_number":598,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""},{"line_number":599,"context_line":"        return"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"    def get_pool(self, volume):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_80748d36","line":598,"updated":"2014-11-25 17:59:03.000000000","message":"Same here.","commit_id":"38efbba5a37d62ac7656e8ef0457d7ab201aa24b"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"ef679b42c41990666a0c861a21009cbc31e96238","unresolved":false,"context_lines":[{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        return"},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"    def clone_image(self, volume, image_location, image_id, image_meta):"},{"line_number":666,"context_line":"        \"\"\"Create a volume efficiently from an existing image."},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        image_location is a string whose format depends on the"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_12995779","line":665,"updated":"2014-12-01 15:05:09.000000000","message":"Optimised clone_image is independent of create_cloned_volume - it is entirely sensible (and common) to implement create_cloned_volume without clone_image, and the converse is possible though not likely given our minimum feature list","commit_id":"cfc83ea47fdbf3890fd0618c449bc97dfa4bbddd"},{"author":{"_account_id":9366,"name":"Andrew Kerr","email":"andrew.kerr@netapp.com","username":"andrew-kerr"},"change_message_id":"12f1327d720d467ed051fde1b19faebb43e5594e","unresolved":false,"context_lines":[{"line_number":925,"context_line":"        raise NotImplementedError()"},{"line_number":926,"context_line":""},{"line_number":927,"context_line":"    def clone_image(self, volume, image_location, image_id, image_meta):"},{"line_number":928,"context_line":"        raise NotImplementedError()"},{"line_number":929,"context_line":""},{"line_number":930,"context_line":"    def create_replica_test_volume(self, volume, src_vref):"},{"line_number":931,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_866fc5fb","line":928,"updated":"2014-12-01 16:49:46.000000000","message":"This breaks the NetApp drivers.  clone_image used to return None, False","commit_id":"8a65b6c2aed573a0a5ece11b4253fd0447958fcd"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"a9bedef84b19a245160d5380ac0b99ec4c7cf9dc","unresolved":false,"context_lines":[{"line_number":614,"context_line":""},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":617,"context_line":"class ConsitencyVD(object):"},{"line_number":618,"context_line":"    @abc.abstractmethod"},{"line_number":619,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":620,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a890539_463ef4ba","line":617,"updated":"2014-12-05 23:30:31.000000000","message":"Typo.\n\nAnd why do we need ConsistencyVD *and* ConsistencyGroupVD?","commit_id":"6b9c8f5d5b8742e5d181afbc81b3d7adfb343116"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"940c07c6baf6c36cbd4d8c003be2ab4086126f66","unresolved":false,"context_lines":[{"line_number":614,"context_line":""},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":617,"context_line":"class ConsitencyVD(object):"},{"line_number":618,"context_line":"    @abc.abstractmethod"},{"line_number":619,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":620,"context_line":"        \"\"\"Creates a consistencygroup.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"5a890539_46235406","line":617,"in_reply_to":"5a890539_463ef4ba","updated":"2014-12-05 23:37:11.000000000","message":"+1. ConsistencyVD and ConsistencyGroupVD should be combined into one class.  Without create_cgsnapshot, CG is not meaningful.","commit_id":"6b9c8f5d5b8742e5d181afbc81b3d7adfb343116"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"00518c07139ac270f99e7024841c680b677816cd","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":167,"context_line":"class BaseVD(object):"},{"line_number":168,"context_line":"    \"\"\"Executes commands relating to Volumes."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"       Base Driver for Cinder Volume Control Path,"},{"line_number":171,"context_line":"       This includes supported/required implementation"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_66497d30","line":168,"updated":"2014-12-13 06:51:25.000000000","message":"As we\u0027re changing VolumeDriver to BaseVD, it might be worth explicitly stating in the docstring here that VD means volume driver. I know it\u0027s obvious, but still it might help. Something like: \"Base Volume Driver. Executes commands relating to Volumes.\"","commit_id":"8f604f6cfe7350435561dc157dac0c2f3ce523f3"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"00518c07139ac270f99e7024841c680b677816cd","unresolved":false,"context_lines":[{"line_number":606,"context_line":""},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":609,"context_line":"class LocalVD(object):"},{"line_number":610,"context_line":"    @abc.abstractmethod"},{"line_number":611,"context_line":"    def local_path(self, volume):"},{"line_number":612,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_0658b9f8","line":609,"updated":"2014-12-13 06:51:25.000000000","message":"maybe a docstring here too?","commit_id":"8f604f6cfe7350435561dc157dac0c2f3ce523f3"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"00518c07139ac270f99e7024841c680b677816cd","unresolved":false,"context_lines":[{"line_number":613,"context_line":""},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":616,"context_line":"class SnapshotVD(object):"},{"line_number":617,"context_line":"    @abc.abstractmethod"},{"line_number":618,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":619,"context_line":"        \"\"\"Creates a snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_66709d72","line":616,"updated":"2014-12-13 06:51:25.000000000","message":"maybe a docstring here too?","commit_id":"8f604f6cfe7350435561dc157dac0c2f3ce523f3"},{"author":{"_account_id":9366,"name":"Andrew Kerr","email":"andrew.kerr@netapp.com","username":"andrew-kerr"},"change_message_id":"f51d933bcd5a07ab264fc48417f8ed1538708bff","unresolved":false,"context_lines":[{"line_number":734,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":735,"context_line":"class CloneableImageVD(object):"},{"line_number":736,"context_line":"    @abc.abstractmethod"},{"line_number":737,"context_line":"    def clone_image(self, volume, image_location, image_id, image_meta):"},{"line_number":738,"context_line":"        \"\"\"Create a volume efficiently from an existing image."},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"        image_location is a string whose format depends on the"}],"source_content_type":"text/x-python","patch_set":19,"id":"da86d52c_d230c309","line":737,"updated":"2015-02-09 15:48:52.000000000","message":"This does not match the above clone_image, you are missing an argument:\n\nTypeError: clone_image() takes exactly 5 arguments (6 given)","commit_id":"6d0cd90c630a026e8670f41f954b804d64ab2fa0"}],"cinder/volume/drivers/rbd.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"b5ec379103a6b78d8b1bd344e55859aa67b1bcdb","unresolved":false,"context_lines":[{"line_number":783,"context_line":"        return {\u0027provider_location\u0027: None}, True"},{"line_number":784,"context_line":""},{"line_number":785,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"},{"line_number":786,"context_line":"        tmp_dir \u003d CONF.image_conversion_dir"},{"line_number":787,"context_line":"        if tmp_dir and not os.path.exists(tmp_dir):"},{"line_number":788,"context_line":"            os.makedirs(tmp_dir)"},{"line_number":789,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a890539_4015453e","line":786,"updated":"2014-11-25 17:45:30.000000000","message":"Is this change required by this patchset?   This seems like it doesn\u0027t have much to do with converting to ABC ?","commit_id":"38efbba5a37d62ac7656e8ef0457d7ab201aa24b"}],"cinder/volume/manager.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"5493e706efc3078dcdf48ea1ea358da9523815a8","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        return True"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    if no_error:"},{"line_number":154,"context_line":"        LOG.info(\"Function call skipped because driver %s\""},{"line_number":155,"context_line":"                 \" doesn\u0027t support feature set %s\" %"},{"line_number":156,"context_line":"                 (drv, feature_class.__name__))"},{"line_number":157,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_df0defe9","line":154,"updated":"2014-12-10 21:30:26.000000000","message":"Need i8n here (_LI....","commit_id":"8f604f6cfe7350435561dc157dac0c2f3ce523f3"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"6201a930e229ce7be995d301b035a4e84293208e","unresolved":false,"context_lines":[{"line_number":547,"context_line":""},{"line_number":548,"context_line":"        return True"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    @need_feature_set(driver.SnapshotVD)"},{"line_number":551,"context_line":"    def create_snapshot(self, context, volume_id, snapshot_id):"},{"line_number":552,"context_line":"        \"\"\"Creates and exports the snapshot.\"\"\""},{"line_number":553,"context_line":"        caller_context \u003d context"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_59daf4e8","line":550,"updated":"2014-12-11 03:50:15.000000000","message":"Can this also be used to flag a method for needing a decorator?   The FibreChannel drivers need to use the @fczm_utils.AddFCZone for initialize_connection and\n@fczm_utils.RemoveFCZone for terminate_connection.","commit_id":"8f604f6cfe7350435561dc157dac0c2f3ce523f3"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"5493e706efc3078dcdf48ea1ea358da9523815a8","unresolved":false,"context_lines":[{"line_number":547,"context_line":""},{"line_number":548,"context_line":"        return True"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    @need_feature_set(driver.SnapshotVD)"},{"line_number":551,"context_line":"    def create_snapshot(self, context, volume_id, snapshot_id):"},{"line_number":552,"context_line":"        \"\"\"Creates and exports the snapshot.\"\"\""},{"line_number":553,"context_line":"        caller_context \u003d context"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_dfb24f05","line":550,"updated":"2014-12-10 21:30:26.000000000","message":"Can you explain how these decorators work, what the intended purpose is?  Would be fine to put this in the commit message IMO","commit_id":"8f604f6cfe7350435561dc157dac0c2f3ce523f3"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"5493e706efc3078dcdf48ea1ea358da9523815a8","unresolved":false,"context_lines":[{"line_number":1213,"context_line":"        self.db.volume_update(ctxt, volume_ref[\u0027id\u0027],"},{"line_number":1214,"context_line":"                              {\u0027migration_status\u0027: \u0027migrating\u0027})"},{"line_number":1215,"context_line":"        if (not force_host_copy and new_type_id is None and"},{"line_number":1216,"context_line":"                isinstance(self.driver, driver.MigrateVD)):"},{"line_number":1217,"context_line":"            try:"},{"line_number":1218,"context_line":"                LOG.debug(\"volume %s: calling driver migrate_volume\","},{"line_number":1219,"context_line":"                          volume_ref[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_3fcd1386","line":1216,"updated":"2014-12-10 21:30:26.000000000","message":"So why do we need the extra check here?","commit_id":"8f604f6cfe7350435561dc157dac0c2f3ce523f3"}]}
