Menu

#1 MSETDocClient's I/O Queuing

open
nobody
None
5
2006-07-29
2006-07-29
No

MSETDocClient's setApplyingRemotes and setSendingLocals
both don't always take immediate effect. Most times
inboundQ.blockingRemove and outboundQ.blockingRemove
are blocked on an empty queues when sending and
receiving are paused so when one comes in the queue it
is processed before the pause takes effect.

Discussion

  • Kenroy Granville

    Logged In: YES
    user_id=479347

    Simply put, it always does one last receive or one last send
    before it starts queuing b/c the queues are blocked when
    told to start.

     
  • Kenroy Granville

    Logged In: YES
    user_id=479347

    ALERT: need to create a seperate settingStateQ that collects
    all the inbound edits until all the state edits are in the
    inboundQ then dequeues all the edits from the settingStateQ
    on to the inboundQ. This should allow us to only only need
    to check for duplicates during this process and not on every
    received remote edit.

    ALERT: ideally resetState method should NOT be necessary

    ALERT: When should we start queuing inbound edits for late
    joiners?
    a) as soon as they connect
    b) as soon as they accept a designated state sender
    c) as soon as they receive the state for now going with a)

    ALERT: What if queuingIn/Out is on, can you send your state?
    I don't think so b/c even if you only send the edits that
    are not queued, the receiving user my never receive those
    edits that were queued by the state sender before the late
    joiner connected. But if we don't allow this then what
    happens if all users are queuing edits?

    ANSWER: Those queing outbound are still candidates for state
    sending b/c the state requester will receive those edits
    when they are sent. Those that do not have an empty inbound
    queue are bad candidates though. The reason is the state
    requester will never receive the edits in the inbound queue.
    We currently send only edits that have been applied to the
    mset which does not include queued inbounds. This leads back
    to the problem of requesting the state when all users
    have queued inbounds. Currently the only solution i see to
    this is to also send the queued inbounds but this might have
    flaws too.

     
  • Kenroy Granville

    Logged In: YES
    user_id=479347

    Another problem is requesting the state.
    The current procedure is as follows:
    1. new user joins
    2. all existing users send the new user a state offer
    3. new user accepts the first offer and stops accepting offers
    4. new user sends for the accepted user's state

    The main problem is the lack of a message delivery
    guarantee. We need a fail safe for warning the user that
    they need to try to reconnect in the cases where a
    disconnect could leave the new user endlessly waiting for a
    response.

     

Log in to post a comment.

MongoDB Logo MongoDB