I dont know the bird internals exactly, but iirc this is implemented to save tracking as you mentioned in the code.

According to

RFC 2918

Otherwise, the BGP speaker shall re-
advertise to that peer the Adj-RIB-Out of the <AFI, SAFI> carried in
the message, based on its outbound route filtering policy.

--> No withdraw mentioned

I think in some situations it makes sense to withdraw all known routes, but the still active ones to create a consistent table on the receiver side.

What is the peer device btw?

Rgds, SJ

P.S.: Sorry for TOFU

Christos Trochalakis <yatiohi@ideopolis.gr> schrieb am Mo., 28. Dez. 2015 09:46:
On Thu, Dec 10, 2015 at 12:10:35PM +0200, Christos Trochalakis wrote:
>Hello all,
>
>While debugging a route-refresh issue we discovered that when a route-refresh
>is received, bird, instead of just sending an update containing the exported
>routes, also withdraws **all known routes** from its peer. In our case, it
>withdraws the whole FIRT sending multiple BGP updates. Is this the expected
>behaviour? We are using bird 1.4.5.
>
>We believe that the opposite router has trouble processing all those withdrawed
>routes which leads to other connectivity issues.
>

Any comments on that?

Let me restate the issue, bird withdraws every route in its routing
table despite the fact that those routes were never exported to that
protocol. I am not familiar with bird internals so I don't know if bird
keeps track of the exported routes per protocol.