Skip to content

Instantly share code, notes, and snippets.

@tsaarni
Last active February 20, 2025 17:08
Show Gist options
  • Save tsaarni/db319d5d9935d18f8856fcdd9b2a89ae to your computer and use it in GitHub Desktop.
Save tsaarni/db319d5d9935d18f8856fcdd9b2a89ae to your computer and use it in GitHub Desktop.
Use LinearCache to optimize StreamEndpoint discovery

EDS Cache Tests

This document contains manually executed test scenarios related to PR projectcontour/contour#6906

Configuration

Following configuration is used for the tests:

  • Single upstream Pod running echoserver.
  • Multiple Services (echoserver-0001, echoserver-0002, echoserver-0003) which result in three endpoints pointing to upstream Pod IP.
  • Multiple HTTPProxies (echoserver-0001, echoserver-0002, echoserver-0003), each one pointing to corresponding upstream Service.

Test Scenarios

The tables in the following scnearios show the sequence of EDS DiscoveryRequest and DiscoveryResponse messages exchanged between Contour and Envoy. Each table row represents a single message exchange. The requests are sent by Envoy and received by Contour. The responses are sent by Contour and received by Envoy. Id is unique identifier generated for each message for the purpose of making it easier to follow the sequence of messages. Stream ID is similar to Id but it is unique per stream. The rest of the columns are field from the DiscoveryRequest or DiscoveryResponse messages.

Refer to following links for information to understand the xDS protocol messages and the concept of version info and nonce:

For the go-control-plane cache implementations refer to

Creating upstream services, restart of upstream pod

In this scenario we compare the behavior of SnapshotCache and LinearCache in the following sequence of events:

  1. New service and httpproxy resources are created one at the time.
  2. The upstream service pod is restarted and gets a new IP address.

The rows with *** prefix indicate action that is taken in the test.

Following sequence is observed with SnapshotCache as the EDS cache implementation:

  Id  Message              Stream ID  Version Info                          Nonce    Resource Name            Addresses
----  -----------------  -----------  ------------------------------------  -------  -----------------------  ----------------------------
*** Create new service and httpproxy (echoserver-0001)
  36  DiscoveryRequest             5                                                 default/echoserver-0001
  38  DiscoveryResponse            5  a2e7306d-226b-4322-bb7e-37050da2d639  1        default/echoserver-0001  ['10.244.1.4']
  39  DiscoveryRequest             5  a2e7306d-226b-4322-bb7e-37050da2d639  1        default/echoserver-0001
  49  DiscoveryResponse            5  715dca95-b946-44ff-9b8f-21c653eba2bf  2        default/echoserver-0001  ['10.244.1.4']
  53  DiscoveryRequest             5  715dca95-b946-44ff-9b8f-21c653eba2bf  2        default/echoserver-0001
*** Create new service and httpproxy (echoserver-0002)
  58  DiscoveryRequest             6                                                 default/echoserver-0002
  59  DiscoveryResponse            6  715dca95-b946-44ff-9b8f-21c653eba2bf  1        default/echoserver-0002  ['10.244.1.4']
  60  DiscoveryRequest             6  715dca95-b946-44ff-9b8f-21c653eba2bf  1        default/echoserver-0002
  70  DiscoveryResponse            5  4a792f9b-f8e4-4959-90db-748b2ac47491  3        default/echoserver-0001  ['10.244.1.4']
  71  DiscoveryResponse            6  4a792f9b-f8e4-4959-90db-748b2ac47491  2        default/echoserver-0002  ['10.244.1.4']
*** Create new service and httpproxy (echoserver-0003)
  75  DiscoveryRequest             7                                                 default/echoserver-0003
  76  DiscoveryRequest             5  4a792f9b-f8e4-4959-90db-748b2ac47491  3        default/echoserver-0001
  77  DiscoveryRequest             6  4a792f9b-f8e4-4959-90db-748b2ac47491  2        default/echoserver-0002
  78  DiscoveryResponse            7  4a792f9b-f8e4-4959-90db-748b2ac47491  1        default/echoserver-0003  ['10.244.1.4']
  83  DiscoveryRequest             7  4a792f9b-f8e4-4959-90db-748b2ac47491  1        default/echoserver-0003
