)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"6e54c9cd07e17d414970e4bec073b3fc4e11e83d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"provide this extra information."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This change requires preventing a revert to snapshot"},{"line_number":15,"context_line":"operation while access rules on the affreted share are"},{"line_number":16,"context_line":"out of sync."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes bug: 1658133"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a430d35_718d107b","line":15,"range":{"start_line":15,"start_character":36,"end_line":15,"end_character":44},"updated":"2017-02-03 00:15:01.000000000","message":"affected? afflicted? affronted?  I\u0027m guessing it\u0027s a typo for the first one.","commit_id":"c37d24f3cb1e74b55188b68b164e9e82eb17b297"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bbbc9c3a7ac707477e2517ac934dfe10bd23c62c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"provide this extra information."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This change requires preventing a revert to snapshot"},{"line_number":15,"context_line":"operation while access rules on the affreted share are"},{"line_number":16,"context_line":"out of sync."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes bug: 1658133"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a430d35_afdb75ec","line":15,"range":{"start_line":15,"start_character":36,"end_line":15,"end_character":44},"in_reply_to":"1a430d35_718d107b","updated":"2017-02-03 17:11:17.000000000","message":"According to changes in [1], it should be \"affected\".\n\n[1] https://review.openstack.org/#/c/428398/4/manila/share/driver.py","commit_id":"c37d24f3cb1e74b55188b68b164e9e82eb17b297"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"1548786a2f32f90fbef170063c08b86edae1b620","unresolved":false,"context_lines":[{"line_number":12,"context_line":"provide this extra information."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This change requires preventing a revert to snapshot"},{"line_number":15,"context_line":"operation while access rules on the affreted share are"},{"line_number":16,"context_line":"out of sync."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes bug: 1658133"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a430d35_989efd54","line":15,"range":{"start_line":15,"start_character":36,"end_line":15,"end_character":44},"in_reply_to":"1a430d35_afdb75ec","updated":"2017-02-03 18:14:13.000000000","message":"Done","commit_id":"c37d24f3cb1e74b55188b68b164e9e82eb17b297"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"ad1052f353bfc4c87760946e2a758c65c6e08789","unresolved":false,"context_lines":[{"line_number":15,"context_line":"operation while access rules on the affected share are"},{"line_number":16,"context_line":"out of sync."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes bug: 1658133"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: Ia6678bb0e484f9c8f8b05d90e514801ae9baa94b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"1a430d35_d93f3485","line":18,"range":{"start_line":18,"start_character":12,"end_line":18,"end_character":19},"updated":"2017-02-07 15:41:28.000000000","message":"needs a # like #1658133","commit_id":"5d0ab0d94dc16a42f4772fe333913780c2b28c92"}],"manila/api/v2/shares.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"15d777b048d793f223e06772497c947824c19e02","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            # Ensure the access rules are not in the process of updating"},{"line_number":133,"context_line":"            for instance in share[\u0027instances\u0027]:"},{"line_number":134,"context_line":"                access_rules_status \u003d instance[\u0027access_rules_status\u0027]"},{"line_number":135,"context_line":"                if access_rules_status !\u003d constants.ACCESS_STATE_ACTIVE:"},{"line_number":136,"context_line":"                    msg_args \u003d {"},{"line_number":137,"context_line":"                        \u0027share_id\u0027: share_id,"},{"line_number":138,"context_line":"                        \u0027snap_id\u0027: snapshot_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_cdb509d1","line":135,"range":{"start_line":135,"start_character":52,"end_line":135,"end_character":71},"updated":"2017-02-02 20:26:53.000000000","message":"STATUS_ACTIVE\n\n\nWe\u0027ll come around and fix all of these in a trivial fix to separate it from existing STATUS_ACTIVE field overloads..","commit_id":"d825560c6bcd45fd1906c02d3ebe6758906e2ca3"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"6e54c9cd07e17d414970e4bec073b3fc4e11e83d","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            # Ensure the access rules are not in the process of updating"},{"line_number":133,"context_line":"            for instance in share[\u0027instances\u0027]:"},{"line_number":134,"context_line":"                access_rules_status \u003d instance[\u0027access_rules_status\u0027]"},{"line_number":135,"context_line":"                if access_rules_status !\u003d constants.ACCESS_STATE_ACTIVE:"},{"line_number":136,"context_line":"                    msg_args \u003d {"},{"line_number":137,"context_line":"                        \u0027share_id\u0027: share_id,"},{"line_number":138,"context_line":"                        \u0027snap_id\u0027: snapshot_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_74489e5c","line":135,"range":{"start_line":135,"start_character":39,"end_line":135,"end_character":72},"updated":"2017-02-03 00:15:01.000000000","message":"i didn\u0027t see a unit test for not active","commit_id":"c37d24f3cb1e74b55188b68b164e9e82eb17b297"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"74190d2d7a31ef89a1359dedcb755b80371dc16d","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            # Ensure the access rules are not in the process of updating"},{"line_number":133,"context_line":"            for instance in share[\u0027instances\u0027]:"},{"line_number":134,"context_line":"                access_rules_status \u003d instance[\u0027access_rules_status\u0027]"},{"line_number":135,"context_line":"                if access_rules_status !\u003d constants.ACCESS_STATE_ACTIVE:"},{"line_number":136,"context_line":"                    msg_args \u003d {"},{"line_number":137,"context_line":"                        \u0027share_id\u0027: share_id,"},{"line_number":138,"context_line":"                        \u0027snap_id\u0027: snapshot_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_9225feac","line":135,"range":{"start_line":135,"start_character":39,"end_line":135,"end_character":72},"in_reply_to":"1a430d35_74489e5c","updated":"2017-02-03 17:12:56.000000000","message":"Because it is absent. This code is not covered with unit tests, see coverage: http://logs.openstack.org/98/428398/4/check/manila-coverage-db-ubuntu-xenial/e6e8070/cover/manila_api_v2_shares_py.html#n135","commit_id":"c37d24f3cb1e74b55188b68b164e9e82eb17b297"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"1548786a2f32f90fbef170063c08b86edae1b620","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            # Ensure the access rules are not in the process of updating"},{"line_number":133,"context_line":"            for instance in share[\u0027instances\u0027]:"},{"line_number":134,"context_line":"                access_rules_status \u003d instance[\u0027access_rules_status\u0027]"},{"line_number":135,"context_line":"                if access_rules_status !\u003d constants.ACCESS_STATE_ACTIVE:"},{"line_number":136,"context_line":"                    msg_args \u003d {"},{"line_number":137,"context_line":"                        \u0027share_id\u0027: share_id,"},{"line_number":138,"context_line":"                        \u0027snap_id\u0027: snapshot_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_7899516e","line":135,"range":{"start_line":135,"start_character":39,"end_line":135,"end_character":72},"in_reply_to":"1a430d35_9225feac","updated":"2017-02-03 18:14:13.000000000","message":"Yeah I didn\u0027t add any new unit tests I only fixed ones that needed fixing. If you all are happy with the code I can add units tests in places where coverage dropped.","commit_id":"c37d24f3cb1e74b55188b68b164e9e82eb17b297"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"976fe52ba4a9012115155ac3fdf02aed1795fb52","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                        \u0027snap_id\u0027: snapshot_id,"},{"line_number":139,"context_line":"                    }"},{"line_number":140,"context_line":"                    msg \u003d _(\"Snapshot %(snap_id)s belongs to a share \""},{"line_number":141,"context_line":"                            \"%(share_id)s which has not finished updating \""},{"line_number":142,"context_line":"                            \"access rules.\")"},{"line_number":143,"context_line":"                    raise exc.HTTPConflict(explanation\u003dmsg % msg_args)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"            msg_args \u003d {\u0027share_id\u0027: share_id, \u0027snap_id\u0027: snapshot_id}"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_5ff2db9b","line":142,"range":{"start_line":141,"start_character":65,"end_line":142,"end_character":41},"updated":"2017-02-03 01:19:39.000000000","message":"updating its access rules.","commit_id":"c37d24f3cb1e74b55188b68b164e9e82eb17b297"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"1548786a2f32f90fbef170063c08b86edae1b620","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                        \u0027snap_id\u0027: snapshot_id,"},{"line_number":139,"context_line":"                    }"},{"line_number":140,"context_line":"                    msg \u003d _(\"Snapshot %(snap_id)s belongs to a share \""},{"line_number":141,"context_line":"                            \"%(share_id)s which has not finished updating \""},{"line_number":142,"context_line":"                            \"access rules.\")"},{"line_number":143,"context_line":"                    raise exc.HTTPConflict(explanation\u003dmsg % msg_args)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"            msg_args \u003d {\u0027share_id\u0027: share_id, \u0027snap_id\u0027: snapshot_id}"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_78823102","line":142,"range":{"start_line":141,"start_character":65,"end_line":142,"end_character":41},"in_reply_to":"1a430d35_5ff2db9b","updated":"2017-02-03 18:14:13.000000000","message":"Done","commit_id":"c37d24f3cb1e74b55188b68b164e9e82eb17b297"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c56fa94324ed344dc7c4db165d219e95e791bd8c","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                        \u0027share_id\u0027: share_id,"},{"line_number":138,"context_line":"                        \u0027snap_id\u0027: snapshot_id,"},{"line_number":139,"context_line":"                    }"},{"line_number":140,"context_line":"                    msg \u003d _(\"Snapshot %(snap_id)s belongs to a share \""},{"line_number":141,"context_line":"                            \"%(share_id)s which has not finished updating \""},{"line_number":142,"context_line":"                            \"its access rules.\")"},{"line_number":143,"context_line":"                    raise exc.HTTPConflict(explanation\u003dmsg % msg_args)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"            msg_args \u003d {\u0027share_id\u0027: share_id, \u0027snap_id\u0027: snapshot_id}"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_6e65a2b3","line":142,"range":{"start_line":140,"start_character":28,"end_line":142,"end_character":48},"updated":"2017-02-07 11:33:19.000000000","message":"This message may be incorrect when status of access rules is \"error\".","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"64a821d320021c85462e813075796b3f88f6c327","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                        \u0027snap_id\u0027: snapshot_id,"},{"line_number":139,"context_line":"                    }"},{"line_number":140,"context_line":"                    msg \u003d _(\"Snapshot %(snap_id)s belongs to a share \""},{"line_number":141,"context_line":"                            \"%(share_id)s which has not finished updating \""},{"line_number":142,"context_line":"                            \"its access rules.\")"},{"line_number":143,"context_line":"                    raise exc.HTTPConflict(explanation\u003dmsg % msg_args)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"            msg_args \u003d {\u0027share_id\u0027: share_id, \u0027snap_id\u0027: snapshot_id}"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_899d680c","line":142,"range":{"start_line":141,"start_character":41,"end_line":142,"end_character":45},"updated":"2017-02-07 12:07:37.000000000","message":"whose access rules have not yet been successfully applied ?","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"ae95e4c69ae70393ff6a91974d693d6bccb9360e","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                        \u0027snap_id\u0027: snapshot_id,"},{"line_number":139,"context_line":"                    }"},{"line_number":140,"context_line":"                    msg \u003d _(\"Snapshot %(snap_id)s belongs to a share \""},{"line_number":141,"context_line":"                            \"%(share_id)s which has not finished updating \""},{"line_number":142,"context_line":"                            \"its access rules.\")"},{"line_number":143,"context_line":"                    raise exc.HTTPConflict(explanation\u003dmsg % msg_args)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"            msg_args \u003d {\u0027share_id\u0027: share_id, \u0027snap_id\u0027: snapshot_id}"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_5948a4cc","line":142,"range":{"start_line":141,"start_character":41,"end_line":142,"end_character":45},"in_reply_to":"1a430d35_899d680c","updated":"2017-02-07 15:44:52.000000000","message":"Done","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"ad1052f353bfc4c87760946e2a758c65c6e08789","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                    }"},{"line_number":140,"context_line":"                    msg \u003d _(\"Snapshot %(snap_id)s belongs to a share \""},{"line_number":141,"context_line":"                            \"%(share_id)s which has access rules that are\""},{"line_number":142,"context_line":"                            \"not active.\")"},{"line_number":143,"context_line":"                    raise exc.HTTPConflict(explanation\u003dmsg % msg_args)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"            msg_args \u003d {\u0027share_id\u0027: share_id, \u0027snap_id\u0027: snapshot_id}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a430d35_7602cf0c","line":142,"range":{"start_line":142,"start_character":33,"end_line":142,"end_character":39},"updated":"2017-02-07 15:41:28.000000000","message":"nit: constants.ACCESS_STATE_ACTIVE","commit_id":"5d0ab0d94dc16a42f4772fe333913780c2b28c92"}],"manila/share/access.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c56fa94324ed344dc7c4db165d219e95e791bd8c","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        return instance_rules"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def get_share_instance_access_rules(self, context, filters\u003d{},"},{"line_number":155,"context_line":"                                        share_instance_id\u003dNone):"},{"line_number":156,"context_line":"        return self.get_and_update_share_instance_access_rules("},{"line_number":157,"context_line":"            context, filters, None, None, share_instance_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_eef8b2c5","line":154,"range":{"start_line":154,"start_character":63,"end_line":154,"end_character":65},"updated":"2017-02-07 11:33:19.000000000","message":"It is highly recommended to avoid usage of mutable objects as defaults.","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"ae95e4c69ae70393ff6a91974d693d6bccb9360e","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        return instance_rules"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def get_share_instance_access_rules(self, context, filters\u003d{},"},{"line_number":155,"context_line":"                                        share_instance_id\u003dNone):"},{"line_number":156,"context_line":"        return self.get_and_update_share_instance_access_rules("},{"line_number":157,"context_line":"            context, filters, None, None, share_instance_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_794560b1","line":154,"range":{"start_line":154,"start_character":63,"end_line":154,"end_character":65},"in_reply_to":"1a430d35_eef8b2c5","updated":"2017-02-07 15:44:52.000000000","message":"Done","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"}],"manila/share/driver.py":[{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"5818b18df62c5dc317474ad7e36a388da34f8d8e","unresolved":false,"context_lines":[{"line_number":980,"context_line":"        the failure."},{"line_number":981,"context_line":"        \"\"\""},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"    def revert_to_snapshot(self, context, snapshot, access_rules,"},{"line_number":984,"context_line":"                           share_server\u003dNone):"},{"line_number":985,"context_line":"        \"\"\"Reverts a share (in place) to the specified snapshot."},{"line_number":986,"context_line":""},{"line_number":987,"context_line":"        Does not delete the share snapshot.  The share and snapshot must both"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_27302f9e","line":984,"range":{"start_line":983,"start_character":3,"end_line":984,"end_character":46},"updated":"2017-02-07 03:37:26.000000000","message":"Use default value [] for access_rules here and below will facilitate the tests and driver who doesn\u0027t need update access_rule?","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c56fa94324ed344dc7c4db165d219e95e791bd8c","unresolved":false,"context_lines":[{"line_number":980,"context_line":"        the failure."},{"line_number":981,"context_line":"        \"\"\""},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"    def revert_to_snapshot(self, context, snapshot, access_rules,"},{"line_number":984,"context_line":"                           share_server\u003dNone):"},{"line_number":985,"context_line":"        \"\"\"Reverts a share (in place) to the specified snapshot."},{"line_number":986,"context_line":""},{"line_number":987,"context_line":"        Does not delete the share snapshot.  The share and snapshot must both"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_eee6f213","line":984,"range":{"start_line":983,"start_character":3,"end_line":984,"end_character":46},"in_reply_to":"1a430d35_27302f9e","updated":"2017-02-07 11:33:19.000000000","message":"Provide empty list explicitly, what is the problem?","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"ae95e4c69ae70393ff6a91974d693d6bccb9360e","unresolved":false,"context_lines":[{"line_number":980,"context_line":"        the failure."},{"line_number":981,"context_line":"        \"\"\""},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"    def revert_to_snapshot(self, context, snapshot, access_rules,"},{"line_number":984,"context_line":"                           share_server\u003dNone):"},{"line_number":985,"context_line":"        \"\"\"Reverts a share (in place) to the specified snapshot."},{"line_number":986,"context_line":""},{"line_number":987,"context_line":"        Does not delete the share snapshot.  The share and snapshot must both"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_591fc4b6","line":984,"range":{"start_line":983,"start_character":3,"end_line":984,"end_character":46},"in_reply_to":"1a430d35_ed7997c9","updated":"2017-02-07 15:44:52.000000000","message":"Caller always passes a value, so default isn\u0027t needed.","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"0985d1364da5c58e07f236ea2400b2403f03bd97","unresolved":false,"context_lines":[{"line_number":980,"context_line":"        the failure."},{"line_number":981,"context_line":"        \"\"\""},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"    def revert_to_snapshot(self, context, snapshot, access_rules,"},{"line_number":984,"context_line":"                           share_server\u003dNone):"},{"line_number":985,"context_line":"        \"\"\"Reverts a share (in place) to the specified snapshot."},{"line_number":986,"context_line":""},{"line_number":987,"context_line":"        Does not delete the share snapshot.  The share and snapshot must both"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_ed7997c9","line":984,"range":{"start_line":983,"start_character":3,"end_line":984,"end_character":46},"in_reply_to":"1a430d35_eee6f213","updated":"2017-02-07 12:33:46.000000000","message":"@Valeriy Ponomaryov, it\u0027s not a problem, with that default value we don\u0027t need the update the driver which don\u0027t use the access_rule at all [1] and so does the testcases.\n\n[1] https://review.openstack.org/#/c/428398/9/manila/share/drivers/hitachi/hnas/driver.py","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"}],"manila/share/drivers/hitachi/hnas/driver.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"976fe52ba4a9012115155ac3fdf02aed1795fb52","unresolved":false,"context_lines":[{"line_number":743,"context_line":""},{"line_number":744,"context_line":"        :param context: The `context.RequestContext` object for the request"},{"line_number":745,"context_line":"        :param snapshot: The snapshot to which the share is to be reverted to."},{"line_number":746,"context_line":"        :param access_rules: List of all access rules for the affected share"},{"line_number":747,"context_line":"        :param share_server: Data structure with share server information."},{"line_number":748,"context_line":"            Not used by this driver."},{"line_number":749,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_1fd133fc","line":746,"range":{"start_line":746,"start_character":75,"end_line":746,"end_character":76},"updated":"2017-02-03 01:19:39.000000000","message":"period","commit_id":"c37d24f3cb1e74b55188b68b164e9e82eb17b297"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"1548786a2f32f90fbef170063c08b86edae1b620","unresolved":false,"context_lines":[{"line_number":743,"context_line":""},{"line_number":744,"context_line":"        :param context: The `context.RequestContext` object for the request"},{"line_number":745,"context_line":"        :param snapshot: The snapshot to which the share is to be reverted to."},{"line_number":746,"context_line":"        :param access_rules: List of all access rules for the affected share"},{"line_number":747,"context_line":"        :param share_server: Data structure with share server information."},{"line_number":748,"context_line":"            Not used by this driver."},{"line_number":749,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_78ab118a","line":746,"range":{"start_line":746,"start_character":75,"end_line":746,"end_character":76},"in_reply_to":"1a430d35_1fd133fc","updated":"2017-02-03 18:14:13.000000000","message":"Done","commit_id":"c37d24f3cb1e74b55188b68b164e9e82eb17b297"}],"manila/share/drivers/lvm.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"521279c8ef268ee8ebda0bf519be86438d446ae5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1a430d35_24aeba2e","updated":"2017-02-04 01:40:25.000000000","message":"Needs unit tests..","commit_id":"3e04fc3f2d17c2f053fc910f5d30b3970891d4d3"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"55ae6de28d252a9cfd7a759e1f53d9dfa1de5a11","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1a430d35_360943de","in_reply_to":"1a430d35_24aeba2e","updated":"2017-02-07 01:44:13.000000000","message":"I plan to rewrite the nfs access helper in pike, and any unit tests added now would be a waste when that work gets done.\n\nThe existing test for revert isn\u0027t broken, although it provides pretty marginal value when you look at what it does.","commit_id":"3e04fc3f2d17c2f053fc910f5d30b3970891d4d3"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"250e109b84be65e1762ea8ab586375931d050b6b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1a430d35_b1cd3d5f","in_reply_to":"1a430d35_360943de","updated":"2017-02-07 02:35:03.000000000","message":"Done","commit_id":"3e04fc3f2d17c2f053fc910f5d30b3970891d4d3"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"64a821d320021c85462e813075796b3f88f6c327","unresolved":false,"context_lines":[{"line_number":365,"context_line":"    def revert_to_snapshot(self, context, snapshot, access_rules,"},{"line_number":366,"context_line":"                           share_server\u003dNone):"},{"line_number":367,"context_line":"        share \u003d snapshot[\u0027share\u0027]"},{"line_number":368,"context_line":"        # Temporarily remove all access rules"},{"line_number":369,"context_line":"        self._get_helper(share).update_access(self.share_server,"},{"line_number":370,"context_line":"                                              share[\u0027name\u0027], [], [], [])"},{"line_number":371,"context_line":"        # Unmount the filesystem"},{"line_number":372,"context_line":"        self._remove_export(context, snapshot)"},{"line_number":373,"context_line":"        # First we merge the snapshot LV and the share LV"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_53608fa5","line":370,"range":{"start_line":368,"start_character":0,"end_line":370,"end_character":72},"updated":"2017-02-07 12:07:37.000000000","message":"An optimization (not necessarily for this patch) would be to only update_access if the list of access rules is not empty.","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"ae95e4c69ae70393ff6a91974d693d6bccb9360e","unresolved":false,"context_lines":[{"line_number":365,"context_line":"    def revert_to_snapshot(self, context, snapshot, access_rules,"},{"line_number":366,"context_line":"                           share_server\u003dNone):"},{"line_number":367,"context_line":"        share \u003d snapshot[\u0027share\u0027]"},{"line_number":368,"context_line":"        # Temporarily remove all access rules"},{"line_number":369,"context_line":"        self._get_helper(share).update_access(self.share_server,"},{"line_number":370,"context_line":"                                              share[\u0027name\u0027], [], [], [])"},{"line_number":371,"context_line":"        # Unmount the filesystem"},{"line_number":372,"context_line":"        self._remove_export(context, snapshot)"},{"line_number":373,"context_line":"        # First we merge the snapshot LV and the share LV"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_1957fc58","line":370,"range":{"start_line":368,"start_character":0,"end_line":370,"end_character":72},"in_reply_to":"1a430d35_53608fa5","updated":"2017-02-07 15:44:52.000000000","message":"We still have a TBD for rewriting the whole access helper. I\u0027ll look into optimizing this at when I get to that.","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"64a821d320021c85462e813075796b3f88f6c327","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        self._mount_device(share, device_name)"},{"line_number":392,"context_line":"        device_name \u003d self._get_local_path(snapshot)"},{"line_number":393,"context_line":"        self._mount_device(snapshot, device_name)"},{"line_number":394,"context_line":"        # Lastly we add all the access rules back"},{"line_number":395,"context_line":"        self._get_helper(share).update_access(self.share_server,"},{"line_number":396,"context_line":"                                              share[\u0027name\u0027], access_rules,"},{"line_number":397,"context_line":"                                              [], [])"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":400,"context_line":"        self._create_snapshot(context, snapshot)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_136b6786","line":397,"range":{"start_line":394,"start_character":0,"end_line":397,"end_character":53},"updated":"2017-02-07 12:07:37.000000000","message":"ditto","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"}],"manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"521279c8ef268ee8ebda0bf519be86438d446ae5","unresolved":false,"context_lines":[{"line_number":1646,"context_line":""},{"line_number":1647,"context_line":"    def revert_to_replicated_snapshot(self, context, active_replica,"},{"line_number":1648,"context_line":"                                      replica_list, active_replica_snapshot,"},{"line_number":1649,"context_line":"                                      replica_snapshots, access_rules,"},{"line_number":1650,"context_line":"                                      share_server\u003dNone):"},{"line_number":1651,"context_line":"        \"\"\"Reverts a replicated share (in place) to the specified snapshot.\"\"\""},{"line_number":1652,"context_line":"        vserver, vserver_client \u003d self._get_vserver(share_server\u003dshare_server)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_c43b36ea","line":1649,"range":{"start_line":1649,"start_character":57,"end_line":1649,"end_character":70},"updated":"2017-02-04 01:40:25.000000000","message":"You\u0027re not passing this in the driver shims in \n\nhttps://review.openstack.org/#/c/428398/6/manila/share/drivers/netapp/dataontap/cluster_mode/drv_single_svm.py\n\nor\n\nhttps://review.openstack.org/#/c/428398/6/manila/share/drivers/netapp/dataontap/cluster_mode/drv_multi_svm.py\n\n-\nSo, not necessary. \n\nelse you\u0027ll have this very useful error message:\n\n2017-02-03 21:27:05.662 17009 ERROR oslo_messaging.rpc.server TypeError: revert_to_replicated_snapshot() takes at least 7 arguments (7 given)","commit_id":"3e04fc3f2d17c2f053fc910f5d30b3970891d4d3"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"32973a44281867fbe5d71e38d76df402c8e1a237","unresolved":false,"context_lines":[{"line_number":1646,"context_line":""},{"line_number":1647,"context_line":"    def revert_to_replicated_snapshot(self, context, active_replica,"},{"line_number":1648,"context_line":"                                      replica_list, active_replica_snapshot,"},{"line_number":1649,"context_line":"                                      replica_snapshots, access_rules,"},{"line_number":1650,"context_line":"                                      share_server\u003dNone):"},{"line_number":1651,"context_line":"        \"\"\"Reverts a replicated share (in place) to the specified snapshot.\"\"\""},{"line_number":1652,"context_line":"        vserver, vserver_client \u003d self._get_vserver(share_server\u003dshare_server)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_3678638f","line":1649,"range":{"start_line":1649,"start_character":57,"end_line":1649,"end_character":70},"in_reply_to":"1a430d35_c43b36ea","updated":"2017-02-07 01:39:02.000000000","message":"Done","commit_id":"3e04fc3f2d17c2f053fc910f5d30b3970891d4d3"}],"manila/share/manager.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"976fe52ba4a9012115155ac3fdf02aed1795fb52","unresolved":false,"context_lines":[{"line_number":2445,"context_line":"        snapshot \u003d self.db.share_snapshot_get(context, snapshot_id)"},{"line_number":2446,"context_line":"        share \u003d snapshot[\u0027share\u0027]"},{"line_number":2447,"context_line":"        share_id \u003d share[\u0027id\u0027]"},{"line_number":2448,"context_line":"        access_rules \u003d self.db.share_access_get_all_for_share(context,"},{"line_number":2449,"context_line":"                                                              share_id)"},{"line_number":2450,"context_line":""},{"line_number":2451,"context_line":"        if share.get(\u0027has_replicas\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_3f6a6f1b","line":2448,"range":{"start_line":2448,"start_character":31,"end_line":2448,"end_character":61},"updated":"2017-02-03 01:19:39.000000000","message":"you should use share_access_get_all_for_instance... it was like this a few patchsets before... why did it change?\n\nYou should not pass rules that are not active.\n\nit should be:\n\nshare_instance \u003d snapshot.instance[\u0027share_instance\u0027]\naccess_rules \u003d self.db.share_access_get_all_for_instance(\n            context, share_instance[\u0027id\u0027], filters\u003d{\u0027state\u0027: constants.STATUS_ACTIVE})","commit_id":"c37d24f3cb1e74b55188b68b164e9e82eb17b297"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"1548786a2f32f90fbef170063c08b86edae1b620","unresolved":false,"context_lines":[{"line_number":2445,"context_line":"        snapshot \u003d self.db.share_snapshot_get(context, snapshot_id)"},{"line_number":2446,"context_line":"        share \u003d snapshot[\u0027share\u0027]"},{"line_number":2447,"context_line":"        share_id \u003d share[\u0027id\u0027]"},{"line_number":2448,"context_line":"        access_rules \u003d self.db.share_access_get_all_for_share(context,"},{"line_number":2449,"context_line":"                                                              share_id)"},{"line_number":2450,"context_line":""},{"line_number":2451,"context_line":"        if share.get(\u0027has_replicas\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_f8f1c1ce","line":2448,"range":{"start_line":2448,"start_character":31,"end_line":2448,"end_character":61},"in_reply_to":"1a430d35_35f3590c","updated":"2017-02-03 18:14:13.000000000","message":"Done","commit_id":"c37d24f3cb1e74b55188b68b164e9e82eb17b297"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"32e439fedd33e5490c03000db15569204856a9b8","unresolved":false,"context_lines":[{"line_number":2445,"context_line":"        snapshot \u003d self.db.share_snapshot_get(context, snapshot_id)"},{"line_number":2446,"context_line":"        share \u003d snapshot[\u0027share\u0027]"},{"line_number":2447,"context_line":"        share_id \u003d share[\u0027id\u0027]"},{"line_number":2448,"context_line":"        access_rules \u003d self.db.share_access_get_all_for_share(context,"},{"line_number":2449,"context_line":"                                                              share_id)"},{"line_number":2450,"context_line":""},{"line_number":2451,"context_line":"        if share.get(\u0027has_replicas\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_35f3590c","line":2448,"range":{"start_line":2448,"start_character":31,"end_line":2448,"end_character":61},"in_reply_to":"1a430d35_3f6a6f1b","updated":"2017-02-03 15:37:14.000000000","message":"2 reasons:\nFirst, we don\u0027t have the share instance here, only the share itself. If we need to use the share instance I would lower this code down into the child methods it calls.\nSecond, we enforce at the API level that reverts won\u0027t happen while access rule are being modified, and access rules already can\u0027t be modified while a revert is happening, so it\u0027s safe to ignore the rule states.","commit_id":"c37d24f3cb1e74b55188b68b164e9e82eb17b297"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"521279c8ef268ee8ebda0bf519be86438d446ae5","unresolved":false,"context_lines":[{"line_number":2449,"context_line":"        share \u003d snapshot[\u0027share\u0027]"},{"line_number":2450,"context_line":"        share_id \u003d share[\u0027id\u0027]"},{"line_number":2451,"context_line":"        share_instance_id \u003d snapshot.instance[\u0027share_id\u0027]"},{"line_number":2452,"context_line":"        access_rules \u003d self.db.share_access_get_all_for_instance("},{"line_number":2453,"context_line":"            context, share_instance_id,"},{"line_number":2454,"context_line":"            filters\u003d{\u0027state\u0027: constants.STATUS_ACTIVE})"},{"line_number":2455,"context_line":""},{"line_number":2456,"context_line":"        if share.get(\u0027has_replicas\u0027):"},{"line_number":2457,"context_line":"            self._revert_to_replicated_snapshot("}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_e4ed928c","line":2454,"range":{"start_line":2452,"start_character":23,"end_line":2454,"end_character":55},"updated":"2017-02-04 01:40:25.000000000","message":"You should use the synchronized method here:\n\nhttps://github.com/openstack/manila/blob/c543670/manila/share/access.py#L93\n\nWe\u0027ve removed all calls to the DB api in the rest of the code..","commit_id":"3e04fc3f2d17c2f053fc910f5d30b3970891d4d3"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"32973a44281867fbe5d71e38d76df402c8e1a237","unresolved":false,"context_lines":[{"line_number":2449,"context_line":"        share \u003d snapshot[\u0027share\u0027]"},{"line_number":2450,"context_line":"        share_id \u003d share[\u0027id\u0027]"},{"line_number":2451,"context_line":"        share_instance_id \u003d snapshot.instance[\u0027share_id\u0027]"},{"line_number":2452,"context_line":"        access_rules \u003d self.db.share_access_get_all_for_instance("},{"line_number":2453,"context_line":"            context, share_instance_id,"},{"line_number":2454,"context_line":"            filters\u003d{\u0027state\u0027: constants.STATUS_ACTIVE})"},{"line_number":2455,"context_line":""},{"line_number":2456,"context_line":"        if share.get(\u0027has_replicas\u0027):"},{"line_number":2457,"context_line":"            self._revert_to_replicated_snapshot("}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_760d8b36","line":2454,"range":{"start_line":2452,"start_character":23,"end_line":2454,"end_character":55},"in_reply_to":"1a430d35_e4ed928c","updated":"2017-02-07 01:39:02.000000000","message":"Done","commit_id":"3e04fc3f2d17c2f053fc910f5d30b3970891d4d3"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"64a821d320021c85462e813075796b3f88f6c327","unresolved":false,"context_lines":[{"line_number":2464,"context_line":"    @add_hooks"},{"line_number":2465,"context_line":"    @utils.require_driver_initialized"},{"line_number":2466,"context_line":"    def revert_to_snapshot(self, context, snapshot_id, reservations,"},{"line_number":2467,"context_line":"                           share_id\u003dNone):"},{"line_number":2468,"context_line":""},{"line_number":2469,"context_line":"        context \u003d context.elevated()"},{"line_number":2470,"context_line":"        snapshot \u003d self.db.share_snapshot_get(context, snapshot_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_2ea63a53","line":2467,"range":{"start_line":2467,"start_character":27,"end_line":2467,"end_character":42},"updated":"2017-02-07 12:07:37.000000000","message":"This parameter is unused and confusing because a variable with the same name is set and used below.  If we\u0027re not going to clean this up now we should at least have a bug covering this tech debt as we roll out the new feature.","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"ae95e4c69ae70393ff6a91974d693d6bccb9360e","unresolved":false,"context_lines":[{"line_number":2464,"context_line":"    @add_hooks"},{"line_number":2465,"context_line":"    @utils.require_driver_initialized"},{"line_number":2466,"context_line":"    def revert_to_snapshot(self, context, snapshot_id, reservations,"},{"line_number":2467,"context_line":"                           share_id\u003dNone):"},{"line_number":2468,"context_line":""},{"line_number":2469,"context_line":"        context \u003d context.elevated()"},{"line_number":2470,"context_line":"        snapshot \u003d self.db.share_snapshot_get(context, snapshot_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_f9d4f0bd","line":2467,"range":{"start_line":2467,"start_character":27,"end_line":2467,"end_character":42},"in_reply_to":"1a430d35_2ea63a53","updated":"2017-02-07 15:44:52.000000000","message":"Done","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"64a821d320021c85462e813075796b3f88f6c327","unresolved":false,"context_lines":[{"line_number":2470,"context_line":"        snapshot \u003d self.db.share_snapshot_get(context, snapshot_id)"},{"line_number":2471,"context_line":"        share \u003d snapshot[\u0027share\u0027]"},{"line_number":2472,"context_line":"        share_id \u003d share[\u0027id\u0027]"},{"line_number":2473,"context_line":"        share_instance_id \u003d snapshot.instance[\u0027share_id\u0027]"},{"line_number":2474,"context_line":"        access_rules \u003d self.access_helper.get_share_instance_access_rules("},{"line_number":2475,"context_line":"            context, filters\u003d{\u0027state\u0027: constants.STATUS_ACTIVE},"},{"line_number":2476,"context_line":"            share_instance_id\u003dshare_instance_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_b32373a6","line":2473,"range":{"start_line":2473,"start_character":45,"end_line":2473,"end_character":57},"updated":"2017-02-07 12:07:37.000000000","message":"This field is an (unfortunate IMO) property that just returns self.share_instance_id.  Is there any reason why you can\u0027t just do the more straightforward thing here:\n\n  share_instance_id \u003d snapshot.instance.share_instance_id\n\n?","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"ae95e4c69ae70393ff6a91974d693d6bccb9360e","unresolved":false,"context_lines":[{"line_number":2470,"context_line":"        snapshot \u003d self.db.share_snapshot_get(context, snapshot_id)"},{"line_number":2471,"context_line":"        share \u003d snapshot[\u0027share\u0027]"},{"line_number":2472,"context_line":"        share_id \u003d share[\u0027id\u0027]"},{"line_number":2473,"context_line":"        share_instance_id \u003d snapshot.instance[\u0027share_id\u0027]"},{"line_number":2474,"context_line":"        access_rules \u003d self.access_helper.get_share_instance_access_rules("},{"line_number":2475,"context_line":"            context, filters\u003d{\u0027state\u0027: constants.STATUS_ACTIVE},"},{"line_number":2476,"context_line":"            share_instance_id\u003dshare_instance_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_19de1cdd","line":2473,"range":{"start_line":2473,"start_character":45,"end_line":2473,"end_character":57},"in_reply_to":"1a430d35_b32373a6","updated":"2017-02-07 15:44:52.000000000","message":"Done","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"}],"manila/tests/api/v2/test_shares.py":[{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"6e54c9cd07e17d414970e4bec073b3fc4e11e83d","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        share[\"instances\"] \u003d ["},{"line_number":151,"context_line":"            {"},{"line_number":152,"context_line":"                \"id\": \"fakeid\","},{"line_number":153,"context_line":"                \"access_rules_status\": constants.ACCESS_STATE_ACTIVE"},{"line_number":154,"context_line":"            },"},{"line_number":155,"context_line":"        ]"},{"line_number":156,"context_line":"        share \u003d fake_share.fake_share(**share)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_91bb5c75","line":153,"updated":"2017-02-03 00:15:01.000000000","message":"nit trailing comma for dict guidelines","commit_id":"c37d24f3cb1e74b55188b68b164e9e82eb17b297"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"1548786a2f32f90fbef170063c08b86edae1b620","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        share[\"instances\"] \u003d ["},{"line_number":151,"context_line":"            {"},{"line_number":152,"context_line":"                \"id\": \"fakeid\","},{"line_number":153,"context_line":"                \"access_rules_status\": constants.ACCESS_STATE_ACTIVE"},{"line_number":154,"context_line":"            },"},{"line_number":155,"context_line":"        ]"},{"line_number":156,"context_line":"        share \u003d fake_share.fake_share(**share)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_f8e7013e","line":153,"in_reply_to":"1a430d35_91bb5c75","updated":"2017-02-03 18:14:13.000000000","message":"Done","commit_id":"c37d24f3cb1e74b55188b68b164e9e82eb17b297"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"521279c8ef268ee8ebda0bf519be86438d446ae5","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            share[\u0027share_server_id\u0027] \u003d \u0027fake_share_server_id\u0027"},{"line_number":143,"context_line":"        return {\u0027share\u0027: share}"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def test__revert(self):"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        share \u003d copy.deepcopy(self.share)"},{"line_number":148,"context_line":"        share[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"},{"line_number":149,"context_line":"        share[\u0027revert_to_snapshot_support\u0027] \u003d True"},{"line_number":150,"context_line":"        share[\"instances\"] \u003d ["},{"line_number":151,"context_line":"            {"},{"line_number":152,"context_line":"                \"id\": \"fakeid\","},{"line_number":153,"context_line":"                \"access_rules_status\": constants.ACCESS_STATE_ACTIVE,"},{"line_number":154,"context_line":"            },"},{"line_number":155,"context_line":"        ]"},{"line_number":156,"context_line":"        share \u003d fake_share.fake_share(**share)"},{"line_number":157,"context_line":"        snapshot \u003d copy.deepcopy(self.snapshot)"},{"line_number":158,"context_line":"        snapshot[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_c49fb601","line":155,"range":{"start_line":145,"start_character":4,"end_line":155,"end_character":9},"updated":"2017-02-04 01:40:25.000000000","message":"Need a test for the 409 Conflict case.","commit_id":"3e04fc3f2d17c2f053fc910f5d30b3970891d4d3"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"250e109b84be65e1762ea8ab586375931d050b6b","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            share[\u0027share_server_id\u0027] \u003d \u0027fake_share_server_id\u0027"},{"line_number":143,"context_line":"        return {\u0027share\u0027: share}"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def test__revert(self):"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        share \u003d copy.deepcopy(self.share)"},{"line_number":148,"context_line":"        share[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"},{"line_number":149,"context_line":"        share[\u0027revert_to_snapshot_support\u0027] \u003d True"},{"line_number":150,"context_line":"        share[\"instances\"] \u003d ["},{"line_number":151,"context_line":"            {"},{"line_number":152,"context_line":"                \"id\": \"fakeid\","},{"line_number":153,"context_line":"                \"access_rules_status\": constants.ACCESS_STATE_ACTIVE,"},{"line_number":154,"context_line":"            },"},{"line_number":155,"context_line":"        ]"},{"line_number":156,"context_line":"        share \u003d fake_share.fake_share(**share)"},{"line_number":157,"context_line":"        snapshot \u003d copy.deepcopy(self.snapshot)"},{"line_number":158,"context_line":"        snapshot[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_f1d7c5ea","line":155,"range":{"start_line":145,"start_character":4,"end_line":155,"end_character":9},"in_reply_to":"1a430d35_162d2746","updated":"2017-02-07 02:35:03.000000000","message":"Done","commit_id":"3e04fc3f2d17c2f053fc910f5d30b3970891d4d3"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"55ae6de28d252a9cfd7a759e1f53d9dfa1de5a11","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            share[\u0027share_server_id\u0027] \u003d \u0027fake_share_server_id\u0027"},{"line_number":143,"context_line":"        return {\u0027share\u0027: share}"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def test__revert(self):"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        share \u003d copy.deepcopy(self.share)"},{"line_number":148,"context_line":"        share[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"},{"line_number":149,"context_line":"        share[\u0027revert_to_snapshot_support\u0027] \u003d True"},{"line_number":150,"context_line":"        share[\"instances\"] \u003d ["},{"line_number":151,"context_line":"            {"},{"line_number":152,"context_line":"                \"id\": \"fakeid\","},{"line_number":153,"context_line":"                \"access_rules_status\": constants.ACCESS_STATE_ACTIVE,"},{"line_number":154,"context_line":"            },"},{"line_number":155,"context_line":"        ]"},{"line_number":156,"context_line":"        share \u003d fake_share.fake_share(**share)"},{"line_number":157,"context_line":"        snapshot \u003d copy.deepcopy(self.snapshot)"},{"line_number":158,"context_line":"        snapshot[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_162d2746","line":155,"range":{"start_line":145,"start_character":4,"end_line":155,"end_character":9},"in_reply_to":"1a430d35_c49fb601","updated":"2017-02-07 01:44:13.000000000","message":"Agreed","commit_id":"3e04fc3f2d17c2f053fc910f5d30b3970891d4d3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f1b6f30c76b4649d6abaf9bb49c171da6744be69","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        share[\"instances\"] \u003d ["},{"line_number":312,"context_line":"            {"},{"line_number":313,"context_line":"                \"id\": \"fakeid\","},{"line_number":314,"context_line":"                \"access_rules_status\": constants.ACCESS_STATE_APPLYING,"},{"line_number":315,"context_line":"            },"},{"line_number":316,"context_line":"        ]"},{"line_number":317,"context_line":"        share \u003d fake_share.fake_share(**share)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_cc1eb062","line":314,"range":{"start_line":314,"start_character":39,"end_line":314,"end_character":70},"updated":"2017-02-07 02:52:48.000000000","message":"access_rules_status can be \u0027active\u0027, \u0027out_of_sync\u0027 or \u0027error\u0027\n\nindividual access rules can be \u0027applying\u0027, \u0027denying\u0027, \u0027queued_to_apply\u0027, \u0027queued_to_deny\u0027, \u0027active\u0027 or \u0027error\u0027...","commit_id":"ace5e19aab0ff2a4bedaeee130e52a9280feb6bc"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"a95729736307754bd5d1b97bb6d7d7871ef0e777","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        share[\"instances\"] \u003d ["},{"line_number":312,"context_line":"            {"},{"line_number":313,"context_line":"                \"id\": \"fakeid\","},{"line_number":314,"context_line":"                \"access_rules_status\": constants.ACCESS_STATE_APPLYING,"},{"line_number":315,"context_line":"            },"},{"line_number":316,"context_line":"        ]"},{"line_number":317,"context_line":"        share \u003d fake_share.fake_share(**share)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_0cd19857","line":314,"range":{"start_line":314,"start_character":39,"end_line":314,"end_character":70},"in_reply_to":"1a430d35_cc1eb062","updated":"2017-02-07 03:02:41.000000000","message":"Done","commit_id":"ace5e19aab0ff2a4bedaeee130e52a9280feb6bc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f60a70236418e36377de5d6cb7af4c94d7855b7d","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        share[\"instances\"] \u003d ["},{"line_number":312,"context_line":"            {"},{"line_number":313,"context_line":"                \"id\": \"fakeid\","},{"line_number":314,"context_line":"                \"access_rules_status\": constants.ACCESS_STATE_APPLYING,"},{"line_number":315,"context_line":"            },"},{"line_number":316,"context_line":"        ]"},{"line_number":317,"context_line":"        share \u003d fake_share.fake_share(**share)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_ecb52c31","line":314,"range":{"start_line":314,"start_character":39,"end_line":314,"end_character":70},"in_reply_to":"1a430d35_cc1eb062","updated":"2017-02-07 03:00:08.000000000","message":"sorry, we removed \"out_of_sync\" recently.. it\u0027s replaced with \"syncing\"","commit_id":"ace5e19aab0ff2a4bedaeee130e52a9280feb6bc"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"64a821d320021c85462e813075796b3f88f6c327","unresolved":false,"context_lines":[{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        share \u003d copy.deepcopy(self.share)"},{"line_number":309,"context_line":"        share[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"},{"line_number":310,"context_line":"        share[\u0027revert_to_snapshot_support\u0027] \u003d True"},{"line_number":311,"context_line":"        share[\"instances\"] \u003d ["},{"line_number":312,"context_line":"            {"},{"line_number":313,"context_line":"                \"id\": \"fakeid\","},{"line_number":314,"context_line":"                \"access_rules_status\": constants.SHARE_INSTANCE_RULES_SYNCING,"},{"line_number":315,"context_line":"            },"},{"line_number":316,"context_line":"        ]"},{"line_number":317,"context_line":"        share \u003d fake_share.fake_share(**share)"},{"line_number":318,"context_line":"        snapshot \u003d copy.deepcopy(self.snapshot)"},{"line_number":319,"context_line":"        snapshot[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_b8aef095","line":316,"range":{"start_line":310,"start_character":0,"end_line":316,"end_character":8},"updated":"2017-02-07 12:07:37.000000000","message":"Ideally, for a bit better code coverage, you\u0027d have multiple instances here with active ones at the front of the list.","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"}],"manila/tests/share/test_manager.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"521279c8ef268ee8ebda0bf519be86438d446ae5","unresolved":false,"context_lines":[{"line_number":5253,"context_line":"            self.share_manager.db, \u0027share_snapshot_get\u0027,"},{"line_number":5254,"context_line":"            mock.Mock(return_value\u003dsnapshot))"},{"line_number":5255,"context_line":"        mock_access_get \u003d self.mock_object("},{"line_number":5256,"context_line":"            self.share_manager.db, \u0027share_access_get_all_for_instance\u0027,"},{"line_number":5257,"context_line":"            mock.Mock(return_value\u003daccess_rules))"},{"line_number":5258,"context_line":"        mock_revert_to_snapshot \u003d self.mock_object("},{"line_number":5259,"context_line":"            self.share_manager, \u0027_revert_to_snapshot\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_6491a2f0","line":5256,"range":{"start_line":5256,"start_character":12,"end_line":5256,"end_character":70},"updated":"2017-02-04 01:40:25.000000000","message":"replace with the synchronized method from the access helper.","commit_id":"3e04fc3f2d17c2f053fc910f5d30b3970891d4d3"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"32973a44281867fbe5d71e38d76df402c8e1a237","unresolved":false,"context_lines":[{"line_number":5253,"context_line":"            self.share_manager.db, \u0027share_snapshot_get\u0027,"},{"line_number":5254,"context_line":"            mock.Mock(return_value\u003dsnapshot))"},{"line_number":5255,"context_line":"        mock_access_get \u003d self.mock_object("},{"line_number":5256,"context_line":"            self.share_manager.db, \u0027share_access_get_all_for_instance\u0027,"},{"line_number":5257,"context_line":"            mock.Mock(return_value\u003daccess_rules))"},{"line_number":5258,"context_line":"        mock_revert_to_snapshot \u003d self.mock_object("},{"line_number":5259,"context_line":"            self.share_manager, \u0027_revert_to_snapshot\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a430d35_9614b744","line":5256,"range":{"start_line":5256,"start_character":12,"end_line":5256,"end_character":70},"in_reply_to":"1a430d35_6491a2f0","updated":"2017-02-07 01:39:02.000000000","message":"Done","commit_id":"3e04fc3f2d17c2f053fc910f5d30b3970891d4d3"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"64a821d320021c85462e813075796b3f88f6c327","unresolved":false,"context_lines":[{"line_number":5272,"context_line":"        mock_share_snapshot_get \u003d self.mock_object("},{"line_number":5273,"context_line":"            self.share_manager.db, \u0027share_snapshot_get\u0027,"},{"line_number":5274,"context_line":"            mock.Mock(return_value\u003dsnapshot))"},{"line_number":5275,"context_line":"        mock_access_get \u003d self.mock_object("},{"line_number":5276,"context_line":"            self.share_manager.access_helper,"},{"line_number":5277,"context_line":"            \u0027get_share_instance_access_rules\u0027,"},{"line_number":5278,"context_line":"            mock.Mock(return_value\u003daccess_rules))"},{"line_number":5279,"context_line":"        mock_revert_to_snapshot \u003d self.mock_object("},{"line_number":5280,"context_line":"            self.share_manager, \u0027_revert_to_snapshot\u0027)"},{"line_number":5281,"context_line":"        mock_revert_to_replicated_snapshot \u003d self.mock_object("}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_73f02bff","line":5278,"range":{"start_line":5275,"start_character":0,"end_line":5278,"end_character":49},"updated":"2017-02-07 12:07:37.000000000","message":"Since you have no unit test for get_share_instance_access_rules it would be better to call through it here and instead mock out get_and_update_share_instance_access_rules.","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"ae95e4c69ae70393ff6a91974d693d6bccb9360e","unresolved":false,"context_lines":[{"line_number":5272,"context_line":"        mock_share_snapshot_get \u003d self.mock_object("},{"line_number":5273,"context_line":"            self.share_manager.db, \u0027share_snapshot_get\u0027,"},{"line_number":5274,"context_line":"            mock.Mock(return_value\u003dsnapshot))"},{"line_number":5275,"context_line":"        mock_access_get \u003d self.mock_object("},{"line_number":5276,"context_line":"            self.share_manager.access_helper,"},{"line_number":5277,"context_line":"            \u0027get_share_instance_access_rules\u0027,"},{"line_number":5278,"context_line":"            mock.Mock(return_value\u003daccess_rules))"},{"line_number":5279,"context_line":"        mock_revert_to_snapshot \u003d self.mock_object("},{"line_number":5280,"context_line":"            self.share_manager, \u0027_revert_to_snapshot\u0027)"},{"line_number":5281,"context_line":"        mock_revert_to_replicated_snapshot \u003d self.mock_object("}],"source_content_type":"text/x-python","patch_set":9,"id":"1a430d35_b96a68ec","line":5278,"range":{"start_line":5275,"start_character":0,"end_line":5278,"end_character":49},"in_reply_to":"1a430d35_73f02bff","updated":"2017-02-07 15:44:52.000000000","message":"Again, I plan to rewrite the access helper later and don\u0027t want to spend much time testing the existing implementation.","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"}],"releasenotes/notes/bug-1658133-fix-lvm-revert-34a90e70c9aa7354.yaml":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c56fa94324ed344dc7c4db165d219e95e791bd8c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Fixed failure when reverting a share to a snapshot using the LVM driver."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"1a430d35_4e39c6a3","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":76},"updated":"2017-02-07 11:33:19.000000000","message":"Need to mention that we have such problem when share has access rules.\n\nAlso, mention that revert to snapshot using LVM driver is connection-disruptable?","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"ae95e4c69ae70393ff6a91974d693d6bccb9360e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Fixed failure when reverting a share to a snapshot using the LVM driver."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"1a430d35_395e7844","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":76},"in_reply_to":"1a430d35_4e39c6a3","updated":"2017-02-07 15:44:52.000000000","message":"Updated. I don\u0027t want to call out the disruption stale/mount issue because it\u0027s not specific to LVM -- it affects most backends during a reverts. Clients must be prepared to remount if their mount becomes stale after a revert.","commit_id":"a4258e6ee35e61f838aa3b389166148dcfc2db41"}]}
