8787import java .io .FileReader ;
8888import java .io .IOException ;
8989import java .sql .Connection ;
90- import java .sql .PreparedStatement ;
91- import java .sql .ResultSet ;
9290import java .sql .SQLException ;
93- import java .util .ArrayList ;
9491import java .util .Arrays ;
9592import java .util .Date ;
9693import java .util .HashMap ;
9794import java .util .List ;
9895import java .util .Map ;
99- import java .util .TreeMap ;
10096
10197import static com .google .common .base .Preconditions .checkArgument ;
10298import static com .google .common .collect .Lists .newArrayList ;
@@ -403,6 +399,7 @@ protected void upgrade(CloudStackVersion dbVersion, CloudStackVersion currentVer
403399 }
404400
405401 for (DbUpgrade upgrade : upgrades ) {
402+ VersionVO version ;
406403 s_logger .debug ("Running upgrade " + upgrade .getClass ().getSimpleName () + " to upgrade from " + upgrade .getUpgradableVersionRange ()[0 ] + "-" +
407404 upgrade .getUpgradableVersionRange ()[1 ] + " to " + upgrade .getUpgradedVersion ());
408405 TransactionLegacy txn = TransactionLegacy .open ("Upgrade" );
@@ -424,27 +421,9 @@ protected void upgrade(CloudStackVersion dbVersion, CloudStackVersion currentVer
424421 }
425422
426423 upgrade .performDataMigration (conn );
427- boolean upgradeVersion = true ;
428-
429- if (upgrade .getUpgradedVersion ().equals ("2.1.8" )) {
430- // we don't have VersionDao in 2.1.x
431- upgradeVersion = false ;
432- } else if (upgrade .getUpgradedVersion ().equals ("2.2.4" )) {
433- try (PreparedStatement pstmt = conn .prepareStatement ("SELECT * FROM version WHERE version='2.2.4'" );
434- ResultSet rs = pstmt .executeQuery ();) {
435- // specifically for domain vlan update from 2.1.8 to 2.2.4
436- if (rs .next ()) {
437- upgradeVersion = false ;
438- }
439- } catch (SQLException e ) {
440- throw new CloudRuntimeException ("Unable to update the version table" , e );
441- }
442- }
443424
444- if (upgradeVersion ) {
445- VersionVO version = new VersionVO (upgrade .getUpgradedVersion ());
446- _dao .persist (version );
447- }
425+ version = new VersionVO (upgrade .getUpgradedVersion ());
426+ version = _dao .persist (version );
448427
449428 txn .commit ();
450429 } catch (CloudRuntimeException e ) {
@@ -454,69 +433,42 @@ protected void upgrade(CloudStackVersion dbVersion, CloudStackVersion currentVer
454433 } finally {
455434 txn .close ();
456435 }
457- }
458-
459- if (true ) { // FIXME Needs to detect if management servers are running
460- // !ClusterManagerImpl.arePeersRunning(trimmedCurrentVersion)) {
461- s_logger .info ("Cleaning upgrades because all management server are now at the same version" );
462- TreeMap <String , List <DbUpgrade >> upgradedVersions = new TreeMap <String , List <DbUpgrade >>();
463436
464- for (DbUpgrade upgrade : upgrades ) {
465- String upgradedVerson = upgrade .getUpgradedVersion ();
466- List <DbUpgrade > upgradeList = upgradedVersions .get (upgradedVerson );
467- if (upgradeList == null ) {
468- upgradeList = new ArrayList <DbUpgrade >();
469- }
470- upgradeList .add (upgrade );
471- upgradedVersions .put (upgradedVerson , upgradeList );
472- }
437+ // Run the corresponding '-cleanup.sql' script
438+ txn = TransactionLegacy .open ("Cleanup" );
439+ try {
440+ s_logger .info ("Cleanup upgrade " + upgrade .getClass ().getSimpleName () + " to upgrade from " + upgrade .getUpgradableVersionRange ()[0 ] + "-" +
441+ upgrade .getUpgradableVersionRange ()[1 ] + " to " + upgrade .getUpgradedVersion ());
473442
474- for (String upgradedVersion : upgradedVersions .keySet ()) {
475- List <DbUpgrade > versionUpgrades = upgradedVersions .get (upgradedVersion );
476- VersionVO version = _dao .findByVersion (upgradedVersion , Step .Upgrade );
477- s_logger .debug ("Upgrading to version " + upgradedVersion + "..." );
443+ txn .start ();
478444
479- TransactionLegacy txn = TransactionLegacy . open ( "Cleanup" ) ;
445+ Connection conn ;
480446 try {
481- if (version != null ) {
482- for (DbUpgrade upgrade : versionUpgrades ) {
483- s_logger .info ("Cleanup upgrade " + upgrade .getClass ().getSimpleName () + " to upgrade from " + upgrade .getUpgradableVersionRange ()[0 ] + "-" +
484- upgrade .getUpgradableVersionRange ()[1 ] + " to " + upgrade .getUpgradedVersion ());
485-
486- txn .start ();
487-
488- Connection conn ;
489- try {
490- conn = txn .getConnection ();
491- } catch (SQLException e ) {
492- String errorMessage = "Unable to cleanup the database" ;
493- s_logger .error (errorMessage , e );
494- throw new CloudRuntimeException (errorMessage , e );
495- }
496-
497- File [] scripts = upgrade .getCleanupScripts ();
498- if (scripts != null ) {
499- for (File script : scripts ) {
500- runScript (conn , script );
501- s_logger .debug ("Cleanup script " + script .getAbsolutePath () + " is executed successfully" );
502- }
503- }
504- txn .commit ();
505- }
506-
507- txn .start ();
508- version .setStep (Step .Complete );
509- s_logger .debug ("Upgrade completed for version " + upgradedVersion );
510- version .setUpdated (new Date ());
511- _dao .update (version .getId (), version );
512- txn .commit ();
447+ conn = txn .getConnection ();
448+ } catch (SQLException e ) {
449+ s_logger .error ("Unable to cleanup the database" , e );
450+ throw new CloudRuntimeException ("Unable to cleanup the database" , e );
451+ }
452+
453+ File [] scripts = upgrade .getCleanupScripts ();
454+ if (scripts != null ) {
455+ for (File script : scripts ) {
456+ runScript (conn , script );
457+ s_logger .debug ("Cleanup script " + script .getAbsolutePath () + " is executed successfully" );
513458 }
514- } finally {
515- txn .close ();
516459 }
460+ txn .commit ();
461+
462+ txn .start ();
463+ version .setStep (Step .Complete );
464+ version .setUpdated (new Date ());
465+ _dao .update (version .getId (), version );
466+ txn .commit ();
467+ s_logger .debug ("Upgrade completed for version " + version .getVersion ());
468+ } finally {
469+ txn .close ();
517470 }
518471 }
519-
520472 }
521473
522474 @ Override
0 commit comments