diff --git a/share/linters/.rubocop.yml b/share/linters/.rubocop.yml index 4583475405..13eede41ae 100644 --- a/share/linters/.rubocop.yml +++ b/share/linters/.rubocop.yml @@ -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 diff --git a/src/onedb/fsck/history.rb b/src/onedb/fsck/history.rb index 1229988627..33631bf419 100644 --- a/src/onedb/fsck/history.rb +++ b/src/onedb/fsck/history.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