mirror of
https://github.com/overleaf/overleaf.git
synced 2025-03-03 12:31:43 +00:00
log and skip duplicate events
This commit is contained in:
parent
9a32c2eebb
commit
2a31139254
3 changed files with 16 additions and 4 deletions
|
@ -24,7 +24,9 @@ module.exports = DocumentUpdaterController =
|
|||
return
|
||||
if message.op?
|
||||
if message._id?
|
||||
EventLogger.checkEventOrder("applied-ops", message._id, message)
|
||||
status = EventLogger.checkEventOrder("applied-ops", message._id, message)
|
||||
if status is 'duplicate'
|
||||
return # skip duplicate events
|
||||
DocumentUpdaterController._applyUpdateFromDocumentUpdater(io, message.doc_id, message.op)
|
||||
else if message.error?
|
||||
DocumentUpdaterController._processErrorFromDocumentUpdater(io, message.doc_id, message.error, message)
|
||||
|
@ -33,6 +35,11 @@ module.exports = DocumentUpdaterController =
|
|||
|
||||
_applyUpdateFromDocumentUpdater: (io, doc_id, update) ->
|
||||
clientList = io.sockets.clients(doc_id)
|
||||
# avoid unnecessary work if no clients are connected
|
||||
if clientList.length is 0
|
||||
return
|
||||
# send updates to clients
|
||||
logger.log doc_id: doc_id, version: update.v, source: update.meta?.source, socketIoClients: (client.id for client in clientList), "distributing updates to clients"
|
||||
seen = {}
|
||||
# send messages only to unique clients (due to duplicate entries in io.sockets.clients)
|
||||
for client in clientList when not seen[client.id]
|
||||
|
|
|
@ -26,11 +26,11 @@ module.exports = EventLogger =
|
|||
return # order is ok
|
||||
if (count == previous)
|
||||
metrics.inc "event.#{channel}.duplicate"
|
||||
# logger.error {key:key, previous: previous, count:count, message:message}, "duplicate event"
|
||||
logger.warn {channel:channel, message_id:message_id}, "duplicate event"
|
||||
return "duplicate"
|
||||
else
|
||||
metrics.inc "event.#{channel}.out-of-order"
|
||||
# logger.error {key:key, previous: previous, count:count, message:message}, "events out of order"
|
||||
logger.warn {channel:channel, message_id:message_id, key:key, previous: previous, count:count}, "out of order event"
|
||||
return "out-of-order"
|
||||
|
||||
_storeEventCount: (key, count) ->
|
||||
|
|
|
@ -38,9 +38,14 @@ module.exports = WebsocketLoadBalancer =
|
|||
io.sockets.emit(message.message, message.payload...)
|
||||
else if message.room_id?
|
||||
if message._id?
|
||||
EventLogger.checkEventOrder("editor-events", message._id, message)
|
||||
status = EventLogger.checkEventOrder("editor-events", message._id, message)
|
||||
if status is "duplicate"
|
||||
return # skip duplicate events
|
||||
# send messages only to unique clients (due to duplicate entries in io.sockets.clients)
|
||||
clientList = io.sockets.clients(message.room_id)
|
||||
# avoid unnecessary work if no clients are connected
|
||||
return if clientList.length is 0
|
||||
logger.log {channel:channel, message: message.message, room_id: message.room_id, message_id: message._id, socketIoClients: (client.id for client in clientList)}, "distributing event to clients"
|
||||
seen = {}
|
||||
for client in clientList when not seen[client.id]
|
||||
seen[client.id] = true
|
||||
|
|
Loading…
Reference in a new issue