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

B #6297: Fix local characters for onedb (#2699)

* Fix local characters for onedb fsck
* Fix charset for onedb sqlite2mysql
This commit is contained in:
Pavel Czerný 2023-08-29 11:36:52 +02:00 committed by GitHub
parent a9e6e18177
commit 0fc9f457f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 29 additions and 22 deletions

View File

@ -503,7 +503,6 @@ AllCops:
- src/onedb/local/5.10.0_to_5.12.0.rb
- src/onedb/onedb_live.rb
- src/onedb/onedb_backend.rb
- src/onedb/sqlite2mysql.rb
- src/market_mad/one_market.rb
- src/tm_mad/one_tm.rb
- src/oca/ruby/opennebula/flow/grammar.rb

View File

@ -61,11 +61,11 @@ module OneDBFsck
query = "SELECT body FROM vm_pool WHERE oid=#{row[:vid]}"
@db.fetch(query) do |vm_row|
vm_doc = nokogiri_doc(vm_row[:body])
vm_doc = nokogiri_doc(vm_row[:body], 'vm_pool')
etime = vm_doc.root.at_xpath('ETIME').text.to_i
end
history_doc = nokogiri_doc(row[:body])
history_doc = nokogiri_doc(row[:body], 'history')
['RETIME', 'ESTIME', 'EETIME', 'ETIME'].each do |att|
elem = history_doc.root.at_xpath(att)
@ -91,7 +91,7 @@ module OneDBFsck
@db.fetch('SELECT * ' \
'FROM history ' \
'WHERE etime > 0') do |row|
history_doc = nokogiri_doc(row[:body])
history_doc = nokogiri_doc(row[:body], 'history')
retime = history_doc.root.at_xpath('RETIME')
estime = history_doc.root.at_xpath('ESTIME').text.to_i
@ -123,7 +123,7 @@ module OneDBFsck
'(SELECT oid FROM vm_pool WHERE state=3) AND ' \
'seq = (SELECT MAX(seq) FROM history AS subhistory ' \
'WHERE history.vid=subhistory.vid))') do |row|
history_doc = nokogiri_doc(row[:body])
history_doc = nokogiri_doc(row[:body], 'history')
retime = history_doc.root.at_xpath('RETIME')
if retime.text.to_i != 0

View File

@ -86,7 +86,7 @@ module OneDBFsck
# DATA: FIX: Calculate the host's xml and write them to host_pool_new
@db[:host_pool].each do |row|
host_doc = nokogiri_doc(row[:body])
host_doc = nokogiri_doc(row[:body], 'host_pool')
hid = row[:oid]
counters_host = counters[:host][hid]

View File

@ -8,7 +8,7 @@ module OneDBFsck
@fixes_host_cluster = {}
@db.fetch('SELECT oid,body FROM network_pool') do |row|
doc = nokogiri_doc(row[:body])
doc = nokogiri_doc(row[:body], 'network_pool')
doc.root.xpath('CLUSTERS/ID').each do |e|
cluster_id = e.text.to_i
@ -33,7 +33,7 @@ module OneDBFsck
@fixes_network = {}
@db[:network_pool].each do |row|
doc = nokogiri_doc(row[:body])
doc = nokogiri_doc(row[:body], 'network_pool')
oid = row[:oid]
used_leases = doc.root.at_xpath('USED_LEASES').text.to_i
@ -76,7 +76,7 @@ module OneDBFsck
@db.fetch('SELECT cid FROM cluster_network_relation where ' \
"oid=#{id}") do |row|
doc = nokogiri_doc(body)
doc = nokogiri_doc(body, 'cluster_network_relation')
clusters = doc.root.at_xpath('CLUSTERS').children
if clusters.find {|n| n.text == row[:cid].to_s }.nil?
@ -108,7 +108,7 @@ module OneDBFsck
# Init vnet counters
def init_network_counters
@db.fetch('SELECT oid,body FROM network_pool') do |row|
doc = nokogiri_doc(row[:body])
doc = nokogiri_doc(row[:body], 'network_pool')
ar_leases = {}
@ -128,7 +128,7 @@ module OneDBFsck
query = 'SELECT oid,body,pid FROM network_pool WHERE pid<>-1'
@db.fetch(query) do |row|
doc = nokogiri_doc(row[:body])
doc = nokogiri_doc(row[:body], 'network_pool')
parent_vnet = doc.root.at_xpath('PARENT_NETWORK_ID').text.to_i

View File

