PetrGlad/python-prevayler

Data loss

Closed this issue · 1 comments

t0.py - Log three "tick" transactions.

import glob
import os


from pv import PSys, Tn1, Log

def clear_state():
        for fn in glob.glob("./*.log"):
                os.remove(fn)
        for fn in glob.glob("./*.snapshot"):
                os.remove(fn)

if __name__ == "__main__":
        clear_state()
        psys = PSys(Log('.'), dict)
        psys.exe(Tn1())         # tick = 0
        psys.exe(Tn1())         # 1
        psys.makeSnapshot()
        psys.exe(Tn1())         # 2
        print psys.root['tick']

t1.py -- print out current "tick" value

from pv import PSys, Log

if __name__ == "__main__":
    psys = PSys(Log('.'), dict)
    print psys.root['tick']
    # prints 1 !! (we lost last transaction)

You need three more lines in Log.putSnapshot():

        self.logFile.close()
        self.logFileName = self.makeLogFileName(serialid + 1)
        self.logFile = open(self.logFileName, 'ab')

Seems that reopening log is simplest solution to this.