*** Restart upstream service pod (address changes)
  84  DiscoveryResponse            7  8538dde7-8b88-41f5-b712-2683856f9107  2        default/echoserver-0003  ['10.244.1.4']
  85  DiscoveryResponse            6  8538dde7-8b88-41f5-b712-2683856f9107  3        default/echoserver-0002  ['10.244.1.4', '10.244.1.5']
  86  DiscoveryResponse            5  8538dde7-8b88-41f5-b712-2683856f9107  4        default/echoserver-0001  ['10.244.1.4']
  87  DiscoveryRequest             5  8538dde7-8b88-41f5-b712-2683856f9107  4        default/echoserver-0001
  88  DiscoveryRequest             6  8538dde7-8b88-41f5-b712-2683856f9107  3        default/echoserver-0002
  89  DiscoveryRequest             7  8538dde7-8b88-41f5-b712-2683856f9107  2        default/echoserver-0003
  90  DiscoveryResponse            5  e5d7fe89-4b5e-41d2-a093-e692f6942aec  5        default/echoserver-0001  ['10.244.1.4', '10.244.1.5']
  91  DiscoveryResponse            6  e5d7fe89-4b5e-41d2-a093-e692f6942aec  4        default/echoserver-0002  ['10.244.1.4', '10.244.1.5']
  92  DiscoveryResponse            7  e5d7fe89-4b5e-41d2-a093-e692f6942aec  3        default/echoserver-0003  ['10.244.1.4', '10.244.1.5']
  93  DiscoveryRequest             5  e5d7fe89-4b5e-41d2-a093-e692f6942aec  5        default/echoserver-0001
  94  DiscoveryRequest             6  e5d7fe89-4b5e-41d2-a093-e692f6942aec  4        default/echoserver-0002
  95  DiscoveryRequest             7  e5d7fe89-4b5e-41d2-a093-e692f6942aec  3        default/echoserver-0003
  96  DiscoveryResponse            6  9caf4025-50f4-40d2-9927-06431fa4cd74  5        default/echoserver-0002  ['10.244.1.4', '10.244.1.5']
  97  DiscoveryResponse            7  9caf4025-50f4-40d2-9927-06431fa4cd74  4        default/echoserver-0003  ['10.244.1.5']
  98  DiscoveryResponse            5  9caf4025-50f4-40d2-9927-06431fa4cd74  6        default/echoserver-0001  ['10.244.1.4', '10.244.1.5']
  99  DiscoveryRequest             7  9caf4025-50f4-40d2-9927-06431fa4cd74  4        default/echoserver-0003
 100  DiscoveryRequest             5  9caf4025-50f4-40d2-9927-06431fa4cd74  6        default/echoserver-0001
 101  DiscoveryResponse            7  8cba205f-4d88-4e98-992b-91ef68e72f54  5        default/echoserver-0003  ['10.244.1.5']
 102  DiscoveryRequest             6  9caf4025-50f4-40d2-9927-06431fa4cd74  5        default/echoserver-0002
 103  DiscoveryResponse            5  8cba205f-4d88-4e98-992b-91ef68e72f54  7        default/echoserver-0001  ['10.244.1.5']
 104  DiscoveryResponse            6  8cba205f-4d88-4e98-992b-91ef68e72f54  6        default/echoserver-0002  ['10.244.1.5']
 105  DiscoveryRequest             7  8cba205f-4d88-4e98-992b-91ef68e72f54  5        default/echoserver-0003
 106  DiscoveryRequest             6  8cba205f-4d88-4e98-992b-91ef68e72f54  6        default/echoserver-0002
 107  DiscoveryRequest             5  8cba205f-4d88-4e98-992b-91ef68e72f54  7        default/echoserver-0001
 108  DiscoveryResponse            6  ec08e210-870d-4810-876a-44cd5cc7690c  7        default/echoserver-0002  ['10.244.1.5']
 109  DiscoveryResponse            5  ec08e210-870d-4810-876a-44cd5cc7690c  8        default/echoserver-0001  ['10.244.1.5']
 110  DiscoveryResponse            7  ec08e210-870d-4810-876a-44cd5cc7690c  6        default/echoserver-0003  ['10.244.1.5']
 111  DiscoveryRequest             7  ec08e210-870d-4810-876a-44cd5cc7690c  6        default/echoserver-0003
 112  DiscoveryRequest             5  ec08e210-870d-4810-876a-44cd5cc7690c  8        default/echoserver-0001
 113  DiscoveryRequest             6  ec08e210-870d-4810-876a-44cd5cc7690c  7        default/echoserver-0002
 114  DiscoveryResponse            7  c4658889-9134-4698-a7d8-d147f9eb71c9  7        default/echoserver-0003  ['10.244.1.5']
 115  DiscoveryResponse            5  c4658889-9134-4698-a7d8-d147f9eb71c9  9        default/echoserver-0001  ['10.244.1.5']
 116  DiscoveryResponse            6  c4658889-9134-4698-a7d8-d147f9eb71c9  8        default/echoserver-0002  ['10.244.1.5']
 117  DiscoveryRequest             7  c4658889-9134-4698-a7d8-d147f9eb71c9  7        default/echoserver-0003
 118  DiscoveryRequest             5  c4658889-9134-4698-a7d8-d147f9eb71c9  9        default/echoserver-0001
 119  DiscoveryRequest             6  c4658889-9134-4698-a7d8-d147f9eb71c9  8        default/echoserver-0002

Following sequence was observed with LinearCache as the EDS cache implementation:

  Id  Message              Stream ID  Version Info                            Nonce    Resource Name            Addresses
----  -----------------  -----------  --------------------------------------  -------  -----------------------  ----------------------------
*** Create new service and httpproxy (echoserver-0001)
  36  DiscoveryRequest             5                                                   default/echoserver-0001
  38  DiscoveryResponse            5  140edf95-b952-455a-a3a6-0f4894086eb1-1  1        default/echoserver-0001  ['10.244.1.5']
  39  DiscoveryRequest             5  140edf95-b952-455a-a3a6-0f4894086eb1-1  1        default/echoserver-0001
*** Create new service and httpproxy (echoserver-0002)
  56  DiscoveryRequest             6                                                   default/echoserver-0002
  57  DiscoveryResponse            6  140edf95-b952-455a-a3a6-0f4894086eb1-2  1        default/echoserver-0002  ['10.244.1.5']
  58  DiscoveryRequest             6  140edf95-b952-455a-a3a6-0f4894086eb1-2  1        default/echoserver-0002
*** Create new service and httpproxy (echoserver-0003)
  75  DiscoveryRequest             7                                                   default/echoserver-0003
  76  DiscoveryResponse            7  140edf95-b952-455a-a3a6-0f4894086eb1-3  1        default/echoserver-0003  ['10.244.1.5']
  77  DiscoveryRequest             7  140edf95-b952-455a-a3a6-0f4894086eb1-3  1        default/echoserver-0003
*** Restart upstream service pod (address changes)
  78  DiscoveryResponse            7  140edf95-b952-455a-a3a6-0f4894086eb1-4  2        default/echoserver-0003  ['10.244.1.5', '10.244.1.6']
  79  DiscoveryResponse            5  140edf95-b952-455a-a3a6-0f4894086eb1-5  2        default/echoserver-0001  ['10.244.1.5', '10.244.1.6']
  80  DiscoveryResponse            6  140edf95-b952-455a-a3a6-0f4894086eb1-6  2        default/echoserver-0002  ['10.244.1.5', '10.244.1.6']
  81  DiscoveryRequest             5  140edf95-b952-455a-a3a6-0f4894086eb1-5  2        default/echoserver-0001
  82  DiscoveryRequest             7  140edf95-b952-455a-a3a6-0f4894086eb1-4  2        default/echoserver-0003
  83  DiscoveryRequest             6  140edf95-b952-455a-a3a6-0f4894086eb1-6  2        default/echoserver-0002
  84  DiscoveryResponse            5  140edf95-b952-455a-a3a6-0f4894086eb1-7  3        default/echoserver-0001  ['10.244.1.6']
  85  DiscoveryResponse            6  140edf95-b952-455a-a3a6-0f4894086eb1-8  3        default/echoserver-0002  ['10.244.1.6']
  86  DiscoveryResponse            7  140edf95-b952-455a-a3a6-0f4894086eb1-9  3        default/echoserver-0003  ['10.244.1.6']
  87  DiscoveryRequest             6  140edf95-b952-455a-a3a6-0f4894086eb1-8  3        default/echoserver-0002
  88  DiscoveryRequest             7  140edf95-b952-455a-a3a6-0f4894086eb1-9  3        default/echoserver-0003
  89  DiscoveryRequest             5  140edf95-b952-455a-a3a6-0f4894086eb1-7  3        default/echoserver-0001

Envoy restart

In this scenario we compare the behavior of SnapshotCache and LinearCache when Envoy is restarted.

Following sequence is observed with SnapshotCache as the EDS cache implementation:

  Id  Message              Stream ID  Version Info                          Nonce    Resource Name            Addresses
----  -----------------  -----------  ------------------------------------  -------  -----------------------  ---------------
  41  DiscoveryRequest            12                                                 default/echoserver-0001
  42  DiscoveryResponse           12  7fc6ea1b-232b-46f5-b1ec-52e241d4557a  1        default/echoserver-0001  ['10.244.1.13']
  43  DiscoveryRequest            11                                                 default/echoserver-0003
  44  DiscoveryRequest            10                                                 default/echoserver-0002
  45  DiscoveryResponse           11  7fc6ea1b-232b-46f5-b1ec-52e241d4557a  1        default/echoserver-0003  ['10.244.1.13']
  46  DiscoveryResponse           10  7fc6ea1b-232b-46f5-b1ec-52e241d4557a  1        default/echoserver-0002  ['10.244.1.13']
  47  DiscoveryRequest            12  7fc6ea1b-232b-46f5-b1ec-52e241d4557a  1        default/echoserver-0001
  48  DiscoveryRequest            11  7fc6ea1b-232b-46f5-b1ec-52e241d4557a  1        default/echoserver-0003
  49  DiscoveryRequest            10  7fc6ea1b-232b-46f5-b1ec-52e241d4557a  1        default/echoserver-0002

Following sequence was observed with LinearCache as the EDS cache implementation:

  Id  Message              Stream ID  Version Info                            Nonce    Resource Name            Addresses
----  -----------------  -----------  --------------------------------------  -------  -----------------------  ---------------
  42  DiscoveryRequest            12                                                   default/echoserver-0002
  43  DiscoveryRequest            10                                                   default/echoserver-0001
  44  DiscoveryRequest            11                                                   default/echoserver-0003
  46  DiscoveryResponse           12  442bd369-bd73-44c0-abf9-31723f28f9b9-1  1        default/echoserver-0002  ['10.244.1.13']
  47  DiscoveryResponse           10  442bd369-bd73-44c0-abf9-31723f28f9b9-1  1        default/echoserver-0001  ['10.244.1.13']
  48  DiscoveryResponse           11  442bd369-bd73-44c0-abf9-31723f28f9b9-1  1        default/echoserver-0003  ['10.244.1.13']
  49  DiscoveryRequest            12  442bd369-bd73-44c0-abf9-31723f28f9b9-1  1        default/echoserver-0002
  50  DiscoveryRequest            10  442bd369-bd73-44c0-abf9-31723f28f9b9-1  1        default/echoserver-0001
  51  DiscoveryRequest            11  442bd369-bd73-44c0-abf9-31723f28f9b9-1  1        default/echoserver-0003

Contour down while upstream pod is restarted

In this scenario we compare the behavior of SnapshotCache and LinearCache when upstream pod is restarted while Contour is down.

Following sequence is observed with SnapshotCache as the EDS cache implementation:

  Id  Message              Stream ID  Version Info                          Nonce    Resource Name            Addresses
----  -----------------  -----------  ------------------------------------  -------  -----------------------  ---------------
*** Envoy comes up initially
  40  DiscoveryRequest            12                                                 default/echoserver-0003
  41  DiscoveryRequest            11                                                 default/echoserver-0001
  42  DiscoveryRequest            10                                                 default/echoserver-0002
  44  DiscoveryResponse           12  fbb62354-de40-4cf2-a3ae-cd0ae9f24510  1        default/echoserver-0003  ['10.244.1.17']
  45  DiscoveryResponse           11  fbb62354-de40-4cf2-a3ae-cd0ae9f24510  1        default/echoserver-0001  ['10.244.1.17']
  46  DiscoveryResponse           10  fbb62354-de40-4cf2-a3ae-cd0ae9f24510  1        default/echoserver-0002  ['10.244.1.17']
  47  DiscoveryRequest            12  fbb62354-de40-4cf2-a3ae-cd0ae9f24510  1        default/echoserver-0003
  48  DiscoveryRequest            11  fbb62354-de40-4cf2-a3ae-cd0ae9f24510  1        default/echoserver-0001
  49  DiscoveryRequest            10  fbb62354-de40-4cf2-a3ae-cd0ae9f24510  1        default/echoserver-0002
