"""Deterministic cache-aside event schedules; no server, threads or elapsed-time benchmark.""" import csv,json from pathlib import Path class Model: def __init__(self): self.db=1; self.generation=0; self.entry=None; self.trace=[] def load(self,t): token=(self.db,self.generation);self.trace.append([t,'start database load',list(token)]);return token def write(self,t): self.db=2;self.trace.append([t,'commit database version',2]) def invalidate(self,t): self.entry=None;self.generation+=1;self.trace.append([t,'invalidate; advance generation',self.generation]) def fill(self,token,t,fenced=False): value,generation=token if fenced and generation!=self.generation: self.trace.append([t,'reject obsolete fill',value]);return False self.entry=(value,t+100);self.trace.append([t,'fill; expiry',list(self.entry)]);return True def read(self,t): if self.entry is not None and t>=self.entry[1]:self.entry=None if self.entry is None:self.fill(self.load(t),t) value=self.entry[0];self.trace.append([t,'return',value]);return value def run(): rows=[] for name in ['Ordinary miss','Fill then invalidate','Obsolete fill','Generation fence','Before TTL expiry','At TTL expiry']: m=Model();rejected=False if name=='Ordinary miss':m.write(1);m.invalidate(2);t=3 elif name=='Fill then invalidate':m.fill(m.load(0),0);m.write(1);m.invalidate(2);t=3 else: token=m.load(0);m.write(1);m.invalidate(2);rejected=not m.fill(token,3,fenced=name=='Generation fence') t=102 if name=='Before TTL expiry' else 103 if name=='At TTL expiry' else 4 returned=m.read(t) rows.append(dict(case=name,readAtMs=t,databaseVersion=m.db,returnedVersion=returned,stale=int(returned!=m.db),rejectedFill=rejected,trace=m.trace)) assert [r['returnedVersion'] for r in rows]==[2,2,1,2,1,2] assert [r['stale'] for r in rows]==[0,0,1,0,1,0] assert sum(r['rejectedFill'] for r in rows)==1 return dict(scope='Six sequential event schedules; 100 ms assigned TTL from fill time. Atomic generation check/fill in one model object. No distributed consistency or latency measurements.',rows=rows) if __name__=='__main__': result=run();assert result==run();p=Path(__file__).resolve().parent (p/'results.json').write_text(json.dumps(result,indent=2)+'\n') with (p/'results.csv').open('w',newline='') as f: w=csv.DictWriter(f,fieldnames=[k for k in result['rows'][0] if k!='trace']);w.writeheader();w.writerows({k:v for k,v in row.items() if k!='trace'} for row in result['rows']) print(json.dumps(result,indent=2))