• Dave Cridland's avatar
    OF-115 Remove race during outgoing session creation · d0667e21
    Dave Cridland authored
    This one is hard to duplicate in the lab, so this may not actually cure the
    issue, however I suspect it does.
    
    The existing code is based around a route of last resort, the
    OutgoingSessionPromise, which builds a helper - the PacketsProcessor - and
    creates the new session. The PacketsProcessors operate from within a thread
    pool, and thus have contended execution time.
    
    As new packets arrives from onward transmission during the session setup, the
    PacketsProcessor queues them for retransmission. However, the act of session
    creation also creates the outgoing route, meaning that later packets will
    bypass the queue, and be transmitted out of order.
    
    This should give the impression of a randomly reordered set of stanzas, but
    would in fact be two consecutive sequences of ordered stanzas which are
    interleaved, hence if the two sequences are A-E, F-J, one might see:
    
    A, B, F, G, C, H, I, D, J, E
    
    The fix here is two ensure that all packets are queued until the queue itself
    is empty. In the solution provided, an additional helper class acts as the
    route's RoutableChannelHandler, and stores packets in a queue until the real
    ServerSession can catch up with the pending traffic. After that it simply
    passes the process() call argument through.
    d0667e21
Name
Last commit
Last update
..
admin Loading commit data...
audit Loading commit data...
auth Loading commit data...
carbons Loading commit data...
clearspace Loading commit data...
cluster Loading commit data...
commands Loading commit data...
component Loading commit data...
container Loading commit data...
crowd Loading commit data...
disco Loading commit data...
entitycaps Loading commit data...
event Loading commit data...
filetransfer Loading commit data...
forms Loading commit data...
forward Loading commit data...
group Loading commit data...
handler Loading commit data...
http Loading commit data...
interceptor Loading commit data...
keystore Loading commit data...
launcher Loading commit data...
ldap Loading commit data...
lockout Loading commit data...
mediaproxy Loading commit data...
muc Loading commit data...
multiplex Loading commit data...
net Loading commit data...
nio Loading commit data...
pep Loading commit data...
privacy Loading commit data...
pubsub Loading commit data...
resultsetmanager Loading commit data...
roster Loading commit data...
sasl Loading commit data...
security Loading commit data...
server Loading commit data...
session Loading commit data...
spi Loading commit data...
starter Loading commit data...
stats Loading commit data...
streammanagement Loading commit data...
transport Loading commit data...
update Loading commit data...
user Loading commit data...
vcard Loading commit data...
webdav Loading commit data...
Channel.java Loading commit data...
ChannelHandler.java Loading commit data...
ChannelNotFoundException.java Loading commit data...
Connection.java Loading commit data...
ConnectionCloseListener.java Loading commit data...
ConnectionManager.java Loading commit data...
FlashCrossDomainHandler.java Loading commit data...
IQHandlerInfo.java Loading commit data...
IQRouter.java Loading commit data...
JMXManager.java Loading commit data...
LocalSessionManager.java Loading commit data...
MessageRouter.java Loading commit data...
MulticastRouter.java Loading commit data...
OfflineMessage.java Loading commit data...
OfflineMessageListener.java Loading commit data...
OfflineMessageStore.java Loading commit data...
OfflineMessageStrategy.java Loading commit data...
PacketDeliverer.java Loading commit data...
PacketException.java Loading commit data...
PacketRouter.java Loading commit data...
PresenceManager.java Loading commit data...
PresenceRouter.java Loading commit data...
PrivateStorage.java Loading commit data...
RemoteConnectionFailedException.java Loading commit data...
RemotePacketRouter.java Loading commit data...
RoutableChannelHandler.java Loading commit data...
RoutingTable.java Loading commit data...
ServerPort.java Loading commit data...
SessionManager.java Loading commit data...
SessionNotFoundException.java Loading commit data...
SessionPacketRouter.java Loading commit data...
SessionResultFilter.java Loading commit data...
SharedGroupException.java Loading commit data...
StreamID.java Loading commit data...
StreamIDFactory.java Loading commit data...
XMPPContextListener.java Loading commit data...
XMPPServer.java Loading commit data...
XMPPServerInfo.java Loading commit data...
XMPPServerListener.java Loading commit data...