)]}'
{"src/README.md":[{"author":{"_account_id":8992,"name":"Billy Olsen","email":"billy.olsen@canonical.com","username":"billy-olsen"},"change_message_id":"eb8557904b9302fb4b4b8661b6b589f99fdbf8ba","unresolved":true,"context_lines":[{"line_number":65,"context_line":"* `remove-instance`"},{"line_number":66,"context_line":"* `restore-mysqldump`"},{"line_number":67,"context_line":"* `set-cluster-option`"},{"line_number":68,"context_line":"* `force_quorum_using_partition_of`"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"# Documentation"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-gfm","patch_set":14,"id":"29cd100e_e6c95c66","line":68,"range":{"start_line":68,"start_character":3,"end_line":68,"end_character":34},"updated":"2021-04-06 23:57:43.000000000","message":"this should be \u0027force-quorum-using-partition-of\u0027","commit_id":"b9f076a015f4ce7c9a824db4561bd53cc68daabf"},{"author":{"_account_id":30561,"name":"Peter Matulis","email":"peter.matulis@canonical.com","username":"pmatulis"},"change_message_id":"8b53cb4f7d46b6968985290240751739b235bc34","unresolved":true,"context_lines":[{"line_number":65,"context_line":"* `remove-instance`"},{"line_number":66,"context_line":"* `restore-mysqldump`"},{"line_number":67,"context_line":"* `set-cluster-option`"},{"line_number":68,"context_line":"* `force-quorum-using-partition-of`"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"# Documentation"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-gfm","patch_set":17,"id":"4eb75e26_26fdac58","line":68,"updated":"2021-04-20 16:40:03.000000000","message":"Please place this in alphabetical order.","commit_id":"70cd60d7afab69fcfdd7a046044b6a33c64c05f5"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"0cabf62eb4ef99a85cbd454119e8f3f582561136","unresolved":false,"context_lines":[{"line_number":65,"context_line":"* `remove-instance`"},{"line_number":66,"context_line":"* `restore-mysqldump`"},{"line_number":67,"context_line":"* `set-cluster-option`"},{"line_number":68,"context_line":"* `force-quorum-using-partition-of`"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"# Documentation"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-gfm","patch_set":17,"id":"4ad78d69_ff9079d3","line":68,"in_reply_to":"4eb75e26_26fdac58","updated":"2021-04-20 22:44:16.000000000","message":"Done","commit_id":"70cd60d7afab69fcfdd7a046044b6a33c64c05f5"}],"src/actions.yaml":[{"author":{"_account_id":20805,"name":"David Ames","email":"david@davam.net","username":"thedac"},"change_message_id":"2958ea65365979c9e8ce20ebb78e3d70f1cb17ff","unresolved":true,"context_lines":[{"line_number":31,"context_line":"     GTID superset."},{"line_number":32,"context_line":"force-quorum-using-partition-of:"},{"line_number":33,"context_line":"  description: |"},{"line_number":34,"context_line":"     This function restores the cluster back into operational status from a loss of quorum scenario."},{"line_number":35,"context_line":"cluster-rescan:"},{"line_number":36,"context_line":"  description: |"},{"line_number":37,"context_line":"     Clean up cluster metadata by rescanning the cluster."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"66e9d0dc_78ceb819","line":34,"updated":"2021-03-22 23:49:19.000000000","message":"Need the params:\n           address:\n             type: string\n             description: \u003cdescription\u003e","commit_id":"5b0c25c7783c8c832904521372761a0dece4861f"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"76a50f621accce7804f5a72f3a288c2edadce73c","unresolved":true,"context_lines":[{"line_number":31,"context_line":"     GTID superset."},{"line_number":32,"context_line":"force-quorum-using-partition-of:"},{"line_number":33,"context_line":"  description: |"},{"line_number":34,"context_line":"     This function restores the cluster back into operational status from a loss of quorum scenario."},{"line_number":35,"context_line":"cluster-rescan:"},{"line_number":36,"context_line":"  description: |"},{"line_number":37,"context_line":"     Clean up cluster metadata by rescanning the cluster."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"4b706fe3_dd8982fe","line":34,"in_reply_to":"66e9d0dc_78ceb819","updated":"2021-03-23 15:16:55.000000000","message":"ACK, will add appropriate information.","commit_id":"5b0c25c7783c8c832904521372761a0dece4861f"},{"author":{"_account_id":8992,"name":"Billy Olsen","email":"billy.olsen@canonical.com","username":"billy-olsen"},"change_message_id":"9a7a2d1e6c2cbc0c99a72a77088c348541bc87c6","unresolved":true,"context_lines":[{"line_number":41,"context_line":"     the cluster based on the metadata on instance, and then all the instances that"},{"line_number":42,"context_line":"     are ONLINE from the point of view of the given instance definition are added"},{"line_number":43,"context_line":"     to the restored cluster."},{"line_number":44,"context_line":"     *Note* This operation is dangerous. It can create split-brain if"},{"line_number":45,"context_line":"     incorrectly used and should be considered a last resort."},{"line_number":46,"context_line":"     Make sure that there are no partitions of this group still operating"},{"line_number":47,"context_line":"     somewhere in the network, but not accessible from this instance."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"dfc82871_450d836f","line":44,"updated":"2021-04-01 23:17:53.000000000","message":"Since this operation is dangerous, we should add an additional parameter \u0027i-really-mean-it\u0027 that the user should specify. I also think the description can describe a bit more about when it should be used. In the event of a network partition, the function can be used to force a cluster into a quorum state to resume database operations while the network partition is being resolved.","commit_id":"f1bb93cc0d18a68ecbd0e560e53f616b4006af16"}],"src/actions/actions.py":[{"author":{"_account_id":20805,"name":"David Ames","email":"david@davam.net","username":"thedac"},"change_message_id":"2958ea65365979c9e8ce20ebb78e3d70f1cb17ff","unresolved":true,"context_lines":[{"line_number":186,"context_line":"    affected by loss of quorum scenario. Such a scenario can occur if"},{"line_number":187,"context_line":"    a group is partitioned or more crashes than tolerable occur."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    NOTE: This operation is dangerous. It can create split-brain if"},{"line_number":190,"context_line":"    incorrectly used and should be considered a last resort."},{"line_number":191,"context_line":"    Make sure that there are no partitions of this group still operating"},{"line_number":192,"context_line":"    somewhere in the network, but not accessible from this instance."}],"source_content_type":"text/x-python","patch_set":6,"id":"02736121_6f0ef109","line":189,"updated":"2021-03-22 23:49:19.000000000","message":"We need this note in the actions.yaml to make it clear this is a last resort action.","commit_id":"5b0c25c7783c8c832904521372761a0dece4861f"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"76a50f621accce7804f5a72f3a288c2edadce73c","unresolved":true,"context_lines":[{"line_number":186,"context_line":"    affected by loss of quorum scenario. Such a scenario can occur if"},{"line_number":187,"context_line":"    a group is partitioned or more crashes than tolerable occur."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    NOTE: This operation is dangerous. It can create split-brain if"},{"line_number":190,"context_line":"    incorrectly used and should be considered a last resort."},{"line_number":191,"context_line":"    Make sure that there are no partitions of this group still operating"},{"line_number":192,"context_line":"    somewhere in the network, but not accessible from this instance."}],"source_content_type":"text/x-python","patch_set":6,"id":"c71b6e7b_844567ff","line":189,"in_reply_to":"02736121_6f0ef109","updated":"2021-03-23 15:16:55.000000000","message":"Ack, moved this clarification to `actions.yaml`.","commit_id":"5b0c25c7783c8c832904521372761a0dece4861f"},{"author":{"_account_id":20805,"name":"David Ames","email":"david@davam.net","username":"thedac"},"change_message_id":"2958ea65365979c9e8ce20ebb78e3d70f1cb17ff","unresolved":true,"context_lines":[{"line_number":201,"context_line":"                           to be joined with"},{"line_number":202,"context_line":"    :action return: Dictionary with command output"},{"line_number":203,"context_line":"    \"\"\""},{"line_number":204,"context_line":"    leader_address \u003d ch_core.hookenv.action_get(\"address\")"},{"line_number":205,"context_line":"    try:"},{"line_number":206,"context_line":"        output \u003d \"\""},{"line_number":207,"context_line":"        with charm.provide_charm_instance() as instance:"}],"source_content_type":"text/x-python","patch_set":6,"id":"cc55e283_c3e83a53","line":204,"updated":"2021-03-22 23:49:19.000000000","message":"Need to add address as a param in actions.yaml.\nAlso \"leader\" is a bit overloaded here and may lead to confusion. Maybe quorum_leader or quorum_source_address","commit_id":"5b0c25c7783c8c832904521372761a0dece4861f"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"76a50f621accce7804f5a72f3a288c2edadce73c","unresolved":true,"context_lines":[{"line_number":201,"context_line":"                           to be joined with"},{"line_number":202,"context_line":"    :action return: Dictionary with command output"},{"line_number":203,"context_line":"    \"\"\""},{"line_number":204,"context_line":"    leader_address \u003d ch_core.hookenv.action_get(\"address\")"},{"line_number":205,"context_line":"    try:"},{"line_number":206,"context_line":"        output \u003d \"\""},{"line_number":207,"context_line":"        with charm.provide_charm_instance() as instance:"}],"source_content_type":"text/x-python","patch_set":6,"id":"a2413b62_e434518f","line":204,"in_reply_to":"cc55e283_c3e83a53","updated":"2021-03-23 15:16:55.000000000","message":"Renamed to `quorum_leader`.","commit_id":"5b0c25c7783c8c832904521372761a0dece4861f"},{"author":{"_account_id":20805,"name":"David Ames","email":"david@davam.net","username":"thedac"},"change_message_id":"2958ea65365979c9e8ce20ebb78e3d70f1cb17ff","unresolved":true,"context_lines":[{"line_number":210,"context_line":"                    continue"},{"line_number":211,"context_line":"                output +\u003d instance.force_quorum_using_partition_of("},{"line_number":212,"context_line":"                    leader_address)"},{"line_number":213,"context_line":"                output +\u003d instance.rejoin_instance(address)"},{"line_number":214,"context_line":"            instance.assess_status()"},{"line_number":215,"context_line":"        ch_core.hookenv.action_set({"},{"line_number":216,"context_line":"            \"output\": output,"}],"source_content_type":"text/x-python","patch_set":6,"id":"468c90fd_8212726f","line":213,"updated":"2021-03-22 23:49:19.000000000","message":"You are rejoining the instance with address address. Is that intended. I thought we were rejoining *this* instance.","commit_id":"5b0c25c7783c8c832904521372761a0dece4861f"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"76a50f621accce7804f5a72f3a288c2edadce73c","unresolved":true,"context_lines":[{"line_number":210,"context_line":"                    continue"},{"line_number":211,"context_line":"                output +\u003d instance.force_quorum_using_partition_of("},{"line_number":212,"context_line":"                    leader_address)"},{"line_number":213,"context_line":"                output +\u003d instance.rejoin_instance(address)"},{"line_number":214,"context_line":"            instance.assess_status()"},{"line_number":215,"context_line":"        ch_core.hookenv.action_set({"},{"line_number":216,"context_line":"            \"output\": output,"}],"source_content_type":"text/x-python","patch_set":6,"id":"77e08c6b_c9412f41","line":213,"in_reply_to":"468c90fd_8212726f","updated":"2021-03-23 15:16:55.000000000","message":"Probably I\u0027m trying to do too much here.\nOverall workflow looks like:\n1. force quorum using existing leader.\n2. reattach all other instances to newly created quorum.\n\nNow, when you asked about that, I\u0027m not anymore sure if I should reattach all the instances in the same command. It should be up to operator to do this action step by step. Preferably by using `add_instance` or `rejoin_instance`.\nWhat do you think?","commit_id":"5b0c25c7783c8c832904521372761a0dece4861f"}],"src/lib/charm/openstack/mysql_innodb_cluster.py":[{"author":{"_account_id":20805,"name":"David Ames","email":"david@davam.net","username":"thedac"},"change_message_id":"2958ea65365979c9e8ce20ebb78e3d70f1cb17ff","unresolved":true,"context_lines":[{"line_number":818,"context_line":"            \"dba.force_quorum_using_partition_of(\u0027{user}:{pw}@{addr}\u0027)\""},{"line_number":819,"context_line":"            .format("},{"line_number":820,"context_line":"                user\u003dself.cluster_user, pw\u003dself.cluster_password,"},{"line_number":821,"context_line":"                caddr\u003d_primary or self.cluster_address,"},{"line_number":822,"context_line":"                addr\u003daddress))"},{"line_number":823,"context_line":"        try:"},{"line_number":824,"context_line":"            output \u003d self.run_mysqlsh_script(_script).decode(\"UTF-8\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"560748a0_89d8b362","line":821,"updated":"2021-03-22 23:49:19.000000000","message":"Do you actually want to connect to the RW node? Aren\u0027t we forcing *this* unit?","commit_id":"5b0c25c7783c8c832904521372761a0dece4861f"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"76a50f621accce7804f5a72f3a288c2edadce73c","unresolved":true,"context_lines":[{"line_number":818,"context_line":"            \"dba.force_quorum_using_partition_of(\u0027{user}:{pw}@{addr}\u0027)\""},{"line_number":819,"context_line":"            .format("},{"line_number":820,"context_line":"                user\u003dself.cluster_user, pw\u003dself.cluster_password,"},{"line_number":821,"context_line":"                caddr\u003d_primary or self.cluster_address,"},{"line_number":822,"context_line":"                addr\u003daddress))"},{"line_number":823,"context_line":"        try:"},{"line_number":824,"context_line":"            output \u003d self.run_mysqlsh_script(_script).decode(\"UTF-8\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"940b8a1e_29023acd","line":821,"in_reply_to":"560748a0_89d8b362","updated":"2021-03-23 15:16:55.000000000","message":"I believe I misunderstood some code here.\nI should connect to cluster, get the cluster and later force using partition of the cluster based on provided address. The address here should be quorum leader, which I think is the same as the cluster itself.\n\nAm I missing something here? Or maybe I\u0027m misunderstanding something?","commit_id":"5b0c25c7783c8c832904521372761a0dece4861f"},{"author":{"_account_id":20805,"name":"David Ames","email":"david@davam.net","username":"thedac"},"change_message_id":"93d67c7dd828a7c9b265d76cb493f2fa608722a6","unresolved":true,"context_lines":[{"line_number":810,"context_line":"        :returns: This function is called for its side effect"},{"line_number":811,"context_line":"        :rtype: None"},{"line_number":812,"context_line":"        \"\"\""},{"line_number":813,"context_line":"        _primary \u003d self.get_cluster_primary_address(nocache\u003dTrue)"},{"line_number":814,"context_line":"        ch_core.hookenv.log(\"Force quorum for: {}.\".format(address))"},{"line_number":815,"context_line":"        _script \u003d ("},{"line_number":816,"context_line":"            \"shell.connect(\u0027{user}:{pw}@{caddr}\u0027)\\n\""}],"source_content_type":"text/x-python","patch_set":8,"id":"acbdb21d_b4f11513","line":813,"updated":"2021-03-31 22:24:11.000000000","message":"I don\u0027t think you need this.","commit_id":"7e6f7c1d67492157edb44533292b5ff457d8bba5"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"040b9ad9c1da857412c02000aed5e855a6fdb1ad","unresolved":false,"context_lines":[{"line_number":810,"context_line":"        :returns: This function is called for its side effect"},{"line_number":811,"context_line":"        :rtype: None"},{"line_number":812,"context_line":"        \"\"\""},{"line_number":813,"context_line":"        _primary \u003d self.get_cluster_primary_address(nocache\u003dTrue)"},{"line_number":814,"context_line":"        ch_core.hookenv.log(\"Force quorum for: {}.\".format(address))"},{"line_number":815,"context_line":"        _script \u003d ("},{"line_number":816,"context_line":"            \"shell.connect(\u0027{user}:{pw}@{caddr}\u0027)\\n\""}],"source_content_type":"text/x-python","patch_set":8,"id":"82f182c4_d48d2b1c","line":813,"in_reply_to":"acbdb21d_b4f11513","updated":"2021-04-01 02:19:06.000000000","message":"Done","commit_id":"7e6f7c1d67492157edb44533292b5ff457d8bba5"},{"author":{"_account_id":20805,"name":"David Ames","email":"david@davam.net","username":"thedac"},"change_message_id":"93d67c7dd828a7c9b265d76cb493f2fa608722a6","unresolved":true,"context_lines":[{"line_number":818,"context_line":"            \"dba.force_quorum_using_partition_of(\u0027{user}:{pw}@{addr}\u0027)\""},{"line_number":819,"context_line":"            .format("},{"line_number":820,"context_line":"                user\u003dself.cluster_user, pw\u003dself.cluster_password,"},{"line_number":821,"context_line":"                caddr\u003d_primary or self.cluster_address,"},{"line_number":822,"context_line":"                name\u003dself.cluster_name, addr\u003daddress))"},{"line_number":823,"context_line":"        try:"},{"line_number":824,"context_line":"            output \u003d self.run_mysqlsh_script(_script).decode(\"UTF-8\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"b50e44d0_5c63f9ac","line":821,"updated":"2021-03-31 22:24:11.000000000","message":"This should be: caddr \u003d self.cluster_address,","commit_id":"7e6f7c1d67492157edb44533292b5ff457d8bba5"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"040b9ad9c1da857412c02000aed5e855a6fdb1ad","unresolved":false,"context_lines":[{"line_number":818,"context_line":"            \"dba.force_quorum_using_partition_of(\u0027{user}:{pw}@{addr}\u0027)\""},{"line_number":819,"context_line":"            .format("},{"line_number":820,"context_line":"                user\u003dself.cluster_user, pw\u003dself.cluster_password,"},{"line_number":821,"context_line":"                caddr\u003d_primary or self.cluster_address,"},{"line_number":822,"context_line":"                name\u003dself.cluster_name, addr\u003daddress))"},{"line_number":823,"context_line":"        try:"},{"line_number":824,"context_line":"            output \u003d self.run_mysqlsh_script(_script).decode(\"UTF-8\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a3331e4_c00c028a","line":821,"in_reply_to":"b50e44d0_5c63f9ac","updated":"2021-04-01 02:19:06.000000000","message":"Done","commit_id":"7e6f7c1d67492157edb44533292b5ff457d8bba5"}]}
