Retry a failed 3D model inside the engine instead of in the layers

A mover set whose glTF or atlas fails to load retries by itself after
retryAfterMs (1,500 ms by default), at most three attempts, on Cesium,
Navara and the fake engine alike: failed() is true while the latest
attempt failed and stays true after the last, ready() turns true when a
retry loads, and an instance given another pickId loads again. Healthy
models of the same class no longer load again when one fails.

The layers drop what they did instead: moverBank's rebuilds, the loops
that dropped failed handles in flights, military and local ADS-B, and the
tracked-model backoff in the aircraft display. The contract suite checks
the one behaviour on both engines, with a mutant that never retries.
This commit is contained in:
German Khokhlov committed 2026-11-10 16:04:01 +04:00
1 parent a90407d547
commit a07d9f5d85
22 files changed
+1039 -470

No files matched your search

+19 -2
View File
@@ -207,7 +207,7 @@ const mutants = [
],
[
'failed model reports no failure',
'MoverSet.failed:',
'movers.createSet: failed model retries',
(e) => {
handle(e, 'movers', 'createSet', (set) => {
set.failed = () => false;
@@ -216,13 +216,30 @@ const mutants = [
],
[
'failed model reports ready',
'MoverSet.failed:',
'movers.createSet: failed model retries',
(e) => {
handle(e, 'movers', 'createSet', (set) => {
set.ready = () => true;
});
},
],
[
'failed model never retries',
'movers.createSet: failed model retries',
(e) => {
handle(e, 'movers', 'createSet', (set) => {
replace(set, 'commit', (commit) => () => {
const schedule = globalThis.setTimeout;
globalThis.setTimeout = () => null;
try {
commit();
} finally {
globalThis.setTimeout = schedule;
}
});
});
},
],
[
'hidden mover reports shown',
'movers.list: shown follows',