diff --git a/src/onedb/local/4.10.3_to_4.11.80.rb b/src/onedb/local/4.10.3_to_4.11.80.rb index e690c26b06..046eac83ea 100644 --- a/src/onedb/local/4.10.3_to_4.11.80.rb +++ b/src/onedb/local/4.10.3_to_4.11.80.rb @@ -131,6 +131,52 @@ module Migrator log_time() + ######################################################################## + # VM previous status + ######################################################################## + + @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.run "INSERT INTO vm_pool SELECT * FROM old_vm_pool WHERE state = 6;" + + log_time() + + @db.transaction do + @db.fetch("SELECT * FROM old_vm_pool WHERE state<>6") do |row| + doc = Nokogiri::XML(row[:body]){|c| c.default_xml.noblanks} + + ["STATE", "LCM_STATE"].each do |ename| + prev_elem = doc.root.at_xpath("PREV_#{ename}") + + if prev_elem.nil? + prev_elem = doc.root.add_child( + doc.create_element("PREV_#{ename}")) + + prev_elem.content = doc.root.at_xpath(ename).text + end + 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 + end + + @db.run "DROP TABLE old_vm_pool;" + + log_time() + return true end end diff --git a/src/vm/VirtualMachine.cc b/src/vm/VirtualMachine.cc index efe3ed748e..69b5d72670 100644 --- a/src/vm/VirtualMachine.cc +++ b/src/vm/VirtualMachine.cc @@ -3769,8 +3769,8 @@ int VirtualMachine::from_xml(const string &xml_str) state = static_cast(istate); lcm_state = static_cast(ilcmstate); - rc += xpath(istate, "/VM/PREV_STATE", 0); - rc += xpath(ilcmstate, "/VM/PREV_LCM_STATE", 0); + xpath(istate, "/VM/PREV_STATE", istate); + xpath(ilcmstate, "/VM/PREV_LCM_STATE", ilcmstate); prev_state = static_cast(istate); prev_lcm_state = static_cast(ilcmstate);