fix(v4): retry transient confirmed device reads

This commit is contained in:
dh
2026-10-05 14:50:48 +00:00
parent b6e7353086
commit e6aa50bb44
5 changed files with 30 additions and 7 deletions
+6
View File
@@ -35,6 +35,12 @@ dcheck($f['deviceReadConfirmed']===true&&$f['sourceOldestAt']===$n-1,'successful
dcheck($f['sourceVariableOldestAt']===$n-100,'original VariableUpdated retained separately');
dcheck($f['batteryW']===-3000.0&&$f['usableForTrial'],'unchanged values accepted after confirmed device response');
[$c,$r,$n]=dfixture();$times=[$n,$n,$n];$attempts=0;$pauses=[];
$f=D::snapshot($c,fn($id)=>D::MODBUS_DEVICE,
function()use(&$attempts){$attempts++;return $attempts>=2;},fn($id)=>$r[$id],
function()use(&$times){return array_shift($times);},function($us)use(&$pauses){$pauses[]=$us;});
dcheck($attempts===3&&$pauses===[200000],'transient busy read is retried once without relaxing confirmation');
[$c,$r,$n]=dfixture();$times=[$n,$n,$n];
dfails(fn()=>D::snapshot($c,fn($id)=>D::MODBUS_DEVICE,fn()=>false,fn($id)=>$r[$id],function()use(&$times){return array_shift($times);}),
'failed device read rejected');