1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-04-18 21:44:02 +03:00
2019-08-14 11:07:24 -05:00

57 lines
1.3 KiB
Python

import io
import os
import argparse
import sys
import json
import struct
journal_filename = ""
journal_size = 0
def parse_args():
global journal_filename
parser = argparse.ArgumentParser(description="Print journal entries")
parser.add_argument('journal_file', type=str, help="The journal file");
args = parser.parse_args()
journal_filename = args.journal_file
def print_header(f):
# Argh. Load up to \0 into a string, then json.loads() that.
s = ""
c = chr(f.read(1)[0])
while c != '\0':
s = s + c
c = chr(f.read(1)[0])
header = json.loads(s)
print("Header:")
for (k, v) in header.items():
print(" {} : {}".format(k, int(v)))
def print_journal_entries(f):
i = 1
pos = f.tell()
while pos < journal_size:
b = f.read(16)
(offset, length) = struct.unpack("QQ", b)
print("{}: offset = {}, length = {}".format(i, offset, length))
pos = f.seek(length, io.SEEK_CUR)
i = i + 1
def main():
global journal_size
parse_args()
journal_size = os.stat(journal_filename).st_size
with open(journal_filename, "rb") as f:
print_header(f)
print_journal_entries(f)
if sys.version_info < (3, 0):
print("This requires Python 3.0+ b/c I'm lazy")
sys.exit(1)
if __name__ == "__main__":
main()