Skip to content

Commit b85736a

Browse files
committed
rename MembershipConfig parameters
1 parent f11e191 commit b85736a

File tree

3 files changed

+30
-40
lines changed

3 files changed

+30
-40
lines changed

spec/unit/matrixrtc/MatrixRTCSession.spec.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -406,10 +406,10 @@ describe("MatrixRTCSession", () => {
406406
jest.useRealTimers();
407407
});
408408

409-
it("uses membershipExpiryTimeout from join config", async () => {
409+
it("uses membershipEventExpiry from join config", async () => {
410410
const realSetTimeout = setTimeout;
411411
jest.useFakeTimers();
412-
sess!.joinRoomSession([mockFocus], mockFocus, { membershipExpiryTimeout: 60000 });
412+
sess!.joinRoomSession([mockFocus], mockFocus, { membershipEventExpiry: 60000 });
413413
await Promise.race([sentStateEvent, new Promise((resolve) => realSetTimeout(resolve, 500))]);
414414
expect(client.sendStateEvent).toHaveBeenCalledWith(
415415
mockRoom!.roomId,
@@ -483,7 +483,7 @@ describe("MatrixRTCSession", () => {
483483
});
484484

485485
sess!.joinRoomSession([activeFocusConfig], activeFocus, {
486-
membershipServerSideExpiryTimeout: 9000,
486+
delayedLeaveEventDelay: 9000,
487487
});
488488

489489
await sendDelayedStateExceedAttempt.then(); // needed to resolve after the send attempt catches

src/matrixrtc/MatrixRTCSession.ts

+8-11
Original file line numberDiff line numberDiff line change
@@ -58,36 +58,33 @@ export interface MembershipConfig {
5858
/**
5959
* The timeout (in milliseconds) after we joined the call, that our membership should expire
6060
* unless we have explicitly updated it.
61+
*
62+
* This is what goes into the m.rtc.member event expiry field.
6163
*/
62-
membershipExpiryTimeout?: number;
63-
64-
/**
65-
* The period (in milliseconds) with which we check that our membership event still exists on the
66-
* server. If it is not found we create it again.
67-
*/
68-
memberEventCheckPeriod?: number;
64+
membershipEventExpiry?: number; // hours
6965

7066
/**
7167
* The minimum delay (in milliseconds) after which we will retry sending the membership event if it
7268
* failed to send.
7369
*/
74-
callMemberEventRetryDelayMinimum?: number;
70+
membershipEventLocalRateLimit?: number;
7571

7672
/**
7773
* The timeout (in milliseconds) with which the deleayed leave event on the server is configured.
7874
* After this time the server will set the event to the disconnected stat if it has not received a keep-alive from the client.
7975
*/
80-
membershipServerSideExpiryTimeout?: number;
76+
// I would like to rename this to `delayedLeaveEventDelay` (having the word delayed, event, and leave is helpful i think)
77+
delayedLeaveEventDelay?: number; // 15s
8178

8279
/**
8380
* The interval (in milliseconds) in which the client will send membership keep-alives to the server.
8481
*/
85-
membershipKeepAlivePeriod?: number;
82+
delayedLeaveEventRestartPeriod?: number; // 5s
8683

8784
/**
8885
* @deprecated It should be possible to make it stable without this.
8986
*/
90-
callMemberEventRetryJitter?: number;
87+
membershipEventJitter?: number;
9188
}
9289
export interface EncryptionConfig {
9390
/**

src/matrixrtc/MembershipManager.ts

+19-26
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export interface IMembershipManager {
5757
* - send that sate event
5858
* - send the delayed leave event
5959
* - update the delayed leave event while connected
60-
* - update the state event when it times out (for calls longer than membershipExpiryTimeout ~ 4h)
60+
* - update the state event when it times out (for calls longer than membershipEventExpiry ~ 4h)
6161
*
6262
* It is possible to test this class on its own. The api surface (to use for tests) is
6363
* defined in `MembershipManagerInterface`.
@@ -83,30 +83,26 @@ export class LegacyMembershipManager implements IMembershipManager {
8383
private updateCallMembershipRunning = false;
8484
private needCallMembershipUpdate = false;
8585
/**
86-
* If the server disallows the configured {@link membershipServerSideExpiryTimeout},
86+
* If the server disallows the configured {@link delayedLeaveEventDelay},
8787
* this stores a delay that the server does allow.
8888
*/
89-
private membershipServerSideExpiryTimeoutOverride?: number;
89+
private delayedLeaveEventDelayOverride?: number;
9090
private disconnectDelayId: string | undefined;
9191

92-
private get callMemberEventRetryDelayMinimum(): number {
93-
return this.joinConfig?.callMemberEventRetryDelayMinimum ?? 3_000;
92+
private get membershipEventLocalRateLimit(): number {
93+
return this.joinConfig?.membershipEventLocalRateLimit ?? 3_000;
9494
}
95-
private get membershipExpiryTimeout(): number {
96-
return this.joinConfig?.membershipExpiryTimeout ?? DEFAULT_EXPIRE_DURATION;
95+
private get membershipEventExpiry(): number {
96+
return this.joinConfig?.membershipEventExpiry ?? DEFAULT_EXPIRE_DURATION;
9797
}
98-
private get membershipServerSideExpiryTimeout(): number {
99-
return (
100-
this.membershipServerSideExpiryTimeoutOverride ??
101-
this.joinConfig?.membershipServerSideExpiryTimeout ??
102-
8_000
103-
);
98+
private get delayedLeaveEventDelay(): number {
99+
return this.delayedLeaveEventDelayOverride ?? this.joinConfig?.delayedLeaveEventDelay ?? 8_000;
104100
}
105-
private get membershipKeepAlivePeriod(): number {
106-
return this.joinConfig?.membershipKeepAlivePeriod ?? 5_000;
101+
private get delayedLeaveEventRestartPeriod(): number {
102+
return this.joinConfig?.delayedLeaveEventRestartPeriod ?? 5_000;
107103
}
108-
private get callMemberEventRetryJitter(): number {
109-
return this.joinConfig?.callMemberEventRetryJitter ?? 2_000;
104+
private get membershipEventJitter(): number {
105+
return this.joinConfig?.membershipEventJitter ?? 2_000;
110106
}
111107

112108
public constructor(
@@ -131,7 +127,7 @@ export class LegacyMembershipManager implements IMembershipManager {
131127
public join(fociPreferred: Focus[], fociActive?: Focus): void {
132128
this.ownFocusActive = fociActive;
133129
this.ownFociPreferred = fociPreferred;
134-
this.relativeExpiry = this.membershipExpiryTimeout;
130+
this.relativeExpiry = this.membershipEventExpiry;
135131
// We don't wait for this, mostly because it may fail and schedule a retry, so this
136132
// function returning doesn't really mean anything at all.
137133
this.triggerCallMembershipEventUpdate();
@@ -255,7 +251,7 @@ export class LegacyMembershipManager implements IMembershipManager {
255251
this.client._unstable_sendDelayedStateEvent(
256252
this.room.roomId,
257253
{
258-
delay: this.membershipServerSideExpiryTimeout,
254+
delay: this.delayedLeaveEventDelay,
259255
},
260256
EventType.GroupCallMemberPrefix,
261257
{}, // leave event
@@ -270,11 +266,8 @@ export class LegacyMembershipManager implements IMembershipManager {
270266
e.data["org.matrix.msc4140.errcode"] === "M_MAX_DELAY_EXCEEDED"
271267
) {
272268
const maxDelayAllowed = e.data["org.matrix.msc4140.max_delay"];
273-
if (
274-
typeof maxDelayAllowed === "number" &&
275-
this.membershipServerSideExpiryTimeout > maxDelayAllowed
276-
) {
277-
this.membershipServerSideExpiryTimeoutOverride = maxDelayAllowed;
269+
if (typeof maxDelayAllowed === "number" && this.delayedLeaveEventDelay > maxDelayAllowed) {
270+
this.delayedLeaveEventDelayOverride = maxDelayAllowed;
278271
return prepareDelayedDisconnection();
279272
}
280273
}
@@ -343,15 +336,15 @@ export class LegacyMembershipManager implements IMembershipManager {
343336
}
344337
logger.info("Sent updated call member event.");
345338
} catch (e) {
346-
const resendDelay = this.callMemberEventRetryDelayMinimum + Math.random() * this.callMemberEventRetryJitter;
339+
const resendDelay = this.membershipEventLocalRateLimit + Math.random() * this.membershipEventJitter;
347340
logger.warn(`Failed to send call member event (retrying in ${resendDelay}): ${e}`);
348341
await sleep(resendDelay);
349342
await this.triggerCallMembershipEventUpdate();
350343
}
351344
}
352345

353346
private scheduleDelayDisconnection(): void {
354-
this.memberEventTimeout = setTimeout(this.delayDisconnection, this.membershipKeepAlivePeriod);
347+
this.memberEventTimeout = setTimeout(this.delayDisconnection, this.delayedLeaveEventRestartPeriod);
355348
}
356349

357350
private readonly delayDisconnection = async (): Promise<void> => {

0 commit comments

Comments
 (0)