)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"034aef342363dbcbc937527e3f7e194789a0d909","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Murali Balcha \u003cmurali.balcha@triliodata.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-08-15 12:54:40 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support to incremental backup in cinder"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Added two new options to create_backup to support incremental backups"},{"line_number":10,"context_line":"   --incremental to identify incremental or full backup"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1abeadc6_ac9309a2","line":7,"updated":"2014-08-18 20:34:21.000000000","message":"This is differential backup, not incremental backup.  Please don\u0027t call it incremental.","commit_id":"1e0c8ec3f8cb1385252d491fc633410265651a6a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"034aef342363dbcbc937527e3f7e194789a0d909","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add support to incremental backup in cinder"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Added two new options to create_backup to support incremental backups"},{"line_number":10,"context_line":"   --incremental to identify incremental or full backup"},{"line_number":11,"context_line":"   --fullcontainer points to the path of last full backup"},{"line_number":12,"context_line":"2. swift.py creates sha256file for every backup"},{"line_number":13,"context_line":"Add support to incremental backup in cinder"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1abeadc6_ccb92530","line":10,"updated":"2014-08-18 20:34:21.000000000","message":"What is \"--incremental\" referring to?  Looks like a command line option?","commit_id":"1e0c8ec3f8cb1385252d491fc633410265651a6a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098c57623faab4965ab0d74174443626daaf8ed0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Murali Balcha \u003cmurali.balcha@triliodata.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-08-21 11:05:29 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support to differential (deltas from last full backup)backups in cinder"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Added two new options to create_backup to support differential backups"},{"line_number":10,"context_line":"   --snapshot to create a backup image from the snapshot of a volume."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1abeadc6_2ee3e9a4","line":7,"updated":"2014-08-22 02:21:36.000000000","message":"Title should be \u003c 50 chars.","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Murali Balcha \u003cmurali.balcha@triliodata.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-08-21 11:05:29 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support to differential (deltas from last full backup)backups in cinder"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Added two new options to create_backup to support differential backups"},{"line_number":10,"context_line":"   --snapshot to create a backup image from the snapshot of a volume."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1abeadc6_d356542a","line":7,"in_reply_to":"1abeadc6_2ee3e9a4","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"2aeb179c0807c192dac6311234e7717c1b4517bc","unresolved":false,"context_lines":[{"line_number":9,"context_line":"1. Added two new options to create_backup to support differential backups"},{"line_number":10,"context_line":"   --snapshot to create a backup image from the snapshot of a volume."},{"line_number":11,"context_line":"              This option creates a snapshot of the volume, takes the"},{"line_number":12,"context_line":"              backup and then deletes the snapshot"},{"line_number":13,"context_line":"   --parent_id id of fullbackup if the backup should be differential."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"2. swift.py creates sha256file for every backup to calculate deltas"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"9aa7fdbe_c04523b4","line":12,"updated":"2014-10-22 16:08:13.000000000","message":"Snapshots are not mountable generically in cinder, so the default needs to be create a (hidden from snap list) snap, create a (hidden) volume from the snap, do the backup then clean up. Drivers can override if they can do better.","commit_id":"71bf20c067900dceacfb036f0293380884f3fbd3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"78841a77c6e0cfa049b410d499dd5df2054af764","unresolved":false,"context_lines":[{"line_number":9,"context_line":"1. Added two new options to create_backup to support differential backups"},{"line_number":10,"context_line":"   --snapshot to create a backup image from the snapshot of a volume."},{"line_number":11,"context_line":"              This option creates a snapshot of the volume, takes the"},{"line_number":12,"context_line":"              backup and then deletes the snapshot"},{"line_number":13,"context_line":"   --parent_id id of fullbackup if the backup should be differential."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"2. swift.py creates sha256file for every backup to calculate deltas"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"9aa7fdbe_da4c02cb","line":12,"in_reply_to":"9aa7fdbe_37eb73b1","updated":"2014-10-24 00:54:37.000000000","message":"I think Duncan\u0027s suggestion is good.  You can create a hidden volume from the hidden snap like he suggested in the base driver class driver.py.  That will be the default behavior for all drivers.  Then in lvm.py, you can override it using local_path.","commit_id":"71bf20c067900dceacfb036f0293380884f3fbd3"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"32ecce9fb4c8cb47c6ebda63ca821531e567275b","unresolved":false,"context_lines":[{"line_number":9,"context_line":"1. Added two new options to create_backup to support differential backups"},{"line_number":10,"context_line":"   --snapshot to create a backup image from the snapshot of a volume."},{"line_number":11,"context_line":"              This option creates a snapshot of the volume, takes the"},{"line_number":12,"context_line":"              backup and then deletes the snapshot"},{"line_number":13,"context_line":"   --parent_id id of fullbackup if the backup should be differential."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"2. swift.py creates sha256file for every backup to calculate deltas"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"9aa7fdbe_37eb73b1","line":12,"in_reply_to":"9aa7fdbe_493b1738","updated":"2014-10-23 15:53:21.000000000","message":"No, most drivers don\u0027t support local_path.","commit_id":"71bf20c067900dceacfb036f0293380884f3fbd3"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"cd24f8971c364d247ea3137b6f5f4e23b61a9b38","unresolved":false,"context_lines":[{"line_number":9,"context_line":"1. Added two new options to create_backup to support differential backups"},{"line_number":10,"context_line":"   --snapshot to create a backup image from the snapshot of a volume."},{"line_number":11,"context_line":"              This option creates a snapshot of the volume, takes the"},{"line_number":12,"context_line":"              backup and then deletes the snapshot"},{"line_number":13,"context_line":"   --parent_id id of fullbackup if the backup should be differential."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"2. swift.py creates sha256file for every backup to calculate deltas"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"9aa7fdbe_493b1738","line":12,"in_reply_to":"9aa7fdbe_c04523b4","updated":"2014-10-22 21:10:00.000000000","message":"Sure, that always bothered me. local_path() is a driver entry point. I can create a volume out of snapshot, but for LVM driver, it is a lengthy copy of snapshot data to volume. I want to avoid the copy as the snapshot is a temporary artifact just to read the data. Can\u0027t other driver use local_path() to implement snapshot mount operation? Let me know your thoughts.","commit_id":"71bf20c067900dceacfb036f0293380884f3fbd3"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"2aeb179c0807c192dac6311234e7717c1b4517bc","unresolved":false,"context_lines":[{"line_number":10,"context_line":"   --snapshot to create a backup image from the snapshot of a volume."},{"line_number":11,"context_line":"              This option creates a snapshot of the volume, takes the"},{"line_number":12,"context_line":"              backup and then deletes the snapshot"},{"line_number":13,"context_line":"   --parent_id id of fullbackup if the backup should be differential."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"2. swift.py creates sha256file for every backup to calculate deltas"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"9aa7fdbe_a021fffc","line":13,"updated":"2014-10-22 16:08:13.000000000","message":"What about for the other backup drivers - there is more than just swift now","commit_id":"71bf20c067900dceacfb036f0293380884f3fbd3"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"cd24f8971c364d247ea3137b6f5f4e23b61a9b38","unresolved":false,"context_lines":[{"line_number":10,"context_line":"   --snapshot to create a backup image from the snapshot of a volume."},{"line_number":11,"context_line":"              This option creates a snapshot of the volume, takes the"},{"line_number":12,"context_line":"              backup and then deletes the snapshot"},{"line_number":13,"context_line":"   --parent_id id of fullbackup if the backup should be differential."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"2. swift.py creates sha256file for every backup to calculate deltas"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"9aa7fdbe_c9e1c7d1","line":13,"in_reply_to":"9aa7fdbe_a021fffc","updated":"2014-10-22 21:10:00.000000000","message":"That is correct. IBM and Ceph. Ceph has a different means of supporting incremental but not thru this mechanism. Last time I heard IBM was extending their tivoli driver to support differential feature. Will reach out to them. Any other folks should I contact?","commit_id":"71bf20c067900dceacfb036f0293380884f3fbd3"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"3a52a1a0de59bebf557e6fea658e4f33b505d43f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"              This option creates a snapshot of the volume, takes the"},{"line_number":12,"context_line":"              backup and then deletes the snapshot"},{"line_number":13,"context_line":"   --parent_id id of fullbackup if the backup should be differential."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"2. swift.py creates sha256file for every backup to calculate deltas"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I98f3765f7afa47bda6a8c7004f809c3cc4d1bd4b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"9aa7fdbe_00656b44","line":14,"updated":"2014-10-22 16:10:08.000000000","message":"What happens if we then delete the parent? Or indeed the child - working out which objects are shared and which aren\u0027t is tricky.","commit_id":"71bf20c067900dceacfb036f0293380884f3fbd3"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"cd24f8971c364d247ea3137b6f5f4e23b61a9b38","unresolved":false,"context_lines":[{"line_number":11,"context_line":"              This option creates a snapshot of the volume, takes the"},{"line_number":12,"context_line":"              backup and then deletes the snapshot"},{"line_number":13,"context_line":"   --parent_id id of fullbackup if the backup should be differential."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"2. swift.py creates sha256file for every backup to calculate deltas"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I98f3765f7afa47bda6a8c7004f809c3cc4d1bd4b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"9aa7fdbe_a9b723d7","line":14,"in_reply_to":"9aa7fdbe_00656b44","updated":"2014-10-22 21:10:00.000000000","message":"We don\u0027t let parent deleted if there are differential snapshots hanging off of it. Since this is differential, we let user delete any differential backups. We could support a force flag for delete that deletes all differentials if exists and delete parent. Right now this option is not implemented.","commit_id":"71bf20c067900dceacfb036f0293380884f3fbd3"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f888d784cc7fc591fe37dea231bfbc0f6dfba193","unresolved":false,"context_lines":[{"line_number":12,"context_line":"   Add the following to API: \u0027incremental\u0027: True or False"},{"line_number":13,"context_line":"   (False is the default)"},{"line_number":14,"context_line":"2. swift.py creates sha256file for every backup to calculate deltas"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Co-Authored-By: Xing Yang \u003cxing.yang@emc.com\u003e"},{"line_number":17,"context_line":"Implements: blueprint incremental-backup"},{"line_number":18,"context_line":"Change-Id: I98f3765f7afa47bda6a8c7004f809c3cc4d1bd4b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"da86d52c_d12d8147","line":15,"updated":"2015-02-19 15:56:35.000000000","message":"DocImpact and APIImpact should be added here.","commit_id":"964cff4d9dea3633499affa4296669f37b986e10"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9055bb56a2f090015beccd4a4aa2a44e7dd98d28","unresolved":false,"context_lines":[{"line_number":12,"context_line":"   Add the following to API: \u0027incremental\u0027: True or False"},{"line_number":13,"context_line":"   (False is the default)"},{"line_number":14,"context_line":"2. swift.py creates sha256file for every backup to calculate deltas"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Co-Authored-By: Xing Yang \u003cxing.yang@emc.com\u003e"},{"line_number":17,"context_line":"Implements: blueprint incremental-backup"},{"line_number":18,"context_line":"Change-Id: I98f3765f7afa47bda6a8c7004f809c3cc4d1bd4b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"ba7be1f8_1360b231","line":15,"in_reply_to":"da86d52c_d12d8147","updated":"2015-02-20 19:43:06.000000000","message":"Done","commit_id":"964cff4d9dea3633499affa4296669f37b986e10"}],"cinder/api/contrib/backups.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"1c59e1b089ce2f1175e5853fbb3f3d1118af6ce5","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        name \u003d backup.get(\u0027name\u0027, None)"},{"line_number":250,"context_line":"        description \u003d backup.get(\u0027description\u0027, None)"},{"line_number":251,"context_line":"        incremental \u003d backup.get(\u0027incremental\u0027, 0)"},{"line_number":252,"context_line":"        fullbackup_id \u003d backup.get(\u0027fullbackup_id\u0027, None)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        LOG.audit(_(\"Creating backup of volume %(volume_id)s in container\""},{"line_number":255,"context_line":"                    \" %(container)s\"),"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_afc69f67","line":252,"updated":"2014-08-06 11:59:23.000000000","message":"no need to add None, get returns None by the default if there\u0027s no such pair key:value.","commit_id":"b43d485fcba82e8b4953a2dc296dde8b861d44ca"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"6a4ccc11ae37f0fc4bec013f1c2aa82c020aba1a","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        LOG.debug(\u0027delete called for member %s\u0027, id)"},{"line_number":180,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        LOG.audit(_(\u0027Delete backup with id: %s\u0027), id, context\u003dcontext)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        try:"},{"line_number":185,"context_line":"            self.backup_api.delete(context, id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_6d76cba5","line":182,"updated":"2014-08-21 16:05:27.000000000","message":"LOG.audit is not not used, please go back to info","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        LOG.debug(\u0027delete called for member %s\u0027, id)"},{"line_number":180,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        LOG.audit(_(\u0027Delete backup with id: %s\u0027), id, context\u003dcontext)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        try:"},{"line_number":185,"context_line":"            self.backup_api.delete(context, id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_f3535037","line":182,"in_reply_to":"1abeadc6_6d76cba5","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098c57623faab4965ab0d74174443626daaf8ed0","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        snapshot \u003d backup.get(\u0027snapshot\u0027, False)"},{"line_number":255,"context_line":"        parent_id \u003d backup.get(\u0027parent_id\u0027, None)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        LOG.audit(_(\"Creating backup of volume %(volume_id)s in container\""},{"line_number":258,"context_line":"                    \" %(container)s\"),"},{"line_number":259,"context_line":"                  {\u0027volume_id\u0027: volume_id, \u0027container\u0027: container},"},{"line_number":260,"context_line":"                  context\u003dcontext)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_8e9cfd10","line":257,"updated":"2014-08-22 02:21:36.000000000","message":"Use LOG.info","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        snapshot \u003d backup.get(\u0027snapshot\u0027, False)"},{"line_number":255,"context_line":"        parent_id \u003d backup.get(\u0027parent_id\u0027, None)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        LOG.audit(_(\"Creating backup of volume %(volume_id)s in container\""},{"line_number":258,"context_line":"                    \" %(container)s\"),"},{"line_number":259,"context_line":"                  {\u0027volume_id\u0027: volume_id, \u0027container\u0027: container},"},{"line_number":260,"context_line":"                  context\u003dcontext)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_1330cc06","line":257,"in_reply_to":"1abeadc6_8e9cfd10","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098c57623faab4965ab0d74174443626daaf8ed0","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        restore \u003d body[\u0027restore\u0027]"},{"line_number":289,"context_line":"        volume_id \u003d restore.get(\u0027volume_id\u0027, None)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        LOG.audit(_(\"Restoring backup %(backup_id)s to volume %(volume_id)s\"),"},{"line_number":292,"context_line":"                  {\u0027backup_id\u0027: id, \u0027volume_id\u0027: volume_id},"},{"line_number":293,"context_line":"                  context\u003dcontext)"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_8e6a3dec","line":291,"updated":"2014-08-22 02:21:36.000000000","message":"Use LOG.info","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        restore \u003d body[\u0027restore\u0027]"},{"line_number":289,"context_line":"        volume_id \u003d restore.get(\u0027volume_id\u0027, None)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        LOG.audit(_(\"Restoring backup %(backup_id)s to volume %(volume_id)s\"),"},{"line_number":292,"context_line":"                  {\u0027backup_id\u0027: id, \u0027volume_id\u0027: volume_id},"},{"line_number":293,"context_line":"                  context\u003dcontext)"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_3335c8f7","line":291,"in_reply_to":"1abeadc6_8e6a3dec","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"}],"cinder/backup/api.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"6d8102c048b34d3a5ec9b8b1fb005d58b07b0cf3","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        check_policy(context, \u0027create\u0027)"},{"line_number":125,"context_line":"        volume \u003d self.volume_api.get(context, volume_id)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        if snapshot:"},{"line_number":128,"context_line":"            if volume[\u0027status\u0027] not in [\"available\", \"in-use\"]:"},{"line_number":129,"context_line":"                msg \u003d _(\u0027Volume to be backed up must be either available\u0027"},{"line_number":130,"context_line":"                        \u0027 or in-use\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_705b6487","line":127,"updated":"2014-08-19 13:55:28.000000000","message":"I\u0027m not sure why snapshot is an option.  Shouldn\u0027t it use a snapshot automatically if \"in-use\", and not use a snapshot if the volume is \"available\"?\n\nWhat is gained by adding this as an option?","commit_id":"1e0c8ec3f8cb1385252d491fc633410265651a6a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098c57623faab4965ab0d74174443626daaf8ed0","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        if not backup[\u0027parent_id\u0027]:"},{"line_number":71,"context_line":"            deltas \u003d self.get_all(context, {\u0027parent_id\u0027: backup[\u0027id\u0027]})"},{"line_number":72,"context_line":"            if deltas and len(deltas):"},{"line_number":73,"context_line":"                msg \u003d _(\u0027Differential backups exists for this backup\u0027)"},{"line_number":74,"context_line":"                raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.db.backup_update(context, backup_id, {\u0027status\u0027: \u0027deleting\u0027})"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_fae35dd6","line":73,"updated":"2014-08-22 02:21:36.000000000","message":"exists -\u003e exist","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        if not backup[\u0027parent_id\u0027]:"},{"line_number":71,"context_line":"            deltas \u003d self.get_all(context, {\u0027parent_id\u0027: backup[\u0027id\u0027]})"},{"line_number":72,"context_line":"            if deltas and len(deltas):"},{"line_number":73,"context_line":"                msg \u003d _(\u0027Differential backups exists for this backup\u0027)"},{"line_number":74,"context_line":"                raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        self.db.backup_update(context, backup_id, {\u0027status\u0027: \u0027deleting\u0027})"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_9323fcbd","line":73,"in_reply_to":"1abeadc6_fae35dd6","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098c57623faab4965ab0d74174443626daaf8ed0","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        if parent_id:"},{"line_number":140,"context_line":"            fullbackup \u003d self.get(context, parent_id)"},{"line_number":141,"context_line":"            if fullbackup[\u0027parent_id\u0027]:"},{"line_number":142,"context_line":"                msg \u003d _(\u0027parent_id is not valid backup_id\u0027)"},{"line_number":143,"context_line":"                raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"            if fullbackup[\u0027status\u0027] !\u003d \"available\":"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_9a2ee9a3","line":142,"updated":"2014-08-22 02:21:36.000000000","message":"This msg is not clear.  If fullbackup has a parent_id, it is a differential backup rather than a full backup?","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        if parent_id:"},{"line_number":140,"context_line":"            fullbackup \u003d self.get(context, parent_id)"},{"line_number":141,"context_line":"            if fullbackup[\u0027parent_id\u0027]:"},{"line_number":142,"context_line":"                msg \u003d _(\u0027parent_id is not valid backup_id\u0027)"},{"line_number":143,"context_line":"                raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"            if fullbackup[\u0027status\u0027] !\u003d \"available\":"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_533a44e8","line":142,"in_reply_to":"1abeadc6_9a2ee9a3","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"55fd2090050c4f202dc0c3b375b775fda97ac5d8","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        if parent_id:"},{"line_number":140,"context_line":"            fullbackup \u003d self.get(context, parent_id)"},{"line_number":141,"context_line":"            if fullbackup[\u0027parent_id\u0027]:"},{"line_number":142,"context_line":"                msg \u003d _(\u0027parent_id is a differential backup.\u0027"},{"line_number":143,"context_line":"                        \u0027Provide a valid full backup id\u0027)"},{"line_number":144,"context_line":"                raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_1a349948","line":142,"updated":"2014-08-29 05:15:39.000000000","message":"This message is a little confusing because it is right under fullbackup[\u0027parent_id\u0027].  Are you referring to the input parameter \u0027parent_id\u0027?  If so, can you change the message to \"The input parent_id is a differential backup.\"?","commit_id":"0555f3f9c999863f1b75652427320eb5549d8c84"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"49a9151535f6001001b187b888c272df412e2201","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        if parent_id:"},{"line_number":140,"context_line":"            fullbackup \u003d self.get(context, parent_id)"},{"line_number":141,"context_line":"            if fullbackup[\u0027parent_id\u0027]:"},{"line_number":142,"context_line":"                msg \u003d _(\u0027parent_id is a differential backup.\u0027"},{"line_number":143,"context_line":"                        \u0027Provide a valid full backup id\u0027)"},{"line_number":144,"context_line":"                raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_9504e015","line":142,"in_reply_to":"1abeadc6_1a349948","updated":"2014-08-29 18:40:18.000000000","message":"Done","commit_id":"0555f3f9c999863f1b75652427320eb5549d8c84"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"55fd2090050c4f202dc0c3b375b775fda97ac5d8","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            if fullbackup[\u0027status\u0027] !\u003d \"available\":"},{"line_number":147,"context_line":"                msg \u003d _(\u0027parent backup must be available\u0027)"},{"line_number":148,"context_line":"                raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        self.db.volume_update(context, volume_id, {\u0027status\u0027: \u0027backing-up\u0027})"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_5add31df","line":147,"updated":"2014-08-29 05:15:39.000000000","message":"Can you make the first letter capital?","commit_id":"0555f3f9c999863f1b75652427320eb5549d8c84"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"49a9151535f6001001b187b888c272df412e2201","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            if fullbackup[\u0027status\u0027] !\u003d \"available\":"},{"line_number":147,"context_line":"                msg \u003d _(\u0027parent backup must be available\u0027)"},{"line_number":148,"context_line":"                raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        self.db.volume_update(context, volume_id, {\u0027status\u0027: \u0027backing-up\u0027})"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_b5071c17","line":147,"in_reply_to":"1abeadc6_5add31df","updated":"2014-08-29 18:40:18.000000000","message":"Done","commit_id":"0555f3f9c999863f1b75652427320eb5549d8c84"},{"author":{"_account_id":8874,"name":"ling-yun","email":"YunlingZeng@hotmail.com","username":"ling-yun"},"change_message_id":"7ae1591f37a7784183a30c982d5d69e2da48e6e5","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            msg \u003d _(\u0027Backup status must be available or error\u0027)"},{"line_number":69,"context_line":"            raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        if not backup[\u0027parent_id\u0027]:"},{"line_number":72,"context_line":"            deltas \u003d self.get_all(context, {\u0027parent_id\u0027: backup[\u0027id\u0027]})"},{"line_number":73,"context_line":"            if deltas and len(deltas):"},{"line_number":74,"context_line":"                msg \u003d _(\u0027Differential backups exist for this backup\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_fc39d9f2","line":71,"updated":"2014-09-03 02:49:28.000000000","message":"Suppose there are three differential backups (backup 1 \u003c-- backup 2 \u003c-- backup3),\nbackup1 is the first total backup of a volume snapshot1, and backup 2 is a \ndifferential backup based on backup 1, and backup 3 is a differential backup \nbased on backup 2.\n\nIf we want to delete backup 2, this conditional check would pass and it would \nsend the delete request to backup manager. I think it also need to check whether \nthere is a differential backup based on the delete backup id when its parent_id \nis not null.\n\nIt should remove the conditional check \"if not backup[\u0027parent_id\u0027]\".","commit_id":"c544f70eae2cde0d9087376d18c157136a69b10e"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"78e781020e77fb8d7c7540a9d27cc2a832b3b438","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            msg \u003d _(\u0027Backup status must be available or error\u0027)"},{"line_number":69,"context_line":"            raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        if not backup[\u0027parent_id\u0027]:"},{"line_number":72,"context_line":"            deltas \u003d self.get_all(context, {\u0027parent_id\u0027: backup[\u0027id\u0027]})"},{"line_number":73,"context_line":"            if deltas and len(deltas):"},{"line_number":74,"context_line":"                msg \u003d _(\u0027Differential backups exist for this backup\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_ca7c35b8","line":71,"in_reply_to":"fa98f980_fc39d9f2","updated":"2014-09-03 12:25:08.000000000","message":"Hi Ling-yun,\nYou are right if the backup is incremental. The current patch only supports differential  backups. \n\nWhen we support incremental backup, we cannot allow delete of a backup in the middle of the incremental backup chain. Either we can provide a force option to delete the backup to the top or force user delete only from the top of the backup chain.","commit_id":"c544f70eae2cde0d9087376d18c157136a69b10e"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"f888d784cc7fc591fe37dea231bfbc0f6dfba193","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                                                       volume_id)"},{"line_number":180,"context_line":"            if backups:"},{"line_number":181,"context_line":"                latest_backup \u003d backups[0]"},{"line_number":182,"context_line":"                for backup1 in backups:"},{"line_number":183,"context_line":"                    if backup1[\u0027created_at\u0027] \u003e latest_backup[\u0027created_at\u0027]:"},{"line_number":184,"context_line":"                        latest_backup \u003d backup1"},{"line_number":185,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"da86d52c_5127d111","line":182,"updated":"2015-02-19 15:56:35.000000000","message":"This should be changed to use max builtin with appropriate lambda as key parameter.","commit_id":"964cff4d9dea3633499affa4296669f37b986e10"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9055bb56a2f090015beccd4a4aa2a44e7dd98d28","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                                                       volume_id)"},{"line_number":180,"context_line":"            if backups:"},{"line_number":181,"context_line":"                latest_backup \u003d backups[0]"},{"line_number":182,"context_line":"                for backup1 in backups:"},{"line_number":183,"context_line":"                    if backup1[\u0027created_at\u0027] \u003e latest_backup[\u0027created_at\u0027]:"},{"line_number":184,"context_line":"                        latest_backup \u003d backup1"},{"line_number":185,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba7be1f8_d37e1ae4","line":182,"in_reply_to":"da86d52c_5127d111","updated":"2015-02-20 19:43:06.000000000","message":"Done","commit_id":"964cff4d9dea3633499affa4296669f37b986e10"}],"cinder/backup/driver.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ff6290efdf29e9a77ab7d466282e1993d7549239","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        return"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @abc.abstractmethod"},{"line_number":270,"context_line":"    def restore(self, backup, volume_id, volume_file, fullbackup\u003dNone):"},{"line_number":271,"context_line":"        \"\"\"Restore a saved backup.\"\"\""},{"line_number":272,"context_line":"        return"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_cb179ea1","line":270,"updated":"2014-08-29 14:59:31.000000000","message":"Why does restore() need a fullbackup parameter?\n\nCan\u0027t the restore path inspect the backup to decide whether it is is a full or not rather than the caller providing this?","commit_id":"0555f3f9c999863f1b75652427320eb5549d8c84"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"49a9151535f6001001b187b888c272df412e2201","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        return"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @abc.abstractmethod"},{"line_number":270,"context_line":"    def restore(self, backup, volume_id, volume_file, fullbackup\u003dNone):"},{"line_number":271,"context_line":"        \"\"\"Restore a saved backup.\"\"\""},{"line_number":272,"context_line":"        return"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_f24c4a44","line":270,"in_reply_to":"1abeadc6_cb179ea1","updated":"2014-08-29 18:40:18.000000000","message":"There are two reasons why I did this way:\n1. I thought different backup and how differential backup is related to full backup is common functionality and the manager decides what is full and what is differential and pass those records to swift driver.\n2. The other reason is usually drivers are not reading records from the database. They usually get the database records passed from the manager. This is my observation looking at other projects too. So I stuck to the paradigm\n\nIf you think I can read the full backup record in the swift driver I can change it. Please advice.","commit_id":"0555f3f9c999863f1b75652427320eb5549d8c84"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"3619affd628acf523bcfdb4741b9a33e40a66e89","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        return"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @abc.abstractmethod"},{"line_number":270,"context_line":"    def restore(self, backup, volume_id, volume_file, fullbackup\u003dNone):"},{"line_number":271,"context_line":"        \"\"\"Restore a saved backup.\"\"\""},{"line_number":272,"context_line":"        return"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_12005d66","line":270,"in_reply_to":"1abeadc6_f24c4a44","updated":"2014-09-02 15:37:12.000000000","message":"Done","commit_id":"0555f3f9c999863f1b75652427320eb5549d8c84"}],"cinder/backup/drivers/swift.py":[{"author":{"_account_id":9533,"name":"Eiichi Aikawa","email":"aikawa@mxk.nes.nec.co.jp","username":"EiichiAikawa"},"change_message_id":"5037d5dc67abf23050baf454e3fd1dd87ab99e29","unresolved":false,"context_lines":[{"line_number":570,"context_line":"                  })"},{"line_number":571,"context_line":"        try:"},{"line_number":572,"context_line":"            metadata \u003d self._read_metadata(backup)"},{"line_number":573,"context_line":"            fullmetadata \u003d None"},{"line_number":574,"context_line":"            if fullbackup:"},{"line_number":575,"context_line":"                fullmetadata \u003d self._read_metadata(fullbackup)"},{"line_number":576,"context_line":"        except socket.error as err:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_5ba2b7fd","line":573,"updated":"2014-08-21 09:06:47.000000000","message":"I think this is not needed because fullmetadata would not be used when fullbackup was None.","commit_id":"1e0c8ec3f8cb1385252d491fc633410265651a6a"},{"author":{"_account_id":9533,"name":"Eiichi Aikawa","email":"aikawa@mxk.nes.nec.co.jp","username":"EiichiAikawa"},"change_message_id":"5037d5dc67abf23050baf454e3fd1dd87ab99e29","unresolved":false,"context_lines":[{"line_number":572,"context_line":"            metadata \u003d self._read_metadata(backup)"},{"line_number":573,"context_line":"            fullmetadata \u003d None"},{"line_number":574,"context_line":"            if fullbackup:"},{"line_number":575,"context_line":"                fullmetadata \u003d self._read_metadata(fullbackup)"},{"line_number":576,"context_line":"        except socket.error as err:"},{"line_number":577,"context_line":"            raise exception.SwiftConnectionFailed(reason\u003derr)"},{"line_number":578,"context_line":"        metadata_version \u003d metadata[\u0027version\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_3beb3b14","line":575,"updated":"2014-08-21 09:06:47.000000000","message":"I think you can move this to after line 587 because fullmetadata would not be used until line 588.\nAm I wrong?","commit_id":"1e0c8ec3f8cb1385252d491fc633410265651a6a"},{"author":{"_account_id":9533,"name":"Eiichi Aikawa","email":"aikawa@mxk.nes.nec.co.jp","username":"EiichiAikawa"},"change_message_id":"5037d5dc67abf23050baf454e3fd1dd87ab99e29","unresolved":false,"context_lines":[{"line_number":584,"context_line":"            err \u003d (_(\u0027No support to restore swift backup version %s\u0027)"},{"line_number":585,"context_line":"                   % metadata_version)"},{"line_number":586,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":587,"context_line":"        if fullbackup:"},{"line_number":588,"context_line":"            restore_func(fullbackup, volume_id, fullmetadata, volume_file)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        # Layer the incremental backup on top of it"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_3b07bbcb","line":587,"updated":"2014-08-21 09:06:47.000000000","message":"As I commented as above, I think following code can be moved from line 575 to here.\n\nfullmetadata \u003d self._read_metadata(fullbackup)","commit_id":"1e0c8ec3f8cb1385252d491fc633410265651a6a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"51ceb3e2191cefe5cc6461e074ddbea9482098b0","unresolved":false,"context_lines":[{"line_number":82,"context_line":"               help\u003d\u0027The size in bytes of Swift backup objects\u0027),"},{"line_number":83,"context_line":"    cfg.IntOpt(\u0027backup_swift_block_size\u0027,"},{"line_number":84,"context_line":"               default\u003d32 * 1024,"},{"line_number":85,"context_line":"               help\u003d\u0027The size in bytes of Swift backup objects\u0027),"},{"line_number":86,"context_line":"    cfg.IntOpt(\u0027backup_swift_retry_attempts\u0027,"},{"line_number":87,"context_line":"               default\u003d3,"},{"line_number":88,"context_line":"               help\u003d\u0027The number of retries to make for Swift operations\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_25abfa89","line":85,"updated":"2014-08-22 02:34:37.000000000","message":"Help string is exactly the same as that of the previous parameter.  Needs to be changed.","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098c57623faab4965ab0d74174443626daaf8ed0","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":254,"context_line":"        LOG.debug(\u0027_write_sha256file finished\u0027)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        # update metadata"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def _read_metadata(self, backup):"},{"line_number":259,"context_line":"        container \u003d backup[\u0027container\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_b4457e44","line":256,"updated":"2014-08-22 02:21:36.000000000","message":"This comment should be either moved up or removed.","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":254,"context_line":"        LOG.debug(\u0027_write_sha256file finished\u0027)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        # update metadata"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def _read_metadata(self, backup):"},{"line_number":259,"context_line":"        container \u003d backup[\u0027container\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_f32a708f","line":256,"in_reply_to":"1abeadc6_b4457e44","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098c57623faab4965ab0d74174443626daaf8ed0","unresolved":false,"context_lines":[{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def backup(self, backup, volume_file, backup_metadata\u003dTrue,"},{"line_number":416,"context_line":"               fullbackup\u003dNone):"},{"line_number":417,"context_line":"        \"\"\"Backup the given volume to Swift.\"\"\""},{"line_number":418,"context_line":"        if self.data_block_size_bytes % CONF.backup_swift_block_size:"},{"line_number":419,"context_line":"            err \u003d _(\u0027swift object size is not multiple of\u0027"},{"line_number":420,"context_line":"                    \u0027blocksize for create hash\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_bf48f7b3","line":417,"updated":"2014-08-22 02:21:36.000000000","message":"Can you add a comment here about the new fullbackup parameter?","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def backup(self, backup, volume_file, backup_metadata\u003dTrue,"},{"line_number":416,"context_line":"               fullbackup\u003dNone):"},{"line_number":417,"context_line":"        \"\"\"Backup the given volume to Swift.\"\"\""},{"line_number":418,"context_line":"        if self.data_block_size_bytes % CONF.backup_swift_block_size:"},{"line_number":419,"context_line":"            err \u003d _(\u0027swift object size is not multiple of\u0027"},{"line_number":420,"context_line":"                    \u0027blocksize for create hash\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_1317ec55","line":417,"in_reply_to":"1abeadc6_bf48f7b3","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098c57623faab4965ab0d74174443626daaf8ed0","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        \"\"\"Backup the given volume to Swift.\"\"\""},{"line_number":418,"context_line":"        if self.data_block_size_bytes % CONF.backup_swift_block_size:"},{"line_number":419,"context_line":"            err \u003d _(\u0027swift object size is not multiple of\u0027"},{"line_number":420,"context_line":"                    \u0027blocksize for create hash\u0027)"},{"line_number":421,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        # Read the shafile of the last full backup if the request is"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_ff9b4f15","line":420,"updated":"2014-08-22 02:21:36.000000000","message":"creating hash","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        \"\"\"Backup the given volume to Swift.\"\"\""},{"line_number":418,"context_line":"        if self.data_block_size_bytes % CONF.backup_swift_block_size:"},{"line_number":419,"context_line":"            err \u003d _(\u0027swift object size is not multiple of\u0027"},{"line_number":420,"context_line":"                    \u0027blocksize for create hash\u0027)"},{"line_number":421,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        # Read the shafile of the last full backup if the request is"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_331ce877","line":420,"in_reply_to":"1abeadc6_ff9b4f15","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098c57623faab4965ab0d74174443626daaf8ed0","unresolved":false,"context_lines":[{"line_number":433,"context_line":"                raise exception.InvalidBackup(reason\u003derr)"},{"line_number":434,"context_line":"            # TODO(Murali Balcha): If the volume size increased since"},{"line_number":435,"context_line":"            # last full backup, force a full backup again"},{"line_number":436,"context_line":"        #"},{"line_number":437,"context_line":"        object_meta, object_sha256, container \u003d self._prepare_backup(backup)"},{"line_number":438,"context_line":"        sha256_list \u003d object_sha256[\u0027sha256s\u0027]"},{"line_number":439,"context_line":"        shaindex \u003d 0"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_bf8d57d5","line":436,"updated":"2014-08-22 02:21:36.000000000","message":"Remove #","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":433,"context_line":"                raise exception.InvalidBackup(reason\u003derr)"},{"line_number":434,"context_line":"            # TODO(Murali Balcha): If the volume size increased since"},{"line_number":435,"context_line":"            # last full backup, force a full backup again"},{"line_number":436,"context_line":"        #"},{"line_number":437,"context_line":"        object_meta, object_sha256, container \u003d self._prepare_backup(backup)"},{"line_number":438,"context_line":"        sha256_list \u003d object_sha256[\u0027sha256s\u0027]"},{"line_number":439,"context_line":"        shaindex \u003d 0"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_5311645c","line":436,"in_reply_to":"1abeadc6_bf8d57d5","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":9533,"name":"Eiichi Aikawa","email":"aikawa@mxk.nes.nec.co.jp","username":"EiichiAikawa"},"change_message_id":"79886e841071dfffaf6b5f495b318d0451806914","unresolved":false,"context_lines":[{"line_number":81,"context_line":"               default\u003d52428800,"},{"line_number":82,"context_line":"               help\u003d\u0027The size in bytes of Swift backup objects\u0027),"},{"line_number":83,"context_line":"    cfg.IntOpt(\u0027backup_swift_block_size\u0027,"},{"line_number":84,"context_line":"               default\u003d32 * 1024,"},{"line_number":85,"context_line":"               help\u003d\u0027The size in bytes that changes are tracked between \u0027"},{"line_number":86,"context_line":"                    \u0027full and differential backups\u0027),"},{"line_number":87,"context_line":"    cfg.IntOpt(\u0027backup_swift_retry_attempts\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_8f5d5f4b","line":84,"updated":"2014-08-26 05:17:42.000000000","message":"is there any special reason you did not write this value as 32768?\nThe value of backup_swift_block_size on cinder.conf.sample is set as 32768.","commit_id":"ecf089b8e78aa637e480ae200e08b563c77fe102"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"55fd2090050c4f202dc0c3b375b775fda97ac5d8","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        sha256file[\u0027volume_id\u0027] \u003d volume_id"},{"line_number":239,"context_line":"        sha256file[\u0027backup_name\u0027] \u003d backup[\u0027display_name\u0027]"},{"line_number":240,"context_line":"        sha256file[\u0027backup_description\u0027] \u003d backup[\u0027display_description\u0027]"},{"line_number":241,"context_line":"        sha256file[\u0027created_at\u0027] \u003d str(backup[\u0027created_at\u0027])"},{"line_number":242,"context_line":"        sha256file[\u0027chunk_size\u0027] \u003d CONF.backup_swift_block_size"},{"line_number":243,"context_line":"        sha256file[\u0027sha256s\u0027] \u003d sha256_list"},{"line_number":244,"context_line":"        sha256file_json \u003d json.dumps(sha256file, sort_keys\u003dTrue, indent\u003d2)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_fa1d1d74","line":241,"updated":"2014-08-29 05:15:39.000000000","message":"Please use six.text_type instead of str.","commit_id":"0555f3f9c999863f1b75652427320eb5549d8c84"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"49a9151535f6001001b187b888c272df412e2201","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        sha256file[\u0027volume_id\u0027] \u003d volume_id"},{"line_number":239,"context_line":"        sha256file[\u0027backup_name\u0027] \u003d backup[\u0027display_name\u0027]"},{"line_number":240,"context_line":"        sha256file[\u0027backup_description\u0027] \u003d backup[\u0027display_description\u0027]"},{"line_number":241,"context_line":"        sha256file[\u0027created_at\u0027] \u003d str(backup[\u0027created_at\u0027])"},{"line_number":242,"context_line":"        sha256file[\u0027chunk_size\u0027] \u003d CONF.backup_swift_block_size"},{"line_number":243,"context_line":"        sha256file[\u0027sha256s\u0027] \u003d sha256_list"},{"line_number":244,"context_line":"        sha256file_json \u003d json.dumps(sha256file, sort_keys\u003dTrue, indent\u003d2)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_b51e3c5d","line":241,"in_reply_to":"1abeadc6_fa1d1d74","updated":"2014-08-29 18:40:18.000000000","message":"Done","commit_id":"0555f3f9c999863f1b75652427320eb5549d8c84"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a268e95d7dabe2972d3ee18a3a2a6eaf5baf5f4b","unresolved":false,"context_lines":[{"line_number":275,"context_line":"                                    content_length\u003dreader.len)"},{"line_number":276,"context_line":"        md5 \u003d hashlib.md5(sha256file_json).hexdigest()"},{"line_number":277,"context_line":"        if etag !\u003d md5:"},{"line_number":278,"context_line":"            err \u003d _(\u0027error writing metadata file to swift, MD5 of metadata\u0027"},{"line_number":279,"context_line":"                    \u0027 file in swift [%(etag)s] is not the same as MD5 of \u0027"},{"line_number":280,"context_line":"                    \u0027sha256file file sent to swift [%(md5)s]\u0027) % {\u0027etag\u0027: etag,"},{"line_number":281,"context_line":"                                                                  \u0027md5\u0027: md5}"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_f8e1699b","line":278,"updated":"2014-08-30 22:02:01.000000000","message":"Can you make the first letter capital in the message? Error","commit_id":"773c4cba8d7dce22061e92739475772c50135bbc"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"8b7c2dc662b4db855c88b26e0d2dc1406c689d9e","unresolved":false,"context_lines":[{"line_number":275,"context_line":"                                    content_length\u003dreader.len)"},{"line_number":276,"context_line":"        md5 \u003d hashlib.md5(sha256file_json).hexdigest()"},{"line_number":277,"context_line":"        if etag !\u003d md5:"},{"line_number":278,"context_line":"            err \u003d _(\u0027error writing metadata file to swift, MD5 of metadata\u0027"},{"line_number":279,"context_line":"                    \u0027 file in swift [%(etag)s] is not the same as MD5 of \u0027"},{"line_number":280,"context_line":"                    \u0027sha256file file sent to swift [%(md5)s]\u0027) % {\u0027etag\u0027: etag,"},{"line_number":281,"context_line":"                                                                  \u0027md5\u0027: md5}"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_e6cd3888","line":278,"in_reply_to":"fa98f980_f8e1699b","updated":"2014-09-01 02:07:12.000000000","message":"Done","commit_id":"773c4cba8d7dce22061e92739475772c50135bbc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a268e95d7dabe2972d3ee18a3a2a6eaf5baf5f4b","unresolved":false,"context_lines":[{"line_number":409,"context_line":"                                   container,"},{"line_number":410,"context_line":"                                   sha256_list)"},{"line_number":411,"context_line":"        except socket.error as err:"},{"line_number":412,"context_line":"            raise exception.SwiftConnectionFailed(reason\u003derr)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        try:"},{"line_number":415,"context_line":"            self._write_metadata(backup,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_d8766506","line":412,"updated":"2014-08-30 22:02:01.000000000","message":"msg \u003d _(\"Exception: %s\") % six.text_type(err)    \nNext line: LOG.error(msg) \nNext line: raise exception.SwiftConnectionFailed(reason\u003dmsg)","commit_id":"773c4cba8d7dce22061e92739475772c50135bbc"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"8b7c2dc662b4db855c88b26e0d2dc1406c689d9e","unresolved":false,"context_lines":[{"line_number":409,"context_line":"                                   container,"},{"line_number":410,"context_line":"                                   sha256_list)"},{"line_number":411,"context_line":"        except socket.error as err:"},{"line_number":412,"context_line":"            raise exception.SwiftConnectionFailed(reason\u003derr)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        try:"},{"line_number":415,"context_line":"            self._write_metadata(backup,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_06cb1c73","line":412,"in_reply_to":"fa98f980_d8766506","updated":"2014-09-01 02:07:12.000000000","message":"Done","commit_id":"773c4cba8d7dce22061e92739475772c50135bbc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a268e95d7dabe2972d3ee18a3a2a6eaf5baf5f4b","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                                 object_list,"},{"line_number":419,"context_line":"                                 volume_meta)"},{"line_number":420,"context_line":"        except socket.error as err:"},{"line_number":421,"context_line":"            raise exception.SwiftConnectionFailed(reason\u003derr)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        self.db.backup_update(self.context, backup[\u0027id\u0027],"},{"line_number":424,"context_line":"                              {\u0027object_count\u0027: object_id})"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_9853fd6b","line":421,"updated":"2014-08-30 22:02:01.000000000","message":"Same","commit_id":"773c4cba8d7dce22061e92739475772c50135bbc"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"8b7c2dc662b4db855c88b26e0d2dc1406c689d9e","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                                 object_list,"},{"line_number":419,"context_line":"                                 volume_meta)"},{"line_number":420,"context_line":"        except socket.error as err:"},{"line_number":421,"context_line":"            raise exception.SwiftConnectionFailed(reason\u003derr)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        self.db.backup_update(self.context, backup[\u0027id\u0027],"},{"line_number":424,"context_line":"                              {\u0027object_count\u0027: object_id})"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_26c82074","line":421,"in_reply_to":"fa98f980_9853fd6b","updated":"2014-09-01 02:07:12.000000000","message":"Done","commit_id":"773c4cba8d7dce22061e92739475772c50135bbc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a268e95d7dabe2972d3ee18a3a2a6eaf5baf5f4b","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        \"\"\""},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        if self.data_block_size_bytes % CONF.backup_swift_block_size:"},{"line_number":450,"context_line":"            err \u003d _(\u0027swift object size is not multiple of\u0027"},{"line_number":451,"context_line":"                    \u0027blocksize for creating hash\u0027)"},{"line_number":452,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":453,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_78d659c7","line":450,"updated":"2014-08-30 22:02:01.000000000","message":"Swift","commit_id":"773c4cba8d7dce22061e92739475772c50135bbc"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"8b7c2dc662b4db855c88b26e0d2dc1406c689d9e","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        \"\"\""},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        if self.data_block_size_bytes % CONF.backup_swift_block_size:"},{"line_number":450,"context_line":"            err \u003d _(\u0027swift object size is not multiple of\u0027"},{"line_number":451,"context_line":"                    \u0027blocksize for creating hash\u0027)"},{"line_number":452,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":453,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_46c5245a","line":450,"in_reply_to":"fa98f980_78d659c7","updated":"2014-09-01 02:07:12.000000000","message":"Done","commit_id":"773c4cba8d7dce22061e92739475772c50135bbc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a268e95d7dabe2972d3ee18a3a2a6eaf5baf5f4b","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            fullbackupshafile \u003d self._read_sha256file(fullbackup)"},{"line_number":460,"context_line":"            fullbackup_shalist \u003d fullbackupshafile[\u0027sha256s\u0027]"},{"line_number":461,"context_line":"            if fullbackupshafile[\u0027chunk_size\u0027] !\u003d CONF.backup_swift_block_size:"},{"line_number":462,"context_line":"                err \u003d _(\u0027swift chunk size is changed since last full backup. \u0027"},{"line_number":463,"context_line":"                        \u0027Do full backup\u0027)"},{"line_number":464,"context_line":"                raise exception.InvalidBackup(reason\u003derr)"},{"line_number":465,"context_line":"            # TODO(Murali Balcha): If the volume size increased since"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_98da1de8","line":462,"updated":"2014-08-30 22:02:01.000000000","message":"Swift","commit_id":"773c4cba8d7dce22061e92739475772c50135bbc"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"8b7c2dc662b4db855c88b26e0d2dc1406c689d9e","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            fullbackupshafile \u003d self._read_sha256file(fullbackup)"},{"line_number":460,"context_line":"            fullbackup_shalist \u003d fullbackupshafile[\u0027sha256s\u0027]"},{"line_number":461,"context_line":"            if fullbackupshafile[\u0027chunk_size\u0027] !\u003d CONF.backup_swift_block_size:"},{"line_number":462,"context_line":"                err \u003d _(\u0027swift chunk size is changed since last full backup. \u0027"},{"line_number":463,"context_line":"                        \u0027Do full backup\u0027)"},{"line_number":464,"context_line":"                raise exception.InvalidBackup(reason\u003derr)"},{"line_number":465,"context_line":"            # TODO(Murali Balcha): If the volume size increased since"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_66a148a9","line":462,"in_reply_to":"fa98f980_98da1de8","updated":"2014-09-01 02:07:12.000000000","message":"Done","commit_id":"773c4cba8d7dce22061e92739475772c50135bbc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"87c014529d8dea17ace82fa73a072f10f303acd0","unresolved":false,"context_lines":[{"line_number":493,"context_line":"                shalist.append(sha)"},{"line_number":494,"context_line":"                off +\u003d CONF.backup_swift_block_size"},{"line_number":495,"context_line":"            sha256_list.extend(shalist)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"            if fullbackup:"},{"line_number":498,"context_line":"                # find the extent that needs to be backed up"},{"line_number":499,"context_line":"                extent_off \u003d -1"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a890539_220da18f","line":496,"updated":"2014-12-04 16:25:43.000000000","message":"Can you please add a comment here? \n\n# if fullbackup is not None, that means a differential backup (delta between data on the current volume and the fullbackup done previously) will be performed.","commit_id":"5557a323da6ea331b2fcdf0284d13299a415689c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"d3354235bf8669067f942b14deee5714114c67ea","unresolved":false,"context_lines":[{"line_number":497,"context_line":"                err \u003d _(\u0027Swift chunk size is changed since the last full \u0027"},{"line_number":498,"context_line":"                        \u0027backup. Do a full backup.\u0027)"},{"line_number":499,"context_line":"                raise exception.InvalidBackup(reason\u003derr)"},{"line_number":500,"context_line":"            # TODO(Murali Balcha): If the volume size increased since"},{"line_number":501,"context_line":"            # last full backup, force a full backup again."},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        (object_meta, object_sha256, container,"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_444b3f59","line":500,"updated":"2015-02-02 10:42:53.000000000","message":"This seems like a pretty important TODO?","commit_id":"0a42307b552afc875e05be9c86fe96984ebc8bea"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7b60189f790b464efadfa02e420c570d0ecbbf45","unresolved":false,"context_lines":[{"line_number":497,"context_line":"                err \u003d _(\u0027Swift chunk size is changed since the last full \u0027"},{"line_number":498,"context_line":"                        \u0027backup. Do a full backup.\u0027)"},{"line_number":499,"context_line":"                raise exception.InvalidBackup(reason\u003derr)"},{"line_number":500,"context_line":"            # TODO(Murali Balcha): If the volume size increased since"},{"line_number":501,"context_line":"            # last full backup, force a full backup again."},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        (object_meta, object_sha256, container,"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_6a9498e8","line":500,"in_reply_to":"da86d52c_444b3f59","updated":"2015-02-08 19:53:16.000000000","message":"You are right. Actually it is better to throw an exception here with proper message asking users to run the full backup command rather than secretly doing a full backup for them when they run the incremental backup command .  This TODO should be removed.","commit_id":"0a42307b552afc875e05be9c86fe96984ebc8bea"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"b536ce5f1ade29478bde0253e8a2100526a0c758","unresolved":false,"context_lines":[{"line_number":480,"context_line":"        \"\"\""},{"line_number":481,"context_line":"        if self.data_block_size_bytes % CONF.backup_swift_block_size:"},{"line_number":482,"context_line":"            err \u003d _(\u0027Swift object size is not multiple of \u0027"},{"line_number":483,"context_line":"                    \u0027blocksize for creating hash.\u0027)"},{"line_number":484,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"        # Read the shafile of the parent backup if backup[\u0027parent_id\u0027]"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba7be1f8_8539d543","line":483,"updated":"2015-02-26 23:59:16.000000000","message":"It might be nice if this could be mentioned in the help string for the config option","commit_id":"e852e4ca08d116d823ad0999e737d44021fe2f37"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3d5ec655dd0780f2e38a5b8805d9ca906fbc5bc0","unresolved":false,"context_lines":[{"line_number":480,"context_line":"        \"\"\""},{"line_number":481,"context_line":"        if self.data_block_size_bytes % CONF.backup_swift_block_size:"},{"line_number":482,"context_line":"            err \u003d _(\u0027Swift object size is not multiple of \u0027"},{"line_number":483,"context_line":"                    \u0027blocksize for creating hash.\u0027)"},{"line_number":484,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"        # Read the shafile of the parent backup if backup[\u0027parent_id\u0027]"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba7be1f8_9d33bef5","line":483,"in_reply_to":"ba7be1f8_8539d543","updated":"2015-02-27 19:28:19.000000000","message":"Sure. Added in the help string.","commit_id":"e852e4ca08d116d823ad0999e737d44021fe2f37"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"b536ce5f1ade29478bde0253e8a2100526a0c758","unresolved":false,"context_lines":[{"line_number":494,"context_line":"            parent_backup_shalist \u003d parent_backup_shafile[\u0027sha256s\u0027]"},{"line_number":495,"context_line":"            if (parent_backup_shafile[\u0027chunk_size\u0027] !\u003d"},{"line_number":496,"context_line":"                    CONF.backup_swift_block_size):"},{"line_number":497,"context_line":"                err \u003d _(\u0027Swift chunk size is changed since the last \u0027"},{"line_number":498,"context_line":"                        \u0027backup. Do a full backup.\u0027)"},{"line_number":499,"context_line":"                raise exception.InvalidBackup(reason\u003derr)"},{"line_number":500,"context_line":"            # If the volume size increased since the last backup, fail"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba7be1f8_e54c51cb","line":497,"updated":"2015-02-26 23:59:16.000000000","message":"Would it be helpful to log the parent chunk size as part of this error message? It might be helpful if you want to just adjust the config and try doing the incremental backup again","commit_id":"e852e4ca08d116d823ad0999e737d44021fe2f37"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3d5ec655dd0780f2e38a5b8805d9ca906fbc5bc0","unresolved":false,"context_lines":[{"line_number":494,"context_line":"            parent_backup_shalist \u003d parent_backup_shafile[\u0027sha256s\u0027]"},{"line_number":495,"context_line":"            if (parent_backup_shafile[\u0027chunk_size\u0027] !\u003d"},{"line_number":496,"context_line":"                    CONF.backup_swift_block_size):"},{"line_number":497,"context_line":"                err \u003d _(\u0027Swift chunk size is changed since the last \u0027"},{"line_number":498,"context_line":"                        \u0027backup. Do a full backup.\u0027)"},{"line_number":499,"context_line":"                raise exception.InvalidBackup(reason\u003derr)"},{"line_number":500,"context_line":"            # If the volume size increased since the last backup, fail"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba7be1f8_5ddce674","line":497,"in_reply_to":"ba7be1f8_e54c51cb","updated":"2015-02-27 19:28:19.000000000","message":"Sure. Logged the size in the error message.\n\nI can\u0027t do an incremental backup here though.  A full backup is required if the chunk size is changed. The user should be aware of the problem and run a full backup.","commit_id":"e852e4ca08d116d823ad0999e737d44021fe2f37"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"e5824ed56f67e885ae9d11fe9819c435b74e3df2","unresolved":false,"context_lines":[{"line_number":495,"context_line":"            parent_backup_shalist \u003d parent_backup_shafile[\u0027sha256s\u0027]"},{"line_number":496,"context_line":"            if (parent_backup_shafile[\u0027chunk_size\u0027] !\u003d"},{"line_number":497,"context_line":"                    CONF.backup_swift_block_size):"},{"line_number":498,"context_line":"                err \u003d (_(\u0027Swift block size is changed since the last \u0027"},{"line_number":499,"context_line":"                         \u0027backup. New block size: %(new)s. Old block \u0027"},{"line_number":500,"context_line":"                         \u0027size: %(old)s. Do a full backup.\u0027)"},{"line_number":501,"context_line":"                       % {\u0027old\u0027: parent_backup_shafile[\u0027chunk_size\u0027],"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_c227c3b4","line":498,"updated":"2015-03-02 23:17:59.000000000","message":"is changed -\u003e has changed","commit_id":"94c58a7e808a68618356c4a2410561b563deb03e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"96ffe2ef54200b9df130da812395cafd7929fa35","unresolved":false,"context_lines":[{"line_number":495,"context_line":"            parent_backup_shalist \u003d parent_backup_shafile[\u0027sha256s\u0027]"},{"line_number":496,"context_line":"            if (parent_backup_shafile[\u0027chunk_size\u0027] !\u003d"},{"line_number":497,"context_line":"                    CONF.backup_swift_block_size):"},{"line_number":498,"context_line":"                err \u003d (_(\u0027Swift block size is changed since the last \u0027"},{"line_number":499,"context_line":"                         \u0027backup. New block size: %(new)s. Old block \u0027"},{"line_number":500,"context_line":"                         \u0027size: %(old)s. Do a full backup.\u0027)"},{"line_number":501,"context_line":"                       % {\u0027old\u0027: parent_backup_shafile[\u0027chunk_size\u0027],"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_6d42833f","line":498,"in_reply_to":"ba7be1f8_c227c3b4","updated":"2015-03-03 04:47:26.000000000","message":"Done","commit_id":"94c58a7e808a68618356c4a2410561b563deb03e"}],"cinder/backup/manager.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2f6b440c1e6c869323f95fa830ef51446b7f82d6","unresolved":false,"context_lines":[{"line_number":360,"context_line":""},{"line_number":361,"context_line":"            backup_service \u003d self.service.get_backup_driver(context)"},{"line_number":362,"context_line":"            self._get_driver(backend).restore_backup(context, backup,"},{"line_number":363,"context_line":"                                                     volume, backup_service)"},{"line_number":364,"context_line":"        except Exception:"},{"line_number":365,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":366,"context_line":"                self.db.volume_update(context, volume_id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_e30dc691","line":363,"updated":"2014-09-02 18:09:56.000000000","message":"I don\u0027t think you need to change this file any more after you removed the interface change.","commit_id":"2f90239deb50fbd6ec2b89fcb6bf1c32810a4ac0"}],"cinder/db/sqlalchemy/migrate_repo/versions/008_add_backup.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0a0b2af79cb3e47d3d9e2b12b09a202dd09d6365","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        Column(\u0027display_description\u0027, String(length\u003d255)),"},{"line_number":44,"context_line":"        Column(\u0027container\u0027, String(length\u003d255)),"},{"line_number":45,"context_line":"        Column(\u0027incremental\u0027, Boolean(create_constraint\u003dTrue, name\u003dNone)),"},{"line_number":46,"context_line":"        Column(\u0027fullcontainer\u0027, String(length\u003d255)),"},{"line_number":47,"context_line":"        Column(\u0027status\u0027, String(length\u003d255)),"},{"line_number":48,"context_line":"        Column(\u0027fail_reason\u0027, String(length\u003d255)),"},{"line_number":49,"context_line":"        Column(\u0027service_metadata\u0027, String(length\u003d255)),"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_38b05a3f","line":46,"updated":"2014-07-28 17:38:58.000000000","message":"Please move this to a different migration file.  Also you need to handle downgrade.","commit_id":"c22779f49805f396a9b0cbc6984a4d4910fb82a5"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"88908973e582fc271b7ef1e773324b1b4cc4c768","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        Column(\u0027display_description\u0027, String(length\u003d255)),"},{"line_number":44,"context_line":"        Column(\u0027container\u0027, String(length\u003d255)),"},{"line_number":45,"context_line":"        Column(\u0027incremental\u0027, Boolean(create_constraint\u003dTrue, name\u003dNone)),"},{"line_number":46,"context_line":"        Column(\u0027fullcontainer\u0027, String(length\u003d255)),"},{"line_number":47,"context_line":"        Column(\u0027status\u0027, String(length\u003d255)),"},{"line_number":48,"context_line":"        Column(\u0027fail_reason\u0027, String(length\u003d255)),"},{"line_number":49,"context_line":"        Column(\u0027service_metadata\u0027, String(length\u003d255)),"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_be5a6f80","line":46,"in_reply_to":"baada198_38b05a3f","updated":"2014-08-05 18:04:29.000000000","message":"Hi Xing,\nI will fix it in the next patch.","commit_id":"c22779f49805f396a9b0cbc6984a4d4910fb82a5"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"034aef342363dbcbc937527e3f7e194789a0d909","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        Column(\u0027display_name\u0027, String(length\u003d255)),"},{"line_number":43,"context_line":"        Column(\u0027display_description\u0027, String(length\u003d255)),"},{"line_number":44,"context_line":"        Column(\u0027container\u0027, String(length\u003d255)),"},{"line_number":45,"context_line":"        Column(\u0027incremental\u0027, Boolean(create_constraint\u003dTrue, name\u003dNone)),"},{"line_number":46,"context_line":"        Column(\u0027fullbackup_id\u0027, String(length\u003d255)),"},{"line_number":47,"context_line":"        Column(\u0027status\u0027, String(length\u003d255)),"},{"line_number":48,"context_line":"        Column(\u0027fail_reason\u0027, String(length\u003d255)),"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_ac3ea9b6","line":45,"updated":"2014-08-18 20:34:21.000000000","message":"1) You can\u0027t add this here, needs to be in a new revision.\n\n2) This boolean seems to be unnecessary anyway, you know it is not a full if the parent backup id is set.","commit_id":"1e0c8ec3f8cb1385252d491fc633410265651a6a"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"034aef342363dbcbc937527e3f7e194789a0d909","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        Column(\u0027display_description\u0027, String(length\u003d255)),"},{"line_number":44,"context_line":"        Column(\u0027container\u0027, String(length\u003d255)),"},{"line_number":45,"context_line":"        Column(\u0027incremental\u0027, Boolean(create_constraint\u003dTrue, name\u003dNone)),"},{"line_number":46,"context_line":"        Column(\u0027fullbackup_id\u0027, String(length\u003d255)),"},{"line_number":47,"context_line":"        Column(\u0027status\u0027, String(length\u003d255)),"},{"line_number":48,"context_line":"        Column(\u0027fail_reason\u0027, String(length\u003d255)),"},{"line_number":49,"context_line":"        Column(\u0027service_metadata\u0027, String(length\u003d255)),"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_ec48a15d","line":46,"updated":"2014-08-18 20:34:21.000000000","message":"Change fullbackup_id to parent_backup_id or similar.","commit_id":"1e0c8ec3f8cb1385252d491fc633410265651a6a"}],"cinder/db/sqlalchemy/migrate_repo/versions/024_add_parent_id_to_backups.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"59f39b9322c199b6eda94dc349bbb6df465e99b3","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    backups \u003d Table(\u0027backups\u0027, meta, autoload\u003dTrue)"},{"line_number":23,"context_line":"    snapshot \u003d Column(\u0027snapshot\u0027, Boolean(create_constraint\u003dTrue, name\u003dNone))"},{"line_number":24,"context_line":"    parent_id \u003d Column(\u0027parent_id\u0027, String(length\u003d255))"},{"line_number":25,"context_line":"    backups.create_column(snapshot)"},{"line_number":26,"context_line":"    backups.create_column(parent_id)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_52b5acec","line":25,"updated":"2014-08-18 21:25:55.000000000","message":"backups.update().values(snapshot\u003dFalse).execute()","commit_id":"1e0c8ec3f8cb1385252d491fc633410265651a6a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"59f39b9322c199b6eda94dc349bbb6df465e99b3","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    snapshot \u003d Column(\u0027snapshot\u0027, Boolean(create_constraint\u003dTrue, name\u003dNone))"},{"line_number":24,"context_line":"    parent_id \u003d Column(\u0027parent_id\u0027, String(length\u003d255))"},{"line_number":25,"context_line":"    backups.create_column(snapshot)"},{"line_number":26,"context_line":"    backups.create_column(parent_id)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_b2cb6071","line":26,"updated":"2014-08-18 21:25:55.000000000","message":"backups.update().values(parent_id\u003dNone).execute()","commit_id":"1e0c8ec3f8cb1385252d491fc633410265651a6a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"01526a19d6b8bda0882672d294d622203992facb","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    meta \u003d MetaData()"},{"line_number":31,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":32,"context_line":"    backups \u003d Table(\u0027backups\u0027, meta, autoload\u003dTrue)"},{"line_number":33,"context_line":"    backups.drop_column(\u0027snapshot\u0027)"},{"line_number":34,"context_line":"    backups.drop_column(\u0027parent_id\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_a84bec57","line":33,"updated":"2014-08-19 01:26:27.000000000","message":"snapshot \u003d Column(\u0027snapshot\u0027, Boolean(create_constraint\u003dTrue, name\u003dNone))\r\nbackups.drop_column(snapshot)","commit_id":"1e0c8ec3f8cb1385252d491fc633410265651a6a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"01526a19d6b8bda0882672d294d622203992facb","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":32,"context_line":"    backups \u003d Table(\u0027backups\u0027, meta, autoload\u003dTrue)"},{"line_number":33,"context_line":"    backups.drop_column(\u0027snapshot\u0027)"},{"line_number":34,"context_line":"    backups.drop_column(\u0027parent_id\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_e84de473","line":34,"updated":"2014-08-19 01:26:27.000000000","message":"parent_id \u003d Column(\u0027parent_id\u0027, String(length\u003d255))  \r\n\r\nbackups.drop_column(parent_id)","commit_id":"1e0c8ec3f8cb1385252d491fc633410265651a6a"}],"cinder/db/sqlalchemy/migrate_repo/versions/024_sqlite_downgrade.sql":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098c57623faab4965ab0d74174443626daaf8ed0","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    status,"},{"line_number":41,"context_line":"    fail_reason,"},{"line_number":42,"context_line":"    service_metadata,"},{"line_number":43,"context_line":"    service, "},{"line_number":44,"context_line":"    size,"},{"line_number":45,"context_line":"    object_count"},{"line_number":46,"context_line":"    FROM backups;"}],"source_content_type":"text/x-sql","patch_set":4,"id":"1abeadc6_ff1eef6e","line":43,"updated":"2014-08-22 02:21:36.000000000","message":"Remove trailing space","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    status,"},{"line_number":41,"context_line":"    fail_reason,"},{"line_number":42,"context_line":"    service_metadata,"},{"line_number":43,"context_line":"    service, "},{"line_number":44,"context_line":"    size,"},{"line_number":45,"context_line":"    object_count"},{"line_number":46,"context_line":"    FROM backups;"}],"source_content_type":"text/x-sql","patch_set":4,"id":"1abeadc6_b307181d","line":43,"in_reply_to":"1abeadc6_ff1eef6e","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"}],"cinder/db/sqlalchemy/migrate_repo/versions/037_add_parent_id_to_backups.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"9faafe26c650f072a1e3d5a5e5fbb0d9f2996f23","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    backups \u003d Table(\u0027backups\u0027, meta, autoload\u003dTrue)"},{"line_number":25,"context_line":"    parent_id \u003d Column(\u0027parent_id\u0027, String(length\u003d255))"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    backups.create_column(parent_id)"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"da86d52c_25bb1710","line":25,"updated":"2015-02-11 23:11:50.000000000","message":"Should be \u0027length\u003d26\u0027.","commit_id":"27554160d0b2c833aed636b0f21f028d0ff0808e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f689371667d1744a0b893352bbe4db934978f7eb","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    backups \u003d Table(\u0027backups\u0027, meta, autoload\u003dTrue)"},{"line_number":25,"context_line":"    parent_id \u003d Column(\u0027parent_id\u0027, String(length\u003d255))"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    backups.create_column(parent_id)"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"da86d52c_4543abae","line":25,"in_reply_to":"da86d52c_25bb1710","updated":"2015-02-11 23:21:58.000000000","message":"Done","commit_id":"27554160d0b2c833aed636b0f21f028d0ff0808e"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"b536ce5f1ade29478bde0253e8a2100526a0c758","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    backups \u003d Table(\u0027backups\u0027, meta, autoload\u003dTrue)"},{"line_number":37,"context_line":"    parent_id \u003d backups.columns.parent_id"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    backups.drop_column(parent_id)"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba7be1f8_c86da49b","line":39,"updated":"2015-02-26 23:59:16.000000000","message":"If a row in the table has a parent_id and we drop the column doesn\u0027t that mean it is an incremental backup and will no longer be a valid backup? Should we set those rows to an error state or something? Not sure if that is really something we care about though... do people actual downgrade installations?","commit_id":"e852e4ca08d116d823ad0999e737d44021fe2f37"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3d5ec655dd0780f2e38a5b8805d9ca906fbc5bc0","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    backups \u003d Table(\u0027backups\u0027, meta, autoload\u003dTrue)"},{"line_number":37,"context_line":"    parent_id \u003d backups.columns.parent_id"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    backups.drop_column(parent_id)"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba7be1f8_fdcbda1b","line":39,"in_reply_to":"ba7be1f8_c86da49b","updated":"2015-02-27 19:28:19.000000000","message":"Good question. I wonder if migration will fail if you still have columns with parent_id.  Those entries become useless if incremental backup support is gone.  So I think it is better to throw an exception rather than changing values in the db.  I\u0027ll have to check how this is done in other places.  I have never seen status being changed to error during downgrade though.","commit_id":"e852e4ca08d116d823ad0999e737d44021fe2f37"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"e5824ed56f67e885ae9d11fe9819c435b74e3df2","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    backups.create_column(parent_id)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    backups.update().values(parent_id\u003dNone).execute()"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_c2ea630e","line":29,"updated":"2015-03-02 23:17:59.000000000","message":"Need error checking here please.","commit_id":"94c58a7e808a68618356c4a2410561b563deb03e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"96ffe2ef54200b9df130da812395cafd7929fa35","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    backups.create_column(parent_id)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    backups.update().values(parent_id\u003dNone).execute()"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_ad48fb5c","line":29,"in_reply_to":"ba7be1f8_c2ea630e","updated":"2015-03-03 04:47:26.000000000","message":"Done","commit_id":"94c58a7e808a68618356c4a2410561b563deb03e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"e5824ed56f67e885ae9d11fe9819c435b74e3df2","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    backups \u003d Table(\u0027backups\u0027, meta, autoload\u003dTrue)"},{"line_number":37,"context_line":"    parent_id \u003d backups.columns.parent_id"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    backups.drop_column(parent_id)"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_02f1db00","line":39,"updated":"2015-03-02 23:17:59.000000000","message":"Same comment.","commit_id":"94c58a7e808a68618356c4a2410561b563deb03e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"96ffe2ef54200b9df130da812395cafd7929fa35","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    backups \u003d Table(\u0027backups\u0027, meta, autoload\u003dTrue)"},{"line_number":37,"context_line":"    parent_id \u003d backups.columns.parent_id"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    backups.drop_column(parent_id)"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_ed759398","line":39,"in_reply_to":"ba7be1f8_02f1db00","updated":"2015-03-03 04:47:26.000000000","message":"Done","commit_id":"94c58a7e808a68618356c4a2410561b563deb03e"}],"cinder/db/sqlalchemy/models.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ff6290efdf29e9a77ab7d466282e1993d7549239","unresolved":false,"context_lines":[{"line_number":420,"context_line":"    display_name \u003d Column(String(255))"},{"line_number":421,"context_line":"    display_description \u003d Column(String(255))"},{"line_number":422,"context_line":"    container \u003d Column(String(255))"},{"line_number":423,"context_line":"    snapshot \u003d Column(Boolean, default\u003dFalse)"},{"line_number":424,"context_line":"    parent_id \u003d Column(String(255))"},{"line_number":425,"context_line":"    status \u003d Column(String(255))"},{"line_number":426,"context_line":"    fail_reason \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_8b4766a2","line":423,"updated":"2014-08-29 14:59:31.000000000","message":"I don\u0027t see a reason to persist the snapshot boolean in the database.  Is this used/required for anything after the backup is started?\n\nShould be removed if not.","commit_id":"0555f3f9c999863f1b75652427320eb5549d8c84"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"49a9151535f6001001b187b888c272df412e2201","unresolved":false,"context_lines":[{"line_number":420,"context_line":"    display_name \u003d Column(String(255))"},{"line_number":421,"context_line":"    display_description \u003d Column(String(255))"},{"line_number":422,"context_line":"    container \u003d Column(String(255))"},{"line_number":423,"context_line":"    snapshot \u003d Column(Boolean, default\u003dFalse)"},{"line_number":424,"context_line":"    parent_id \u003d Column(String(255))"},{"line_number":425,"context_line":"    status \u003d Column(String(255))"},{"line_number":426,"context_line":"    fail_reason \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_92bf96cf","line":423,"in_reply_to":"1abeadc6_8b4766a2","updated":"2014-08-29 18:40:18.000000000","message":"There is no way for user to know if the backup was invoked from a snapshot or a volume that was offline. I thought this information is useful for user for record keeping, auditing or other purposes, so I added this field. \n\nPlease advice if you see any value from this field. Otherwise I will remove it.","commit_id":"0555f3f9c999863f1b75652427320eb5549d8c84"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"4143306104e268dbc6b635f0e78ac2a5a3c57028","unresolved":false,"context_lines":[{"line_number":420,"context_line":"    display_name \u003d Column(String(255))"},{"line_number":421,"context_line":"    display_description \u003d Column(String(255))"},{"line_number":422,"context_line":"    container \u003d Column(String(255))"},{"line_number":423,"context_line":"    snapshot \u003d Column(Boolean, default\u003dFalse)"},{"line_number":424,"context_line":"    parent_id \u003d Column(String(255))"},{"line_number":425,"context_line":"    status \u003d Column(String(255))"},{"line_number":426,"context_line":"    fail_reason \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_86946c38","line":423,"in_reply_to":"1abeadc6_92bf96cf","updated":"2014-09-01 02:09:31.000000000","message":"Eric,\nLVM driver creates a snapshot of the volume if the backup operation is invoked with --snapshot option. Hence we need to persist this option in the database.","commit_id":"0555f3f9c999863f1b75652427320eb5549d8c84"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0fb09ea14b5313c49683ea2db900b00fa6ba9a17","unresolved":false,"context_lines":[{"line_number":495,"context_line":"    display_name \u003d Column(String(255))"},{"line_number":496,"context_line":"    display_description \u003d Column(String(255))"},{"line_number":497,"context_line":"    container \u003d Column(String(255))"},{"line_number":498,"context_line":"    parent_id \u003d Column(String(255))"},{"line_number":499,"context_line":"    status \u003d Column(String(255))"},{"line_number":500,"context_line":"    fail_reason \u003d Column(String(255))"},{"line_number":501,"context_line":"    service_metadata \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":26,"id":"da86d52c_627a65f2","line":498,"updated":"2015-02-11 22:56:54.000000000","message":"String(36) should be enough for it","commit_id":"6f00abb43fbc487f303232278aeed35787bb6fb5"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c31948525256ed62199c3d6981e9e2aef6361d34","unresolved":false,"context_lines":[{"line_number":495,"context_line":"    display_name \u003d Column(String(255))"},{"line_number":496,"context_line":"    display_description \u003d Column(String(255))"},{"line_number":497,"context_line":"    container \u003d Column(String(255))"},{"line_number":498,"context_line":"    parent_id \u003d Column(String(255))"},{"line_number":499,"context_line":"    status \u003d Column(String(255))"},{"line_number":500,"context_line":"    fail_reason \u003d Column(String(255))"},{"line_number":501,"context_line":"    service_metadata \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":26,"id":"da86d52c_c26f91fa","line":498,"in_reply_to":"da86d52c_627a65f2","updated":"2015-02-11 22:59:35.000000000","message":"Good catch. Probably a copy and paste error from the line above. 36 should be enough for uuid.","commit_id":"6f00abb43fbc487f303232278aeed35787bb6fb5"}],"cinder/tests/backup/fake_swift_client2.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098c57623faab4965ab0d74174443626daaf8ed0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2012 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_e59e62b8","line":1,"updated":"2014-08-22 02:21:36.000000000","message":"You probably want to add your copyright here.","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2012 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_d304941a","line":1,"in_reply_to":"1abeadc6_e59e62b8","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"51ceb3e2191cefe5cc6461e074ddbea9482098b0","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import socket"},{"line_number":20,"context_line":"import tempfile"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cinder.openstack.common import fileutils"},{"line_number":23,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":24,"context_line":"from swiftclient import client as swift"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_c5bec6ad","line":21,"updated":"2014-08-22 02:34:37.000000000","message":"Add swiftclient import here.  Need a new line before and after.","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import socket"},{"line_number":20,"context_line":"import tempfile"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cinder.openstack.common import fileutils"},{"line_number":23,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":24,"context_line":"from swiftclient import client as swift"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_16fefa05","line":21,"in_reply_to":"1abeadc6_c5bec6ad","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"51ceb3e2191cefe5cc6461e074ddbea9482098b0","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cinder.openstack.common import fileutils"},{"line_number":23,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":24,"context_line":"from swiftclient import client as swift"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_a5c38a36","line":24,"updated":"2014-08-22 02:34:37.000000000","message":"swiftclient is 3rd party lib.   Needs to be moved before cinder imports.","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cinder.openstack.common import fileutils"},{"line_number":23,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":24,"context_line":"from swiftclient import client as swift"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_3603f60e","line":24,"in_reply_to":"1abeadc6_a5c38a36","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"e5824ed56f67e885ae9d11fe9819c435b74e3df2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2012 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# Copyright (C) 2014 TrilioData, Inc"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_02c8fba6","line":1,"updated":"2015-03-02 23:17:59.000000000","message":"Should HP\u0027s Copyright really be 2012?","commit_id":"94c58a7e808a68618356c4a2410561b563deb03e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"96ffe2ef54200b9df130da812395cafd7929fa35","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2012 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# Copyright (C) 2014 TrilioData, Inc"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba7be1f8_8d94178c","line":1,"in_reply_to":"ba7be1f8_02c8fba6","updated":"2015-03-03 04:47:26.000000000","message":"This was copied from line 1 in https://review.openstack.org/#/c/110068/33/cinder/tests/backup/fake_swift_client.py.  The original year was kept. Doesn\u0027t seem right to change it either as I don\u0027t work for HP.","commit_id":"94c58a7e808a68618356c4a2410561b563deb03e"}],"cinder/tests/test_backup_swift.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098c57623faab4965ab0d74174443626daaf8ed0","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        self.assertNotEqual(content1[\u0027sha256s\u0027][16], content2[\u0027sha256s\u0027][16])"},{"line_number":253,"context_line":"        self.assertNotEqual(content1[\u0027sha256s\u0027][32], content2[\u0027sha256s\u0027][32])"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        #blocks_change make sure we backup only two objects, each of size 1024"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def test_backup_delta_two_blocks_in_object_change(self):"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_e56102aa","line":255,"updated":"2014-08-22 02:21:36.000000000","message":"If this comment belongs to the following function, it should be moved to right above the function name.  Also it should be at the same indentation level as the function.","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        self.assertNotEqual(content1[\u0027sha256s\u0027][16], content2[\u0027sha256s\u0027][16])"},{"line_number":253,"context_line":"        self.assertNotEqual(content1[\u0027sha256s\u0027][32], content2[\u0027sha256s\u0027][32])"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        #blocks_change make sure we backup only two objects, each of size 1024"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def test_backup_delta_two_blocks_in_object_change(self):"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_56087228","line":255,"in_reply_to":"1abeadc6_e56102aa","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098c57623faab4965ab0d74174443626daaf8ed0","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        self.assertNotEqual(content1[\u0027sha256s\u0027][16], content2[\u0027sha256s\u0027][16])"},{"line_number":305,"context_line":"        self.assertNotEqual(content1[\u0027sha256s\u0027][20], content2[\u0027sha256s\u0027][20])"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        # blocks_change make sure we backup only two objects, each of size 1024"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def test_create_backup_put_object_wraps_socket_error(self):"},{"line_number":310,"context_line":"        container_name \u003d \u0027socket_error_on_put\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_05651eb4","line":307,"updated":"2014-08-22 02:21:36.000000000","message":"This comment is redundant and can be removed.","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        self.assertNotEqual(content1[\u0027sha256s\u0027][16], content2[\u0027sha256s\u0027][16])"},{"line_number":305,"context_line":"        self.assertNotEqual(content1[\u0027sha256s\u0027][20], content2[\u0027sha256s\u0027][20])"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        # blocks_change make sure we backup only two objects, each of size 1024"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def test_create_backup_put_object_wraps_socket_error(self):"},{"line_number":310,"context_line":"        container_name \u003d \u0027socket_error_on_put\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_760d6e37","line":307,"in_reply_to":"1abeadc6_05651eb4","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"}],"cinder/tests/test_volume.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098c57623faab4965ab0d74174443626daaf8ed0","unresolved":false,"context_lines":[{"line_number":2610,"context_line":""},{"line_number":2611,"context_line":"    def _test_migrate_volume_completion(self, status\u003d\u0027available\u0027,"},{"line_number":2612,"context_line":"                                        instance_uuid\u003dNone, attached_host\u003dNone,"},{"line_number":2613,"context_line":"                                        retyping\u003dFalse):"},{"line_number":2614,"context_line":"        elevated \u003d context.get_admin_context()"},{"line_number":2615,"context_line":"        initial_status \u003d retyping and \u0027retyping\u0027 or status"},{"line_number":2616,"context_line":"        old_volume \u003d tests_utils.create_volume(self.context, size\u003d0,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_a58f0a74","side":"PARENT","line":2613,"updated":"2014-08-22 02:21:36.000000000","message":"Did you remove all of these tests?  Looks like a rebase problem.","commit_id":"d368028757488159da8e82e609bac188bfa88788"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":2610,"context_line":""},{"line_number":2611,"context_line":"    def _test_migrate_volume_completion(self, status\u003d\u0027available\u0027,"},{"line_number":2612,"context_line":"                                        instance_uuid\u003dNone, attached_host\u003dNone,"},{"line_number":2613,"context_line":"                                        retyping\u003dFalse):"},{"line_number":2614,"context_line":"        elevated \u003d context.get_admin_context()"},{"line_number":2615,"context_line":"        initial_status \u003d retyping and \u0027retyping\u0027 or status"},{"line_number":2616,"context_line":"        old_volume \u003d tests_utils.create_volume(self.context, size\u003d0,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_96112a56","side":"PARENT","line":2613,"in_reply_to":"1abeadc6_a58f0a74","updated":"2014-08-29 18:44:20.000000000","message":"It is a rebase problem. Fixed now.","commit_id":"d368028757488159da8e82e609bac188bfa88788"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a268e95d7dabe2972d3ee18a3a2a6eaf5baf5f4b","unresolved":false,"context_lines":[{"line_number":3419,"context_line":"        backup \u003d {\u0027volume_id\u0027: vol[\u0027id\u0027], \u0027snapshot\u0027: True}"},{"line_number":3420,"context_line":"        properties \u003d {}"},{"line_number":3421,"context_line":"        attach_info \u003d {\u0027device\u0027: {\u0027path\u0027: \u0027/dev/null\u0027}}"},{"line_number":3422,"context_line":"        backup_service \u003d self.mox.CreateMock(backup_driver.BackupDriver)"},{"line_number":3423,"context_line":"        root_helper \u003d \u0027sudo cinder-rootwrap /etc/cinder/rootwrap.conf\u0027"},{"line_number":3424,"context_line":"        self.mox.StubOutWithMock(self.volume.driver.db, \u0027volume_get\u0027)"},{"line_number":3425,"context_line":"        self.mox.StubOutWithMock(cinder.brick.initiator.connector,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_7849f98a","line":3422,"updated":"2014-08-30 22:02:01.000000000","message":"For any new unit test, mock should be used instead of mox.","commit_id":"773c4cba8d7dce22061e92739475772c50135bbc"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"8b7c2dc662b4db855c88b26e0d2dc1406c689d9e","unresolved":false,"context_lines":[{"line_number":3419,"context_line":"        backup \u003d {\u0027volume_id\u0027: vol[\u0027id\u0027], \u0027snapshot\u0027: True}"},{"line_number":3420,"context_line":"        properties \u003d {}"},{"line_number":3421,"context_line":"        attach_info \u003d {\u0027device\u0027: {\u0027path\u0027: \u0027/dev/null\u0027}}"},{"line_number":3422,"context_line":"        backup_service \u003d self.mox.CreateMock(backup_driver.BackupDriver)"},{"line_number":3423,"context_line":"        root_helper \u003d \u0027sudo cinder-rootwrap /etc/cinder/rootwrap.conf\u0027"},{"line_number":3424,"context_line":"        self.mox.StubOutWithMock(self.volume.driver.db, \u0027volume_get\u0027)"},{"line_number":3425,"context_line":"        self.mox.StubOutWithMock(cinder.brick.initiator.connector,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_e6945846","line":3422,"in_reply_to":"fa98f980_7849f98a","updated":"2014-09-01 02:07:12.000000000","message":"Done","commit_id":"773c4cba8d7dce22061e92739475772c50135bbc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a268e95d7dabe2972d3ee18a3a2a6eaf5baf5f4b","unresolved":false,"context_lines":[{"line_number":3778,"context_line":"                                         vg_obj\u003dvg_obj, db\u003ddb)"},{"line_number":3779,"context_line":""},{"line_number":3780,"context_line":"        # Ensures that copy_volume is not called for ThinLVM"},{"line_number":3781,"context_line":"        self.mox.StubOutWithMock(lvm_driver, \u0027delete_snapshot\u0027)"},{"line_number":3782,"context_line":"        self.stubs.Set(volutils, \u0027get_all_volume_groups\u0027,"},{"line_number":3783,"context_line":"                       get_all_volume_groups)"},{"line_number":3784,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_985dbd4b","line":3781,"updated":"2014-08-30 22:02:01.000000000","message":"Please use mock instead of mox.","commit_id":"773c4cba8d7dce22061e92739475772c50135bbc"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"8b7c2dc662b4db855c88b26e0d2dc1406c689d9e","unresolved":false,"context_lines":[{"line_number":3778,"context_line":"                                         vg_obj\u003dvg_obj, db\u003ddb)"},{"line_number":3779,"context_line":""},{"line_number":3780,"context_line":"        # Ensures that copy_volume is not called for ThinLVM"},{"line_number":3781,"context_line":"        self.mox.StubOutWithMock(lvm_driver, \u0027delete_snapshot\u0027)"},{"line_number":3782,"context_line":"        self.stubs.Set(volutils, \u0027get_all_volume_groups\u0027,"},{"line_number":3783,"context_line":"                       get_all_volume_groups)"},{"line_number":3784,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_a6ab3088","line":3781,"in_reply_to":"fa98f980_985dbd4b","updated":"2014-09-01 02:07:12.000000000","message":"Done","commit_id":"773c4cba8d7dce22061e92739475772c50135bbc"}],"cinder/volume/driver.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098c57623faab4965ab0d74174443626daaf8ed0","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        if self.configuration:"},{"line_number":187,"context_line":"            self.configuration.append_config_values(volume_opts)"},{"line_number":188,"context_line":"            self.configuration.append_config_values(iser_opts)"},{"line_number":189,"context_line":"        self.set_execute(execute)"},{"line_number":190,"context_line":"        self._stats \u003d {}"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_6516d24d","side":"PARENT","line":188,"updated":"2014-08-22 02:21:36.000000000","message":"Why is this line removed?  It looks like you need a rebase.","commit_id":"d368028757488159da8e82e609bac188bfa88788"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        if self.configuration:"},{"line_number":187,"context_line":"            self.configuration.append_config_values(volume_opts)"},{"line_number":188,"context_line":"            self.configuration.append_config_values(iser_opts)"},{"line_number":189,"context_line":"        self.set_execute(execute)"},{"line_number":190,"context_line":"        self._stats \u003d {}"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_f6189e77","side":"PARENT","line":188,"in_reply_to":"1abeadc6_6516d24d","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"d368028757488159da8e82e609bac188bfa88788"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"098c57623faab4965ab0d74174443626daaf8ed0","unresolved":false,"context_lines":[{"line_number":762,"context_line":"            if (self.configuration.volume_driver in"},{"line_number":763,"context_line":"                    [\u0027cinder.volume.drivers.lvm.LVMISCSIDriver\u0027,"},{"line_number":764,"context_line":"                     \u0027cinder.volume.drivers.lvm.ThinLVMVolumeDriver\u0027] and"},{"line_number":765,"context_line":"                    self.configuration.iscsi_helper \u003d\u003d \u0027tgtadm\u0027):"},{"line_number":766,"context_line":"                properties[\u0027target_lun\u0027] \u003d 1"},{"line_number":767,"context_line":"            else:"},{"line_number":768,"context_line":"                properties[\u0027target_lun\u0027] \u003d 0"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_a54aaa52","line":765,"updated":"2014-08-22 02:21:36.000000000","message":"This is not your change.  You need a rebase.","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":762,"context_line":"            if (self.configuration.volume_driver in"},{"line_number":763,"context_line":"                    [\u0027cinder.volume.drivers.lvm.LVMISCSIDriver\u0027,"},{"line_number":764,"context_line":"                     \u0027cinder.volume.drivers.lvm.ThinLVMVolumeDriver\u0027] and"},{"line_number":765,"context_line":"                    self.configuration.iscsi_helper \u003d\u003d \u0027tgtadm\u0027):"},{"line_number":766,"context_line":"                properties[\u0027target_lun\u0027] \u003d 1"},{"line_number":767,"context_line":"            else:"},{"line_number":768,"context_line":"                properties[\u0027target_lun\u0027] \u003d 0"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_d61ba271","line":765,"in_reply_to":"1abeadc6_a54aaa52","updated":"2014-08-29 18:44:20.000000000","message":"Done","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"}],"cinder/volume/drivers/lvm.py":[{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"6a4ccc11ae37f0fc4bec013f1c2aa82c020aba1a","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                             \u0027name\u0027: \u0027backup-snap-%s\u0027 % volume[\u0027id\u0027],"},{"line_number":328,"context_line":"                             \u0027id\u0027: temp_id}"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"            self.create_snapshot(temp_snapshot)"},{"line_number":331,"context_line":"            volume_path \u003d self.local_path(temp_snapshot)"},{"line_number":332,"context_line":"        else:"},{"line_number":333,"context_line":"            volume_path \u003d self.local_path(volume)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_cdf6fff8","line":330,"updated":"2014-08-21 16:05:27.000000000","message":"Who deletes this snapshot if the service crashes or gets restarted during the backup operation?","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                             \u0027name\u0027: \u0027backup-snap-%s\u0027 % volume[\u0027id\u0027],"},{"line_number":328,"context_line":"                             \u0027id\u0027: temp_id}"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"            self.create_snapshot(temp_snapshot)"},{"line_number":331,"context_line":"            volume_path \u003d self.local_path(temp_snapshot)"},{"line_number":332,"context_line":"        else:"},{"line_number":333,"context_line":"            volume_path \u003d self.local_path(volume)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_8ed79d4a","line":330,"in_reply_to":"1abeadc6_cdf6fff8","updated":"2014-08-29 18:44:20.000000000","message":"I added code in check_for_setup_error() of lvm driver to delete any temporary snapshots that backup job is created. I would like to know you comments on this approach. If there is better solution I would like to consider that.","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fb666b5049221086ab2fc630d7c149564d1bb023","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                        data\u003dexception_message)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        cntx \u003d context.get_admin_context()"},{"line_number":119,"context_line":"        backups \u003d self.db.backup_get_all_by_host(cntx, self.hostname)"},{"line_number":120,"context_line":"        for backup in backups:"},{"line_number":121,"context_line":"            if backup[\u0027snapshot\u0027] and backup[\u0027status\u0027] \u003d\u003d \u0027creating\u0027:"},{"line_number":122,"context_line":"                volume \u003d self.db.volume_get(cntx, backup[\u0027volume_id\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_76b7fdd8","line":119,"updated":"2014-09-02 03:00:39.000000000","message":"Can you add the following comments here so we know why this is needed? \nIf the service crashes or gets restarted during the backup operation, there could be temporary snapshots that are not deleted.  Make sure any temporary snapshots create by the backup job are deleted when service is started.","commit_id":"ce62cbaa6588c1b23b78fbfb627ed36e947129f5"}],"etc/cinder/cinder.conf.sample":[{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"6a4ccc11ae37f0fc4bec013f1c2aa82c020aba1a","unresolved":false,"context_lines":[{"line_number":430,"context_line":"#backup_swift_object_size\u003d52428800"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"# The size in bytes of Swift backup objects (integer value)"},{"line_number":433,"context_line":"#backup_swift_block_size\u003d32768"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"# The number of retries to make for Swift operations (integer"},{"line_number":436,"context_line":"# value)"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"1abeadc6_4db4af34","line":433,"updated":"2014-08-21 16:05:27.000000000","message":"Why is this different to backup_swift_object_size? Why do we need two values? At the very least the help string needs work since I\u0027m confused enough to be asking the question","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"},{"author":{"_account_id":11923,"name":"Murali Balcha","email":"murali.balcha@triliodata.com","username":"muralibalcha"},"change_message_id":"2ab0921180383aabbad0800b28d1757f74d75e0b","unresolved":false,"context_lines":[{"line_number":430,"context_line":"#backup_swift_object_size\u003d52428800"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"# The size in bytes of Swift backup objects (integer value)"},{"line_number":433,"context_line":"#backup_swift_block_size\u003d32768"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"# The number of retries to make for Swift operations (integer"},{"line_number":436,"context_line":"# value)"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"1abeadc6_6e76c1a5","line":433,"in_reply_to":"1abeadc6_4db4af34","updated":"2014-08-29 18:44:20.000000000","message":"backup_swift_object_size tends to be large. The default is 5MB but based on the swift configuration, the size of the object can be even larger. For calculating changes between backups, we may need much smaller block size and most of the dedupe file systems uses file block at which they track changes. This could be 32kb or 64kb or 128kb. In this implementation, we have default size of 32kb on which we track changes.\n\nI think the confusion came because both backup_swift_object_size and backup_swift_block_size have same comments. I updated comment for backup_swift_block_size","commit_id":"39979b2a25fce05afe508176678a508ea888f44d"}]}
