8888import java .io .FileReader ;
8989import java .io .IOException ;
9090import java .sql .Connection ;
91- import java .sql .PreparedStatement ;
92- import java .sql .ResultSet ;
9391import java .sql .SQLException ;
94- import java .util .ArrayList ;
9592import java .util .Arrays ;
9693import java .util .Date ;
9794import java .util .HashMap ;
9895import java .util .List ;
9996import java .util .Map ;
100- import java .util .TreeMap ;
10197
10298import static com .google .common .base .Preconditions .checkArgument ;
10399import static com .google .common .collect .Lists .newArrayList ;
@@ -406,6 +402,7 @@ protected void upgrade(CloudStackVersion dbVersion, CloudStackVersion currentVer
406402 }
407403
408404 for (DbUpgrade upgrade : upgrades ) {
405+ VersionVO version ;
409406 s_logger .debug ("Running upgrade " + upgrade .getClass ().getSimpleName () + " to upgrade from " + upgrade .getUpgradableVersionRange ()[0 ] + "-" +
410407 upgrade .getUpgradableVersionRange ()[1 ] + " to " + upgrade .getUpgradedVersion ());
411408 TransactionLegacy txn = TransactionLegacy .open ("Upgrade" );
@@ -427,27 +424,9 @@ protected void upgrade(CloudStackVersion dbVersion, CloudStackVersion currentVer
427424 }
428425
429426 upgrade .performDataMigration (conn );
430- boolean upgradeVersion = true ;
431-
432- if (upgrade .getUpgradedVersion ().equals ("2.1.8" )) {
433- // we don't have VersionDao in 2.1.x
434- upgradeVersion = false ;
435- } else if (upgrade .getUpgradedVersion ().equals ("2.2.4" )) {
436- try (PreparedStatement pstmt = conn .prepareStatement ("SELECT * FROM version WHERE version='2.2.4'" );
437- ResultSet rs = pstmt .executeQuery ();) {
438- // specifically for domain vlan update from 2.1.8 to 2.2.4
439- if (rs .next ()) {
440- upgradeVersion = false ;
441- }
442- } catch (SQLException e ) {
443- throw new CloudRuntimeException ("Unable to update the version table" , e );
444- }
445- }
446427
447- if (upgradeVersion ) {
448- VersionVO version = new VersionVO (upgrade .getUpgradedVersion ());
449- _dao .persist (version );
450- }
428+ version = new VersionVO (upgrade .getUpgradedVersion ());
429+ version = _dao .persist (version );
451430
452431 txn .commit ();
453432 } catch (CloudRuntimeException e ) {
@@ -457,69 +436,42 @@ protected void upgrade(CloudStackVersion dbVersion, CloudStackVersion currentVer
457436 } finally {
458437 txn .close ();
459438 }
460- }
461-
462- if (true ) { // FIXME Needs to detect if management servers are running
463- // !ClusterManagerImpl.arePeersRunning(trimmedCurrentVersion)) {
464- s_logger .info ("Cleaning upgrades because all management server are now at the same version" );
465- TreeMap <String , List <DbUpgrade >> upgradedVersions = new TreeMap <String , List <DbUpgrade >>();
466439
467- for (DbUpgrade upgrade : upgrades ) {
468- String upgradedVerson = upgrade .getUpgradedVersion ();
469- List <DbUpgrade > upgradeList = upgradedVersions .get (upgradedVerson );
470- if (upgradeList == null ) {
471- upgradeList = new ArrayList <DbUpgrade >();
472- }
473- upgradeList .add (upgrade );
474- upgradedVersions .put (upgradedVerson , upgradeList );
475- }
440+ // Run the corresponding '-cleanup.sql' script
441+ txn = TransactionLegacy .open ("Cleanup" );
442+ try {
443+ s_logger .info ("Cleanup upgrade " + upgrade .getClass ().getSimpleName () + " to upgrade from " + upgrade .getUpgradableVersionRange ()[0 ] + "-" +
444+ upgrade .getUpgradableVersionRange ()[1 ] + " to " + upgrade .getUpgradedVersion ());
476445
477- for (String upgradedVersion : upgradedVersions .keySet ()) {
478- List <DbUpgrade > versionUpgrades = upgradedVersions .get (upgradedVersion );
479- VersionVO version = _dao .findByVersion (upgradedVersion , Step .Upgrade );
480- s_logger .debug ("Upgrading to version " + upgradedVersion + "..." );
446+ txn .start ();
481447
482- TransactionLegacy txn = TransactionLegacy . open ( "Cleanup" ) ;
448+ Connection conn ;
483449 try {
484- if (version != null ) {
485- for (DbUpgrade upgrade : versionUpgrades ) {
486- s_logger .info ("Cleanup upgrade " + upgrade .getClass ().getSimpleName () + " to upgrade from " + upgrade .getUpgradableVersionRange ()[0 ] + "-" +
487- upgrade .getUpgradableVersionRange ()[1 ] + " to " + upgrade .getUpgradedVersion ());
488-
489- txn .start ();
490-
491- Connection conn ;
492- try {
493- conn = txn .getConnection ();
494- } catch (SQLException e ) {
495- String errorMessage = "Unable to cleanup the database" ;
496- s_logger .error (errorMessage , e );
497- throw new CloudRuntimeException (errorMessage , e );
498- }
499-
500- File [] scripts = upgrade .getCleanupScripts ();
501- if (scripts != null ) {
502- for (File script : scripts ) {
503- runScript (conn , script );
504- s_logger .debug ("Cleanup script " + script .getAbsolutePath () + " is executed successfully" );
505- }
506- }
507- txn .commit ();
508- }
509-
510- txn .start ();
511- version .setStep (Step .Complete );
512- s_logger .debug ("Upgrade completed for version " + upgradedVersion );
513- version .setUpdated (new Date ());
514- _dao .update (version .getId (), version );
515- txn .commit ();
450+ conn = txn .getConnection ();
451+ } catch (SQLException e ) {
452+ s_logger .error ("Unable to cleanup the database" , e );
453+ throw new CloudRuntimeException ("Unable to cleanup the database" , e );
454+ }
455+
456+ File [] scripts = upgrade .getCleanupScripts ();
457+ if (scripts != null ) {
458+ for (File script : scripts ) {
459+ runScript (conn , script );
460+ s_logger .debug ("Cleanup script " + script .getAbsolutePath () + " is executed successfully" );
516461 }
517- } finally {
518- txn .close ();
519462 }
463+ txn .commit ();
464+
465+ txn .start ();
466+ version .setStep (Step .Complete );
467+ version .setUpdated (new Date ());
468+ _dao .update (version .getId (), version );
469+ txn .commit ();
470+ s_logger .debug ("Upgrade completed for version " + version .getVersion ());
471+ } finally {
472+ txn .close ();
520473 }
521474 }
522-
523475 }
524476
525477 @ Override
0 commit comments