Merge pull request #1567 from matrix-org/luke/fix-flair-store

Fix multiple requests for publicised groups of given user
This commit is contained in:
David Baker 2017-11-02 16:09:07 +00:00 committed by GitHub
commit 8800081cb9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -66,7 +66,7 @@ class FlairStore extends EventEmitter {
}
// Bulk lookup ongoing, return promise to resolve/reject
if (this._usersPending[userId]) {
if (this._usersPending[userId] || this._usersInFlight[userId]) {
return this._usersPending[userId].prom;
}
@ -91,7 +91,7 @@ class FlairStore extends EventEmitter {
console.error('Could not get groups for user', this.props.userId, err);
throw err;
}).finally(() => {
delete this._usersPending[userId];
delete this._usersInFlight[userId];
});
// This debounce will allow consecutive requests for the public groups of users that
@ -113,27 +113,25 @@ class FlairStore extends EventEmitter {
}
async _batchedGetPublicGroups(matrixClient) {
// Take the userIds from the keys of this._usersPending
const usersInFlight = Object.keys(this._usersPending);
// Move users pending to users in flight
this._usersInFlight = this._usersPending;
this._usersPending = {};
let resp = {
users: [],
};
try {
resp = await matrixClient.getPublicisedGroups(usersInFlight);
resp = await matrixClient.getPublicisedGroups(Object.keys(this._usersInFlight));
} catch (err) {
// Propagate the same error to all usersInFlight
usersInFlight.forEach((userId) => {
this._usersPending[userId].reject(err);
Object.keys(this._usersInFlight).forEach((userId) => {
this._usersInFlight[userId].reject(err);
});
return;
}
const updatedUserGroups = resp.users;
usersInFlight.forEach((userId) => {
if (this._usersPending[userId]) {
this._usersPending[userId].resolve(updatedUserGroups[userId] || []);
} else {
console.error("Promise vanished for resolving groups for " + userId);
}
Object.keys(this._usersInFlight).forEach((userId) => {
this._usersInFlight[userId].resolve(updatedUserGroups[userId] || []);
});
}