*** Contour goes down
*** Restart upstream service pod (address changes)
*** Contour comes up again
   4  DiscoveryRequest             2  fbb62354-de40-4cf2-a3ae-cd0ae9f24510           default/echoserver-0002
   5  DiscoveryResponse            2  91b907fe-f2e9-4d12-999a-d85daee8dc5b  1        default/echoserver-0002  ['10.244.1.19']
   6  DiscoveryRequest             2  91b907fe-f2e9-4d12-999a-d85daee8dc5b  1        default/echoserver-0002
   7  DiscoveryRequest             3  fbb62354-de40-4cf2-a3ae-cd0ae9f24510           default/echoserver-0003
   8  DiscoveryResponse            3  91b907fe-f2e9-4d12-999a-d85daee8dc5b  1        default/echoserver-0003  ['10.244.1.19']
   9  DiscoveryRequest             3  91b907fe-f2e9-4d12-999a-d85daee8dc5b  1        default/echoserver-0003
  13  DiscoveryRequest             5  fbb62354-de40-4cf2-a3ae-cd0ae9f24510           default/echoserver-0001
  14  DiscoveryResponse            5  91b907fe-f2e9-4d12-999a-d85daee8dc5b  1        default/echoserver-0001  ['10.244.1.19']
  15  DiscoveryRequest             5  91b907fe-f2e9-4d12-999a-d85daee8dc5b  1        default/echoserver-0001

Following sequence was observed with LinearCache as the EDS cache implementation:

  Id  Message              Stream ID  Version Info                            Nonce    Resource Name            Addresses
----  -----------------  -----------  --------------------------------------  -------  -----------------------  ---------------
*** Envoy comes up initially
   6  DiscoveryRequest             4                                                   default/echoserver-0002
   7  DiscoveryRequest             3                                                   default/echoserver-0001
   8  DiscoveryResponse            4  75fae1da-acfb-4bf8-bed3-708e004fb1b2-1  1        default/echoserver-0002  ['10.244.1.19']
  10  DiscoveryRequest             5                                                   default/echoserver-0003
  11  DiscoveryResponse            3  75fae1da-acfb-4bf8-bed3-708e004fb1b2-1  1        default/echoserver-0001  ['10.244.1.19']
  12  DiscoveryRequest             4  75fae1da-acfb-4bf8-bed3-708e004fb1b2-1  1        default/echoserver-0002
  13  DiscoveryResponse            5  75fae1da-acfb-4bf8-bed3-708e004fb1b2-1  1        default/echoserver-0003  ['10.244.1.19']
  14  DiscoveryRequest             3  75fae1da-acfb-4bf8-bed3-708e004fb1b2-1  1        default/echoserver-0001
  15  DiscoveryRequest             5  75fae1da-acfb-4bf8-bed3-708e004fb1b2-1  1        default/echoserver-0003
*** Contour goes down
*** Restart upstream service pod (address changes)
*** Contour comes up again
  10  DiscoveryRequest             4  75fae1da-acfb-4bf8-bed3-708e004fb1b2-1           default/echoserver-0003
  11  DiscoveryResponse            4  9074b1df-1d7e-4764-995a-5632a5f7d9cd-1  1        default/echoserver-0003  ['10.244.1.21']
  12  DiscoveryRequest             4  9074b1df-1d7e-4764-995a-5632a5f7d9cd-1  1        default/echoserver-0003
  13  DiscoveryRequest             5  75fae1da-acfb-4bf8-bed3-708e004fb1b2-1           default/echoserver-0001
  14  DiscoveryResponse            5  9074b1df-1d7e-4764-995a-5632a5f7d9cd-1  1        default/echoserver-0001  ['10.244.1.21']
  15  DiscoveryRequest             5  9074b1df-1d7e-4764-995a-5632a5f7d9cd-1  1        default/echoserver-0001
  16  DiscoveryRequest             6  75fae1da-acfb-4bf8-bed3-708e004fb1b2-1           default/echoserver-0002
  17  DiscoveryResponse            6  9074b1df-1d7e-4764-995a-5632a5f7d9cd-1  1        default/echoserver-0002  ['10.244.1.21']
  18  DiscoveryRequest             6  9074b1df-1d7e-4764-995a-5632a5f7d9cd-1  1        default/echoserver-0002

