mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-21 14:50:08 +03:00
Feature #2586: Optimize onedb upgrade
(cherry picked from commit 57099e26426ae63756f7c8cae91de7fe29ad1608)
This commit is contained in:
parent
af0f1dda7d
commit
358a59d3a8
@ -15,6 +15,7 @@
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
require 'set'
|
||||
require 'nokogiri'
|
||||
require "rexml/document"
|
||||
include REXML
|
||||
|
||||
@ -29,6 +30,8 @@ module Migrator
|
||||
|
||||
def up
|
||||
|
||||
init_log_time()
|
||||
|
||||
########################################################################
|
||||
# Bug : Add VM IDs Collection to Hosts & Images
|
||||
########################################################################
|
||||
@ -49,17 +52,17 @@ module Migrator
|
||||
counters[:image][row[:oid]] = Set.new
|
||||
end
|
||||
|
||||
log_time()
|
||||
|
||||
# Aggregate information of the RUNNING vms
|
||||
@db.fetch("SELECT oid,body FROM vm_pool WHERE state<>6") do |row|
|
||||
vm_doc = Document.new(row[:body])
|
||||
|
||||
state = vm_doc.root.get_text('STATE').to_s.to_i
|
||||
lcm_state = vm_doc.root.get_text('LCM_STATE').to_s.to_i
|
||||
vm_doc = Nokogiri::XML(row[:body])
|
||||
|
||||
state = vm_doc.root.at_xpath('STATE').text.to_i
|
||||
lcm_state = vm_doc.root.at_xpath('LCM_STATE').text.to_i
|
||||
|
||||
# Images used by this VM
|
||||
vm_doc.root.each_element("TEMPLATE/DISK/IMAGE_ID") do |e|
|
||||
vm_doc.root.xpath("TEMPLATE/DISK/IMAGE_ID").each do |e|
|
||||
img_id = e.text.to_i
|
||||
|
||||
if counters[:image][img_id].nil?
|
||||
@ -78,7 +81,7 @@ module Migrator
|
||||
|
||||
# Get hostid
|
||||
hid = -1
|
||||
vm_doc.root.each_element("HISTORY_RECORDS/HISTORY[last()]/HID") { |e|
|
||||
vm_doc.root.xpath("HISTORY_RECORDS/HISTORY[last()]/HID").each { |e|
|
||||
hid = e.text.to_i
|
||||
}
|
||||
|
||||
@ -89,6 +92,8 @@ module Migrator
|
||||
end
|
||||
end
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Hosts
|
||||
#
|
||||
@ -103,38 +108,41 @@ module Migrator
|
||||
"UNIQUE(name));"
|
||||
|
||||
# Calculate the host's xml and write them to host_pool_new
|
||||
@db[:host_pool].each do |row|
|
||||
host_doc = Document.new(row[:body])
|
||||
@db.transaction do
|
||||
@db[:host_pool].each do |row|
|
||||
host_doc = Document.new(row[:body])
|
||||
|
||||
hid = row[:oid]
|
||||
hid = row[:oid]
|
||||
|
||||
rvms = counters[:host][hid][:rvms].size
|
||||
rvms = counters[:host][hid][:rvms].size
|
||||
|
||||
# rewrite running_vms
|
||||
host_doc.root.each_element("HOST_SHARE/RUNNING_VMS") {|e|
|
||||
if e.text != rvms.to_s
|
||||
warn("Host #{hid} RUNNING_VMS has #{e.text} \tis\t#{rvms}")
|
||||
e.text = rvms
|
||||
# rewrite running_vms
|
||||
host_doc.root.each_element("HOST_SHARE/RUNNING_VMS") {|e|
|
||||
if e.text != rvms.to_s
|
||||
warn("Host #{hid} RUNNING_VMS has #{e.text} \tis\t#{rvms}")
|
||||
e.text = rvms
|
||||
end
|
||||
}
|
||||
|
||||
# re-do list of VM IDs
|
||||
vms_new_elem = host_doc.root.add_element("VMS")
|
||||
|
||||
counters[:host][hid][:rvms].each do |id|
|
||||
vms_new_elem.add_element("ID").text = id.to_s
|
||||
end
|
||||
}
|
||||
|
||||
# re-do list of VM IDs
|
||||
vms_new_elem = host_doc.root.add_element("VMS")
|
||||
row[:body] = host_doc.to_s
|
||||
|
||||
counters[:host][hid][:rvms].each do |id|
|
||||
vms_new_elem.add_element("ID").text = id.to_s
|
||||
# commit
|
||||
@db[:host_pool_new].insert(row)
|
||||
end
|
||||
|
||||
row[:body] = host_doc.to_s
|
||||
|
||||
# commit
|
||||
@db[:host_pool_new].insert(row)
|
||||
end
|
||||
|
||||
# Rename table
|
||||
@db.run("DROP TABLE host_pool")
|
||||
@db.run("ALTER TABLE host_pool_new RENAME TO host_pool")
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Image
|
||||
@ -146,39 +154,42 @@ module Migrator
|
||||
# Create a new empty table where we will store the new calculated values
|
||||
@db.run "CREATE TABLE image_pool_new (oid INTEGER PRIMARY KEY, name VARCHAR(128), body TEXT, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, UNIQUE(name,uid) );"
|
||||
|
||||
# Calculate the host's xml and write them to host_pool_new
|
||||
@db[:image_pool].each do |row|
|
||||
doc = Document.new(row[:body])
|
||||
@db.transaction do
|
||||
@db[:image_pool].each do |row|
|
||||
doc = Document.new(row[:body])
|
||||
|
||||
oid = row[:oid]
|
||||
oid = row[:oid]
|
||||
|
||||
rvms = counters[:image][oid].size
|
||||
rvms = counters[:image][oid].size
|
||||
|
||||
# rewrite running_vms
|
||||
doc.root.each_element("RUNNING_VMS") {|e|
|
||||
if e.text != rvms.to_s
|
||||
warn("Image #{oid} RUNNING_VMS has #{e.text} \tis\t#{rvms}")
|
||||
e.text = rvms
|
||||
# rewrite running_vms
|
||||
doc.root.each_element("RUNNING_VMS") {|e|
|
||||
if e.text != rvms.to_s
|
||||
warn("Image #{oid} RUNNING_VMS has #{e.text} \tis\t#{rvms}")
|
||||
e.text = rvms
|
||||
end
|
||||
}
|
||||
|
||||
# re-do list of VM IDs
|
||||
vms_new_elem = doc.root.add_element("VMS")
|
||||
|
||||
counters[:image][oid].each do |id|
|
||||
vms_new_elem.add_element("ID").text = id.to_s
|
||||
end
|
||||
}
|
||||
|
||||
# re-do list of VM IDs
|
||||
vms_new_elem = doc.root.add_element("VMS")
|
||||
row[:body] = doc.to_s
|
||||
|
||||
counters[:image][oid].each do |id|
|
||||
vms_new_elem.add_element("ID").text = id.to_s
|
||||
# commit
|
||||
@db[:image_pool_new].insert(row)
|
||||
end
|
||||
|
||||
row[:body] = doc.to_s
|
||||
|
||||
# commit
|
||||
@db[:image_pool_new].insert(row)
|
||||
end
|
||||
|
||||
# Rename table
|
||||
@db.run("DROP TABLE image_pool")
|
||||
@db.run("ALTER TABLE image_pool_new RENAME TO image_pool")
|
||||
|
||||
log_time()
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
@ -18,6 +18,8 @@ require 'set'
|
||||
require "rexml/document"
|
||||
include REXML
|
||||
|
||||
require 'nokogiri'
|
||||
|
||||
class String
|
||||
def red
|
||||
colorize(31)
|
||||
@ -41,6 +43,8 @@ module Migrator
|
||||
|
||||
def up
|
||||
|
||||
init_log_time()
|
||||
|
||||
########################################################################
|
||||
# Add Cloning Image ID collection to Images
|
||||
########################################################################
|
||||
@ -71,6 +75,8 @@ module Migrator
|
||||
end
|
||||
end
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Image
|
||||
#
|
||||
@ -80,38 +86,42 @@ module Migrator
|
||||
|
||||
@db.run "CREATE TABLE image_pool_new (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, UNIQUE(name,uid) );"
|
||||
|
||||
@db[:image_pool].each do |row|
|
||||
doc = Document.new(row[:body])
|
||||
@db.transaction do
|
||||
@db[:image_pool].each do |row|
|
||||
doc = Document.new(row[:body])
|
||||
|
||||
oid = row[:oid]
|
||||
oid = row[:oid]
|
||||
|
||||
n_cloning_ops = counters[:image][oid][:clones].size
|
||||
n_cloning_ops = counters[:image][oid][:clones].size
|
||||
|
||||
# Rewrite number of clones
|
||||
doc.root.each_element("CLONING_OPS") { |e|
|
||||
if e.text != n_cloning_ops.to_s
|
||||
warn("Image #{oid} CLONING_OPS has #{e.text} \tis\t#{n_cloning_ops}")
|
||||
e.text = n_cloning_ops
|
||||
# Rewrite number of clones
|
||||
doc.root.each_element("CLONING_OPS") { |e|
|
||||
if e.text != n_cloning_ops.to_s
|
||||
warn("Image #{oid} CLONING_OPS has #{e.text} \tis\t#{n_cloning_ops}")
|
||||
e.text = n_cloning_ops
|
||||
end
|
||||
}
|
||||
|
||||
# re-do list of Images cloning this one
|
||||
clones_new_elem = doc.root.add_element("CLONES")
|
||||
|
||||
counters[:image][oid][:clones].each do |id|
|
||||
clones_new_elem.add_element("ID").text = id.to_s
|
||||
end
|
||||
}
|
||||
|
||||
# re-do list of Images cloning this one
|
||||
clones_new_elem = doc.root.add_element("CLONES")
|
||||
row[:body] = doc.to_s
|
||||
|
||||
counters[:image][oid][:clones].each do |id|
|
||||
clones_new_elem.add_element("ID").text = id.to_s
|
||||
# commit
|
||||
@db[:image_pool_new].insert(row)
|
||||
end
|
||||
|
||||
row[:body] = doc.to_s
|
||||
|
||||
# commit
|
||||
@db[:image_pool_new].insert(row)
|
||||
end
|
||||
|
||||
# Rename table
|
||||
@db.run("DROP TABLE image_pool")
|
||||
@db.run("ALTER TABLE image_pool_new RENAME TO image_pool")
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Feature #1565: New cid column in host, ds and vnet tables
|
||||
########################################################################
|
||||
@ -119,27 +129,31 @@ module Migrator
|
||||
@db.run "ALTER TABLE host_pool RENAME TO old_host_pool;"
|
||||
@db.run "CREATE TABLE host_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, state INTEGER, last_mon_time INTEGER, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, cid INTEGER, UNIQUE(name));"
|
||||
|
||||
@db.fetch("SELECT * FROM old_host_pool") do |row|
|
||||
doc = Document.new(row[:body])
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_host_pool") do |row|
|
||||
doc = Document.new(row[:body])
|
||||
|
||||
cluster_id = doc.root.get_text('CLUSTER_ID').to_s
|
||||
cluster_id = doc.root.get_text('CLUSTER_ID').to_s
|
||||
|
||||
@db[:host_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => row[:body],
|
||||
:state => row[:state],
|
||||
:last_mon_time => row[:last_mon_time],
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u],
|
||||
:cid => cluster_id)
|
||||
@db[:host_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => row[:body],
|
||||
:state => row[:state],
|
||||
:last_mon_time => row[:last_mon_time],
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u],
|
||||
:cid => cluster_id)
|
||||
end
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_host_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Feature #1565: New cid column
|
||||
# Feature #471: IPv6 addresses
|
||||
@ -148,28 +162,32 @@ module Migrator
|
||||
@db.run "ALTER TABLE network_pool RENAME TO old_network_pool;"
|
||||
@db.run "CREATE TABLE network_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, cid INTEGER, UNIQUE(name,uid));"
|
||||
|
||||
@db.fetch("SELECT * FROM old_network_pool") do |row|
|
||||
doc = Document.new(row[:body])
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_network_pool") do |row|
|
||||
doc = Document.new(row[:body])
|
||||
|
||||
cluster_id = doc.root.get_text('CLUSTER_ID').to_s
|
||||
cluster_id = doc.root.get_text('CLUSTER_ID').to_s
|
||||
|
||||
doc.root.add_element("GLOBAL_PREFIX")
|
||||
doc.root.add_element("SITE_PREFIX")
|
||||
doc.root.add_element("GLOBAL_PREFIX")
|
||||
doc.root.add_element("SITE_PREFIX")
|
||||
|
||||
@db[:network_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u],
|
||||
:cid => cluster_id)
|
||||
@db[:network_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u],
|
||||
:cid => cluster_id)
|
||||
end
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_network_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Feature #1617
|
||||
# New datastore, 2 "files"
|
||||
@ -181,40 +199,43 @@ module Migrator
|
||||
@db.run "ALTER TABLE datastore_pool RENAME TO old_datastore_pool;"
|
||||
@db.run "CREATE TABLE datastore_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, cid INTEGER, UNIQUE(name));"
|
||||
|
||||
@db.fetch("SELECT * FROM old_datastore_pool") do |row|
|
||||
doc = Document.new(row[:body])
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_datastore_pool") do |row|
|
||||
doc = Document.new(row[:body])
|
||||
|
||||
type = "0" # IMAGE_DS
|
||||
type = "0" # IMAGE_DS
|
||||
|
||||
system_elem = doc.root.delete_element("SYSTEM")
|
||||
system_elem = doc.root.delete_element("SYSTEM")
|
||||
|
||||
if ( !system_elem.nil? && system_elem.text == "1" )
|
||||
type = "1" # SYSTEM_DS
|
||||
if ( !system_elem.nil? && system_elem.text == "1" )
|
||||
type = "1" # SYSTEM_DS
|
||||
end
|
||||
|
||||
doc.root.add_element("TYPE").text = type
|
||||
|
||||
doc.root.each_element("TEMPLATE") do |e|
|
||||
e.delete_element("SYSTEM")
|
||||
e.add_element("TYPE").text = type == "0" ? "IMAGE_DS" : "SYSTEM_DS"
|
||||
end
|
||||
|
||||
cluster_id = doc.root.get_text('CLUSTER_ID').to_s
|
||||
|
||||
@db[:datastore_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u],
|
||||
:cid => cluster_id)
|
||||
end
|
||||
|
||||
doc.root.add_element("TYPE").text = type
|
||||
|
||||
doc.root.each_element("TEMPLATE") do |e|
|
||||
e.delete_element("SYSTEM")
|
||||
e.add_element("TYPE").text = type == "0" ? "IMAGE_DS" : "SYSTEM_DS"
|
||||
end
|
||||
|
||||
cluster_id = doc.root.get_text('CLUSTER_ID').to_s
|
||||
|
||||
@db[:datastore_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u],
|
||||
:cid => cluster_id)
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_datastore_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
user_0_name = "oneadmin"
|
||||
|
||||
@ -241,6 +262,7 @@ module Migrator
|
||||
|
||||
@db.run "INSERT INTO datastore_pool VALUES(2,'files','<DATASTORE><ID>2</ID><UID>0</UID><GID>0</GID><UNAME>#{user_0_name}</UNAME><GNAME>#{group_0_name}</GNAME><NAME>files</NAME><PERMISSIONS><OWNER_U>1</OWNER_U><OWNER_M>1</OWNER_M><OWNER_A>0</OWNER_A><GROUP_U>1</GROUP_U><GROUP_M>0</GROUP_M><GROUP_A>0</GROUP_A><OTHER_U>1</OTHER_U><OTHER_M>0</OTHER_M><OTHER_A>0</OTHER_A></PERMISSIONS><DS_MAD>fs</DS_MAD><TM_MAD>ssh</TM_MAD><BASE_PATH>#{base_path}</BASE_PATH><TYPE>2</TYPE><DISK_TYPE>0</DISK_TYPE><CLUSTER_ID>-1</CLUSTER_ID><CLUSTER></CLUSTER><IMAGES></IMAGES><TEMPLATE><DS_MAD><![CDATA[fs]]></DS_MAD><TM_MAD><![CDATA[ssh]]></TM_MAD><TYPE><![CDATA[FILE_DS]]></TYPE></TEMPLATE></DATASTORE>',0,0,1,1,1,-1);"
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Feature #1611: Default quotas
|
||||
@ -254,73 +276,79 @@ module Migrator
|
||||
@db.run "ALTER TABLE user_pool RENAME TO old_user_pool;"
|
||||
@db.run "CREATE TABLE user_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, UNIQUE(name));"
|
||||
|
||||
# oneadmin does not have quotas
|
||||
@db.fetch("SELECT * FROM old_user_pool WHERE oid=0") do |row|
|
||||
@db[:user_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => row[:body],
|
||||
:uid => row[:oid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
@db.transaction do
|
||||
# oneadmin does not have quotas
|
||||
@db.fetch("SELECT * FROM old_user_pool WHERE oid=0") do |row|
|
||||
@db[:user_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => row[:body],
|
||||
:uid => row[:oid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
@db.fetch("SELECT * FROM old_user_pool WHERE oid>0") do |row|
|
||||
doc = Document.new(row[:body])
|
||||
@db.fetch("SELECT * FROM old_user_pool WHERE oid>0") do |row|
|
||||
doc = Nokogiri::XML(row[:body])
|
||||
|
||||
set_default_quotas(doc)
|
||||
set_default_quotas(doc)
|
||||
|
||||
@db[:user_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:oid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
@db[:user_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:oid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_user_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
@db.run "ALTER TABLE group_pool RENAME TO old_group_pool;"
|
||||
@db.run "CREATE TABLE group_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, UNIQUE(name));"
|
||||
|
||||
@db.transaction do
|
||||
# oneadmin group does not have quotas
|
||||
@db.fetch("SELECT * FROM old_group_pool WHERE oid=0") do |row|
|
||||
@db[:group_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => row[:body],
|
||||
:uid => row[:oid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
# oneadmin group does not have quotas
|
||||
@db.fetch("SELECT * FROM old_group_pool WHERE oid=0") do |row|
|
||||
@db[:group_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => row[:body],
|
||||
:uid => row[:oid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
@db.fetch("SELECT * FROM old_group_pool WHERE oid>0") do |row|
|
||||
doc = Nokogiri::XML(row[:body])
|
||||
|
||||
@db.fetch("SELECT * FROM old_group_pool WHERE oid>0") do |row|
|
||||
doc = Document.new(row[:body])
|
||||
set_default_quotas(doc)
|
||||
|
||||
set_default_quotas(doc)
|
||||
|
||||
@db[:group_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:oid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
@db[:group_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:oid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_group_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Bug #1694: SYSTEM_DS is now set with the method adddatastore
|
||||
########################################################################
|
||||
@ -328,84 +356,87 @@ module Migrator
|
||||
@db.run "ALTER TABLE cluster_pool RENAME TO old_cluster_pool;"
|
||||
@db.run "CREATE TABLE cluster_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, UNIQUE(name));"
|
||||
|
||||
@db.fetch("SELECT * FROM old_cluster_pool") do |row|
|
||||
doc = Document.new(row[:body])
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_cluster_pool") do |row|
|
||||
doc = Document.new(row[:body])
|
||||
|
||||
system_ds = 0
|
||||
system_ds = 0
|
||||
|
||||
doc.root.each_element("TEMPLATE") do |e|
|
||||
elem = e.delete_element("SYSTEM_DS")
|
||||
doc.root.each_element("TEMPLATE") do |e|
|
||||
elem = e.delete_element("SYSTEM_DS")
|
||||
|
||||
if !elem.nil?
|
||||
system_ds = elem.text.to_i
|
||||
end
|
||||
end
|
||||
|
||||
if system_ds != 0
|
||||
updated_body = nil
|
||||
|
||||
@db.fetch("SELECT body FROM datastore_pool WHERE oid=#{system_ds}") do |ds_row|
|
||||
ds_doc = Document.new(ds_row[:body])
|
||||
|
||||
type = "0" # IMAGE_DS
|
||||
|
||||
ds_doc.root.each_element("TYPE") do |e|
|
||||
type = e.text
|
||||
if !elem.nil?
|
||||
system_ds = elem.text.to_i
|
||||
end
|
||||
end
|
||||
|
||||
if type != "1"
|
||||
puts " > Cluster #{row[:oid]} has the "<<
|
||||
"System Datastore set to Datastore #{system_ds}, "<<
|
||||
"but its type is not SYSTEM_DS. The System Datastore "<<
|
||||
"for this Cluster will be set to 0"
|
||||
if system_ds != 0
|
||||
updated_body = nil
|
||||
|
||||
system_ds = 0
|
||||
else
|
||||
cluster_id = "-1"
|
||||
@db.fetch("SELECT body FROM datastore_pool WHERE oid=#{system_ds}") do |ds_row|
|
||||
ds_doc = Document.new(ds_row[:body])
|
||||
|
||||
ds_doc.root.each_element("CLUSTER_ID") do |e|
|
||||
cluster_id = e.text
|
||||
type = "0" # IMAGE_DS
|
||||
|
||||
ds_doc.root.each_element("TYPE") do |e|
|
||||
type = e.text
|
||||
end
|
||||
|
||||
if row[:oid] != cluster_id.to_i
|
||||
if type != "1"
|
||||
puts " > Cluster #{row[:oid]} has the "<<
|
||||
"System Datastore set to Datastore #{system_ds}, "<<
|
||||
"but it is not part of the Cluster. It will be added now."
|
||||
"but its type is not SYSTEM_DS. The System Datastore "<<
|
||||
"for this Cluster will be set to 0"
|
||||
|
||||
system_ds = 0
|
||||
else
|
||||
cluster_id = "-1"
|
||||
|
||||
ds_doc.root.each_element("CLUSTER_ID") do |e|
|
||||
e.text = row[:oid]
|
||||
cluster_id = e.text
|
||||
end
|
||||
|
||||
ds_doc.root.each_element("CLUSTER") do |e|
|
||||
e.text = row[:name]
|
||||
end
|
||||
if row[:oid] != cluster_id.to_i
|
||||
puts " > Cluster #{row[:oid]} has the "<<
|
||||
"System Datastore set to Datastore #{system_ds}, "<<
|
||||
"but it is not part of the Cluster. It will be added now."
|
||||
|
||||
updated_body = ds_doc.root.to_s
|
||||
ds_doc.root.each_element("CLUSTER_ID") do |e|
|
||||
e.text = row[:oid]
|
||||
end
|
||||
|
||||
ds_doc.root.each_element("CLUSTER") do |e|
|
||||
e.text = row[:name]
|
||||
end
|
||||
|
||||
updated_body = ds_doc.root.to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if !updated_body.nil?
|
||||
@db[:datastore_pool].where(:oid => system_ds).update(
|
||||
:body => updated_body)
|
||||
end
|
||||
end
|
||||
|
||||
if !updated_body.nil?
|
||||
@db[:datastore_pool].where(:oid => system_ds).update(
|
||||
:body => updated_body)
|
||||
end
|
||||
doc.root.add_element("SYSTEM_DS").text = system_ds.to_s
|
||||
|
||||
@db[:cluster_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
doc.root.add_element("SYSTEM_DS").text = system_ds.to_s
|
||||
|
||||
@db[:cluster_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_cluster_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Feature #1556: New elem USER_TEMPLATE
|
||||
@ -418,41 +449,53 @@ module Migrator
|
||||
@db.run "ALTER TABLE vm_pool RENAME TO old_vm_pool;"
|
||||
@db.run "CREATE TABLE vm_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, last_poll INTEGER, state INTEGER, lcm_state INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER);"
|
||||
|
||||
@db.fetch("SELECT * FROM old_vm_pool") do |row|
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_vm_pool") do |row|
|
||||
|
||||
doc = Document.new(row[:body])
|
||||
user_template = doc.root.add_element("USER_TEMPLATE")
|
||||
doc = Nokogiri::XML(row[:body])
|
||||
user_template = doc.create_element("USER_TEMPLATE")
|
||||
|
||||
doc.root.each_element("TEMPLATE") do |e|
|
||||
elem = e.delete_element("REQUIREMENTS")
|
||||
e = doc.root.at_xpath("TEMPLATE")
|
||||
elem = e.at_xpath("REQUIREMENTS")
|
||||
|
||||
if !elem.nil?
|
||||
user_template.add_element("SCHED_REQUIREMENTS").text = elem.text
|
||||
new_elem = doc.create_element("SCHED_REQUIREMENTS")
|
||||
new_elem.content = elem.text
|
||||
elem.remove
|
||||
|
||||
user_template.add_child(new_elem)
|
||||
end
|
||||
|
||||
elem = e.delete_element("RANK")
|
||||
elem = e.at_xpath("RANK")
|
||||
|
||||
if !elem.nil?
|
||||
user_template.add_element("SCHED_RANK").text = elem.text
|
||||
new_elem = doc.create_element("SCHED_RANK")
|
||||
new_elem.content = elem.text
|
||||
elem.remove
|
||||
|
||||
user_template.add_child(new_elem)
|
||||
end
|
||||
|
||||
doc.root << user_template
|
||||
|
||||
@db[:vm_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:last_poll => row[:last_poll],
|
||||
:state => row[:state],
|
||||
:lcm_state => row[:lcm_state],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
@db[:vm_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:last_poll => row[:last_poll],
|
||||
:state => row[:state],
|
||||
:lcm_state => row[:lcm_state],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_vm_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Feature #1483: Move scheduling attributes
|
||||
@ -463,43 +506,49 @@ module Migrator
|
||||
@db.run "ALTER TABLE template_pool RENAME TO old_template_pool;"
|
||||
@db.run "CREATE TABLE template_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER);"
|
||||
|
||||
@db.fetch("SELECT * FROM old_template_pool") do |row|
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_template_pool") do |row|
|
||||
|
||||
doc = Document.new(row[:body])
|
||||
doc = Nokogiri::XML(row[:body])
|
||||
|
||||
template = nil
|
||||
template = doc.root.at_xpath("TEMPLATE")
|
||||
|
||||
doc.root.each_element("TEMPLATE") do |e|
|
||||
template = e
|
||||
end
|
||||
|
||||
doc.root.each_element("TEMPLATE") do |e|
|
||||
elem = e.delete_element("REQUIREMENTS")
|
||||
elem = template.at_xpath("REQUIREMENTS")
|
||||
|
||||
if !elem.nil?
|
||||
template.add_element("SCHED_REQUIREMENTS").text = elem.text
|
||||
new_elem = doc.create_element("SCHED_REQUIREMENTS")
|
||||
new_elem.content = elem.text
|
||||
elem.remove
|
||||
|
||||
template.add_child(new_elem)
|
||||
end
|
||||
|
||||
elem = e.delete_element("RANK")
|
||||
elem = template.at_xpath("RANK")
|
||||
|
||||
if !elem.nil?
|
||||
template.add_element("SCHED_RANK").text = elem.text
|
||||
end
|
||||
end
|
||||
new_elem = doc.create_element("SCHED_RANK")
|
||||
new_elem.content = elem.text
|
||||
elem.remove
|
||||
|
||||
@db[:template_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
template.add_child(new_elem)
|
||||
end
|
||||
|
||||
@db[:template_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_template_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Feature #1691 Add new attribute NIC/NIC_ID
|
||||
########################################################################
|
||||
@ -507,38 +556,43 @@ module Migrator
|
||||
@db.run "ALTER TABLE vm_pool RENAME TO old_vm_pool;"
|
||||
@db.run "CREATE TABLE vm_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, last_poll INTEGER, state INTEGER, lcm_state INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER);"
|
||||
|
||||
@db.fetch("SELECT * FROM old_vm_pool") do |row|
|
||||
if ( row[:state] != 6 ) # DONE
|
||||
doc = Document.new(row[:body])
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_vm_pool") do |row|
|
||||
if ( row[:state] != 6 ) # DONE
|
||||
doc = Nokogiri::XML(row[:body])
|
||||
|
||||
nic_id = 0
|
||||
nic_id = 0
|
||||
|
||||
doc.root.each_element("TEMPLATE/NIC") { |e|
|
||||
e.delete_element("NIC_ID")
|
||||
e.add_element("NIC_ID").text = (nic_id).to_s
|
||||
doc.root.xpath("TEMPLATE/NIC").each { |e|
|
||||
e.xpath("NIC_ID").each {|n| n.remove}
|
||||
e.add_child(doc.create_element("NIC_ID")).content =
|
||||
(nic_id).to_s
|
||||
|
||||
nic_id += 1
|
||||
}
|
||||
nic_id += 1
|
||||
}
|
||||
|
||||
row[:body] = doc.root.to_s
|
||||
row[:body] = doc.root.to_s
|
||||
end
|
||||
|
||||
@db[:vm_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => row[:body],
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:last_poll => row[:last_poll],
|
||||
:state => row[:state],
|
||||
:lcm_state => row[:lcm_state],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
@db[:vm_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => row[:body],
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:last_poll => row[:last_poll],
|
||||
:state => row[:state],
|
||||
:lcm_state => row[:lcm_state],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_vm_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
#
|
||||
# Banner for the new /var/lib/one/vms directory
|
||||
@ -563,38 +617,38 @@ module Migrator
|
||||
|
||||
# VM quotas
|
||||
|
||||
doc.root.each_element("VM_QUOTA/VM/CPU") do |e|
|
||||
e.text = "-1" if e.text.to_f == 0
|
||||
doc.root.xpath("VM_QUOTA/VM/CPU").each do |e|
|
||||
e.content = "-1" if e.text.to_f == 0
|
||||
end
|
||||
|
||||
doc.root.each_element("VM_QUOTA/VM/MEMORY") do |e|
|
||||
e.text = "-1" if e.text.to_i == 0
|
||||
doc.root.xpath("VM_QUOTA/VM/MEMORY").each do |e|
|
||||
e.content = "-1" if e.text.to_i == 0
|
||||
end
|
||||
|
||||
doc.root.each_element("VM_QUOTA/VM/VMS") do |e|
|
||||
e.text = "-1" if e.text.to_i == 0
|
||||
doc.root.xpath("VM_QUOTA/VM/VMS").each do |e|
|
||||
e.content = "-1" if e.text.to_i == 0
|
||||
end
|
||||
|
||||
# VNet quotas
|
||||
|
||||
doc.root.each_element("NETWORK_QUOTA/NETWORK/LEASES") do |e|
|
||||
e.text = "-1" if e.text.to_i == 0
|
||||
doc.root.xpath("NETWORK_QUOTA/NETWORK/LEASES").each do |e|
|
||||
e.content = "-1" if e.text.to_i == 0
|
||||
end
|
||||
|
||||
# Image quotas
|
||||
|
||||
doc.root.each_element("IMAGE_QUOTA/IMAGE/RVMS") do |e|
|
||||
e.text = "-1" if e.text.to_i == 0
|
||||
doc.root.xpath("IMAGE_QUOTA/IMAGE/RVMS").each do |e|
|
||||
e.content = "-1" if e.text.to_i == 0
|
||||
end
|
||||
|
||||
# Datastore quotas
|
||||
|
||||
doc.root.each_element("DATASTORE_QUOTA/DATASTORE/IMAGES") do |e|
|
||||
e.text = "-1" if e.text.to_i == 0
|
||||
doc.root.xpath("DATASTORE_QUOTA/DATASTORE/IMAGES").each do |e|
|
||||
e.content = "-1" if e.text.to_i == 0
|
||||
end
|
||||
|
||||
doc.root.each_element("DATASTORE_QUOTA/DATASTORE/SIZE") do |e|
|
||||
e.text = "-1" if e.text.to_i == 0
|
||||
doc.root.xpath("DATASTORE_QUOTA/DATASTORE/SIZE").each do |e|
|
||||
e.content = "-1" if e.text.to_i == 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -14,8 +14,7 @@
|
||||
# limitations under the License. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
require "rexml/document"
|
||||
include REXML
|
||||
require "nokogiri"
|
||||
|
||||
class String
|
||||
def red
|
||||
@ -39,6 +38,7 @@ module Migrator
|
||||
end
|
||||
|
||||
def up
|
||||
init_log_time()
|
||||
|
||||
########################################################################
|
||||
# Feature #1631: Add ACTION to history entries
|
||||
@ -47,49 +47,57 @@ module Migrator
|
||||
@db.run "ALTER TABLE vm_pool RENAME TO old_vm_pool;"
|
||||
@db.run "CREATE TABLE vm_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, last_poll INTEGER, state INTEGER, lcm_state INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER);"
|
||||
|
||||
@db.fetch("SELECT * FROM old_vm_pool") do |row|
|
||||
doc = Document.new(row[:body])
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_vm_pool") do |row|
|
||||
doc = Nokogiri::XML(row[:body])
|
||||
|
||||
doc.root.each_element("HISTORY_RECORDS/HISTORY") do |e|
|
||||
update_history(e)
|
||||
doc.root.xpath("HISTORY_RECORDS/HISTORY").each do |e|
|
||||
update_history(e)
|
||||
end
|
||||
|
||||
@db[:vm_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:last_poll => row[:last_poll],
|
||||
:state => row[:state],
|
||||
:lcm_state => row[:lcm_state],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
@db[:vm_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:last_poll => row[:last_poll],
|
||||
:state => row[:state],
|
||||
:lcm_state => row[:lcm_state],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_vm_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
@db.run "ALTER TABLE history RENAME TO old_history;"
|
||||
@db.run "CREATE TABLE history (vid INTEGER, seq INTEGER, body MEDIUMTEXT, stime INTEGER, etime INTEGER,PRIMARY KEY(vid,seq));"
|
||||
|
||||
@db.fetch("SELECT * FROM old_history") do |row|
|
||||
doc = Document.new(row[:body])
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_history") do |row|
|
||||
doc = Nokogiri::XML(row[:body])
|
||||
|
||||
doc.root.each_element("/HISTORY") do |e|
|
||||
update_history(e)
|
||||
doc.root.xpath("/HISTORY").each do |e|
|
||||
update_history(e)
|
||||
end
|
||||
|
||||
@db[:history].insert(
|
||||
:vid => row[:vid],
|
||||
:seq => row[:seq],
|
||||
:body => doc.root.to_s,
|
||||
:stime => row[:stime],
|
||||
:etime => row[:etime])
|
||||
end
|
||||
|
||||
@db[:history].insert(
|
||||
:vid => row[:vid],
|
||||
:seq => row[:seq],
|
||||
:body => doc.root.to_s,
|
||||
:stime => row[:stime],
|
||||
:etime => row[:etime])
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_history;"
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Banner for drivers renamed
|
||||
########################################################################
|
||||
@ -135,16 +143,18 @@ module Migrator
|
||||
end
|
||||
|
||||
def update_history(history_elem)
|
||||
history_elem.add_element("ACTION").text = "0" # NONE_ACTION
|
||||
# NONE_ACTION
|
||||
history_elem.add_child(
|
||||
history_elem.document.create_element("ACTION")).content = "0"
|
||||
|
||||
# History reason enum has changed from
|
||||
# NONE, ERROR, STOP_RESUME, USER, CANCEL to
|
||||
# NONE, ERROR, USER
|
||||
history_elem.each_element("REASON") do |reason_e|
|
||||
history_elem.xpath("REASON").each do |reason_e|
|
||||
reason = reason_e.text.to_i
|
||||
|
||||
if reason > 1 # STOP_RESUME, USER, CANCEL
|
||||
reason_e.text = "2" # USER
|
||||
if reason > 1 # STOP_RESUME, USER, CANCEL
|
||||
reason_e.content = "2" # USER
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -15,9 +15,9 @@
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
require 'fileutils'
|
||||
require 'rexml/document'
|
||||
require 'openssl'
|
||||
|
||||
require "nokogiri"
|
||||
|
||||
module Migrator
|
||||
def db_version
|
||||
@ -42,30 +42,35 @@ module Migrator
|
||||
puts "Please copy the files manually."
|
||||
end
|
||||
|
||||
init_log_time()
|
||||
|
||||
@db.run "ALTER TABLE user_pool RENAME TO old_user_pool;"
|
||||
@db.run "CREATE TABLE user_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, UNIQUE(name));"
|
||||
|
||||
@db.fetch("SELECT * FROM old_user_pool") do |row|
|
||||
doc = REXML::Document.new(row[:body])
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_user_pool") do |row|
|
||||
doc = Nokogiri::XML(row[:body])
|
||||
|
||||
doc.root.each_element("TEMPLATE") do |e|
|
||||
e.add_element("TOKEN_PASSWORD").text =
|
||||
OpenSSL::Digest::SHA1.hexdigest( rand().to_s )
|
||||
doc.root.at_xpath("TEMPLATE")
|
||||
.add_child(doc.create_element("TOKEN_PASSWORD"))
|
||||
.content = OpenSSL::Digest::SHA1.hexdigest( rand().to_s )
|
||||
|
||||
@db[:user_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:oid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
@db[:user_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:oid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_user_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Feature #1613
|
||||
########################################################################
|
||||
@ -73,27 +78,31 @@ module Migrator
|
||||
@db.run "ALTER TABLE datastore_pool RENAME TO old_datastore_pool;"
|
||||
@db.run "CREATE TABLE datastore_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, cid INTEGER, UNIQUE(name));"
|
||||
|
||||
@db.fetch("SELECT * FROM old_datastore_pool") do |row|
|
||||
doc = REXML::Document.new(row[:body])
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_datastore_pool") do |row|
|
||||
doc = Nokogiri::XML(row[:body])
|
||||
|
||||
doc.root.add_element("TOTAL_MB").text = "0"
|
||||
doc.root.add_element("FREE_MB").text = "0"
|
||||
doc.root.add_element("USED_MB").text = "0"
|
||||
doc.root.add_child(doc.create_element("TOTAL_MB")).content = "0"
|
||||
doc.root.add_child(doc.create_element("FREE_MB")).content = "0"
|
||||
doc.root.add_child(doc.create_element("USED_MB")).content = "0"
|
||||
|
||||
@db[:datastore_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u],
|
||||
:cid => row[:cid])
|
||||
@db[:datastore_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u],
|
||||
:cid => row[:cid])
|
||||
end
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_datastore_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
@ -15,6 +15,7 @@
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
require 'rexml/document'
|
||||
require 'nokogiri'
|
||||
|
||||
TM_MAD_CONF = {
|
||||
"dummy" => {
|
||||
@ -78,6 +79,8 @@ module Migrator
|
||||
|
||||
def up
|
||||
|
||||
init_log_time()
|
||||
|
||||
########################################################################
|
||||
# Feature #1742 & #1612
|
||||
########################################################################
|
||||
@ -85,29 +88,36 @@ module Migrator
|
||||
@db.run "ALTER TABLE user_pool RENAME TO old_user_pool;"
|
||||
@db.run "CREATE TABLE user_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, UNIQUE(name));"
|
||||
|
||||
@db.fetch("SELECT * FROM old_user_pool") do |row|
|
||||
doc = REXML::Document.new(row[:body])
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_user_pool") do |row|
|
||||
doc = Nokogiri::XML(row[:body])
|
||||
|
||||
doc.root.add_element("GROUPS").add_element("ID").text = row[:gid].to_s
|
||||
g_elem = doc.create_element("GROUPS")
|
||||
g_elem.add_child(doc.create_element("ID")).content = row[:gid].to_s
|
||||
|
||||
# oneadmin does not have quotas
|
||||
if row[:oid] != 0
|
||||
redo_vm_quotas(doc, "uid=#{row[:oid]}")
|
||||
doc.root.add_child(g_elem)
|
||||
|
||||
# oneadmin does not have quotas
|
||||
if row[:oid] != 0
|
||||
redo_vm_quotas(doc, "uid=#{row[:oid]}")
|
||||
end
|
||||
|
||||
@db[:user_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:oid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
@db[:user_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:oid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_user_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Feature #1612
|
||||
########################################################################
|
||||
@ -115,37 +125,41 @@ module Migrator
|
||||
@db.run "ALTER TABLE group_pool RENAME TO old_group_pool;"
|
||||
@db.run "CREATE TABLE group_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, UNIQUE(name));"
|
||||
|
||||
# oneadmin group does not have quotas
|
||||
@db.fetch("SELECT * FROM old_group_pool WHERE oid=0") do |row|
|
||||
@db[:group_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => row[:body],
|
||||
:uid => row[:oid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
@db.transaction do
|
||||
# oneadmin group does not have quotas
|
||||
@db.fetch("SELECT * FROM old_group_pool WHERE oid=0") do |row|
|
||||
@db[:group_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => row[:body],
|
||||
:uid => row[:oid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
@db.fetch("SELECT * FROM old_group_pool WHERE oid>0") do |row|
|
||||
doc = REXML::Document.new(row[:body])
|
||||
@db.fetch("SELECT * FROM old_group_pool WHERE oid>0") do |row|
|
||||
doc = Nokogiri::XML(row[:body])
|
||||
|
||||
redo_vm_quotas(doc, "gid=#{row[:oid]}")
|
||||
redo_vm_quotas(doc, "gid=#{row[:oid]}")
|
||||
|
||||
@db[:group_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:oid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
@db[:group_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:oid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_group_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Bug #2330 & Feature #1678
|
||||
########################################################################
|
||||
@ -154,61 +168,64 @@ module Migrator
|
||||
@db.run "CREATE TABLE datastore_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, cid INTEGER, UNIQUE(name));"
|
||||
|
||||
#tm_mads = {}
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_datastore_pool") do |row|
|
||||
doc = REXML::Document.new(row[:body])
|
||||
|
||||
@db.fetch("SELECT * FROM old_datastore_pool") do |row|
|
||||
doc = REXML::Document.new(row[:body])
|
||||
|
||||
doc.root.each_element("TEMPLATE/HOST") do |e|
|
||||
e.name = "BRIDGE_LIST"
|
||||
end
|
||||
|
||||
tm_mad = ""
|
||||
doc.root.each_element("TM_MAD"){ |e| tm_mad = e.text }
|
||||
|
||||
type = 0
|
||||
doc.root.each_element("TYPE"){ |e| type = e.text.to_i }
|
||||
|
||||
if (type == 1) # System DS
|
||||
doc.root.each_element("TEMPLATE") do |e|
|
||||
e.add_element("SHARED").text =
|
||||
(tm_mad == "ssh" ? "NO" : "YES")
|
||||
doc.root.each_element("TEMPLATE/HOST") do |e|
|
||||
e.name = "BRIDGE_LIST"
|
||||
end
|
||||
else
|
||||
#tm_mads[row[:oid].to_i] = tm_mad
|
||||
|
||||
conf = TM_MAD_CONF[tm_mad]
|
||||
tm_mad = ""
|
||||
doc.root.each_element("TM_MAD"){ |e| tm_mad = e.text }
|
||||
|
||||
if conf.nil?
|
||||
puts
|
||||
puts "ATTENTION: manual intervention required".red
|
||||
puts <<-END
|
||||
type = 0
|
||||
doc.root.each_element("TYPE"){ |e| type = e.text.to_i }
|
||||
|
||||
if (type == 1) # System DS
|
||||
doc.root.each_element("TEMPLATE") do |e|
|
||||
e.add_element("SHARED").text =
|
||||
(tm_mad == "ssh" ? "NO" : "YES")
|
||||
end
|
||||
else
|
||||
#tm_mads[row[:oid].to_i] = tm_mad
|
||||
|
||||
conf = TM_MAD_CONF[tm_mad]
|
||||
|
||||
if conf.nil?
|
||||
puts
|
||||
puts "ATTENTION: manual intervention required".red
|
||||
puts <<-END
|
||||
The Datastore ##{row[:oid]} #{row[:name]} is using the
|
||||
custom TM MAD '#{tm_mad}'. You will need to define new
|
||||
configuration parameters in oned.conf for this driver, see
|
||||
http://opennebula.org/documentation:rel4.4:upgrade
|
||||
END
|
||||
else
|
||||
doc.root.each_element("TEMPLATE") do |e|
|
||||
e.add_element("LN_TARGET").text = conf[:ln_target]
|
||||
e.add_element("CLONE_TARGET").text = conf[:clone_target]
|
||||
END
|
||||
else
|
||||
doc.root.each_element("TEMPLATE") do |e|
|
||||
e.add_element("LN_TARGET").text = conf[:ln_target]
|
||||
e.add_element("CLONE_TARGET").text = conf[:clone_target]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@db[:datastore_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u],
|
||||
:cid => row[:cid])
|
||||
@db[:datastore_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u],
|
||||
:cid => row[:cid])
|
||||
end
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_datastore_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Feature #2392
|
||||
########################################################################
|
||||
@ -216,49 +233,57 @@ http://opennebula.org/documentation:rel4.4:upgrade
|
||||
@db.run "ALTER TABLE vm_pool RENAME TO old_vm_pool;"
|
||||
@db.run "CREATE TABLE vm_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, last_poll INTEGER, state INTEGER, lcm_state INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER);"
|
||||
|
||||
@db.fetch("SELECT * FROM old_vm_pool") do |row|
|
||||
doc = REXML::Document.new(row[:body])
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_vm_pool") do |row|
|
||||
doc = Nokogiri::XML(row[:body])
|
||||
|
||||
doc.root.each_element("HISTORY_RECORDS/HISTORY") do |e|
|
||||
update_history(e)
|
||||
doc.root.xpath("HISTORY_RECORDS/HISTORY").each do |e|
|
||||
update_history(e)
|
||||
end
|
||||
|
||||
@db[:vm_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:last_poll => row[:last_poll],
|
||||
:state => row[:state],
|
||||
:lcm_state => row[:lcm_state],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
@db[:vm_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:last_poll => row[:last_poll],
|
||||
:state => row[:state],
|
||||
:lcm_state => row[:lcm_state],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u])
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_vm_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
@db.run "ALTER TABLE history RENAME TO old_history;"
|
||||
@db.run "CREATE TABLE history (vid INTEGER, seq INTEGER, body MEDIUMTEXT, stime INTEGER, etime INTEGER,PRIMARY KEY(vid,seq));"
|
||||
|
||||
@db.fetch("SELECT * FROM old_history") do |row|
|
||||
doc = REXML::Document.new(row[:body])
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_history") do |row|
|
||||
doc = Nokogiri::XML(row[:body])
|
||||
|
||||
doc.root.each_element("/HISTORY") do |e|
|
||||
update_history(e)
|
||||
doc.root.xpath("/HISTORY").each do |e|
|
||||
update_history(e)
|
||||
end
|
||||
|
||||
@db[:history].insert(
|
||||
:vid => row[:vid],
|
||||
:seq => row[:seq],
|
||||
:body => doc.root.to_s,
|
||||
:stime => row[:stime],
|
||||
:etime => row[:etime])
|
||||
end
|
||||
|
||||
@db[:history].insert(
|
||||
:vid => row[:vid],
|
||||
:seq => row[:seq],
|
||||
:body => doc.root.to_s,
|
||||
:stime => row[:stime],
|
||||
:etime => row[:etime])
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_history;"
|
||||
|
||||
log_time()
|
||||
|
||||
########################################################################
|
||||
# Feature #1678
|
||||
########################################################################
|
||||
@ -266,29 +291,32 @@ http://opennebula.org/documentation:rel4.4:upgrade
|
||||
@db.run "ALTER TABLE host_pool RENAME TO old_host_pool;"
|
||||
@db.run "CREATE TABLE host_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, state INTEGER, last_mon_time INTEGER, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER, cid INTEGER, UNIQUE(name));"
|
||||
|
||||
@db.fetch("SELECT * FROM old_host_pool") do |row|
|
||||
doc = REXML::Document.new(row[:body])
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_host_pool") do |row|
|
||||
doc = Nokogiri::XML(row[:body])
|
||||
|
||||
doc.root.each_element("HOST_SHARE") do |e|
|
||||
e.add_element("DATASTORES")
|
||||
doc.root.at_xpath("HOST_SHARE")
|
||||
.add_child(doc.create_element("DATASTORES"))
|
||||
|
||||
@db[:host_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:state => row[:state],
|
||||
:last_mon_time => row[:last_mon_time],
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u],
|
||||
:cid => row[:cid])
|
||||
end
|
||||
|
||||
@db[:host_pool].insert(
|
||||
:oid => row[:oid],
|
||||
:name => row[:name],
|
||||
:body => doc.root.to_s,
|
||||
:state => row[:state],
|
||||
:last_mon_time => row[:last_mon_time],
|
||||
:uid => row[:uid],
|
||||
:gid => row[:gid],
|
||||
:owner_u => row[:owner_u],
|
||||
:group_u => row[:group_u],
|
||||
:other_u => row[:other_u],
|
||||
:cid => row[:cid])
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_host_pool;"
|
||||
|
||||
log_time()
|
||||
|
||||
# TODO:
|
||||
# For Feature #1678, VMs have new disk elements:
|
||||
# VM/DISK/CLONE_TARGET
|
||||
@ -309,20 +337,23 @@ http://opennebula.org/documentation:rel4.4:upgrade
|
||||
vms_limit = "-1"
|
||||
vol_limit = "-1"
|
||||
|
||||
doc.root.each_element("VM_QUOTA/VM/CPU") { |e|
|
||||
doc.root.xpath("VM_QUOTA/VM/CPU").each { |e|
|
||||
cpu_limit = e.text
|
||||
}
|
||||
|
||||
doc.root.each_element("VM_QUOTA/VM/MEMORY") { |e|
|
||||
doc.root.xpath("VM_QUOTA/VM/MEMORY").each { |e|
|
||||
mem_limit = e.text
|
||||
}
|
||||
|
||||
doc.root.each_element("VM_QUOTA/VM/VMS") { |e|
|
||||
doc.root.xpath("VM_QUOTA/VM/VMS").each { |e|
|
||||
vms_limit = e.text
|
||||
}
|
||||
|
||||
doc.root.delete_element("VM_QUOTA")
|
||||
vm_quota = doc.root.add_element("VM_QUOTA")
|
||||
doc.root.xpath("VM_QUOTA").each { |e|
|
||||
e.remove
|
||||
}
|
||||
|
||||
vm_quota = doc.root.add_child(doc.create_element("VM_QUOTA"))
|
||||
|
||||
# VM quotas
|
||||
cpu_used = 0
|
||||
@ -331,26 +362,26 @@ http://opennebula.org/documentation:rel4.4:upgrade
|
||||
vol_used = 0
|
||||
|
||||
@db.fetch("SELECT body FROM vm_pool WHERE #{where_filter} AND state<>6") do |vm_row|
|
||||
vmdoc = REXML::Document.new(vm_row[:body])
|
||||
vmdoc = Nokogiri::XML(vm_row[:body])
|
||||
|
||||
# VM quotas
|
||||
vmdoc.root.each_element("TEMPLATE/CPU") { |e|
|
||||
vmdoc.root.xpath("TEMPLATE/CPU").each { |e|
|
||||
cpu_used += e.text.to_f
|
||||
}
|
||||
|
||||
vmdoc.root.each_element("TEMPLATE/MEMORY") { |e|
|
||||
vmdoc.root.xpath("TEMPLATE/MEMORY").each { |e|
|
||||
mem_used += e.text.to_i
|
||||
}
|
||||
|
||||
vmdoc.root.each_element("TEMPLATE/DISK") { |e|
|
||||
vmdoc.root.xpath("TEMPLATE/DISK").each { |e|
|
||||
type = ""
|
||||
|
||||
e.each_element("TYPE") { |t_elem|
|
||||
e.xpath("TYPE").each { |t_elem|
|
||||
type = t_elem.text.upcase
|
||||
}
|
||||
|
||||
if ( type == "SWAP" || type == "FS")
|
||||
e.each_element("SIZE") { |size_elem|
|
||||
e.xpath("SIZE").each { |size_elem|
|
||||
vol_used += size_elem.text.to_i
|
||||
}
|
||||
end
|
||||
@ -363,38 +394,40 @@ http://opennebula.org/documentation:rel4.4:upgrade
|
||||
cpu_limit != "-1" || mem_limit != "-1" || vms_limit != "-1" || vol_limit != "-1" )
|
||||
|
||||
# VM quotas
|
||||
vm_elem = vm_quota.add_element("VM")
|
||||
vm_elem = vm_quota.add_child(doc.create_element("VM"))
|
||||
|
||||
vm_elem.add_element("CPU").text = cpu_limit
|
||||
vm_elem.add_element("CPU_USED").text = sprintf('%.2f', cpu_used)
|
||||
vm_elem.add_child(doc.create_element("CPU")).content = cpu_limit
|
||||
vm_elem.add_child(doc.create_element("CPU_USED")).content = sprintf('%.2f', cpu_used)
|
||||
|
||||
vm_elem.add_element("MEMORY").text = mem_limit
|
||||
vm_elem.add_element("MEMORY_USED").text = mem_used.to_s
|
||||
vm_elem.add_child(doc.create_element("MEMORY")).content = mem_limit
|
||||
vm_elem.add_child(doc.create_element("MEMORY_USED")).content = mem_used.to_s
|
||||
|
||||
vm_elem.add_element("VMS").text = vms_limit
|
||||
vm_elem.add_element("VMS_USED").text = vms_used.to_s
|
||||
vm_elem.add_child(doc.create_element("VMS")).content = vms_limit
|
||||
vm_elem.add_child(doc.create_element("VMS_USED")).content = vms_used.to_s
|
||||
|
||||
vm_elem.add_element("VOLATILE_SIZE").text = vol_limit
|
||||
vm_elem.add_element("VOLATILE_SIZE_USED").text = vol_used.to_s
|
||||
vm_elem.add_child(doc.create_element("VOLATILE_SIZE")).content = vol_limit
|
||||
vm_elem.add_child(doc.create_element("VOLATILE_SIZE_USED")).content = vol_used.to_s
|
||||
end
|
||||
end
|
||||
|
||||
def update_history(history_elem)
|
||||
hid = nil
|
||||
|
||||
history_elem.each_element("HID") do |e|
|
||||
history_elem.xpath("HID").each do |e|
|
||||
hid = e.text
|
||||
end
|
||||
|
||||
new_elem = history_elem.add_element("CID")
|
||||
new_elem.text = "-1" # Cluster None
|
||||
new_elem = history_elem.add_child(
|
||||
history_elem.document.create_element("CID"))
|
||||
|
||||
new_elem.content = "-1" # Cluster None
|
||||
|
||||
if hid.nil?
|
||||
return
|
||||
end
|
||||
|
||||
@db.fetch("SELECT cid FROM host_pool WHERE oid = #{hid}") do |row|
|
||||
new_elem.text = row[:cid].to_s
|
||||
new_elem.content = row[:cid].to_s
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -16,6 +16,8 @@
|
||||
|
||||
require 'onedb_backend'
|
||||
|
||||
LOG_TIME = false
|
||||
|
||||
class OneDB
|
||||
def initialize(ops)
|
||||
if ops[:backend] == :sqlite
|
||||
@ -133,6 +135,8 @@ class OneDB
|
||||
result = nil
|
||||
i = 0
|
||||
|
||||
timea = Time.now
|
||||
|
||||
while ( matches.size > 0 )
|
||||
if ( matches.size > 1 )
|
||||
raise "There are more than one file that match \
|
||||
@ -143,10 +147,18 @@ class OneDB
|
||||
|
||||
puts " > Running migrator #{file}" if ops[:verbose]
|
||||
|
||||
time0 = Time.now
|
||||
|
||||
load(file)
|
||||
@backend.extend Migrator
|
||||
result = @backend.up
|
||||
|
||||
time1 = Time.now
|
||||
|
||||
if LOG_TIME
|
||||
puts " > Time for #{file}: #{time1 - time0}s"
|
||||
end
|
||||
|
||||
if !result
|
||||
raise "Error while upgrading from #{version} to " <<
|
||||
" #{@backend.db_version}"
|
||||
@ -166,6 +178,12 @@ class OneDB
|
||||
puts "Database already uses version #{version}"
|
||||
end
|
||||
|
||||
timeb = Time.now
|
||||
|
||||
if LOG_TIME
|
||||
puts " > Total time: #{timeb - timea}s" if ops[:verbose]
|
||||
end
|
||||
|
||||
return 0
|
||||
|
||||
rescue Exception => e
|
||||
|
@ -129,6 +129,20 @@ class OneDBBacKEnd
|
||||
|
||||
return found
|
||||
end
|
||||
|
||||
def init_log_time()
|
||||
@block_n = 0
|
||||
@time0 = Time.now
|
||||
end
|
||||
|
||||
def log_time()
|
||||
if LOG_TIME
|
||||
@time1 = Time.now
|
||||
puts " > #{db_version} Time for block #{@block_n}: #{@time1 - @time0}s"
|
||||
@time0 = Time.now
|
||||
@block_n += 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class BackEndMySQL < OneDBBacKEnd
|
||||
|
Loading…
x
Reference in New Issue
Block a user