You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The sim assumes that once it's sent the TeleportFinish event over the event queue, it can kill the event queue cap and that the viewer has been handed off to the new region. If viewer times out the EQ connection just as the TeleportFinish is sent, then the proxy will have read the TeleportFinish response, but the viewer won't have. This should be covered by the EventQueue's explicit acking mechanism, but it doesn't seem to work properly. It appears the server considers an event acked so long as the response bytes were sent off and immediately discards them. It should only discard messages once the viewer polls with an id that's not greater than the ack value POSTed by the viewer, but it discards them unconditionally. I'm not sure if this is intentional or if it's always been like this.
Since the viewer won't know it was sent the TeleportFinish it will keep trying to read the event queue CAP, which will never re-serve the TeleportFinish. CrossedRegion probably has the same problem, I haven't tested.
This seems to be a general problem with SL that's made worse when using an HTTP proxy, since the proxy may leave its connection to the server open and consume the event after the client timed out their connection. We can hack around that by always storing the last EQ response for a sim if there were events, along with the client's ack value in the request.
The sim's EQ implementation will need to be changed to actually make use of the ack value that gets posted and discard events that haven't been acked for this to be fully fixed.
The text was updated successfully, but these errors were encountered:
SaladDais
changed the title
Teleports sometimes fail when they happen right before Event Queue's long-polling timeout
Teleports sometimes cause a disconnect when attempted right before Event Queue's long-polling timeout
Jun 21, 2021
Turns out this also affects viewers without proxies. The window for it happening is 150ms~ every 30s (.5% likelihood) rather than 1s every 30s (3.33% likelihood) when proxied. Teleports fail every time if you attempt a teleport .3 seconds before the EQ poll's HTTP timeout would trigger. Might be the cause of random TP crashes.
The sim assumes that once it's sent the
TeleportFinish
event over the event queue, it can kill the event queue cap and that the viewer has been handed off to the new region. If viewer times out the EQ connection just as theTeleportFinish
is sent, then the proxy will have read theTeleportFinish
response, but the viewer won't have. This should be covered by the EventQueue's explicit acking mechanism, but it doesn't seem to work properly. It appears the server considers an event acked so long as the response bytes were sent off and immediately discards them. It should only discard messages once the viewer polls with an id that's not greater than theack
value POSTed by the viewer, but it discards them unconditionally. I'm not sure if this is intentional or if it's always been like this.Since the viewer won't know it was sent the
TeleportFinish
it will keep trying to read the event queue CAP, which will never re-serve theTeleportFinish
.CrossedRegion
probably has the same problem, I haven't tested.This seems to be a general problem with SL that's made worse when using an HTTP proxy, since the proxy may leave its connection to the server open and consume the event after the client timed out their connection. We can hack around that by always storing the last EQ response for a sim if there were events, along with the client's
ack
value in the request.The sim's EQ implementation will need to be changed to actually make use of the
ack
value that gets posted and discard events that haven't been acked for this to be fully fixed.The text was updated successfully, but these errors were encountered: