mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-22 18:50:08 +03:00
F #5005: Add migrator for new HISTORY fields
This commit is contained in:
parent
1b974daf27
commit
3dbe3839f9
@ -28,33 +28,35 @@ require 'db_schema'
|
||||
include OpenNebula
|
||||
|
||||
module Migrator
|
||||
def db_version
|
||||
"5.3.80"
|
||||
end
|
||||
def db_version
|
||||
"5.3.80"
|
||||
end
|
||||
|
||||
def one_version
|
||||
"OpenNebula 5.3.80"
|
||||
end
|
||||
def one_version
|
||||
"OpenNebula 5.3.80"
|
||||
end
|
||||
|
||||
def up
|
||||
init_log_time()
|
||||
def up
|
||||
init_log_time()
|
||||
|
||||
feature_4901()
|
||||
feature_4901()
|
||||
|
||||
log_time()
|
||||
feature_5005()
|
||||
|
||||
return true
|
||||
end
|
||||
log_time()
|
||||
|
||||
private
|
||||
return true
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def xpath(doc, sxpath)
|
||||
element = doc.root.at_xpath(sxpath)
|
||||
if !element.nil?
|
||||
element.text
|
||||
else
|
||||
""
|
||||
end
|
||||
element = doc.root.at_xpath(sxpath)
|
||||
if !element.nil?
|
||||
element.text
|
||||
else
|
||||
""
|
||||
end
|
||||
end
|
||||
|
||||
############################################################################
|
||||
@ -62,44 +64,71 @@ module Migrator
|
||||
# MAX_CPU and MAX_MEM when RESERVED_CPU/MEM is updated
|
||||
############################################################################
|
||||
def feature_4901
|
||||
@db.run "ALTER TABLE host_pool RENAME TO old_host_pool;"
|
||||
@db.run host_pool_schema()
|
||||
@db.run "ALTER TABLE host_pool RENAME TO old_host_pool;"
|
||||
@db.run host_pool_schema()
|
||||
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_host_pool") do |row|
|
||||
doc = Nokogiri::XML(row[:body], nil, NOKOGIRI_ENCODING) { |c|
|
||||
c.default_xml.noblanks
|
||||
}
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_host_pool") do |row|
|
||||
doc = Nokogiri::XML(row[:body], nil, NOKOGIRI_ENCODING) { |c|
|
||||
c.default_xml.noblanks
|
||||
}
|
||||
|
||||
rcpu = xpath(doc, "TEMPLATE/RESERVED_CPU").to_i
|
||||
rmem = xpath(doc, "TEMPLATE/RESERVED_MEM").to_i
|
||||
rcpu = xpath(doc, "TEMPLATE/RESERVED_CPU").to_i
|
||||
rmem = xpath(doc, "TEMPLATE/RESERVED_MEM").to_i
|
||||
|
||||
total_cpu = xpath(doc, "HOST_SHARE/MAX_CPU").to_i + rcpu
|
||||
total_mem = xpath(doc, "HOST_SHARE/MAX_MEM").to_i + rmem
|
||||
total_cpu = xpath(doc, "HOST_SHARE/MAX_CPU").to_i + rcpu
|
||||
total_mem = xpath(doc, "HOST_SHARE/MAX_MEM").to_i + rmem
|
||||
|
||||
total_cpu_e = doc.create_element "TOTAL_CPU", total_cpu
|
||||
total_mem_e = doc.create_element "TOTAL_MEM", total_mem
|
||||
total_cpu_e = doc.create_element "TOTAL_CPU", total_cpu
|
||||
total_mem_e = doc.create_element "TOTAL_MEM", total_mem
|
||||
|
||||
host_share = doc.root.at_xpath("HOST_SHARE")
|
||||
host_share.add_child(total_cpu_e)
|
||||
host_share.add_child(total_mem_e)
|
||||
host_share = doc.root.at_xpath("HOST_SHARE")
|
||||
host_share.add_child(total_cpu_e)
|
||||
host_share.add_child(total_mem_e)
|
||||
|
||||
@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])
|
||||
row[:body] = doc.root.to_s
|
||||
|
||||
@db[:host_pool].insert(row)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@db.run "DROP TABLE old_host_pool;"
|
||||
@db.run "DROP TABLE old_host_pool;"
|
||||
end
|
||||
|
||||
############################################################################
|
||||
# Feature 5005.
|
||||
# Adds UID, GID and REQUEST_ID to history records
|
||||
############################################################################
|
||||
def feature_5005
|
||||
@db.run "ALTER TABLE vm_pool RENAME TO old_vm_pool;"
|
||||
@db.run host_pool_schema()
|
||||
|
||||
@db.transaction do
|
||||
@db.fetch("SELECT * FROM old_vm_pool") do |row|
|
||||
|
||||
doc = Nokogiri::XML(row[:body], nil, NOKOGIRI_ENCODING) { |c|
|
||||
c.default_xml.noblanks
|
||||
}
|
||||
|
||||
doc.root.xpath(HISTORY_RECORDS/HISTORY).each do |h|
|
||||
reason = h.xpath("REASON")
|
||||
reason.unlink if !reason.nil?
|
||||
|
||||
uid = doc.create_element "UID", -1
|
||||
gid = doc.create_element "GID", -1
|
||||
rid = doc.create_element "REQUEST_ID", -1
|
||||
|
||||
h.add_child(uid)
|
||||
h.add_child(gid)
|
||||
h.add_child(rid)
|
||||
end
|
||||
|
||||
row[:body] = doc.root.to_s
|
||||
|
||||
@db[:vm_pool].insert(row)
|
||||
end
|
||||
|
||||
end
|
||||
@db.run "DROP TABLE old_vm_pool;"
|
||||
end
|
||||
end
|
||||
|
@ -45,4 +45,22 @@ module Migrator
|
||||
'cid INTEGER);'
|
||||
end
|
||||
end
|
||||
|
||||
def vm_pool_schema
|
||||
case db_version()
|
||||
when "4.5.80"
|
||||
when "4.7.80"
|
||||
when "4.9.80"
|
||||
when "4.10.3"
|
||||
when "4.11.80"
|
||||
when "4.13.80"
|
||||
when "4.13.85"
|
||||
when "4.90.0"
|
||||
when "5.3.80"
|
||||
'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);'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user