Upgrade Contour from SnapshotCache to LinearCache

In this scenario we observe the behavior Envoy when the Contour is upgraded from SnapshotCache to LinearCache without restarting Envoy.

  Id  Message              Stream ID  Version Info                          Nonce    Resource Name            Addresses
----  -----------------  -----------  ------------------------------------  -------  -----------------------  ---------------
*** Initial start of Envoy with Contour with SnapshotCache
   7  DiscoveryRequest             3  47c574a2-ce4d-46a9-b1f5-1ee438089116           default/echoserver-0003
   8  DiscoveryResponse            3  6276c5a0-6e23-4a0f-9b4a-1fd710365a66  1        default/echoserver-0003  ['10.244.1.21']
   9  DiscoveryRequest             3  6276c5a0-6e23-4a0f-9b4a-1fd710365a66  1        default/echoserver-0003
  10  DiscoveryRequest             4  47c574a2-ce4d-46a9-b1f5-1ee438089116           default/echoserver-0001
  11  DiscoveryResponse            4  6276c5a0-6e23-4a0f-9b4a-1fd710365a66  1        default/echoserver-0001  ['10.244.1.21']
  12  DiscoveryRequest             4  6276c5a0-6e23-4a0f-9b4a-1fd710365a66  1        default/echoserver-0001
  16  DiscoveryRequest             6  47c574a2-ce4d-46a9-b1f5-1ee438089116           default/echoserver-0002
  17  DiscoveryResponse            6  6276c5a0-6e23-4a0f-9b4a-1fd710365a66  1        default/echoserver-0002  ['10.244.1.21']
  18  DiscoveryRequest             6  6276c5a0-6e23-4a0f-9b4a-1fd710365a66  1        default/echoserver-0002
*** Contour with SnapshotCache goes down
*** Contour with LinearCache comes up
   1  DiscoveryRequest             1  6276c5a0-6e23-4a0f-9b4a-1fd710365a66             default/echoserver-0003
   2  DiscoveryResponse            1  f306c08e-1e44-436c-a25b-c857845dc652-1  1        default/echoserver-0003  ['10.244.1.21']
   3  DiscoveryRequest             1  f306c08e-1e44-436c-a25b-c857845dc652-1  1        default/echoserver-0003
   4  DiscoveryRequest             2  6276c5a0-6e23-4a0f-9b4a-1fd710365a66             default/echoserver-0002
   5  DiscoveryResponse            2  f306c08e-1e44-436c-a25b-c857845dc652-1  1        default/echoserver-0002  ['10.244.1.21']
   6  DiscoveryRequest             2  f306c08e-1e44-436c-a25b-c857845dc652-1  1        default/echoserver-0002
   7  DiscoveryRequest             3  6276c5a0-6e23-4a0f-9b4a-1fd710365a66             default/echoserver-0001
   8  DiscoveryResponse            3  f306c08e-1e44-436c-a25b-c857845dc652-1  1        default/echoserver-0001  ['10.244.1.21']
   9  DiscoveryRequest             3  f306c08e-1e44-436c-a25b-c857845dc652-1  1        default/echoserver-0001

Upgrade Contour from SnapshotCache to LinearCache while upstream pod is restarted

In this scenario we observe the behavior Envoy when the Contour is upgraded from SnapshotCache to LinearCache while restarting the upstream pod while Contour is down.

  Id  Message              Stream ID  Version Info                          Nonce    Resource Name            Addresses
----  -----------------  -----------  ------------------------------------  -------  -----------------------  ---------------
*** Initial start of Envoy with Contour with SnapshotCache
   6  DiscoveryRequest             5                                                 default/echoserver-0002
   8  DiscoveryRequest             3                                                 default/echoserver-0001
   9  DiscoveryRequest             4                                                 default/echoserver-0003
  10  DiscoveryResponse            5  39d32238-611f-4c0f-8ec4-a274e6d07333  1        default/echoserver-0002  ['10.244.1.21']
  11  DiscoveryResponse            3  39d32238-611f-4c0f-8ec4-a274e6d07333  1        default/echoserver-0001  ['10.244.1.21']
  12  DiscoveryResponse            4  39d32238-611f-4c0f-8ec4-a274e6d07333  1        default/echoserver-0003  ['10.244.1.21']
  13  DiscoveryRequest             5  39d32238-611f-4c0f-8ec4-a274e6d07333  1        default/echoserver-0002
  14  DiscoveryRequest             3  39d32238-611f-4c0f-8ec4-a274e6d07333  1        default/echoserver-0001
  15  DiscoveryRequest             4  39d32238-611f-4c0f-8ec4-a274e6d07333  1        default/echoserver-0003
