@@ -119,6 +119,20 @@ bool schema_exists(const std::shared_ptr<Instance> &group_server,
119
119
120
120
return row ? true : false ;
121
121
}
122
+
123
+ void adjust_data (const Instance &group_server, const Version &version) {
124
+ // the option "stats_updates_frequency" should be upgraded to "null", if
125
+ // previous value is 0
126
+ if (version >= Version (2 , 2 , 0 ))
127
+ group_server.execute (
128
+ " UPDATE mysql_innodb_cluster_metadata.clustersets SET router_options = "
129
+ " JSON_SET(router_options, '$.stats_updates_frequency', CAST(NULL as "
130
+ " JSON)) WHERE "
131
+ " (NULLIF(router_options->>'$.stats_updates_frequency','null') IS NOT "
132
+ " NULL) AND (CAST(router_options->>'$.stats_updates_frequency' AS "
133
+ " SIGNED INTEGER) = 0)" );
134
+ }
135
+
122
136
} // namespace
123
137
124
138
namespace scripts {
@@ -797,10 +811,8 @@ void do_upgrade_schema(const std::shared_ptr<Instance> &group_server,
797
811
798
812
auto console = mysqlsh::current_console ();
799
813
800
- std::string instance_data = group_server->descr ();
801
- auto path = get_upgrade_path (installed_ver);
802
814
if (!dry_run) {
803
- console->print_info (" Upgrading metadata at '" + instance_data +
815
+ console->print_info (" Upgrading metadata at '" + group_server-> descr () +
804
816
" ' from version " + installed_ver.get_base () +
805
817
" to version " + last_ver.get_base () + " ." );
806
818
}
@@ -824,114 +836,117 @@ void do_upgrade_schema(const std::shared_ptr<Instance> &group_server,
824
836
kMetadataSchemaPreviousName ));
825
837
}
826
838
839
+ auto path = get_upgrade_path (installed_ver);
827
840
size_t total = path.size ();
841
+
828
842
if (path.size () > 1 ) {
829
843
console->print_info (shcore::str_format (
830
844
" Upgrade %s require %zu steps" , (dry_run ? " would" : " will" ), total));
831
845
}
832
846
833
- if (!dry_run) {
834
- mysqlshdk::utils::nullable<upgrade::Stage> stage;
835
- Version actual_version = installed_ver;
847
+ if (dry_run) return ;
836
848
837
- std::vector<std::string> tables;
838
- Instance_list locked_instances;
839
- try {
840
- // Acquires the upgrade locks
841
- locked_instances = upgrade::get_locks (group_server);
849
+ mysqlshdk::utils::nullable<upgrade::Stage> stage;
850
+ Version actual_version = installed_ver;
842
851
843
- console->print_info (" Creating backup of the metadata schema..." );
852
+ std::vector<std::string> tables;
853
+ Instance_list locked_instances;
854
+ try {
855
+ // Acquires the upgrade locks
856
+ locked_instances = upgrade::get_locks (group_server);
844
857
845
- backup (installed_ver, kMetadataSchemaName , kMetadataSchemaBackupName ,
846
- group_server, " creating backup of the metadata" );
858
+ console->print_info (" Creating backup of the metadata schema..." );
847
859
848
- DBUG_EXECUTE_IF (" dba_FAIL_metadata_upgrade_at_BACKING_UP_METADATA" , {
849
- throw std::logic_error (
850
- " Debug emulation of failed metadata upgrade "
851
- " BACKING_UP_METADATA." );
852
- });
860
+ backup (installed_ver, kMetadataSchemaName , kMetadataSchemaBackupName ,
861
+ group_server, " creating backup of the metadata" );
853
862
854
- // Sets the upgrading version
855
- DBUG_EXECUTE_IF (" dba_limit_lock_wait_timeout" ,
856
- { group_server->execute (" SET lock_wait_timeout=1" ); });
863
+ DBUG_EXECUTE_IF (" dba_FAIL_metadata_upgrade_at_BACKING_UP_METADATA" , {
864
+ throw std::logic_error (
865
+ " Debug emulation of failed metadata upgrade BACKING_UP_METADATA." );
866
+ });
857
867
858
- stage = upgrade::save_stage (group_server,
859
- upgrade::Stage::SETTING_UPGRADE_VERSION);
860
- actual_version = set_schema_version ( group_server, kUpgradingVersion );
868
+ // Sets the upgrading version
869
+ DBUG_EXECUTE_IF ( " dba_limit_lock_wait_timeout " ,
870
+ { group_server-> execute ( " SET lock_wait_timeout=1 " ); } );
861
871
862
- stage = upgrade::save_stage (group_server, upgrade::Stage::UPGRADING);
872
+ stage = upgrade::save_stage (group_server,
873
+ upgrade::Stage::SETTING_UPGRADE_VERSION);
874
+ actual_version = set_schema_version (group_server, kUpgradingVersion );
863
875
864
- DBUG_EXECUTE_IF (" dba_CRASH_metadata_upgrade_at_UPGRADING" , {
865
- // On a CRASH the cleanup logic would not be executed letting the
866
- // metadata in UPGRADING stage, however the locks would be released
867
- upgrade::release_locks (locked_instances);
868
- return ;
869
- });
876
+ stage = upgrade::save_stage (group_server, upgrade::Stage::UPGRADING);
870
877
871
- group_server->execute (" SET FOREIGN_KEY_CHECKS=0" );
878
+ DBUG_EXECUTE_IF (" dba_CRASH_metadata_upgrade_at_UPGRADING" , {
879
+ // On a CRASH the cleanup logic would not be executed letting the
880
+ // metadata in UPGRADING stage, however the locks would be released
881
+ upgrade::release_locks (locked_instances);
882
+ return ;
883
+ });
872
884
873
- size_t count = 1 ;
874
- for (const auto &step : path) {
875
- console->print_info (shcore::str_format (
876
- " Step %zu of %zu: upgrading from %s to %s..." , count++, total,
877
- step->source_version .get_base ().c_str (),
878
- step->target_version .get_base ().c_str ()));
885
+ group_server->execute (" SET FOREIGN_KEY_CHECKS=0" );
879
886
880
- // Inter step backup so upgrade can perform the required upgrade
881
- // operations
882
- backup (step->source_version , kMetadataSchemaName ,
883
- kMetadataSchemaPreviousName , group_server,
884
- " creating step backup of the metadata" );
887
+ size_t count = 1 ;
888
+ for (const auto &step : path) {
889
+ console->print_info (shcore::str_format (
890
+ " Step %zu of %zu: upgrading from %s to %s..." , count++, total,
891
+ step->source_version .get_base ().c_str (),
892
+ step->target_version .get_base ().c_str ()));
885
893
886
- step->function (group_server);
894
+ // Inter step backup so upgrade can perform the required upgrade
895
+ // operations
896
+ backup (step->source_version , kMetadataSchemaName ,
897
+ kMetadataSchemaPreviousName , group_server,
898
+ " creating step backup of the metadata" );
887
899
888
- // Removing temporary step backup
889
- group_server->execute (std::string (" DROP SCHEMA " ) +
890
- kMetadataSchemaPreviousName );
891
- }
900
+ step->function (group_server);
892
901
893
- stage = upgrade::save_stage (group_server, upgrade::Stage::DONE);
902
+ // Removing temporary step backup
903
+ group_server->execute (std::string (" DROP SCHEMA " ) +
904
+ kMetadataSchemaPreviousName );
905
+ }
894
906
895
- upgrade::drop_metadata_backups (group_server, false );
907
+ stage = upgrade::save_stage (group_server, upgrade::Stage::DONE );
896
908
897
- actual_version = set_schema_version (group_server, last_ver );
909
+ upgrade::drop_metadata_backups (group_server, false );
898
910
899
- group_server-> execute ( " SET FOREIGN_KEY_CHECKS=1 " );
911
+ actual_version = set_schema_version (group_server, last_ver );
900
912
901
- upgrade::release_locks (locked_instances );
913
+ group_server-> execute ( " SET FOREIGN_KEY_CHECKS=1 " );
902
914
903
- installed_ver = installed_version (group_server);
904
- console->print_info (
905
- shcore::str_format (" Upgrade process successfully finished, metadata "
906
- " schema is now on version %s" ,
907
- installed_ver.get_base ().c_str ()));
908
- } catch (const std::exception &e) {
909
- console->print_error (e.what ());
910
-
911
- // Only if the error happened after the upgrade started the data is
912
- // restored and the backup deleted
913
- upgrade::cleanup (
914
- group_server,
915
- upgrade::compute_failed_upgrade_stage (
916
- stage, actual_version,
917
- schema_exists (group_server, kMetadataSchemaBackupName )));
918
-
919
- // Finally enables foreign key checks
920
- group_server->execute (" SET FOREIGN_KEY_CHECKS=1" );
915
+ adjust_data (*group_server, actual_version);
921
916
922
- upgrade::release_locks (locked_instances);
917
+ upgrade::release_locks (locked_instances);
923
918
924
- // Get the version after the restore to notify the final version
925
- installed_ver = installed_version (group_server);
919
+ installed_ver = installed_version (group_server);
920
+ console->print_info (
921
+ shcore::str_format (" Upgrade process successfully finished, metadata "
922
+ " schema is now on version %s" ,
923
+ installed_ver.get_base ().c_str ()));
924
+ } catch (const std::exception &e) {
925
+ console->print_error (e.what ());
926
926
927
- if (stage == upgrade::Stage::UPGRADING) {
928
- throw shcore::Exception::runtime_error (
929
- " Upgrade process failed, metadata has been restored to version " +
930
- installed_ver.get_base () + " ." );
931
- } else {
932
- throw shcore::Exception::runtime_error (
933
- " Upgrade process failed, metadata was not modified." );
934
- }
927
+ // Only if the error happened after the upgrade started the data is
928
+ // restored and the backup deleted
929
+ upgrade::cleanup (
930
+ group_server,
931
+ upgrade::compute_failed_upgrade_stage (
932
+ stage, actual_version,
933
+ schema_exists (group_server, kMetadataSchemaBackupName )));
934
+
935
+ // Finally enables foreign key checks
936
+ group_server->execute (" SET FOREIGN_KEY_CHECKS=1" );
937
+
938
+ upgrade::release_locks (locked_instances);
939
+
940
+ // Get the version after the restore to notify the final version
941
+ installed_ver = installed_version (group_server);
942
+
943
+ if (stage == upgrade::Stage::UPGRADING) {
944
+ throw shcore::Exception::runtime_error (
945
+ " Upgrade process failed, metadata has been restored to version " +
946
+ installed_ver.get_base () + " ." );
947
+ } else {
948
+ throw shcore::Exception::runtime_error (
949
+ " Upgrade process failed, metadata was not modified." );
935
950
}
936
951
}
937
952
}
0 commit comments