fix: GREEN - Dynamic changes to the sharding-map are synced back to disk
authorKai Moritz <kai@juplo.de>
Wed, 20 Mar 2024 21:02:09 +0000 (22:02 +0100)
committerKai Moritz <kai@juplo.de>
Fri, 22 Mar 2024 16:39:20 +0000 (17:39 +0100)
commit156cc8e68f0c98e77e944e7db850ab98071c8796
treebf2d7f407f67e12599d5a725d8a6bd9559e24f35
parent2e1e20c94f7119d5fd4d60c7e902affc7698a257
fix: GREEN - Dynamic changes to the sharding-map are synced back to disk

* HAProxy distinguishes managed and unmanaged maps.
** Only Maps, that are loaded from the directory `maps`, that lives in the
   config-directory of HAProxy, are treated as managed.
** Only managed maps are listed by default by the Data Plane API.
** And last but not least, only managed maps _can be synced back to disk_,
   which makes dynamically changes persistent, so that they can survive
   a restart or reload of HAProxy.
* And only managed maps can as well be referenced by their _name_, as by
  their id.
* The name of managed maps is the name of the file, _without_ the path and
  without the suffix `.map`.
* What makes it more difficulte in the case of the HAProxy running inside
  a docker-container is, that this mechanism only seems to work, if the
  config-directory is identical to the default `/etc/haproxy`, which _is
  not_ the case in the default-configuration of the used official image.
* Hence, changing the config-directory to the default (in this case)
  enables managed maps, which is crucial for the setup of the Handover-IT,
  whicht has to reload the HAProxy-process, in order to let it detect newly
  added backend-instances, that are otherwise ignored, because the name-
  resolution inside the docker-network only works _after_ an instance is
  started -- _without this change_, the dynamically made changes to the
  sharding-map are lost during the reload, that is performed shortly
  afterwards.
* The refined configuration for HAProxy enables the following refinements
  of the `HaproxyDataPlaneApiShardingPublisherStrategy`:
** Because the sharding-map is managed now, applied changes can be *synced
   back to disk* forcibly, which is not possible for unmanaged maps.
** That means: *Dynamically made changes persist a reload/restart!*
** Also, because the sharding-map is managed now, it can be simply
   referenced by its name `sharding`.
** Therefore, the `HaproxyDataPlaneApiShardingPublisherStrategyIT` does
   no longer have to detect the ID of the map to be able to reference it.
src/main/java/de/juplo/kafka/chat/backend/ChatBackendProperties.java
src/main/java/de/juplo/kafka/chat/backend/implementation/haproxy/HaproxyDataPlaneApiShardingPublisherStrategy.java
src/test/java/de/juplo/kafka/chat/backend/implementation/haproxy/HaproxyDataPlaneApiShardingPublisherStrategyIT.java
src/test/java/de/juplo/kafka/chat/backend/implementation/haproxy/HaproxyDataPlaneApiShardingPublisherStrategyTest.java
src/test/resources/dataplaneapi.yml
src/test/resources/de/juplo/kafka/chat/backend/implementation/haproxy/maps__get.json [deleted file]
src/test/resources/haproxy.cfg