3 Replies Latest reply on Apr 10, 2014 6:25 PM by scuser17120

    Late join retransmit messages

    New Member

      When use late join with large messages I shall to set retransmitted messages count quite big because of this number means retransmitted

      datagrams number. In this case I can receive several messages which are small.

      How can I set Late join to receive just 1 retransmitted message even if it can be send in several datagrams?

      The workaround can be in skipping messages except last, but in this case I need to know which message is last. But this workaround gives extra loading on network.

        • 1. Re: Late join retransmit messages
          New Member

          I've found solution .

           

          let setRecoverySequenceNum (cbArg : obj)  (cbInfo : UMERecoverySequenceNumberCallbackInfo) =
              let low = cbInfo.lowSequenceNumber()
              let low1 = cbInfo.lowRxReqMaxSequenceNumber()
              let high = cbInfo.highSequenceNumber()
              cbInfo.setLowSequenceNumber(Math.Max(low, high) )
              (int)0
          • 2. Re: Late join retransmit messages
            New Member

            Hi Roman,

             

            I’m not sure that solution will work for messages that are greater than 1 UM message fragment. For example, if I send 100 messages that are 100,000 bytes each, then I start a subscriber to late-join the last of those 100,000 byte messages, the “high” sequence number will be that of the last fragment that the store has, which is only a tiny piece of that 100,000 byte message. Therefore when you set the callback to only recover that fragment, the receiver will actually declare the message as unrecoverable loss, because it’s missing all the previous fragments.

             

            Recovering a single message from the store is ultimately a difficult task because it’s not really what the store was designed to do. It can be accomplished if you know the size of all messages, then you can determine the number of fragments per message and calculate how many sequence numbers to ask the store for inside the sequence number info callback. Otherwise, like you had mentioned, you can request a block of messages and just not perform any application logic on them until you reach the latest message, which does add some overhead to the application.

             

            Informatica does have a product that offers a last value cache feature, and that is UMCache.

             

            For more information on UMP and the sequence number callback, I would highly recommend the following KB articles:

            https://mysupport.informatica.com/infakb/howto/6/Pages/2/158256.aspx

            https://mysupport.informatica.com/infakb/faq/7/Pages/1/147383.aspx

             

            Good luck!

            Steve

            • 3. Re: Late join retransmit messages
              New Member

              Hi Steve,

               

              Of course, code I wrote is not solution.

              It's just a glue. This code cut all messages to 1 datagram.

              Need to set cbInfo.setLowSequenceNumber(Math.Min(cbInfo.lowRxReqMaxSequenceNumber(), high) )

              After need to keep high number somewhere and when retransmitted message is received need to check sequence number.

              Its not optimal, but gives some solution while we don't have UMCache.

               

              As I understand UMCache requires additional license.