-
Notifications
You must be signed in to change notification settings - Fork 4
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
JELP SJOINs have a single perspective, causing modes to be lost during burst #100
Comments
If one SJOIN per server is the way to go, then we would have to send an SJOIN per server even if that server has no users on the channel. That can't work. Too floody. New idea: Queue the first SJOIN from the current server like we do currently with all the modes and users known to this server. Then go through each other server with users on the channel. If they have status modes that were not in the first message, the users will occur in this new SJOIN in the perspective of this other server which knows the modes. And remove the users from the first message, which was queued. At this point, the status modes should be consistent, but other modes might not be. This would occur if modes are set on certain servers with no users in the channel. Wait, is that even possible? Probably not unless it was permanent. We could compare the other mode strings with |
SJOIN handler is being rewritten, and the new one will handle this properly, but first have to add new methods for mode operations. See #77. |
#70 is also related and will be fixed with the new SJOIN handler |
Unfortunately it's impossible to send SJOINs with mode information that is not known to the bursting server. This is because parameters are handled by modules and servers cannot track unknown modes. So for now it will continue to work like this:
The above will work fine as long as modules providing channel modes are consistent across the network. Actually servers A and C linked through server B will remain in sync as long as server B knows the mode in question. Other insane situations might eventually be fixed by the MODESYNC mechanism (#63). |
Problem
Consider a scenario with three servers: A, B, and C. Servers A and C are both directly connected to server B, so A and C reach each other only through B. Suppose that servers A and B are already linked and server C is just now connecting to server B.
If servers A and C have five status modes and server B only has two, something weird occurs:
I used status modes in this example, but this actually applies to all channel modes.
Solution??
One solution would be to send individual SJOINs on burst, one for each server with users on the channel. Each SJOIN would have the mode string in the perspective of the source server, so not all of them will necessarily be the same.
The text was updated successfully, but these errors were encountered: