Packages
========
-ISC publishes native RPM, deb, and APK packages, along with the tarballs
-with the source code. The packages are available on
+ISC publishes native RPM, deb, and APK packages, along with the tarballs
+with the source code. The packages are available on
`Cloudsmith <https://cloudsmith.io/~isc/repos/>`_ at
https://cloudsmith.io/~isc/repos. The native packages can be downloaded
and installed using the system available in a specific distribution (such
disabled by default and only memfile is available. Support for the
optional external database backend must be explicitly included when Kea
is built. This section covers the building of Kea with one of the
-optional backends and the creation of the lease database. (*Note that
+optional backends and the creation of the lease database. (* Note that
as of Kea 1.9.9 support for Cassandra is deprecated and will be removed
in a future version.)
Deprecated Features
===================
-This section lists significant features that were supported in the past that have been,
-or will be removed. We will try to deprecate features before removing them to signal
+This section lists significant features that were supported in the past that have been,
+or will be removed. We will try to deprecate features before removing them to signal
to current users to plan a migration. New users should not rely on deprecated features.
Cassandra (CQL) Support
the alternatives, MySQL and PostgreSQL.
The non-relational nature of Cassandra makes it exceedingly difficult to implement more complex
-DHCP features, such as the configuration backend. The configuration backend requires over 20
-tables of tighly related data that change over time and need to be kept in sync. With the
-Cassandra philosophy of data duplication, this would require creating and maintaining a massive
-number of tables. To be specific, there are 36 different types of `get` queries in the DHCPv4
-code for the MySQL Configuration Backend. In the worst case, where each query required its
-own table, this implies a duplication factor of over 70. This would clearly be a very bad design.
+DHCP features, such as the configuration backend. The configuration backend requires over 20
+tables of tighly related data that change over time and need to be kept in sync. With the
+Cassandra philosophy of data duplication, this would require creating and maintaining a massive
+number of tables. To be specific, there are 36 different types of `get` queries in the DHCPv4
+code for the MySQL Configuration Backend. In the worst case, where each query required its
+own table, this implies a duplication factor of over 70. This would clearly be a very bad design.
When we created the initial MySQL and PostgreSQL designs for the Configuration Backend, we also
-attempted to come up with a design for Cassandra. That attempt was a complete failure. We
+attempted to come up with a design for Cassandra. That attempt was a complete failure. We
assessed that Cassandra is simply not the right technology for this task.
Another problem with Cassandra is performance. In our performance tests MySQL and PostgreSQL
Another concern with Cassandra is its complicated setup. As of June 2021, Cassandra is not
available in many major distributions. It requires custom installation, with native packages
-now limited to Debian only. The quick introduction seems to favor Docker containers as a
-replacement. The Debian packages available require Python 2 (which reached end of life at
-1 Jan 2020) and will uninstall some python 3 packages. This is very risky step in a production
-environment, because it removes the current 3.8 or 3.9 python and installs an old, unsupported
-version. The Cassandra software is written in Java, so it is unclear why it even does anything
-with Python.
-
-To use C++ bindings (Kea is written in C++), a data driver is required. For a while, around
+now limited to Debian only. The quick introduction seems to favor Docker containers as a
+replacement. The Debian packages available require Python 2 (which reached end of life at
+1 Jan 2020) and will uninstall some python 3 packages. This is very risky step in a production
+environment, because it removes the current 3.8 or 3.9 python and installs an old, unsupported
+version. Support for python 3 is only available in alpha release of upcoming Cassandra 4.0,
+which is not released yet as of June 2021. The user has a tough choice between running antiquated
+version past its end of life or running unreleased alpha software. Neither option is reasonable
+in production environment.
+
+Cassandra is also very picky about the Java version. For example, on modern systems such as
+Ubuntu 21.04, it simply doesn't start and produces no logs. After running the Cassandra manually,
+it produces a cryptic `Improperly specified VM option 'ThreadPriorityPolicy=42'` error message.
+This is an obscure information that the Java version is too new (11.x) and needs to be downgraded
+(to 8.x).
+
+To use C++ bindings (Kea is written in C++), a data driver is required. For a while, around
2020 there was a message about it being in maintenance mode, but as of now (June 2021) this
-message disappeared. The data driver does not use the standard `pkg-config` approach and requires
-custom hacking. Cassandra itself requires a Java JVM to run. In the past, we experienced serious
-problems with the Java VM machine versioning, which impedes Cassandra operation and produces
-cryptic error messages. Compared to MySQL and PostgreSQL, which are widely available in all popular
-Linux and BSD distributions, setting up Cassandra is complex and the complexity is not decreasing
-over time.
+message disappeared. For a long time the data driver didn't not use the standard `pkg-config`
+approach and required custom hacking with regards to the software detection. Compared to
+MySQL and PostgreSQL, which are widely available in all popular Linux and BSD distributions,
+setting up Cassandra is complex and the complexity is not decreasing over time.
Cassandra is also an ongoing maintenance burden. As we introduce new features to Kea, such
as the ability to get database statistics that are synced between multiple Kea instances sharing
problem with Cassandra. That is not a Cassandra flaw on its own, the core problem here is that
it is different than the other solutions Kea supports.
-For these reasons, we are deprecating Cassandra support as of Kea 1.9.9. The feature will
-function as before in the Kea 2.0.x and 2.1.x series, but will print a warning. We plan to
+For these reasons, we are deprecating Cassandra support as of Kea 1.9.9. The feature will
+function as before in the Kea 2.0.x and 2.1.x series, but will print a warning. We plan to
remove the feature entirely in a future release, possibly as soon as Kea 2.2.0.