*** Contour with SnapshotCache goes down
*** Restart upstream service pod (address changes)
*** Contour with LinearCache comes up
  10  DiscoveryRequest             4  39d32238-611f-4c0f-8ec4-a274e6d07333             default/echoserver-0002
  11  DiscoveryResponse            4  d0fa7ad9-9da9-4d15-9eae-e4f1da60cee2-1  1        default/echoserver-0002  ['10.244.1.24']
  12  DiscoveryRequest             4  d0fa7ad9-9da9-4d15-9eae-e4f1da60cee2-1  1        default/echoserver-0002
  13  DiscoveryRequest             5  39d32238-611f-4c0f-8ec4-a274e6d07333             default/echoserver-0003
  14  DiscoveryResponse            5  d0fa7ad9-9da9-4d15-9eae-e4f1da60cee2-1  1        default/echoserver-0003  ['10.244.1.24']
  15  DiscoveryRequest             5  d0fa7ad9-9da9-4d15-9eae-e4f1da60cee2-1  1        default/echoserver-0003
#!/bin/env python3
#
# This script reads a JSON file containing EDS messages and generates a table of DiscoveryRequest
# and DiscoveryResponse messages.
#
# The JSON file is generated by https://github.com/tsaarni/grpc-json-sniffer
#
# Install dependencies
#
# python3 -mvenv .venv
# . .venv/bin/activate
# pip install tabulate
#
# Run the script to generate a table of EDS messages
#
# apps/grpc-eds-to-mermaid.py grpc_capture.json
# apps/grpc-eds-to-mermaid.py grpc_capture.json <min_message_id> # analyze messages with message_id >= min_message_id
#
import json
import sys
from tabulate import tabulate
class Discovery:
def __init__(self):
self.rows = []
def set_min_message_id(self, min_message_id):
self.min_message_id = int(min_message_id)
def process(self, line):
data = json.loads(line)
message_id = data.get("message_id")
if message_id < self.min_message_id:
return
stream_id = data.get("stream_id")
content = data.get("content", {})
if data.get("method") == "/envoy.service.endpoint.v3.EndpointDiscoveryService/StreamEndpoints" and data.get("message") == "envoy.service.discovery.v3.DiscoveryRequest":
version_info = content.get("versionInfo")
resource_name = content.get("resourceNames")[0]
response_nonce = content.get("responseNonce")
self.rows.append([message_id, "DiscoveryRequest", stream_id, version_info, response_nonce, resource_name])
if data.get("method") == "/envoy.service.endpoint.v3.EndpointDiscoveryService/StreamEndpoints" and data.get("message") == "envoy.service.discovery.v3.DiscoveryResponse":
version_info = content.get("versionInfo")
nonce = content.get("nonce")
resource = content.get("resources")[0]
cluster_name = resource.get("clusterName")
endpoint = resource.get("endpoints")[0]
lb_endpoints = endpoint.get("lbEndpoints")
addresses = []
for lb_endpoint in lb_endpoints:
endpoint = lb_endpoint.get("endpoint")
addresses.append(endpoint.get("address").get("socketAddress").get("address"))
self.rows.append([message_id, "DiscoveryResponse", stream_id, version_info, nonce, cluster_name, addresses])
def print_table(self):
headers = ["Id", "Message", "Stream ID", "Version Info", "Nonce", "Resource Name", "Addresses"]
print(tabulate(self.rows, headers=headers, tablefmt="table"))
def main():
min_message_id = 0
if len(sys.argv) > 2:
min_message_id = sys.argv[2]
d = Discovery()
d.set_min_message_id(min_message_id)
with open(sys.argv[1], "r") as f:
for line in f:
d.process(line)
d.print_table()
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment