)]}'
{"manila/share/manager.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"22d16aac7a133f1a68afdbd7934c1074abdd6b21","unresolved":false,"context_lines":[{"line_number":1991,"context_line":"                 \u0027replica_state\u0027: constants.REPLICA_STATE_ACTIVE,"},{"line_number":1992,"context_line":"                 \u0027cast_rules_to_readonly\u0027: False})"},{"line_number":1993,"context_line":""},{"line_number":1994,"context_line":"            self.db.share_replica_update("},{"line_number":1995,"context_line":"                context, old_active_replica[\u0027id\u0027],"},{"line_number":1996,"context_line":"                {\u0027replica_state\u0027: constants.REPLICA_STATE_OUT_OF_SYNC,"},{"line_number":1997,"context_line":"                 \u0027cast_rules_to_readonly\u0027:"},{"line_number":1998,"context_line":"                     ensure_old_active_replica_to_readonly})"},{"line_number":1999,"context_line":"        else:"},{"line_number":2000,"context_line":"            while updated_replica_list:"},{"line_number":2001,"context_line":"                # NOTE(vponomaryov): update \u0027active\u0027 replica last."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_e7024ab3","line":1998,"range":{"start_line":1994,"start_character":0,"end_line":1998,"end_character":60},"updated":"2017-03-07 13:52:32.000000000","message":"The old active replica needs to be updated before the new active replica... \nThe \"replication_change\" state must be changed to \"available\" last.","commit_id":"d1ffa7490ec5f4d5beafe57167b60da7af504066"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"145ed3f99a65d14fcbc28196bdd577e64e57fb4c","unresolved":false,"context_lines":[{"line_number":1991,"context_line":"                 \u0027replica_state\u0027: constants.REPLICA_STATE_ACTIVE,"},{"line_number":1992,"context_line":"                 \u0027cast_rules_to_readonly\u0027: False})"},{"line_number":1993,"context_line":""},{"line_number":1994,"context_line":"            self.db.share_replica_update("},{"line_number":1995,"context_line":"                context, old_active_replica[\u0027id\u0027],"},{"line_number":1996,"context_line":"                {\u0027replica_state\u0027: constants.REPLICA_STATE_OUT_OF_SYNC,"},{"line_number":1997,"context_line":"                 \u0027cast_rules_to_readonly\u0027:"},{"line_number":1998,"context_line":"                     ensure_old_active_replica_to_readonly})"},{"line_number":1999,"context_line":"        else:"},{"line_number":2000,"context_line":"            while updated_replica_list:"},{"line_number":2001,"context_line":"                # NOTE(vponomaryov): update \u0027active\u0027 replica last."}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_72588afb","line":1998,"range":{"start_line":1994,"start_character":0,"end_line":1998,"end_character":60},"in_reply_to":"ba2be162_e7024ab3","updated":"2017-03-07 15:13:10.000000000","message":"Done","commit_id":"d1ffa7490ec5f4d5beafe57167b60da7af504066"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"22d16aac7a133f1a68afdbd7934c1074abdd6b21","unresolved":false,"context_lines":[{"line_number":1997,"context_line":"                 \u0027cast_rules_to_readonly\u0027:"},{"line_number":1998,"context_line":"                     ensure_old_active_replica_to_readonly})"},{"line_number":1999,"context_line":"        else:"},{"line_number":2000,"context_line":"            while updated_replica_list:"},{"line_number":2001,"context_line":"                # NOTE(vponomaryov): update \u0027active\u0027 replica last."},{"line_number":2002,"context_line":"                for updated_replica in updated_replica_list:"},{"line_number":2003,"context_line":"                    if (updated_replica[\u0027id\u0027] \u003d\u003d share_replica[\u0027id\u0027] and"},{"line_number":2004,"context_line":"                            len(updated_replica_list) \u003e 1):"},{"line_number":2005,"context_line":"                        continue"},{"line_number":2006,"context_line":"                    updated_replica_list.remove(updated_replica)"},{"line_number":2007,"context_line":"                    break"},{"line_number":2008,"context_line":""},{"line_number":2009,"context_line":"                updated_export_locs \u003d updated_replica.get("},{"line_number":2010,"context_line":"                    \u0027export_locations\u0027)"},{"line_number":2011,"context_line":"                if(updated_export_locs is not None"},{"line_number":2012,"context_line":"                   and isinstance(updated_export_locs, list)):"},{"line_number":2013,"context_line":"                    self.db.share_export_locations_update("},{"line_number":2014,"context_line":"                        context, updated_replica[\u0027id\u0027],"},{"line_number":2015,"context_line":"                        updated_export_locs)"},{"line_number":2016,"context_line":""},{"line_number":2017,"context_line":"                updated_replica_state \u003d updated_replica.get("},{"line_number":2018,"context_line":"                    \u0027replica_state\u0027)"},{"line_number":2019,"context_line":"                updates \u003d {}"},{"line_number":2020,"context_line":"                # Change the promoted replica\u0027s status from \u0027available\u0027 to"},{"line_number":2021,"context_line":"                # \u0027replication_change\u0027 and unset cast_rules_to_readonly"},{"line_number":2022,"context_line":"                if updated_replica[\u0027id\u0027] \u003d\u003d share_replica[\u0027id\u0027]:"},{"line_number":2023,"context_line":"                    updates[\u0027cast_rules_to_readonly\u0027] \u003d False"},{"line_number":2024,"context_line":"                    updates[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"},{"line_number":2025,"context_line":"                elif updated_replica[\u0027id\u0027] \u003d\u003d old_active_replica[\u0027id\u0027]:"},{"line_number":2026,"context_line":"                    updates[\u0027cast_rules_to_readonly\u0027] \u003d ("},{"line_number":2027,"context_line":"                        ensure_old_active_replica_to_readonly)"},{"line_number":2028,"context_line":"                if updated_replica_state \u003d\u003d constants.STATUS_ERROR:"},{"line_number":2029,"context_line":"                    updates[\u0027status\u0027] \u003d constants.STATUS_ERROR"},{"line_number":2030,"context_line":"                if updated_replica_state is not None:"},{"line_number":2031,"context_line":"                    updates[\u0027replica_state\u0027] \u003d updated_replica_state"},{"line_number":2032,"context_line":"                if updates:"},{"line_number":2033,"context_line":"                    self.db.share_replica_update("},{"line_number":2034,"context_line":"                        context, updated_replica[\u0027id\u0027], updates)"},{"line_number":2035,"context_line":""},{"line_number":2036,"context_line":"                if updated_replica.get(\u0027access_rules_status\u0027):"},{"line_number":2037,"context_line":"                    self._update_share_replica_access_rules_state("},{"line_number":2038,"context_line":"                        context, share_replica[\u0027id\u0027],"},{"line_number":2039,"context_line":"                        updated_replica.get(\u0027access_rules_status\u0027))"},{"line_number":2040,"context_line":""},{"line_number":2041,"context_line":"        LOG.info(_LI(\"Share replica %s: promoted to active state \""},{"line_number":2042,"context_line":"                     \"successfully.\"), share_replica[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_47bcf6ba","line":2039,"range":{"start_line":2000,"start_character":12,"end_line":2039,"end_character":67},"updated":"2017-03-07 13:52:32.000000000","message":"Thanks for attempting to fix this. But this code here was already unreadable, and you didn\u0027t help make it better. Can I suggest putting this in another method:\n\n Grabbing all the updates into a separate method, ex: _process_replica_updates() that takes a list and:\n\n -\u003e Remove promoted replica from the updated_replica_list\n -\u003e Call _process_replica_update for the updated_replica_list\n -\u003e Call _process_replica_updates for the promoted replica\n\nMakes it easier to read and consume.","commit_id":"d1ffa7490ec5f4d5beafe57167b60da7af504066"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"145ed3f99a65d14fcbc28196bdd577e64e57fb4c","unresolved":false,"context_lines":[{"line_number":1997,"context_line":"                 \u0027cast_rules_to_readonly\u0027:"},{"line_number":1998,"context_line":"                     ensure_old_active_replica_to_readonly})"},{"line_number":1999,"context_line":"        else:"},{"line_number":2000,"context_line":"            while updated_replica_list:"},{"line_number":2001,"context_line":"                # NOTE(vponomaryov): update \u0027active\u0027 replica last."},{"line_number":2002,"context_line":"                for updated_replica in updated_replica_list:"},{"line_number":2003,"context_line":"                    if (updated_replica[\u0027id\u0027] \u003d\u003d share_replica[\u0027id\u0027] and"},{"line_number":2004,"context_line":"                            len(updated_replica_list) \u003e 1):"},{"line_number":2005,"context_line":"                        continue"},{"line_number":2006,"context_line":"                    updated_replica_list.remove(updated_replica)"},{"line_number":2007,"context_line":"                    break"},{"line_number":2008,"context_line":""},{"line_number":2009,"context_line":"                updated_export_locs \u003d updated_replica.get("},{"line_number":2010,"context_line":"                    \u0027export_locations\u0027)"},{"line_number":2011,"context_line":"                if(updated_export_locs is not None"},{"line_number":2012,"context_line":"                   and isinstance(updated_export_locs, list)):"},{"line_number":2013,"context_line":"                    self.db.share_export_locations_update("},{"line_number":2014,"context_line":"                        context, updated_replica[\u0027id\u0027],"},{"line_number":2015,"context_line":"                        updated_export_locs)"},{"line_number":2016,"context_line":""},{"line_number":2017,"context_line":"                updated_replica_state \u003d updated_replica.get("},{"line_number":2018,"context_line":"                    \u0027replica_state\u0027)"},{"line_number":2019,"context_line":"                updates \u003d {}"},{"line_number":2020,"context_line":"                # Change the promoted replica\u0027s status from \u0027available\u0027 to"},{"line_number":2021,"context_line":"                # \u0027replication_change\u0027 and unset cast_rules_to_readonly"},{"line_number":2022,"context_line":"                if updated_replica[\u0027id\u0027] \u003d\u003d share_replica[\u0027id\u0027]:"},{"line_number":2023,"context_line":"                    updates[\u0027cast_rules_to_readonly\u0027] \u003d False"},{"line_number":2024,"context_line":"                    updates[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"},{"line_number":2025,"context_line":"                elif updated_replica[\u0027id\u0027] \u003d\u003d old_active_replica[\u0027id\u0027]:"},{"line_number":2026,"context_line":"                    updates[\u0027cast_rules_to_readonly\u0027] \u003d ("},{"line_number":2027,"context_line":"                        ensure_old_active_replica_to_readonly)"},{"line_number":2028,"context_line":"                if updated_replica_state \u003d\u003d constants.STATUS_ERROR:"},{"line_number":2029,"context_line":"                    updates[\u0027status\u0027] \u003d constants.STATUS_ERROR"},{"line_number":2030,"context_line":"                if updated_replica_state is not None:"},{"line_number":2031,"context_line":"                    updates[\u0027replica_state\u0027] \u003d updated_replica_state"},{"line_number":2032,"context_line":"                if updates:"},{"line_number":2033,"context_line":"                    self.db.share_replica_update("},{"line_number":2034,"context_line":"                        context, updated_replica[\u0027id\u0027], updates)"},{"line_number":2035,"context_line":""},{"line_number":2036,"context_line":"                if updated_replica.get(\u0027access_rules_status\u0027):"},{"line_number":2037,"context_line":"                    self._update_share_replica_access_rules_state("},{"line_number":2038,"context_line":"                        context, share_replica[\u0027id\u0027],"},{"line_number":2039,"context_line":"                        updated_replica.get(\u0027access_rules_status\u0027))"},{"line_number":2040,"context_line":""},{"line_number":2041,"context_line":"        LOG.info(_LI(\"Share replica %s: promoted to active state \""},{"line_number":2042,"context_line":"                     \"successfully.\"), share_replica[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a30ddce_ddda2778","line":2039,"range":{"start_line":2000,"start_character":12,"end_line":2039,"end_character":67},"in_reply_to":"ba2be162_47bcf6ba","updated":"2017-03-07 15:13:10.000000000","message":"Sorry, I disagree to rework it in scope of this commit. This commit fixes bug with the least amount of code changes. I don\u0027t mind to see such rework made as separate change.\n\nIf it is not readable enough for you, then sorry, you wrote it ))","commit_id":"d1ffa7490ec5f4d5beafe57167b60da7af504066"}],"releasenotes/notes/bug-1664201-fix-share-replica-status-update-concurrency-in-replica-promotion-feature-63b15d96106c65da.yaml":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"08c346e950e94b9e3d63c6d06a446cd9057dfd94","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    having \u0027dr\u0027 or \u0027readable\u0027 type of replication,"},{"line_number":6,"context_line":"    performing \u0027share replica promotion\u0027 action."},{"line_number":7,"context_line":"    Now, replica that becomes active is always updated last, so, at some period"},{"line_number":8,"context_line":"    of time we will have zero \u0027active\u0027 replicas at once insteead of"},{"line_number":9,"context_line":"    two of them."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3a1ff146_d8dc1d49","line":8,"range":{"start_line":8,"start_character":56,"end_line":8,"end_character":65},"updated":"2017-03-14 15:17:59.000000000","message":"instead","commit_id":"35cb14e0333b6835fe72a5828caf46de1df4b4c9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"237fb8ffeea3a3d856fdacd1422154312fc8bb3c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Fixed share replica status update concurreny in share replica promotion"},{"line_number":4,"context_line":"    feature. Before it was possible to see two active replicas,"},{"line_number":5,"context_line":"    having \u0027dr\u0027 or \u0027readable\u0027 type of replication,"},{"line_number":6,"context_line":"    performing \u0027share replica promotion\u0027 action."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3a1ff146_b3cb021e","line":3,"range":{"start_line":3,"start_character":38,"end_line":3,"end_character":48},"updated":"2017-03-14 15:44:51.000000000","message":"concurrency","commit_id":"570ffef1d44ffd2dd3d8fa86d7af94ef47828e39"}]}
