-
Notifications
You must be signed in to change notification settings - Fork 11k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: Presence broadcast isn't enabled after license validation #30282
Merged
sampaiodiego
merged 16 commits into
develop
from
fix/presence-broadcast-not-enabled-license
Sep 18, 2023
Merged
Changes from 15 commits
Commits
Show all changes
16 commits
Select commit
Hold shift + click to select a range
ef1ff6f
Enable presence broadcast after validating the license
matheusbsilva137 863524f
Create changesets
matheusbsilva137 72fff5b
Merge branch 'develop' into fix/presence-broadcast-not-enabled-license
matheusbsilva137 6357b62
Merge branch 'develop' into fix/presence-broadcast-not-enabled-license
matheusbsilva137 6197449
Start hasLicense as undefined
matheusbsilva137 1a9db89
Toggle broadcast on every new connection
matheusbsilva137 cbe2e0d
Improve condition
matheusbsilva137 3b59013
Improve condition again
matheusbsilva137 3dbb8b6
Readd license check (oops)
matheusbsilva137 05364fc
Enable broadcast on license check
matheusbsilva137 3488ccc
Do not assign undefined to hasLicense
matheusbsilva137 2e60162
Remove unnecessary line
matheusbsilva137 8a11ded
Merge branch 'develop' into fix/presence-broadcast-not-enabled-license
matheusbsilva137 361896e
Merge branch 'develop' into fix/presence-broadcast-not-enabled-license
matheusbsilva137 6d49ccf
Enable presence broadcast when license is validated
matheusbsilva137 8d68ec5
dont check troubleshooting setting
sampaiodiego File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
--- | ||
"@rocket.chat/presence": patch | ||
--- | ||
|
||
Fixed presence broadcast being disabled on server restart |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -39,9 +39,17 @@ export class Presence extends ServiceClass implements IPresence { | |
} | ||
}); | ||
|
||
this.onEvent('license.module', ({ module, valid }) => { | ||
this.onEvent('license.module', async ({ module, valid }) => { | ||
if (module === 'scalability') { | ||
this.hasLicense = valid; | ||
|
||
if (!this.broadcastEnabled && valid) { | ||
// broadcast should always be enabled if license is active (unless the troubleshoot setting is on) | ||
const presenceBroadcastDisabled = await Settings.findOneById('Troubleshoot_Disable_Presence_Broadcast'); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. checking this setting is not wrong, but it is not a concern of this package.. we need to create an alternate mechanism to properly respect this setting, as it is already being "ignored" in other places. |
||
if (presenceBroadcastDisabled?.value === false) { | ||
await this.toggleBroadcast(true); | ||
} | ||
} | ||
} | ||
}); | ||
} | ||
|
@@ -58,9 +66,9 @@ export class Presence extends ServiceClass implements IPresence { | |
}, 10000); | ||
|
||
try { | ||
this.hasLicense = await License.hasLicense('scalability'); | ||
|
||
await Settings.updateValueById('Presence_broadcast_disabled', false); | ||
|
||
this.hasLicense = await License.hasLicense('scalability'); | ||
} catch (e: unknown) { | ||
// ignore | ||
} | ||
|
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe this partially fixes the problem. Testing it locally, it looks like this event is not being received (even having a valid license). I'm unsure if this is the intended behavior or a problem with the
onModule
function.Also, if I'm not wrong,
started()
method solves the problem. https://github.com/RocketChat/Rocket.Chat/blob/develop/ee/packages/presence/src/Presence.ts#L61The only problem that could happen is, while
started()
is executing AND before it fully finishes, we receive an event on thewatch.instanceStatus
turning the setting to true again. What I'm trying to say is, the execution must be at this point when thestarted()
finishes.I think @sampaiodiego opinion is really important here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think this is the best solution either..
if the problem is really the method
validateAvailability
being called before the start up procedure, we should actually make sure that doesn't happen by adding some kind of control likestarted = true
.. or maybe making likehasLicense = boolean | null
, so if it is stillnull
we ignore all events.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've just pushed a new commit following the second approach.
But I'm not really convinced this will fix the issue 🤔 for the case where the license takes too long to fetch,
hasLicense()
will just returnfalse
while it's not validated, right? then all these changes won't have any effectAs a way to make sure this is fixed and always synced, I was thinking of adding an else statement here to toggle the setting's value and make sure it's set to
false
whenever the total amount of connections is below the max allowed. wdyt? (edit: pushed a new commit so it's less abstract)cc @sampaiodiego @MarcosSpessatto
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thought of another approach: here
It's basically calling
toggleBroadcast
directly on new connections if the license is active and presence broadcast is disabled