I have two peers - Seabone and GR-IX.
Seabone in “default” instances, GR-IX in “GR-IX” instances.
[BORDER] /ip route> print d where dst-address =2.58.249.0/24
Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme, B - blackhole, U - unreachable, P - prohibit
0 ADb dst-address=2.58.249.0/24 gateway=213.144.178.153 gateway-status=213.144.178.153 reachable via sfp-sfpplus7 distance=20 scope=40 target-scope=10
bgp-as-path="6762,6939,9312" bgp-weight=400 bgp-med=100 bgp-origin=igp bgp-communities=6762:30,6762:14900 received-from=SEABONE
1 Db dst-address=2.58.249.0/24 gateway=176.126.38.47 gateway-status=176.126.38.47 reachable via sfp-sfpplus6 distance=20 scope=40 target-scope=10
bgp-as-path="6939,9312" bgp-weight=600 bgp-med=2 bgp-origin=igp bgp-communities=2736:2736,65001:55555 bgp-ext-communities="RT:50745:203348"
received-from=GR-IX-1
Why route from SEABONE is preferred? It have lower weight - 400, (from GR-IX-1 weight - 600) and longer AS-Path - 3 (in opposition from GR-IX- 2)
This is happening because you have them in separate instances. The BGP best path algorithm is only used for routes within the same instance. Otherwise MikroTik’s general route selection algorithm is used between instances.
From the wiki:
“Best path algorithm compares routes received by a single BGP instance. Routes installed by different BGP instances are compared by the general algorithm, i.e. route distances are compared and the route with lower distance is preferred.”
I think the answer to your question is point 2 in the quoted URL.
The route engine received the first path from the default BGP instance, and does not see the path from the other instance as “better” since the distance is 20 for both, hence it keeps the first path received