#!/usr/bin/env bin/ruby DEFAULT_PQ_DIR = "data/queue/main" argv0 = ARGV[0].to_s.strip if argv0 == "-h" || argv0 == "--help" puts("usage: pqcheck [PQ dir path]\n default [PQ dir path] is #{DEFAULT_PQ_DIR}") exit(0) end dir = argv0.empty? ? DEFAULT_PQ_DIR : argv0 if (!Dir.exist?(dir)) puts("error: invalid PQ dir path: #{dir}") exit(1) end puts("checking queue dir: #{dir}") Dir.glob("#{dir}/checkpoint.*").sort_by { |x| x[/[0-9]+$/].to_i }.each do |checkpoint| data = File.read(checkpoint) if data.size == 33 version, page, firstUnackedPage, firstUnackedSeq, minSeq, elementCount, crc32 = data.unpack("nNNQ>Q>NN") fa = firstUnackedSeq >= (minSeq + elementCount) ps = File.exist?("#{dir}/page.#{page}") ? File.size("#{dir}/page.#{page}") : nil print("#{File.basename(checkpoint)}, fully-acked: #{fa ? "YES" : "NO"}, page.#{page} size: #{ps ? ps : "NOT FOUND"}, ") p(version: version, page: page, firstUnackedPage: firstUnackedPage, firstUnackedSeq: firstUnackedSeq, minSeq: minSeq, elementCount: elementCount, crc32: crc32) else puts("#{File.basename(checkpoint)}, invalid size: #{data.size} ") end end