<feed xmlns='http://www.w3.org/2005/Atom'>
<title>otp.git/lib/diameter/src, branch maint-18</title>
<subtitle>Mirror of Erlang/OTP repository.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/'/>
<entry>
<title>Merge branch 'anders/diameter/18/dialyzer/OTP-13400' into maint</title>
<updated>2016-03-09T07:26:32+00:00</updated>
<author>
<name>Anders Svensson</name>
<email>anders@erlang.org</email>
</author>
<published>2016-03-09T07:26:32+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=aafb2506a85b1bad11157f9786f2a834c9d76fae'/>
<id>aafb2506a85b1bad11157f9786f2a834c9d76fae</id>
<content type='text'>
* anders/diameter/18/dialyzer/OTP-13400:
  Fix dialyzer warnings
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* anders/diameter/18/dialyzer/OTP-13400:
  Fix dialyzer warnings
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'anders/diameter/18.3/OTP-13322' into maint</title>
<updated>2016-03-08T14:44:40+00:00</updated>
<author>
<name>Anders Svensson</name>
<email>anders@erlang.org</email>
</author>
<published>2016-03-08T14:44:40+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=2850f5f8dc46c804abff506f7fad8dc5e70229b2'/>
<id>2850f5f8dc46c804abff506f7fad8dc5e70229b2</id>
<content type='text'>
* anders/diameter/18.3/OTP-13322:
  vsn -&gt; 1.11.2
  Update appup for 18.3
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* anders/diameter/18.3/OTP-13322:
  vsn -&gt; 1.11.2
  Update appup for 18.3
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix dialyzer warnings</title>
<updated>2016-03-07T21:52:25+00:00</updated>
<author>
<name>Anders Svensson</name>
<email>anders@erlang.org</email>
</author>
<published>2016-03-07T21:35:46+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=073d4a8a08b1cfad7720511b10819ec2db76aeb7'/>
<id>073d4a8a08b1cfad7720511b10819ec2db76aeb7</id>
<content type='text'>
Whether making record declarations unreadable to compensate for
dialyzer's ignorance of match specs is worth it is truly debatable.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Whether making record declarations unreadable to compensate for
dialyzer's ignorance of match specs is worth it is truly debatable.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'anders/diameter/retransmission/OTP-13342' into maint</title>
<updated>2016-03-07T21:07:42+00:00</updated>
<author>
<name>Anders Svensson</name>
<email>anders@erlang.org</email>
</author>
<published>2016-03-07T21:07:42+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=184bc747089398d7fd74aef9bce48b42e8e71464'/>
<id>184bc747089398d7fd74aef9bce48b42e8e71464</id>
<content type='text'>
* anders/diameter/retransmission/OTP-13342:
  Fix handling of shared peer connections in watchdog state SUSPECT
  Remove unnecessary parentheses
  Remove dead export
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* anders/diameter/retransmission/OTP-13342:
  Fix handling of shared peer connections in watchdog state SUSPECT
  Remove unnecessary parentheses
  Remove dead export
</pre>
</div>
</content>
</entry>
<entry>
<title>Update appup for 18.3</title>
<updated>2016-02-29T16:42:00+00:00</updated>
<author>
<name>Anders Svensson</name>
<email>anders@erlang.org</email>
</author>
<published>2016-02-11T15:23:23+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=58ae27e99a0b750ce54ee10b73fdd08644804d32'/>
<id>58ae27e99a0b750ce54ee10b73fdd08644804d32</id>
<content type='text'>
OTP-13164 more efficient peer lookup
OTP-13342 remote watchdog transition into state SUSPECT
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
OTP-13164 more efficient peer lookup
OTP-13342 remote watchdog transition into state SUSPECT
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix handling of shared peer connections in watchdog state SUSPECT</title>
<updated>2016-02-19T00:01:33+00:00</updated>
<author>
<name>Anders Svensson</name>
<email>anders@erlang.org</email>
</author>
<published>2016-02-18T22:01:33+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=cc4ccfb0756bb563c869d94b630ccfecb571d6c2'/>
<id>cc4ccfb0756bb563c869d94b630ccfecb571d6c2</id>
<content type='text'>
A peer connection shared from a remote node was regarded as being
available for peer selection (aka up) as long as its peer_fsm process
was alive; that is, for the lifetime of the peer connection. In
particular, it didn't take note of transitions into watchdog state
SUSPECT, when the connection remains. As a result, retransmissions could
select the same peer connection whose watchdog transition caused the
retransmission.

A service process now broadcasts a peer_down event just as it
does a peer_up event.

The fault predates the table rearrangements of commit 8fd4e5f4.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A peer connection shared from a remote node was regarded as being
available for peer selection (aka up) as long as its peer_fsm process
was alive; that is, for the lifetime of the peer connection. In
particular, it didn't take note of transitions into watchdog state
SUSPECT, when the connection remains. As a result, retransmissions could
select the same peer connection whose watchdog transition caused the
retransmission.

