1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

Bug #4611: Fix missing zone_id in market after migration

(cherry picked from commit 02494be37878492018bb8f130a46e400ead89e78)
This commit is contained in:
Carlos Martín 2016-07-11 12:54:24 +02:00
parent a7fe7e5468
commit a419845a2f
2 changed files with 28 additions and 8 deletions

View File

@ -1355,16 +1355,18 @@ EOT
@db.fetch("SELECT oid,body FROM marketplace_pool") do |row|
market_id = row[:oid]
doc = Document.new(row[:body])
doc = Nokogiri::XML(row[:body],nil,NOKOGIRI_ENCODING){|c| c.default_xml.noblanks}
apps_elem = doc.root.elements.delete("MARKETPLACEAPPS")
apps_elem = doc.root.at_xpath("MARKETPLACEAPPS")
apps_elem.remove if !apps_elem.nil?
apps_new_elem = doc.root.add_element("MARKETPLACEAPPS")
apps_new_elem = doc.create_element("MARKETPLACEAPPS")
doc.root.add_child(apps_new_elem)
error = false
marketplace[market_id][:apps].each do |id|
id_elem = apps_elem.elements.delete("ID[.=#{id}]")
id_elem = apps_elem.at_xpath("ID[.=#{id}]")
if id_elem.nil?
error = true
@ -1372,12 +1374,14 @@ EOT
log_error(
"Marketplace App #{id} is missing from Marketplace #{market_id} "<<
"app id list")
else
id_elem.remove
end
apps_new_elem.add_element("ID").text = id.to_s
apps_new_elem.add_child(doc.create_element("ID")).content = id.to_s
end
apps_elem.each_element("ID") do |id_elem|
apps_elem.xpath("ID").each do |id_elem|
error = true
log_error(
@ -1385,7 +1389,23 @@ EOT
"app id list, but it should not")
end
markets_fix[row[:oid]] = doc.root.to_s
zone_elem = doc.root.at_xpath("ZONE_ID")
if (zone_elem.nil? || zone_elem.text == "-1")
error = true
log_error("Marketplace #{market_id} has an invalid ZONE_ID. Will be set to 0")
if (zone_elem.nil?)
zone_elem = doc.root.add_child(doc.create_element("ZONE_ID"))
end
zone_elem.content = "0"
end
if (error)
markets_fix[row[:oid]] = doc.root.to_s
end
end
if !db_version[:is_slave]

View File

@ -178,7 +178,7 @@ module Migrator
@db.run "CREATE TABLE marketplace_pool (oid INTEGER PRIMARY KEY, name VARCHAR(128), body MEDIUMTEXT, uid INTEGER, gid INTEGER, owner_u INTEGER, group_u INTEGER, other_u INTEGER);"
@db.run "INSERT INTO marketplace_pool VALUES(0,'OpenNebula Public','<MARKETPLACE><ID>0</ID><UID>0</UID><GID>0</GID><UNAME>#{oneadmin_uname}</UNAME><GNAME>#{oneadmin_gname}</GNAME><NAME>OpenNebula Public</NAME><MARKET_MAD><![CDATA[one]]></MARKET_MAD><TOTAL_MB>0</TOTAL_MB><FREE_MB>0</FREE_MB><USED_MB>0</USED_MB><MARKETPLACEAPPS></MARKETPLACEAPPS><PERMISSIONS><OWNER_U>1</OWNER_U><OWNER_M>1</OWNER_M><OWNER_A>1</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><TEMPLATE><DESCRIPTION><![CDATA[OpenNebula Systems MarketPlace]]></DESCRIPTION></TEMPLATE></MARKETPLACE>',0,0,1,1,1);"
@db.run "INSERT INTO marketplace_pool VALUES(0,'OpenNebula Public','<MARKETPLACE><ID>0</ID><UID>0</UID><GID>0</GID><UNAME>#{oneadmin_uname}</UNAME><GNAME>#{oneadmin_gname}</GNAME><NAME>OpenNebula Public</NAME><ZONE_ID><![CDATA[0]]></ZONE_ID><MARKET_MAD><![CDATA[one]]></MARKET_MAD><TOTAL_MB>0</TOTAL_MB><FREE_MB>0</FREE_MB><USED_MB>0</USED_MB><MARKETPLACEAPPS></MARKETPLACEAPPS><PERMISSIONS><OWNER_U>1</OWNER_U><OWNER_M>1</OWNER_M><OWNER_A>1</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><TEMPLATE><DESCRIPTION><![CDATA[OpenNebula Systems MarketPlace]]></DESCRIPTION></TEMPLATE></MARKETPLACE>',0,0,1,1,1);"
@db.run "INSERT INTO pool_control VALUES('marketplace_pool',99);"