1
import com.eucalyptus.util.EntityWrapper;
2
import com.eucalyptus.util.StorageProperties;
3
import com.eucalyptus.util.WalrusProperties;
4
import com.eucalyptus.util.EntityWrapper;
5
import com.eucalyptus.bootstrap.Component;
7
import edu.ucsb.eucalyptus.cloud.entities.BucketInfo;
8
import edu.ucsb.eucalyptus.cloud.entities.AOEVolumeInfo;
9
import edu.ucsb.eucalyptus.cloud.entities.AOEMetaInfo;
10
import com.eucalyptus.util.DatabaseUtil;
11
import edu.ucsb.eucalyptus.cloud.entities.SnapshotInfo;
12
import edu.ucsb.eucalyptus.cloud.entities.VolumeInfo;
15
/* euca.*.dir are set by euca_upgrade when calling this script */
16
baseDir = new File("${System.getProperty('euca.old')}/var/lib/eucalyptus/db").absolutePath;
17
targetDir = new File("${System.getProperty('euca.new')}/var/lib/eucalyptus/db").absolutePath;
18
targetDbPrefix= "eucalyptus"
19
Component c = Component.db
20
c.setUri( "jdbc:hsqldb:file:${targetDir}/${targetDbPrefix}" );
21
System.setProperty("euca.db.host", "jdbc:hsqldb:file:${targetDir}/${targetDbPrefix}")
22
System.setProperty("euca.db.password", "${System.getenv('EUCALYPTUS_DB')}");
23
db_pass = System.getenv('EUCALYPTUS_DB');
24
System.setProperty("euca.log.level", 'INFO');
27
source = new org.hsqldb.jdbc.jdbcDataSource();
28
source.database = "jdbc:hsqldb:file:${baseDir}/eucalyptus_storage";
30
source.password = db_pass;
31
return new Sql(source);
35
source = new org.hsqldb.jdbc.jdbcDataSource();
36
source.database = "jdbc:hsqldb:file:${baseDir}/eucalyptus_walrus";
38
source.password = db_pass;
39
return new Sql(source);
43
source = new org.hsqldb.jdbc.jdbcDataSource();
44
source.database = "jdbc:hsqldb:file:${baseDir}/eucalyptus_images";
46
source.password = db_pass;
47
return new Sql(source);
51
oldDbStorage = getSqlStorage();
52
oldDbWalrus = getSqlWalrus();
53
oldDbVols = getSqlVols();
55
println "BASE DIR: ${baseDir}"
56
println "TARGET DIR: ${targetDir}"
58
if( !targetDir.equals(baseDir) ) {
59
new File("${baseDir}").eachFileMatch(~/.*\.(script)|.*\.(log)|.*\.(properties)/) { baseDb ->
60
targetDb = new File(baseDb.path.replaceAll(baseDir,targetDir));
61
println "-> Copying ${baseDb.absolutePath} to ${targetDb.absolutePath}..."
62
if(targetDb.exists()) {
63
println "Bailing out of upgrade: ${targetDb.absolutePath} already exists!"
64
println "It looks like a previous upgrade may have failed!"
65
println "You will need to manually cleanup ${targetDir} before proceeding."
68
targetDb.withWriter(){ w -> w.write(baseDb.text); w.flush(); w.close(); }
72
new after_database().run();
73
} catch( Throwable t ) {
75
t?.getCause().printStackTrace();
80
EntityWrapper<BucketInfo> dbBucket = new EntityWrapper<BucketInfo>( WalrusProperties.DB_NAME );
81
BucketInfo bucketInfo = new BucketInfo();
82
List<BucketInfo> buckets = dbBucket.query(bucketInfo);
83
for(BucketInfo bucket : buckets) {
84
bucket.setLoggingEnabled(false);
85
println "-> Updating BucketInfo: ${bucket.dump()}"
93
oldDbVols.rows('SELECT * FROM VOLUME').each {
94
volMap[it.DISPLAYNAME]=it.CLUSTER
97
oldDbStorage.rows('SELECT * FROM LVMMETADATA').each {
98
EntityWrapper<AOEMetaInfo> dbStorage = new EntityWrapper<AOEMetaInfo>( StorageProperties.DB_NAME );
100
AOEMetaInfo metaInfo = new AOEMetaInfo(it.HOSTNAME);
101
metaInfo.setMajorNumber(it.MAJOR_NUMBER);
102
metaInfo.setMinorNumber(it.MINOR_NUMBER);
103
println "-> Import AOEMetaInfo: ${metaInfo.dump()}"
104
dbStorage.add(metaInfo);
106
} catch(Throwable t) {
108
dbStorage.rollback();
112
oldDbVols.rows('SELECT * FROM VOLUME').each {
113
EntityWrapper<VolumeInfo> dbStorage = new EntityWrapper<VolumeInfo>( StorageProperties.DB_NAME );
115
VolumeInfo volInfo = new VolumeInfo(it.DISPLAYNAME);
116
volInfo.setScName(null);
117
VolumeInfo foundVolInfo = dbStorage.getUnique(volInfo);
118
foundVolInfo.setScName(it.CLUSTER);
120
} catch (Throwable t) {
122
dbStorage.rollback();
127
oldDbVols.rows('SELECT * FROM SNAPSHOT').each {
128
EntityWrapper<SnapshotInfo> dbStorage = new EntityWrapper<SnapshotInfo>( StorageProperties.DB_NAME );
130
SnapshotInfo snapInfo = new SnapshotInfo(it.DISPLAYNAME);
131
snapInfo.setScName(null);
132
SnapshotInfo foundSnapInfo = dbStorage.getUnique(snapInfo);
133
foundSnapInfo.setScName(it.CLUSTER);
135
} catch (Throwable t) {
137
dbStorage.rollback();
142
oldDbStorage.rows('SELECT * FROM LVMVOLUMES').each {
143
EntityWrapper<AOEVolumeInfo> dbStorage = new EntityWrapper<AOEVolumeInfo>( StorageProperties.DB_NAME );
145
AOEVolumeInfo volumeInfo = new AOEVolumeInfo(it.VOLUME_NAME);
146
volumeInfo.setMajorNumber(it.MAJOR_NUMBER);
147
volumeInfo.setMinorNumber(it.MINOR_NUMBER);
148
volumeInfo.setLoDevName(it.LODEV_NAME);
149
volumeInfo.setLoFileName(it.LOFILE_NAME);
150
volumeInfo.setVbladePid(it.VBLADE_PID);
151
volumeInfo.setScName("StorageController-local".equals(it.SC_NAME)?volMap[it.VOLUME_NAME]:it.SC_NAME);
152
volumeInfo.setPvName(it.PV_NAME);
153
volumeInfo.setLvName(it.LV_NAME);
154
volumeInfo.setVgName(it.VG_NAME);
155
volumeInfo.setSize(it.SIZE);
156
volumeInfo.setStatus(it.STATUS);
157
volumeInfo.setSnapshotOf(it.SNAPSHOT_OF);
158
println "-> Import AOEVolumeInfo: ${volumeInfo.dump()}"
159
dbStorage.add(volumeInfo);
161
} catch(Throwable t) {
163
dbStorage.rollback();
168
DatabaseUtil.closeAllEMFs();
169
oldDbStorage.close();
172
//the db will not sync to disk even after a close in some cases. Wait a bit.