A service process now broadcasts a peer_down event just as it
does a peer_up event.

The fault predates the table rearrangements of commit 8fd4e5f4.
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove unnecessary parentheses</title>
<updated>2016-02-19T00:00:43+00:00</updated>
<author>
<name>Anders Svensson</name>
<email>anders@erlang.org</email>
</author>
<published>2016-02-18T23:52:15+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=6759d8fd81d52cdfff5a1c2f788f740d1a4e6f67'/>
<id>6759d8fd81d52cdfff5a1c2f788f740d1a4e6f67</id>
<content type='text'>
Not needed as of commit 6c9cbd96.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Not needed as of commit 6c9cbd96.
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove dead export</title>
<updated>2016-02-19T00:00:43+00:00</updated>
<author>
<name>Anders Svensson</name>
<email>anders@erlang.org</email>
</author>
<published>2016-02-18T22:00:46+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=052a5e4763839ebdf4031672b6227e7ae8d14dd5'/>
<id>052a5e4763839ebdf4031672b6227e7ae8d14dd5</id>
<content type='text'>
The export of diameter_traffic:failover/1 happened with the creation of
the module in commit e49e7acc, but was never needed since the calling
code was also moved into diameter_traffic.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The export of diameter_traffic:failover/1 happened with the creation of
the module in commit e49e7acc, but was never needed since the calling
code was also moved into diameter_traffic.
</pre>
</div>
</content>
</entry>
<entry>
<title>Make peer handling more efficient</title>
<updated>2016-02-09T09:45:39+00:00</updated>
<author>
<name>Anders Svensson</name>
<email>anders@erlang.org</email>
</author>
<published>2015-12-07T16:06:38+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=2ada9c5a0d1b7de4ff8595878ff035dbb2c96cd3'/>
<id>2ada9c5a0d1b7de4ff8595878ff035dbb2c96cd3</id>
<content type='text'>
Each service process maintains a dictionary of peers, mapping an
application alias to a {pid(), #diameter_caps{}} list of connected
peers. These lists are potentially large, peers were appended to the end
of the list for no particular reason, and these long lists were
constructed/deconstructed when filtering them for pick_peer callbacks.
Many simultaneous outgoing request could then slow the VM to a crawl,
with many scheduled processes mired in list manipulation.

The pseudo-dicts are now replaced by plain ets tables. The reason for
them was (once upon a time) to have an interface interchangeable with a
plain dict for debugging purposes, but strict swapablity hasn't been the
case for some time now, and in practice a swap has never taken place.

Additional tables mapping Origin-Host/Realm have also been introduced,
to minimize the size of the peers lists when peers are filtered on
host/realm. For example, a filter like

  {any, [{all, [realm, host]}, realm]}

is probably a very common case: preferring a Destination-Realm/Host
match before falling back on Destination-Realm alone. This is now more
efficiently (but not equivalently) expressed as

  {first, [{all, [realm, host]}, realm]}

to stop the search when the best match is made, and extracts peers from
host/realm tables instead of searching through the list of all peers
supporting the application in question. The code to try and start with a
lookup isn't exhaustive, and the 'any' filter is still as inefficient as
previously.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Each service process maintains a dictionary of peers, mapping an
application alias to a {pid(), #diameter_caps{}} list of connected
peers. These lists are potentially large, peers were appended to the end
of the list for no particular reason, and these long lists were
constructed/deconstructed when filtering them for pick_peer callbacks.
Many simultaneous outgoing request could then slow the VM to a crawl,
with many scheduled processes mired in list manipulation.

The pseudo-dicts are now replaced by plain ets tables. The reason for
them was (once upon a time) to have an interface interchangeable with a
plain dict for debugging purposes, but strict swapablity hasn't been the
case for some time now, and in practice a swap has never taken place.

Additional tables mapping Origin-Host/Realm have also been introduced,
to minimize the size of the peers lists when peers are filtered on
host/realm. For example, a filter like

  {any, [{all, [realm, host]}, realm]}

is probably a very common case: preferring a Destination-Realm/Host
match before falling back on Destination-Realm alone. This is now more
efficiently (but not equivalently) expressed as

  {first, [{all, [realm, host]}, realm]}

to stop the search when the best match is made, and extracts peers from
host/realm tables instead of searching through the list of all peers
supporting the application in question. The code to try and start with a
lookup isn't exhaustive, and the 'any' filter is still as inefficient as
previously.
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove unnecessary erlang:monitor/2 qualification</title>
<updated>2016-02-09T09:44:19+00:00</updated>
<author>
<name>Anders Svensson</name>
<email>anders@erlang.org</email>
</author>
<published>2015-12-07T12:11:07+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=90ce90b20a750d39b0b1b470ccb584e3b064df95'/>
<id>90ce90b20a750d39b0b1b470ccb584e3b064df95</id>
<content type='text'>
See commit 862af31d.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
See commit 862af31d.
</pre>
</div>
</content>
</entry>
</feed>
