Skip to content

Commit 90e858c

Browse files
authored
Merge pull request #552 from TaloDev/develop
Release 0.80.4
2 parents 582f4b5 + b6fe591 commit 90e858c

File tree

4 files changed

+36
-41
lines changed

4 files changed

+36
-41
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "game-services",
3-
"version": "0.80.3",
3+
"version": "0.80.4",
44
"description": "",
55
"main": "src/index.ts",
66
"scripts": {

src/entities/subscribers/player-group.subscriber.ts

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import LeaderboardEntry from '../leaderboard-entry'
55
import PlayerGameStat from '../player-game-stat'
66
import { createRedisConnection } from '../../config/redis.config'
77

8+
const enableLogging = process.env.NODE_ENV !== 'test'
9+
810
const changeSetFilters: ((cs: ChangeSet<Partial<unknown>>) => boolean)[] = [
911
(cs) => [ChangeSetType.CREATE, ChangeSetType.UPDATE].includes(cs.type) && cs.entity instanceof Player,
1012
(cs) => [ChangeSetType.CREATE, ChangeSetType.UPDATE].includes(cs.type) && cs.entity instanceof LeaderboardEntry,
@@ -42,29 +44,45 @@ export default class PlayerGroupSubscriber implements EventSubscriber {
4244
redis = createRedisConnection()
4345
}
4446

45-
let shouldFlush = false
46-
4747
for (const player of playersMap.values()) {
4848
const redisKey = `checkMembership:${player.id}`
49-
let checkMembership = false
49+
let lockCreated = false
5050

5151
try {
5252
const setSuccess = await redis.set(redisKey, '1', 'EX', 30, 'NX')
5353
if (setSuccess === 'OK') {
54-
checkMembership = true
54+
lockCreated = true
55+
/* v8 ignore next 3 */
56+
if (enableLogging) {
57+
console.info(`Group memberships lock created for ${player.id}`)
58+
}
59+
5560
if (await checkGroupMemberships(em, player)) {
56-
shouldFlush = true
61+
const label = `Flush group memberships for ${player.id}`
62+
63+
/* v8 ignore next 3 */
64+
if (enableLogging) {
65+
console.time(label)
66+
}
67+
68+
await em.flush()
69+
70+
/* v8 ignore next 3 */
71+
if (enableLogging) {
72+
console.timeEnd(label)
73+
}
5774
}
5875
}
5976
} finally {
60-
if (checkMembership) {
77+
if (lockCreated) {
78+
/* v8 ignore next 3 */
79+
if (enableLogging) {
80+
console.info(`Group memberships lock released for ${player.id}`)
81+
}
82+
6183
await redis.del(redisKey)
6284
}
6385
}
6486
}
65-
66-
if (shouldFlush) {
67-
await em.flush()
68-
}
6987
}
7088
}

src/lib/groups/checkGroupMemberships.ts

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,20 @@
1-
import { EntityManager, UniqueConstraintViolationException } from '@mikro-orm/mysql'
1+
import { EntityManager } from '@mikro-orm/mysql'
22
import Player from '../../entities/player'
33
import PlayerGroup from '../../entities/player-group'
44

55
const enableLogging = process.env.NODE_ENV !== 'test'
66

77
export default async function checkGroupMemberships(em: EntityManager, player: Player): Promise<boolean> {
8-
const groups = await em.getRepository(PlayerGroup).find({ game: player.game })
8+
const groups = await em.repo(PlayerGroup).find({ game: player.game })
99
if (groups.length === 0) {
1010
return false
1111
}
1212

13-
const startTime = Date.now()
14-
const globalLabel = `Checking group memberships for ${player.id} (${startTime})`
15-
const flushLabel = `Memberships flush ${player.id} (${startTime})`
13+
const label = `Checking group memberships for ${player.id}`
1614

1715
/* v8 ignore next 3 */
1816
if (enableLogging) {
19-
console.time(globalLabel)
17+
console.time(label)
2018
}
2119

2220
let shouldFlush = false
@@ -52,30 +50,9 @@ export default async function checkGroupMemberships(em: EntityManager, player: P
5250
}
5351
}
5452

55-
try {
56-
if (shouldFlush) {
57-
/* v8 ignore next 3 */
58-
if (enableLogging) {
59-
console.time(flushLabel)
60-
}
61-
}
62-
/* v8 ignore next 5 */
63-
} catch (err) {
64-
if (err instanceof UniqueConstraintViolationException) {
65-
console.warn('This player is already in the group')
66-
}
67-
} finally {
68-
if (shouldFlush) {
69-
/* v8 ignore next 3 */
70-
if (enableLogging) {
71-
console.timeEnd(flushLabel)
72-
}
73-
}
74-
}
75-
7653
/* v8 ignore next 3 */
7754
if (enableLogging) {
78-
console.timeEnd(globalLabel)
55+
console.timeEnd(label)
7956
}
8057

8158
return shouldFlush

0 commit comments

Comments
 (0)