mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-16 22:50:10 +03:00
parent
fc01c2b480
commit
eeee99a7cd
@ -496,7 +496,6 @@ AllCops:
|
||||
- src/cloud/ec2/lib/econe_application.rb
|
||||
- src/onedb/database_schema.rb
|
||||
- src/onedb/fsck/image.rb
|
||||
- src/onedb/fsck/history.rb
|
||||
- src/onedb/fsck/vrouter.rb
|
||||
- src/onedb/fsck/pool_control.rb
|
||||
- src/onedb/fsck/marketplace.rb
|
||||
|
@ -1,5 +1,7 @@
|
||||
|
||||
# History module
|
||||
module OneDBFsck
|
||||
|
||||
# Check history records
|
||||
def check_history
|
||||
check_history_etime
|
||||
|
||||
@ -18,8 +20,14 @@ module OneDBFsck
|
||||
# Query to select history elements that:
|
||||
# - have etime = 0
|
||||
# - are not the last seq
|
||||
@db.fetch("SELECT vid,seq FROM history WHERE (etime = 0 AND seq <> (SELECT MAX(seq) FROM history AS subhistory WHERE history.vid = subhistory.vid) )") do |row|
|
||||
log_error("History record for VM #{row[:vid]} seq # #{row[:seq]} is not closed (etime = 0)", false)
|
||||
@db.fetch('SELECT vid,seq ' \
|
||||
'FROM history ' \
|
||||
'WHERE (etime = 0 AND seq <> ' \
|
||||
'(SELECT MAX(seq) ' \
|
||||
'FROM history AS subhistory ' \
|
||||
'WHERE history.vid = subhistory.vid))') do |row|
|
||||
log_error("History record for VM #{row[:vid]} seq # #{row[:seq]} " \
|
||||
'is not closed (etime = 0)', false)
|
||||
end
|
||||
end
|
||||
|
||||
@ -33,24 +41,29 @@ module OneDBFsck
|
||||
# - etime = 0
|
||||
# - is last seq
|
||||
# - VM is DONE
|
||||
@db.fetch("SELECT * FROM history WHERE (etime = 0 AND vid IN (SELECT oid FROM vm_pool WHERE state=6) AND seq = (SELECT MAX(seq) FROM history AS subhistory WHERE history.vid=subhistory.vid))") do |row|
|
||||
log_error("History record for VM #{row[:vid]} seq # #{row[:seq]} is not closed (etime = 0), but the VM is in state DONE")
|
||||
@db.fetch('SELECT * ' \
|
||||
'FROM history ' \
|
||||
'WHERE (etime = 0 AND vid IN ' \
|
||||
'(SELECT oid FROM vm_pool WHERE state=6) AND ' \
|
||||
'seq = (SELECT MAX(seq) FROM history AS subhistory ' \
|
||||
'WHERE history.vid=subhistory.vid))') do |row|
|
||||
log_error("History record for VM #{row[:vid]} seq # #{row[:seq]} " \
|
||||
'is not closed (etime = 0), but the VM is in state DONE')
|
||||
|
||||
etime = 0
|
||||
query = "SELECT body FROM vm_pool WHERE oid=#{row[:vid]}"
|
||||
|
||||
@db.fetch("SELECT body FROM vm_pool WHERE oid=#{row[:vid]}") do |vm_row|
|
||||
@db.fetch(query) do |vm_row|
|
||||
vm_doc = nokogiri_doc(vm_row[:body])
|
||||
|
||||
etime = vm_doc.root.at_xpath("ETIME").text.to_i
|
||||
etime = vm_doc.root.at_xpath('ETIME').text.to_i
|
||||
end
|
||||
|
||||
history_doc = nokogiri_doc(row[:body])
|
||||
|
||||
["RETIME", "ESTIME", "EETIME", "ETIME"].each do |att|
|
||||
%w[RETIME ESTIME EETIME ETIME].each do |att|
|
||||
elem = history_doc.root.at_xpath(att)
|
||||
if (elem.text == "0")
|
||||
elem.content = etime
|
||||
end
|
||||
|
||||
elem.content = etime if elem.text == '0'
|
||||
end
|
||||
|
||||
row[:body] = history_doc.root.to_s
|
||||
@ -65,9 +78,10 @@ module OneDBFsck
|
||||
# DATA: TODO: check all fixes to always do the same (update vs rewrite)
|
||||
@db.transaction do
|
||||
@fixes_history.each do |row|
|
||||
@db[:history].where(vid: row[:vid], seq: row[:seq]).update(row)
|
||||
@db[:history].where(:vid => row[:vid],
|
||||
:seq => row[:seq]).update(row)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user