[reSIProcate] Why TransactionState set mDnsRestult as 0
Scott Godin
sgodin at sipspectrum.com
Wed Mar 22 10:33:54 CDT 2017
Thank Edwin! I have committed this change to GitHub trunk.
Scott
On Wed, Mar 22, 2017 at 3:35 AM, 海滨 <lhb8859138 at 163.com> wrote:
> I have done the test for this change and it works well now.
> once receive the 503 response, the dns entry is placed in blacklist, and
> all other subsequent requests(i.e. INVITE,OPTION) to this dns entry are
> blocked for the duration retry-after in 503 response specifies.
>
> Thanks
>
>
>
> At 2017-03-22 00:44:56, "Scott Godin" <sgodin at sipspectrum.com> wrote:
>
> Hi Edwin,
>
> I see - nice catch! I think we should be moving the if(mDnsResult) block
> to after the sendToTU call. ie:
>
> if (mState == Calling || mState == Proceeding)
> {
> // MUST pass the received response up to the TU, and
> the client
> // transaction MUST generate an ACK request, even if
> the transport is
> // reliable, if transport is Unreliable then Fire the
> Timer D which
> // take care of re-Transmission of ACK
> mState = Completed;
> mController.mTimers.add(Timer::TimerD, mId,
> Timer::TD );
> SipMessage* ack = Helper::makeFailureAck(*mNextTransmission,
> *sip);
> mNextTransmission->copyOutboundDecoratorsToStackF
> ailureAck(*ack);
> resetNextTransmission(ack);
> sendCurrentToWire();
> sendToTU(sip); // don't delete msg
> if(mDnsResult)
> {
> mDnsResult->destroy();
> mDnsResult=0;
> mPendingOperation=None;
> }
> }
>
> Can you test this change out, and if everything looks good, I will commit
> it.
>
> Thanks for helping out!
> Scott
>
> On Tue, Mar 21, 2017 at 9:32 AM, 海滨 <lhb8859138 at 163.com> wrote:
>
>> If we set the mDnsResult as 0 when receive the 503 response for the udp
>> transaction, the dns entry seems never been blacklisted in sendToTu
>> function even though the retry-after value is more than 0. is it reasonable?
>> Thanks
>> Edwin Li
>>
>>
>>
>>
>>
>>
>>
>> 在 2017-03-21 02:36:57,"Scott Godin" <sgodin at sipspectrum.com> wrote:
>>
>> Here are the check-in notes. Are you seeing a problem with this change?
>>
>> Thanks,
>> Scott
>>
>> * Two changes that were somewhat tangled together, since they both used
>> the same
>> refactoring of the Transport SendData code.
>>
>> 1) State shedding modifications to TransactionState
>>
>> In a number of cases, we were preserving state (in the form of
>> SipMessages
>> and DnsResults) in cases where we did not really need them any more.
>> For
>> example, once we have transmitted a response, there is no need
>> to preserve the full SipMessage for this response (the raw retransmit
>> buffer
>> is sufficient). Also, INVITE requests do not need to be maintained
>> once
>> a final response comes in (since there is no possibility that we'll
>> need to
>> send a simulated 408 or 503 to the TU, nor will we need to construct a
>> CANCEL
>> request using the INVITE, nor will we need to retransmit). Similarly,
>> once we
>> have received a final response for a NIT transaction, we no longer
>> need to
>> maintain the original request or the retransmit buffer. Lastly, if we
>> are
>> using a reliable transport, we do not need to maintain retransmit
>> buffers
>> (although we may need to maintain full original requests for simulated
>> responses and such).
>>
>> This change has basically no impact on reliable NIT performance, but a
>> huge
>> impact on non-reliable and INVITE performance. Prior to this change,
>> either
>> NIT UDP or INVITE TCP testStack would exhaust main memory on my laptop
>> (with
>> 4GB of main memory), bringing progress to a complete halt on runs
>> longer than
>> 15 seconds or so. I did not bother trying INVITE UDP, but that works
>> now too.
>>
>> 2) Reduction in buffer reallocations while encoding a SipMessage
>>
>> TransportSelector now keeps a moving average of the outgoing message
>> size,
>> which is used to preallocate the buffers into which SipMessages are
>> encoded.
>>
>> This ends up making a small difference in testStack when linked
>> against google
>> malloc, but a larger difference when linked against OS X's (horrible)
>> standard
>> malloc.
>>
>>
>>
>> On Mon, Mar 20, 2017 at 11:29 AM, 海滨 <lhb8859138 at 163.com> wrote:
>>
>>> 1.10.2: TransactionState.cxx line1322~1327
>>> The mDnsResult is set to 0 here, which is different from 1.7.
>>>
>>> Thanks
>>> Edwin Li
>>>
>>>
>>>
>>>
>>>
>>>
>>> 在 2017-03-19 23:13:53,"Scott Godin" <sgodin at sipspectrum.com> wrote:
>>>
>>> What is the source file and line number?
>>>
>>> Thanks,
>>> Scott
>>>
>>> On Sat, Mar 18, 2017 at 8:29 PM, 海滨 <lhb8859138 at 163.com> wrote:
>>>
>>>>
>>>>
>>>> Hi all,
>>>>
>>>>
>>>> Does anyone know why TransactionState set mDnsRestult as 0 when receive
>>>> the 503 response from wire if mIsReliable=false from release 1.8, instead
>>>> of blacklist the last result(which is implemented in 1.7)? I can't see any
>>>> information about this change in the release note.
>>>>
>>>>
>>>> Thanks
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> resiprocate-devel mailing list
>>>> resiprocate-devel at resiprocate.org
>>>> https://list.resiprocate.org/mailman/listinfo/resiprocate-devel
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> resiprocate-devel mailing list
>>> resiprocate-devel at resiprocate.org
>>> https://list.resiprocate.org/mailman/listinfo/resiprocate-devel
>>>
>>
>>
>>
>>
>>
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.resiprocate.org/pipermail/resiprocate-devel/attachments/20170322/0e7b12d6/attachment.htm>
More information about the resiprocate-devel
mailing list