)]}'
{"cinder/backup/api.py":[{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"e4d0d3057418c938c3ceccbff1d972a54e4dd227","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            # availability zone when getting the next backup service."},{"line_number":143,"context_line":"            # Need to understand the use cases better.  Do we want to"},{"line_number":144,"context_line":"            # allow backups and restores across availabilty zones?  What"},{"line_number":145,"context_line":"            # about when we start using the scheduler?"},{"line_number":146,"context_line":"            if (srv[\u0027availability_zone\u0027] \u003d\u003d volume[\u0027availability_zone\u0027] and"},{"line_number":147,"context_line":"                    utils.service_is_up(srv)):"},{"line_number":148,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_2066e6ed","line":145,"updated":"2015-07-20 11:59:13.000000000","message":"Yes we do want to allow restores across AZs - it works currently and is one of the easiest ways to migrate volume data across AZs","commit_id":"36bdd5a1fd5d5def0ab048f38c1e0a62dacf9e78"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"cf7cbe94d8d5120cb7d8088489189c2fb2def01c","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            # availability zone when getting the next backup service."},{"line_number":143,"context_line":"            # Need to understand the use cases better.  Do we want to"},{"line_number":144,"context_line":"            # allow backups and restores across availabilty zones?  What"},{"line_number":145,"context_line":"            # about when we start using the scheduler?"},{"line_number":146,"context_line":"            if (srv[\u0027availability_zone\u0027] \u003d\u003d volume[\u0027availability_zone\u0027] and"},{"line_number":147,"context_line":"                    utils.service_is_up(srv)):"},{"line_number":148,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_63a054a0","line":145,"in_reply_to":"3a50d1a3_2066e6ed","updated":"2015-07-21 01:57:01.000000000","message":"Next patch updates this comment in light of your remarks.\n\nI\u0027m still wondering whether availability as \"in the same AZ\" and availability as in \"service is up\" should be coupled as they are currently.  My _backup_service_is_available method reflects current behavior, and current coupling of these concepts.","commit_id":"36bdd5a1fd5d5def0ab048f38c1e0a62dacf9e78"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"dd2a349a3c78b392beeb7163d6088985d87185d4","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        # NOTE(tbarron): Here we could do an rpcapi to the scheduler and"},{"line_number":234,"context_line":"        # have its (as yet unimplemented scheduler) methods select the"},{"line_number":235,"context_line":"        # backup_host and invoke backup_rpcapi.delete_backup to that"},{"line_number":236,"context_line":"        # backup host.  Here we just use a simple round robin method"},{"line_number":237,"context_line":"        # to pick the backup host instead.  A scheduler could support"},{"line_number":238,"context_line":"        # multiple backup drivers, but for now we assume that all backup"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_3d1124ad","line":235,"updated":"2015-07-20 15:09:34.000000000","message":"delete_backup?","commit_id":"36bdd5a1fd5d5def0ab048f38c1e0a62dacf9e78"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"cf7cbe94d8d5120cb7d8088489189c2fb2def01c","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        # NOTE(tbarron): Here we could do an rpcapi to the scheduler and"},{"line_number":234,"context_line":"        # have its (as yet unimplemented scheduler) methods select the"},{"line_number":235,"context_line":"        # backup_host and invoke backup_rpcapi.delete_backup to that"},{"line_number":236,"context_line":"        # backup host.  Here we just use a simple round robin method"},{"line_number":237,"context_line":"        # to pick the backup host instead.  A scheduler could support"},{"line_number":238,"context_line":"        # multiple backup drivers, but for now we assume that all backup"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_2389ec26","line":235,"in_reply_to":"3a50d1a3_3d1124ad","updated":"2015-07-21 01:57:01.000000000","message":"Fixed, thanks!","commit_id":"36bdd5a1fd5d5def0ab048f38c1e0a62dacf9e78"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"e4d0d3057418c938c3ceccbff1d972a54e4dd227","unresolved":false,"context_lines":[{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        # NOTE(tbarron): Here we could do an rpcapi to the scheduler and"},{"line_number":331,"context_line":"        # have its (as yet unimplemented scheduler) methods select the"},{"line_number":332,"context_line":"        # backup_host and invoke backup_rpcapi.delete_backup to that"},{"line_number":333,"context_line":"        # backup host.  Here we just use a simple round robin method"},{"line_number":334,"context_line":"        # to pick the backup host instead.  A scheduler could support"},{"line_number":335,"context_line":"        # multiple backup drivers, but for now we assume that all backup"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_80d01a55","line":332,"updated":"2015-07-20 11:59:13.000000000","message":"backup_rpcapi.delete_backup should be backup_rpcapi.restore_backup - this same copy/paste error appears in a few places","commit_id":"36bdd5a1fd5d5def0ab048f38c1e0a62dacf9e78"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"cf7cbe94d8d5120cb7d8088489189c2fb2def01c","unresolved":false,"context_lines":[{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        # NOTE(tbarron): Here we could do an rpcapi to the scheduler and"},{"line_number":331,"context_line":"        # have its (as yet unimplemented scheduler) methods select the"},{"line_number":332,"context_line":"        # backup_host and invoke backup_rpcapi.delete_backup to that"},{"line_number":333,"context_line":"        # backup host.  Here we just use a simple round robin method"},{"line_number":334,"context_line":"        # to pick the backup host instead.  A scheduler could support"},{"line_number":335,"context_line":"        # multiple backup drivers, but for now we assume that all backup"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_e3822400","line":332,"in_reply_to":"3a50d1a3_7d656c43","updated":"2015-07-21 01:57:01.000000000","message":"Fixed, thanks!","commit_id":"36bdd5a1fd5d5def0ab048f38c1e0a62dacf9e78"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"dd2a349a3c78b392beeb7163d6088985d87185d4","unresolved":false,"context_lines":[{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        # NOTE(tbarron): Here we could do an rpcapi to the scheduler and"},{"line_number":331,"context_line":"        # have its (as yet unimplemented scheduler) methods select the"},{"line_number":332,"context_line":"        # backup_host and invoke backup_rpcapi.delete_backup to that"},{"line_number":333,"context_line":"        # backup host.  Here we just use a simple round robin method"},{"line_number":334,"context_line":"        # to pick the backup host instead.  A scheduler could support"},{"line_number":335,"context_line":"        # multiple backup drivers, but for now we assume that all backup"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_7d656c43","line":332,"in_reply_to":"3a50d1a3_80d01a55","updated":"2015-07-20 15:09:34.000000000","message":"+1","commit_id":"36bdd5a1fd5d5def0ab048f38c1e0a62dacf9e78"}],"cinder/backup/manager.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"dd2a349a3c78b392beeb7163d6088985d87185d4","unresolved":false,"context_lines":[{"line_number":565,"context_line":"            notifier.info(context, \"backups.reset_status.end\","},{"line_number":566,"context_line":"                          notifier_info)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def _attach_volume(self, context, volume, properties):"},{"line_number":569,"context_line":"        \"\"\"Do rmote attach of the volume.\"\"\""},{"line_number":570,"context_line":"        rpcapi \u003d volume_rpcapi.VolumeAPI()"},{"line_number":571,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_e0547355","line":568,"updated":"2015-07-20 15:09:34.000000000","message":"So you moved _attach_volume and _detach_volume from driver.py to the backup manager. There\u0027s another patch that copied them to volume manager:).  There\u0027s some duplication of code, but may be we have to do this to allow decoupling.\n\nI see here you always go thru RPC.  If they happen to be on the same host, we don\u0027t have to go thru RPC.","commit_id":"36bdd5a1fd5d5def0ab048f38c1e0a62dacf9e78"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"cf7cbe94d8d5120cb7d8088489189c2fb2def01c","unresolved":false,"context_lines":[{"line_number":565,"context_line":"            notifier.info(context, \"backups.reset_status.end\","},{"line_number":566,"context_line":"                          notifier_info)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def _attach_volume(self, context, volume, properties):"},{"line_number":569,"context_line":"        \"\"\"Do rmote attach of the volume.\"\"\""},{"line_number":570,"context_line":"        rpcapi \u003d volume_rpcapi.VolumeAPI()"},{"line_number":571,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_a3f97c82","line":568,"in_reply_to":"3a50d1a3_e0547355","updated":"2015-07-21 01:57:01.000000000","message":"For early stages of the POC I want to exercise the remote path even if tempest is running with backup and volume services co-located.  But I do agree we can look at optimizing this down the road and have added a #TODO to note the potential optimization.  That said, given the huge times taken for data transfer in backups and restores and the small amount of time taken in control path for backups and restores, we should evaluate whether this control path optimization saves enough to justify another branch in the code.\n\nOf course skipping the rpc is one thing, and doing a local attach when possible might be more fundamental if it impacts data transfer speed.","commit_id":"36bdd5a1fd5d5def0ab048f38c1e0a62dacf9e78"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"dd2a349a3c78b392beeb7163d6088985d87185d4","unresolved":false,"context_lines":[{"line_number":566,"context_line":"                          notifier_info)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def _attach_volume(self, context, volume, properties):"},{"line_number":569,"context_line":"        \"\"\"Do rmote attach of the volume.\"\"\""},{"line_number":570,"context_line":"        rpcapi \u003d volume_rpcapi.VolumeAPI()"},{"line_number":571,"context_line":"        try:"},{"line_number":572,"context_line":"            conn \u003d rpcapi.initialize_connection(context, volume,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_c04b77af","line":569,"updated":"2015-07-20 15:09:34.000000000","message":"remote","commit_id":"36bdd5a1fd5d5def0ab048f38c1e0a62dacf9e78"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"cf7cbe94d8d5120cb7d8088489189c2fb2def01c","unresolved":false,"context_lines":[{"line_number":566,"context_line":"                          notifier_info)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def _attach_volume(self, context, volume, properties):"},{"line_number":569,"context_line":"        \"\"\"Do rmote attach of the volume.\"\"\""},{"line_number":570,"context_line":"        rpcapi \u003d volume_rpcapi.VolumeAPI()"},{"line_number":571,"context_line":"        try:"},{"line_number":572,"context_line":"            conn \u003d rpcapi.initialize_connection(context, volume,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_83eec0b2","line":569,"in_reply_to":"3a50d1a3_c04b77af","updated":"2015-07-21 01:57:01.000000000","message":"Thanks, fixed.","commit_id":"36bdd5a1fd5d5def0ab048f38c1e0a62dacf9e78"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b8d7b55dc6dca986410bad9ed8bb1c49f59bf7c3","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        properties \u003d utils.brick_get_connector_properties(False, False)"},{"line_number":192,"context_line":"        attach_info, volume \u003d self._attach_volume(context, volume, properties)"},{"line_number":193,"context_line":"        try:"},{"line_number":194,"context_line":"            volume_path \u003d attach_info[\u0027device\u0027][\u0027path\u0027]"},{"line_number":195,"context_line":"            # Secure network file systems will not chown files."},{"line_number":196,"context_line":"            if self.secure_file_operations_enabled():"},{"line_number":197,"context_line":"                with fileutils.file_open(volume_path) as volume_file:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_563d91db","line":194,"updated":"2015-07-27 22:42:52.000000000","message":"same comment as for _run_restore","commit_id":"f544c05501b44d1f6ceccabc78a4d2fe490a7349"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"c8fcd0e4db361cf769a868decdd5225a11fe8071","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        properties \u003d utils.brick_get_connector_properties(False, False)"},{"line_number":192,"context_line":"        attach_info, volume \u003d self._attach_volume(context, volume, properties)"},{"line_number":193,"context_line":"        try:"},{"line_number":194,"context_line":"            volume_path \u003d attach_info[\u0027device\u0027][\u0027path\u0027]"},{"line_number":195,"context_line":"            # Secure network file systems will not chown files."},{"line_number":196,"context_line":"            if self.secure_file_operations_enabled():"},{"line_number":197,"context_line":"                with fileutils.file_open(volume_path) as volume_file:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_87b54c7f","line":194,"in_reply_to":"3a50d1a3_563d91db","updated":"2015-07-31 18:49:06.000000000","message":"Yes, I\u0027ll adjust for drivers where the path field itself is a file handle.","commit_id":"f544c05501b44d1f6ceccabc78a4d2fe490a7349"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b8d7b55dc6dca986410bad9ed8bb1c49f59bf7c3","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        attach_info, volume \u003d self._attach_volume(context, volume,"},{"line_number":285,"context_line":"                                                  properties)"},{"line_number":286,"context_line":"        try:"},{"line_number":287,"context_line":"            volume_path \u003d attach_info[\u0027device\u0027][\u0027path\u0027]"},{"line_number":288,"context_line":"            # Secure network file systems will not chown files."},{"line_number":289,"context_line":"            if self.secure_file_operations_enabled():"},{"line_number":290,"context_line":"                with fileutils.file_open(volume_path, \u0027wb\u0027) as volume_file:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_f6261dcd","line":287,"updated":"2015-07-27 22:42:52.000000000","message":"Some driver like RBD, path here is actually a file handle, we can use it directly.","commit_id":"f544c05501b44d1f6ceccabc78a4d2fe490a7349"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"c8fcd0e4db361cf769a868decdd5225a11fe8071","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        attach_info, volume \u003d self._attach_volume(context, volume,"},{"line_number":285,"context_line":"                                                  properties)"},{"line_number":286,"context_line":"        try:"},{"line_number":287,"context_line":"            volume_path \u003d attach_info[\u0027device\u0027][\u0027path\u0027]"},{"line_number":288,"context_line":"            # Secure network file systems will not chown files."},{"line_number":289,"context_line":"            if self.secure_file_operations_enabled():"},{"line_number":290,"context_line":"                with fileutils.file_open(volume_path, \u0027wb\u0027) as volume_file:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_2c2a1f91","line":287,"in_reply_to":"3a50d1a3_f6261dcd","updated":"2015-07-31 18:49:06.000000000","message":"Yes, that makes sense.","commit_id":"f544c05501b44d1f6ceccabc78a4d2fe490a7349"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"0fd632d4c3fddc1fff8ec3a4f318fa5e700c6a6c","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            volume_path \u003d attach_info[\u0027device\u0027][\u0027path\u0027]"},{"line_number":288,"context_line":"            # Secure network file systems will not chown files."},{"line_number":289,"context_line":"            if self.secure_file_operations_enabled():"},{"line_number":290,"context_line":"                with fileutils.file_open(volume_path, \u0027wb\u0027) as volume_file:"},{"line_number":291,"context_line":"                    backup_service.restore(backup, volume[\u0027id\u0027],"},{"line_number":292,"context_line":"                                           volume_file)"},{"line_number":293,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_41b97b2d","line":290,"updated":"2015-07-27 06:53:24.000000000","message":"Hi Tom,\nHere it uses common way fileutils.file_open to open a block device, like the way of BaseVD in volume/driver.py.\n\nBut let\u0027s look into kinds of drivers for kinds of storages: they have own implementation of backup_volume(). For example, cinder/volume/drivers/rbd.py. \n\nIs it OK to use fileutils.file_open() for all storages?","commit_id":"f544c05501b44d1f6ceccabc78a4d2fe490a7349"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b8d7b55dc6dca986410bad9ed8bb1c49f59bf7c3","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            volume_path \u003d attach_info[\u0027device\u0027][\u0027path\u0027]"},{"line_number":288,"context_line":"            # Secure network file systems will not chown files."},{"line_number":289,"context_line":"            if self.secure_file_operations_enabled():"},{"line_number":290,"context_line":"                with fileutils.file_open(volume_path, \u0027wb\u0027) as volume_file:"},{"line_number":291,"context_line":"                    backup_service.restore(backup, volume[\u0027id\u0027],"},{"line_number":292,"context_line":"                                           volume_file)"},{"line_number":293,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_1624e9c2","line":290,"updated":"2015-07-27 22:42:52.000000000","message":"Lisa, please see my comment above.","commit_id":"f544c05501b44d1f6ceccabc78a4d2fe490a7349"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"956bbeefc8977a2f3580f4bf3fa27fb9a702a1a0","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            volume_path \u003d attach_info[\u0027device\u0027][\u0027path\u0027]"},{"line_number":288,"context_line":"            # Secure network file systems will not chown files."},{"line_number":289,"context_line":"            if self.secure_file_operations_enabled():"},{"line_number":290,"context_line":"                with fileutils.file_open(volume_path, \u0027wb\u0027) as volume_file:"},{"line_number":291,"context_line":"                    backup_service.restore(backup, volume[\u0027id\u0027],"},{"line_number":292,"context_line":"                                           volume_file)"},{"line_number":293,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_dd43fcad","line":290,"in_reply_to":"3a50d1a3_1624e9c2","updated":"2015-07-28 01:39:05.000000000","message":"Yes, I see. Any block volumes can be treated like a file object. \nWhat I am concerned are two aspects:\n1. Like Tom said that needs to whether needs any special treatment. For example, any multiple drivers for storage vendors. \n\n2. The other point is that currently backup_volume() is not just to open file in volume drivers. For example, \n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/vmware/vmdk.py#L1573\n\nWe need to migrate the code to backup drivers for there kinds of implementations.","commit_id":"f544c05501b44d1f6ceccabc78a4d2fe490a7349"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"f7d95516bce1ee30cec5e40178deafc031cef44a","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            volume_path \u003d attach_info[\u0027device\u0027][\u0027path\u0027]"},{"line_number":288,"context_line":"            # Secure network file systems will not chown files."},{"line_number":289,"context_line":"            if self.secure_file_operations_enabled():"},{"line_number":290,"context_line":"                with fileutils.file_open(volume_path, \u0027wb\u0027) as volume_file:"},{"line_number":291,"context_line":"                    backup_service.restore(backup, volume[\u0027id\u0027],"},{"line_number":292,"context_line":"                                           volume_file)"},{"line_number":293,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_52de0412","line":290,"in_reply_to":"3a50d1a3_41b97b2d","updated":"2015-07-27 19:40:04.000000000","message":"This is a great question and points to an unresolved issue that I\u0027ll point to in the BP spec next time I revise it.\n\nMy thinking here is that we will likely have to implement more than one type of _attach so that the backup manager can get to every backend just as nova does.  I need to study which backends would require special treatment and what has already been done for them in os-brick, in nova, etc.\n\nWe know that nova can see every backend\u0027s volumes as just a block device, so it must be possible here too - he says, waving hands :-)\n\nLet me know what you think.","commit_id":"f544c05501b44d1f6ceccabc78a4d2fe490a7349"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"c8fcd0e4db361cf769a868decdd5225a11fe8071","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            volume_path \u003d attach_info[\u0027device\u0027][\u0027path\u0027]"},{"line_number":288,"context_line":"            # Secure network file systems will not chown files."},{"line_number":289,"context_line":"            if self.secure_file_operations_enabled():"},{"line_number":290,"context_line":"                with fileutils.file_open(volume_path, \u0027wb\u0027) as volume_file:"},{"line_number":291,"context_line":"                    backup_service.restore(backup, volume[\u0027id\u0027],"},{"line_number":292,"context_line":"                                           volume_file)"},{"line_number":293,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_c7627416","line":290,"in_reply_to":"3a50d1a3_dd43fcad","updated":"2015-07-31 18:49:06.000000000","message":"I\u0027m addressing this issue, or at least noting that we have to resolve it, in the BP spec.","commit_id":"f544c05501b44d1f6ceccabc78a4d2fe490a7349"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b8d7b55dc6dca986410bad9ed8bb1c49f59bf7c3","unresolved":false,"context_lines":[{"line_number":591,"context_line":"                # timeout. In fact, the volume is already attached after"},{"line_number":592,"context_line":"                # the timeout error is raised, so the connection worths"},{"line_number":593,"context_line":"                # a try of terminating. 604"},{"line_number":594,"context_line":"                try:"},{"line_number":595,"context_line":"                    rpcapi.terminate_connection(context, volume,"},{"line_number":596,"context_line":"                                                properties, force\u003dTrue)"},{"line_number":597,"context_line":"                except Exception:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_b62c15ad","line":594,"updated":"2015-07-27 22:42:52.000000000","message":"and remove_export","commit_id":"f544c05501b44d1f6ceccabc78a4d2fe490a7349"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"c8fcd0e4db361cf769a868decdd5225a11fe8071","unresolved":false,"context_lines":[{"line_number":591,"context_line":"                # timeout. In fact, the volume is already attached after"},{"line_number":592,"context_line":"                # the timeout error is raised, so the connection worths"},{"line_number":593,"context_line":"                # a try of terminating. 604"},{"line_number":594,"context_line":"                try:"},{"line_number":595,"context_line":"                    rpcapi.terminate_connection(context, volume,"},{"line_number":596,"context_line":"                                                properties, force\u003dTrue)"},{"line_number":597,"context_line":"                except Exception:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_67d600c5","line":594,"in_reply_to":"3a50d1a3_b62c15ad","updated":"2015-07-31 18:49:06.000000000","message":"Thanks, will do.","commit_id":"f544c05501b44d1f6ceccabc78a4d2fe490a7349"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b8d7b55dc6dca986410bad9ed8bb1c49f59bf7c3","unresolved":false,"context_lines":[{"line_number":604,"context_line":"    def _connect_device(self, conn):"},{"line_number":605,"context_line":"        # Use Brick\u0027s code to do attach/detach"},{"line_number":606,"context_line":"        use_multipath \u003d False"},{"line_number":607,"context_line":"        device_scan_attempts \u003d 3"},{"line_number":608,"context_line":"        protocol \u003d conn[\u0027driver_volume_type\u0027]"},{"line_number":609,"context_line":"        connector \u003d utils.brick_get_connector("},{"line_number":610,"context_line":"            protocol,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_d629a19c","line":607,"updated":"2015-07-27 22:42:52.000000000","message":"can we use config options like volume manager does? hardcoded value is least preferable.","commit_id":"f544c05501b44d1f6ceccabc78a4d2fe490a7349"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"c8fcd0e4db361cf769a868decdd5225a11fe8071","unresolved":false,"context_lines":[{"line_number":604,"context_line":"    def _connect_device(self, conn):"},{"line_number":605,"context_line":"        # Use Brick\u0027s code to do attach/detach"},{"line_number":606,"context_line":"        use_multipath \u003d False"},{"line_number":607,"context_line":"        device_scan_attempts \u003d 3"},{"line_number":608,"context_line":"        protocol \u003d conn[\u0027driver_volume_type\u0027]"},{"line_number":609,"context_line":"        connector \u003d utils.brick_get_connector("},{"line_number":610,"context_line":"            protocol,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_c7ed948f","line":607,"in_reply_to":"3a50d1a3_d629a19c","updated":"2015-07-31 18:49:06.000000000","message":"Good idea, will do.","commit_id":"f544c05501b44d1f6ceccabc78a4d2fe490a7349"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b8d7b55dc6dca986410bad9ed8bb1c49f59bf7c3","unresolved":false,"context_lines":[{"line_number":637,"context_line":""},{"line_number":638,"context_line":"        # Call remote manager\u0027s terminate_connection which includes"},{"line_number":639,"context_line":"        # driver\u0027s terminate_connection and remove export"},{"line_number":640,"context_line":"        rpcapi \u003d volume_rpcapi.VolumeAPI()"},{"line_number":641,"context_line":"        rpcapi.terminate_connection(context, volume, properties,"},{"line_number":642,"context_line":"                                    force\u003dforce)"},{"line_number":643,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_7619ad87","line":640,"updated":"2015-07-27 22:42:52.000000000","message":"you\u0027d probably want to call rpcapi.remove_export() as well, this is added in Jon\u0027s file IO migration patch.","commit_id":"f544c05501b44d1f6ceccabc78a4d2fe490a7349"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"c8fcd0e4db361cf769a868decdd5225a11fe8071","unresolved":false,"context_lines":[{"line_number":637,"context_line":""},{"line_number":638,"context_line":"        # Call remote manager\u0027s terminate_connection which includes"},{"line_number":639,"context_line":"        # driver\u0027s terminate_connection and remove export"},{"line_number":640,"context_line":"        rpcapi \u003d volume_rpcapi.VolumeAPI()"},{"line_number":641,"context_line":"        rpcapi.terminate_connection(context, volume, properties,"},{"line_number":642,"context_line":"                                    force\u003dforce)"},{"line_number":643,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_87e78cab","line":640,"in_reply_to":"3a50d1a3_7619ad87","updated":"2015-07-31 18:49:06.000000000","message":"OK, makes sense, thanks!","commit_id":"f544c05501b44d1f6ceccabc78a4d2fe490a7349"}],"cinder/backup/rpcapi.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"cf7cbe94d8d5120cb7d8088489189c2fb2def01c","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        cctxt \u003d self.client.prepare(server\u003dbackup.host)"},{"line_number":101,"context_line":"        return cctxt.cast(ctxt, \u0027reset_status\u0027, backup\u003dbackup, status\u003dstatus)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def check_support_to_force_delete(self, ctxt, host):"},{"line_number":104,"context_line":"        LOG.debug(\"Check if backup driver supports force delete \""},{"line_number":105,"context_line":"                  \"on host %(host)s.\", {\u0027host\u0027: host})"},{"line_number":106,"context_line":"        cctxt \u003d self.client.prepare(server\u003dhost)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_031070a7","side":"PARENT","line":103,"updated":"2015-07-21 01:57:01.000000000","message":"Looks like I inadvertently dropped this method.  Will pick it back up.","commit_id":"db0cca532b774970b2fa15776ab935b276c40838"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"dd2a349a3c78b392beeb7163d6088985d87185d4","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        target \u003d messaging.Target(topic\u003dCONF.backup_topic,"},{"line_number":48,"context_line":"                                  version\u003dself.BASE_RPC_API_VERSION)"},{"line_number":49,"context_line":"        serializer \u003d objects_base.CinderObjectSerializer()"},{"line_number":50,"context_line":"        self.client \u003d rpc.get_client(target, \u00271.1\u0027, serializer\u003dserializer)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def create_backup(self, ctxt, backup_host, backup):"},{"line_number":53,"context_line":"        LOG.debug(\"create_backup in rpcapi backup_id %s\", backup.id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_c05297dd","line":50,"updated":"2015-07-20 15:09:34.000000000","message":"1.2","commit_id":"36bdd5a1fd5d5def0ab048f38c1e0a62dacf9e78"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"cf7cbe94d8d5120cb7d8088489189c2fb2def01c","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        target \u003d messaging.Target(topic\u003dCONF.backup_topic,"},{"line_number":48,"context_line":"                                  version\u003dself.BASE_RPC_API_VERSION)"},{"line_number":49,"context_line":"        serializer \u003d objects_base.CinderObjectSerializer()"},{"line_number":50,"context_line":"        self.client \u003d rpc.get_client(target, \u00271.1\u0027, serializer\u003dserializer)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def create_backup(self, ctxt, backup_host, backup):"},{"line_number":53,"context_line":"        LOG.debug(\"create_backup in rpcapi backup_id %s\", backup.id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_232c8c01","line":50,"in_reply_to":"3a50d1a3_c05297dd","updated":"2015-07-21 01:57:01.000000000","message":"Thanks, fixed.","commit_id":"36bdd5a1fd5d5def0ab048f38c1e0a62dacf9e78"}]}