@ -201,7 +201,7 @@ module OneDBFsck
img_usage = {}
@db.fetch(query) do |vm_row|
vmdoc = nokogiri_doc(vm_row[:body])
vmdoc = nokogiri_doc(vm_row[:body], 'vm_pool')
vmdoc.root.xpath('TEMPLATE/DISK/IMAGE_ID').each do |e|
img_usage[e.text] = 0 if img_usage[e.text].nil?
@ -259,7 +259,7 @@ module OneDBFsck
datastore_usage = {}
@db.fetch(query) do |vm_row|
vmdoc = nokogiri_doc(vm_row[:body])
vmdoc = nokogiri_doc(vm_row[:body], 'vm_pool')
vmdoc.root.xpath('TEMPLATE/DISK').each do |e|
type = ''
@ -352,7 +352,7 @@ module OneDBFsck
vms = resources[:vms]
@db.fetch(query) do |vm_row|
vmdoc = nokogiri_doc(vm_row[:body])
vmdoc = nokogiri_doc(vm_row[:body], 'vm_pool')
vmdoc.root.xpath('TEMPLATE/CPU').each do |e|
# truncate to 2 decimals
@ -438,7 +438,7 @@ module OneDBFsck
vnet_usage = {}
@db.fetch(queries[0]) do |vm_row|
vmdoc = nokogiri_doc(vm_row[:body])
vmdoc = nokogiri_doc(vm_row[:body], 'vm_pool')
vmdoc.root.xpath('TEMPLATE/NIC/NETWORK_ID').each do |e|
next if e.text.empty?
@ -473,7 +473,7 @@ module OneDBFsck
# Calculate quotas for reserved networks
@db.fetch(queries[2]) do |vnet_row|
vnet_doc = nokogiri_doc(vnet_row[:body])
vnet_doc = nokogiri_doc(vnet_row[:body], 'network_pool')
parent_id = vnet_doc.root.xpath('PARENT_NETWORK_ID')
parent_id = parent_id.text unless parent_id.nil?

View File

@ -11,7 +11,7 @@ module OneDBFsck
# DATA: Aggregate information of the RUNNING vms
@db.fetch("SELECT oid,body FROM vm_pool WHERE state<>6") do |row|
vm_doc = nokogiri_doc(row[:body])
vm_doc = nokogiri_doc(row[:body], 'vm_pool')
state = vm_doc.root.at_xpath('STATE').text.to_i
lcm_state = vm_doc.root.at_xpath('LCM_STATE').text.to_i
@ -199,7 +199,7 @@ module OneDBFsck
# DATA: search history for VMMMAD and TMMAD to translate
@db.fetch("SELECT * FROM history WHERE vid=#{row[:oid]}") do |hrow|
# hdoc = Nokogiri::XML(hrow[:body],nil,NOKOGIRI_ENCODING){|c| c.default_xml.noblanks}
hdoc = nokogiri_doc(hrow[:body])
hdoc = nokogiri_doc(hrow[:body], 'history')
found = false

View File

@ -5,7 +5,7 @@ module OneDBFsck
# DATA: Aggregate information of the RUNNING vms
@db.fetch("SELECT oid,body FROM vrouter_pool") do |row|
vrouter_doc = nokogiri_doc(row[:body])
vrouter_doc = nokogiri_doc(row[:body], 'vrouter_pool')
# DATA: VNets used by this Virtual Router
vrouter_doc.root.xpath("TEMPLATE/NIC").each do |nic|

View File

@ -164,7 +164,7 @@ class OneDBBacKEnd
return @db
end
def nokogiri_doc(body, table = nil)
def nokogiri_doc(body, table)
nk_enconding = NOKOGIRI_ENCODING
unless table.nil?

View File

@ -1,3 +1,4 @@
# Migrate SQLite Database to MySQL
module Sqlite2MySQL
PROGRESS = 1000
@ -5,6 +6,8 @@ module Sqlite2MySQL
def convert(sqlite_db)
puts "Starting migration from SQLite to MySQL\n"
dst_encoding = table_to_nk(encoding)
sqlite_db.tables.each do |table|
@db[table].delete
@ -14,8 +17,12 @@ module Sqlite2MySQL
@db.transaction do
i=0
sqlite_db[table].each do |row|
if table.to_s == 'logdb'
row[:fed_index] = 2**64-1 if row[:fed_index] >= 2**64
if table.to_s == 'logdb' && row[:fed_index] >= 2**64
row[:fed_index] = 2**64-1
end
if dst_encoding != 'UTF-8'
row.each {|k, v| row[k] = v.force_encoding(dst_encoding) if v.is_a? String }
end
@db[table].insert(row)
@ -35,4 +42,5 @@ module Sqlite2MySQL
puts "\nMigration successful."
end
end