Provisioner: retry onboarding posts (fresh-room forward-extremities race), degrade non-fatally
This commit is contained in:
parent
27a7b72984
commit
fd09967851
1 changed files with 17 additions and 1 deletions
|
|
@ -186,7 +186,23 @@ export class MatrixProvisioner implements ProvisionerPort {
|
||||||
power_level_content_override: this.powerLevels(input),
|
power_level_content_override: this.powerLevels(input),
|
||||||
});
|
});
|
||||||
for (const [index, text] of onboardingSequence(input.language).entries()) {
|
for (const [index, text] of onboardingSequence(input.language).entries()) {
|
||||||
await this.post(roomId, index, { msgtype: "m.text", body: text });
|
// A brand-new room can reject the first posts until its initial events
|
||||||
|
// settle ("no forward extremities"); retry rather than fail the whole
|
||||||
|
// collective for a race measured in milliseconds.
|
||||||
|
let lastError: unknown = null;
|
||||||
|
for (const delayMs of [0, 1000, 2500, 5000]) {
|
||||||
|
if (delayMs > 0) await new Promise((r) => setTimeout(r, delayMs));
|
||||||
|
try {
|
||||||
|
await this.post(roomId, index, { msgtype: "m.text", body: text });
|
||||||
|
lastError = null;
|
||||||
|
break;
|
||||||
|
} catch (err) {
|
||||||
|
lastError = err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (lastError !== null) {
|
||||||
|
this.logger.warn(`onboarding guide post ${index} failed after retries in ${roomId}: ${errorText(lastError)}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (input.founderMxid !== null) await this.inviteUser(roomId, input.founderMxid);
|
if (input.founderMxid !== null) await this.inviteUser(roomId, input.founderMxid);
|
||||||
return { roomId };
|
return { roomId };
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue