VoltDB
10.2.25
VoltDB Operator 1.3.19 |
VoltDB Helm Chart 1.3.19 |
September 24, 2024
This document provides information about known issues and limitations to the current release of VoltDB. If you encounter any problems not listed below, please be sure to report them to support@voltdb.com. Thank you.
Starting with the next feature release, version 11.0, VoltDB will switch from using Python 2 to Python 3. This means Python 3 will be required by all VoltDB command line utilities and the VoltDB Python API.
The process for upgrading from the recent versions of VoltDB is as follows:
Shutdown the database, creating a final snapshot (using voltadmin shutdown --save).
Upgrade the VoltDB software.
Restart the database (using voltdb start).
For DR clusters, see the section on "Upgrading VoltDB Software" in the VoltDB Administrator's Guide for special considerations related to DR upgrades. If you are upgrading from versions before V6.8, see the section on "Upgrading Older Versions of VoltDB Manually" in the same manual.
For customers upgrading from V8.x or earlier releases of VoltDB, please see the V8.0 Upgrade Notes.
For customers upgrading from V7.x or earlier releases of VoltDB, please see the V7.0 Upgrade Notes.
For customers upgrading from V6.x or earlier releases of VoltDB, please see the V6.0 Upgrade Notes.
Users of previous versions of VoltDB should take note of the following changes that might impact their existing applications.
1. Release V10.2.25 (September 24, 2024) | |||||||||
1.1. | Important Note for Kubernetes Users | ||||||||
Previous releases of Volt used control groups V1 to calculate the available memory on Kubernetes. However, recent updates to Kubernetes have switched to control groups V2, causing the V1 calculations to return incorrect and inflated values. This could result in the Volt server process exhausting memory and generating an out of memory error or triggering a resource limit and pausing. With the release of 10.2.25, Volt now supports both control groups V1 and V2. All Kubernetes users are strongly encouraged to upgrade at their earliest convenience to avoid issues now or in the future. | |||||||||
1.2. | Security updates | ||||||||
Various packages within Volt Active Data have been updated to eliminate known security vulnerabilities, including:
| |||||||||
1.3. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
2. Release V10.2.24 (August 2, 2024) | |||||||||
2.1. | Recent improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
3. Release V10.2.23 (April 10, 2024) | |||||||||
3.1. | Running 10.2.23 on Kubernetes | ||||||||
All Volt V10.2 releases since 10.2.21 are supported by the latest Volt Operator for Kubernetes. This means you
can start a database using Volt V10.2.23 simply by specifying the software version in the
$ helm install mydb voltdb/voltdb \ --set global.voltdbVersion=10.2.23 If you prefer to use the previous, V10-specific operator, you can do that by specifying the operator version
using the $ helm install mydb voltdb/voltdb \ --version=1.3 \ --set cluster.clusterSpec.image.tag=10.2.23 | |||||||||
3.2. | Recent improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
4. Release V10.2.22 (February 16, 2024) | |||||||||
4.1. | Recent improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
5. Release V10.2.21 (January 12, 2024) | |||||||||
5.1. | Security updates | ||||||||
Various packages within Volt Active Data have been updated to eliminate known security vulnerabilities, including:
| |||||||||
5.2. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
6. Release V10.2.20 (October 20, 2023) | |||||||||
6.1. | Security updates | ||||||||
Various packages within Volt Active Data have been updated to eliminate known security vulnerabilities, including:
| |||||||||
6.2. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
7. Release V10.2.19 (September 19, 2023) | |||||||||
7.1. | Recent improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
8. Release V10.2.18 (July 25, 2023) | |||||||||
8.1. | Support for Kubernetes version 1.25. | ||||||||
This release of the VoltDB Operator and Helm chart adds support for Kubernetes version 1.25. It can be used only on Kubernetes version 1.21 and later. Kubernetes removed support for the deprecated PodSecurityPolicy in version 1.25. To this end, the default
chart setting for | |||||||||
8.2. | Improved memory management | ||||||||
This release provides additional information and control when managing memory on VoltDB servers and in particular, the undo pool. The undo pool is used to store temporary information needed to "undo" a transaction in case it must be rolled back. The pool grows as needed, based on how much data is needed to undo the current transactions. If your workload includes certain infrequent but memory-intensive transactions (such as deleting large volumes of data on a weekly basis) the undo pool can grow quite large, artificially inflating the resident set size (RSS). A column has been added to the results of the @Statistics system procedure MEMORY selector. The column, UNDO_POOL_SIZE, measures the amount of memory, in kilobytes, allocated for the undo pool. A new system procedure, @PurgeUndo, lets you reset the undo pool size to zero. If you find your RSS growing incrementally and you suspect the undo pool, you can use the UNDO_POOL_SIZE column in the @Statistics MEMORY procedure results to verify the amount of space being consumed by the undo pool. If the pool is unnecessarily large, you can use the @PurgeUndo procedure to reset it. | |||||||||
8.3. | Security updates | ||||||||
Various packages within Volt Active Data have been updated to eliminate known security vulnerabilities, including:
| |||||||||
8.4. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
9. Release V10.2.17 (June 6, 2023) | |||||||||
9.1. | Security updates | ||||||||
Various packages within Volt Active Data have been updated to eliminate known security vulnerabilities, including:
| |||||||||
9.2. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
10. Release V10.2.16 (February 18, 2023) | |||||||||
10.1. | Security updates | ||||||||
Various packages within Volt Active Data have been updated to eliminate known security vulnerabilities, including:
| |||||||||
10.2. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
11. Release V10.2.15 (November 15, 2022, updated August 9, 2023) | |||||||||
11.1. | New Prometheus metrics added | ||||||||
Information related to the configuration and status of the cluster, also available from the @SystemInformation system procedure, is now available as metrics shared through the Prometheus agent. See the sections on integrating with Prometheus in the Volt Administrator's Guide and Volt Kubernetes Administrator's Guide for more information about using Volt Active Data with Prometheus. | |||||||||
11.2. | Log4J replaced by reload4J | ||||||||
VoltDB does not use any of the components implicated in the published CVEs related to Log4J. However, to avoid any confusion, VoltDB has replaced the Log4J library with reload4J, a drop-in replacement that replicates the log4J namespace and functionality, but eliminates all known security vulnerabilities. | |||||||||
11.3. | Security updates | ||||||||
Various packages within Volt Active Data have been updated to eliminate known security vulnerabilities, including:
| |||||||||
11.4. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
12. Release V10.2.14 (September 1, 2022) | |||||||||
12.1. | Security Notice | ||||||||
The following package updates have been added to the Kubernetes release of Volt Active Data to address known security vulnerabilities:
| |||||||||
12.2. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
13. Release V10.2.13 (July 20, 2022) | |||||||||
13.1. | Additional statistics for tracking communication between XDCR clusters | ||||||||
Several additional columns have been added to the first results table for the @Statistics DRPRODUCER selector (and the corresponding Prometheus agent metrics) to help evaluate the time between when binary logs are ready for transmission and when acknowledgement is received from the consumer. The new columns are the following and are reported in milliseconds:
The corresponding metrics in the Prometheus agent are:
| |||||||||
13.2. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
14. Release V10.2.12 (May 6, 2022) | |||||||||
14.1. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
15. Release V10.2.11 (April 26, 2022) | |||||||||
15.1. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
16. Release V10.2.10 (March 8, 2022) | |||||||||
16.1. | Additional improvement | ||||||||
The following limitation in previous versions has been resolved:
| |||||||||
17. Release V10.2.9 (February 15, 2022) | |||||||||
17.1. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
18. Release V10.2.8 (January 25, 2022, updated June 1, 2022) | |||||||||
18.1. | Database Replication (DR) improvements | ||||||||
A number of improvements to database replication (DR) developed in the follow-on release (V11.x) have been backported to V10.2.8 to increase stability and reliability. These changes include:
| |||||||||
18.2. | Recent improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
19. Release V10.2.7 (January 4, 2022) | |||||||||
19.1. | Security Notice | ||||||||
The jQuery libraries used by the VoltDB Management Center have been updated to the following versions to address security vulnerabilities:
| |||||||||
19.2. | VoltDB Management Center improvements | ||||||||
In addition to the security updates, a number of functional improvements have been made to the VoltDB Management Center (VMC), including:
| |||||||||
19.3. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
20. Release V10.2.6 (September 3, 2021) | |||||||||
20.1. | New --credentials argument added to Prometheus agent | ||||||||
The Prometheus agent for VoltDB has a new argument available when starting the agent from the shell command.
The $ cat $HOME/mycreds.txt username: admin password: mySpecialPassword $ ./voltdb/tools/monitoring/prometheus/voltdb-prometheus \ --credentials $HOME/mycreds.txt Using the | |||||||||
20.2. | General release of VoltDB Topics for production use | ||||||||
VoltDB topics, which were released as a beta feature in V10.2, are now ready for production use. See the chapter on Streaming Data in the Using VoltDB manual for more information. | |||||||||
20.3. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
21. Release V10.2.5 (June 16, 2021) | |||||||||
21.1. | IMPORTANT: Limit partition row feature to be removed in VoltDB V11.0 | ||||||||
The LIMIT PARTITION ROWS feature was deprecated in Version 9. It will be removed in Version 11. This is a change to the VoltDB schema syntax that is not forward compatible. This means that if your database schema still contains the LIMIT PARTITION ROWS syntax, you need to remove the
offending clause before upgrading to the upcoming major release. Fortunately, there is a simple process for doing
this. You can use the | |||||||||
21.2. | Improved Java client handles both topology awareness and reconnections | ||||||||
The VoltDB Java client has two separate features that let you enable topology awareness
( Previously, these features were mutually exclusive. However, there are times when you might require both. For example, topology awareness fails if there are no remaining connections (such as a cluster reboot). Whereas, reconnection can only reconnect to addresses it already knows; it cannot detect if a failed server restarts with a new address. To cover this situation, the client has been improved to allow both features to be enabled at the same time. | |||||||||
21.3. | The VoltDB Kubernetes Operator now logs all interaction with the individual VoltDB processes | ||||||||
To aid in debugging, the VoltDB Operator now logs all of the commands it issues to the VoltDB processes running on the Kubernetes pods. | |||||||||
21.4. | The Java client autotune feature is deprecated | ||||||||
The VoltDB Java client has an autotune feature (with methods in the ClientConfig class) that was originally designed to assist in developing demo applications. This feature is now deprecated and will be removed in a future release. | |||||||||
21.5. | The Java client send-reads-to-replicas feature is deprecated | ||||||||
Previously, VoltDB had a feature to enable complete read consistency (to protect against various failure scenarios). The clientConfig method setSendReadsToReplicasByDefault was associated with that feature. However, read consistency is now always enabled, so this method is obsolete and has been deprecated. It will be removed in a future release. | |||||||||
21.6. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
22. Release V10.2.4 (May 7, 2021) | |||||||||
22.1. | New license improvements | ||||||||
This release includes a number of improvements to the licensing and management of VoltDB software. These improvements include:
The new voltadmin license command is the most important of these changes for users, since it allows you to update the license for a cluster without having to restart. Note that the cluster must be complete — with no missing nodes — when you update the license. For example: $ voltadmin license new-license-file.xml | |||||||||
22.2. | Beta utility voltsql deprecated | ||||||||
There is a beta utility, voltsql, that extends the standard sqlcmd utility adding command completion and other interactive aids. The added functionality never fully met its goals and maintaining two separate utilities is both impractical from a product perspective and confusing from a customer perspective. For that reason, voltsql is being deprecated and will be removed in the next major release. | |||||||||
22.3. | Improved connectivity for XDCR in Kubernetes | ||||||||
In environments such as Kubernetes where IP addresses are transient, XDCR could take an extended period of time to reconnect a server on a remote cluster if the server restarted with a different address. The connection logic has been rewritten to accommodate these environments, eliminating the delay. | |||||||||
22.4. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
23. Release V10.2.3 (March 25, 2021) | |||||||||
23.1. | Support for Kubernetes 1.19 | ||||||||
VoltDB and the VoltDB Operator now support Kubernetes 1.19. | |||||||||
23.2. | Recent improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
24. Release V10.2.2 (March 2, 2021) | |||||||||
24.1. | Support for including additional content through Kubernetes persistent volumes | ||||||||
You can now identify additional content — such as schema files, stored procedure classes, and
third-party JAR files — to be included when initializing a VoltDB database on Kubernetes by specifying their
location in the | |||||||||
24.2. | Remove requirement for Python 2.7.13 inadvertently added in an earlier release | ||||||||
Improvements associated with SSL/TLS and IPv6 inadvertently added a requirement for Python version 2.7.13 in VoltDB versions 10.2 and 10.1.1. This constraint has been corrected and VoltDB now accepts Python version 2.7.5 and later. | |||||||||
24.3. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
25. Release V10.2.1 (January 21, 2021) | |||||||||
25.1. | Initial Kubernetes release corrected | ||||||||
The initial release of 10.2 on Kubernetes included the wrong Docker image. This issue is resolved by the 10.2.1 point release. Do not use the initial application and helm chart versions (10.2.0 and 1.3.0). Please be sure to use the latest releases, which are 10.2.1 and 1.3.1 respectively. This change affects the Kubernetes release of VoltDB only. | |||||||||
26. Release V10.2 (January 19, 2021) | |||||||||
26.1. | Configuration updates available in Kubernetes | ||||||||
The VoltDB Operator for Kubernetes now supports changes to cluster and database configuration properties while the database is running. For properties that can be changed dynamically, the change occurs immediately. For other properties, the Operator orchestrates a cluster restart or rolling upgrade, as needed. See the chapter on updates and upgrades in the VoltDB Kubernetes Administrator's Guide for details. | |||||||||
26.2. | DR initialization snapshots changed to asynchronous processing | ||||||||
At the beginning of database replication (DR), a snapshot of the database is created and sent to the joining cluster. Previously, the initialization snapshot was created as a synchronous snapshot — blocking transactions on the existing database until initialization is complete. However, depending on the size of the database, the snapshot could take a significant amount of time to complete, stalling ongoing database transactions until the snapshot is complete. This release changes the processing of DR initialization snapshots from synchronous to asynchronous. The asynchronous snapshot eliminates the interruption to ongoing work on the active cluster. The one drawback to this change is, when using cross datacenter replication (XDCR) with more than two clusters, if a node fails on the active cluster during the initialization snapshot, existing XDCR connections to other clusters may be lost and need to be reset. | |||||||||
26.3. | DR binary log handling improved for multi-cluster XDCR | ||||||||
Database replication (DR) is managed by passing binary logs between the participating clusters. The DR consumer acknowledges packets after they have been applied. If the consumer falls behind and has no room in its queue, it throws away additional packets and waits to request them again when it is ready. However, for multi-cluster XDCR environments, this means all clusters are constrained by the latency of the slowest cluster. Starting with VoltDB V10.0, the management of binary logs was enhanced to track the queuing and acknowledgement of packets for each cluster separately. This means that each DR consumer can process packets at an optimal speed. To help understand the impact of this change, extra fields have been added to the return results of the DRCONSUMER and DRPRODUCER selectors for the @Statistics system procedure. See the description of @Statistics in the Using VoltDB manual for more information. | |||||||||
26.4. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
27. Release V10.1.3 (December 18, 2020) | |||||||||
27.1. | Internal improvements to VoltDB Operator | ||||||||
Code improvements to optimize the software upgrade process. | |||||||||
28. Release V10.1.2 (December 15, 2020) | |||||||||
28.1. | Adjustments and optimizations for Kubernetes settings | ||||||||
Several settings associated with Kubernetes have been adjusted to provide a better experience when starting and running VoltDB in a Kubernetes environment. Those optimizations include:
| |||||||||
28.2. | Using load balancers to connect XDCR clusters in different Kubernetes domains | ||||||||
The Helm charts for Kubernetes now allow for alternate methods of establishing a network mesh between clusters for cross datacenter replication (XDCR). In particular, you can now use per-pod load balancers so the clusters can connect to each other through externally available IP addresses. See the VoltDB Kubernetes Administrator's Guide for details. | |||||||||
28.3. | Security Notice | ||||||||
A number of libraries included in the VoltDB distribution have been updated to eliminate security vulnerabilities, including Guava, Jackson, Jetty, Kafka, Log4J, and Netty | |||||||||
28.4. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
29. Release V10.1.1 (November 13, 2020) | |||||||||
29.1. | Support for IPv6 | ||||||||
VoltDB now supports both IPv4 and IPv6 networking. This includes support for IPv6-only environments. When entering IPv6 network addresses, be sure to enclose the address in square brackets. See the implementation note concerning IPv6 addresses for details. | |||||||||
30. Release V10.1 (October 30, 2020) | |||||||||
30.1. | Support for multiple VoltDB databases in the same Kubernetes cluster | ||||||||
With the original release of VoltDB V10.0 and the VoltDB Operator, you could run multiple VoltDB databases in separate Kubernetes clusters or in separate namespaces within a single cluster. You can now run multiple databases within the same Kubernetes cluster and namespace. To do this, you start by running a single copy of the VoltDB Operator, using the following steps:
When running multiple databases within the same namespace, the only proviso is that you must not stop and delete the Operator until all of the databases it supports are stopped and deleted. | |||||||||
30.2. | Support for future upgrades in Kubernetes | ||||||||
Another change to the VoltDB Operator for Kubernetes provides support for future upgrades to VoltDB installations. Although not available for upgrading V10.0 to V10.1, this new functionality will allow scripted upgrades for all future versions of VoltDB in Kubernetes. For the initial V10.0 release of the VoltDB Operator, the one-time process for upgrading to V10.1 is:
| |||||||||
30.3. | Improved SHOW TABLES and DESCRIBE information in sqlcmd | ||||||||
The sqlcmd directives SHOW TABLES and DESCRIBE have been enhanced to provide additional information about the tables in the database schema. The SHOW TABLES directive now sorts the schema objects between regular tables, data replication (DR) tables, streams, and views. Similarly, the DESCRIBE directive now distinguishes between regular tables and DR tables. | |||||||||
30.4. | Additional information in the @Statistics and @SystemInformation system procedures | ||||||||
Both the @Statistics and @SystemInformation system procedures have been enhanced to provide additional information. The @Statistics TABLE selector now includes two additional columns indicating whether the table is a DR table or not and, if it is defined as an export table, the name of its export target. The @SystemInformation DEPLOYMENT selector now includes rows for additional paths, such as DR and export overflow and cursors, when appropriate. | |||||||||
30.5. | Kafka import and export support Kafka version 2.6.0 and later | ||||||||
The Kafka services within VoltDB (including Kafka import and export) support Kafka version 2.6.0 and later. Support for earlier versions of Kafka is deprecated. | |||||||||
30.6. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
| |||||||||
31. Release V10.0 (August 12, 2020) | |||||||||
31.1. | New VoltDB Operator for Kubernetes | ||||||||
VoltDB now offers a complete solution for running VoltDB databases in a Kubernetes cloud environment. VoltDB V10.0 provides managed control of the database startup process, a new VoltDB Operator for coordinating cluster activities, and Helm charts for managing the relationship between Kubernetes, VoltDB and the Operator. The VoltDB Kubernetes solution is available to Enterprise customers and includes support for all VoltDB functionality, including cross data center replication (XDCR). See the VoltDB Kubernetes Administrator's Guide for more information. | |||||||||
31.2. | New Prometheus agent for VoltDB | ||||||||
For customers who use Prometheus to monitor their systems, VoltDB now provides a Prometheus agent that can
collect statistics from a running cluster and make them available to the Prometheus engine. The Prometheus agent is
available as a Kubernetes container or as a separate process that can either run on one of the VoltDB servers or
remotely and makes itself available through port 1234 by default. See the README file in the
| |||||||||
31.3. | Enhancements to Export | ||||||||
Recent updates to export provide significant improvements to reliability and performance. The key advantages of the new export subsystem are:
| |||||||||
31.4. | Improved license management | ||||||||
Starting with VoltDB V10.0, specifying the product license has moved from the voltdb start command to the voltdb init command. In other words, you only have to specify the license once, when you initialize the database root directory, rather than every time you start the database. When you do specify the license on the init command, it is stored in the root directory the same way the configuration is. The same rules apply about the default location of the license as before. So if you store your license in your
current working directory, your home directory, or the | |||||||||
31.5. | Support for RHEL and CentOS V8 | ||||||||
After internal testing and validation, RHEL and CentOS V8 are now supported platforms for production use of VoltDB. | |||||||||
31.6. | RabbitMQ export connector removed | ||||||||
The export connector for RabbitMQ was deprecated in VoltDB version 9 and has now been removed from the product. | |||||||||
31.7. | Ubuntu 14.04 no longer supported as production platform | ||||||||
Ubuntu 14, which is no longer supported by Canonical, has been dropped as a production platform for VoltDB. | |||||||||
31.8. | Additional improvements | ||||||||
The following limitations in previous versions have been resolved:
|
The following are known limitations to the current release of VoltDB. Workarounds are suggested where applicable. However, it is important to note that these limitations are considered temporary and are likely to be corrected in future releases of the product.
The following notes provide details concerning how certain VoltDB features operate. The behavior is not considered incorrect. However, this information can be important when using specific components of the VoltDB product.
1. IPv6 | |
1.1. | Support for IPv6 addresses |
VoltDB works in IPv4, IPv6, and mixed network environments. Although the examples in the documentation use IPv4 addresses, you can use IPv6 when configuring your database, making connections through applications, or using the VoltDB command line utilities, such as voltdb and voltadmin. When specifying IPv6 addresses on the command line or in the configuration file, be sure to enclose the address in square brackets. If you are specifying both an IPv6 address and port number, put the colon and port number after the square brackets. For example: voltadmin status --host=[2001:db8:85a3::8a2e:370:7334]:21211 | |
2. VoltDB Management Center | |
2.1. | Schema updates clear the stored procedure data table in the Management Center Monitor section |
Any time the database schema or stored procedures are changed, the data table showing stored procedure statistics at the bottom of the Monitor section of the VoltDB Management Center get reset. As soon as new invocations of the stored procedures occur, the statistics table will show new values based on performance after the schema update. Until invocations occur, the procedure table is blank. | |
3. SQL | |
3.1. | You cannot partition a table on a column defined as ASSUMEUNIQUE. |
The ASSUMEUNIQUE attribute is designed for identifying columns in partitioned tables where the column values are known to be unique but the table is not partitioned on that column, so VoltDB cannot verify complete uniqueness across the database. Using interactive DDL, you can create a table with a column marked as ASSUMEUNIQUE, but if you try to partition the table on the ASSUMEUNIQUE column, you receive an error. The solution is to drop and add the column using the UNIQUE attribute instead of ASSUMEUNIQUE. | |
3.2. | Adding or dropping column constraints (UNIQUE or ASSUMEUNIQUE) is not supported by the ALTER TABLE ALTER COLUMN statement. |
You cannot add or remove a column constraint such as UNIQUE or ASSUMEUNIQUE using the ALTER TABLE ALTER COLUMN statement. Instead to add or remove such constraints, you must first drop then add the modified column. For example: ALTER TABLE employee DROP COLUMN empID; ALTER TABLE employee ADD COLUMN empID INTEGER UNIQUE; | |
3.3. | Do not use UPDATE to change the value of a partitioning column |
For partitioned tables, the value of the column used to partition the table determines what partition the row belongs to. If you use UPDATE to change this value and the new value belongs in a different partition, the UPDATE request will fail and the stored procedure will be rolled back. Updating the partition column value may or may not cause the record to be repartitioned (depending on the old and new values). However, since you cannot determine if the update will succeed or fail, you should not use UPDATE to change the value of partitioning columns. The workaround, if you must change the value of the partitioning column, is to use both a DELETE and an INSERT statement to explicitly remove and then re-insert the desired rows. | |
3.4. | Ambiguous column references no longer allowed. |
Starting with VoltDB 6.0, ambiguous column references are no longer allowed. For example, if both the Customer and Placedorder tables have a column named Address, the reference to Address in the following SELECT statement is ambiguous: SELECT OrderNumber, Address FROM Customer, Placedorder . . . Previously, VoltDB would select the column from the leftmost table (Customer, in this case). Ambiguous column references are no longer allowed and you must use table prefixes to disambiguate identical column names. For example, specifying the column in the preceding statement as Customer.Address. A corollary to this change is that a column declared in a USING clause can now be referenced using a prefix. For example, the following statement uses the prefix Customer.Address to disambiguate the column selection from a possibly similarly named column belonging to the Supplier table: SELECT OrderNumber, Vendor, Customer.Address FROM Customer, Placedorder Using (Address), Supplier . . . | |
4. Runtime | |
4.1. | File Descriptor Limits |
VoltDB opens a file descriptor for every client connection to the database. In normal operation, this use of file descriptors is transparent to the user. However, if there are an inordinate number of concurrent client connections, or clients open and close many connections in rapid succession, it is possible for VoltDB to exceed the process limit on file descriptors. When this happens, new connections may be rejected or other disk-based activities (such as snapshotting) may be disrupted. In environments where there are likely to be an extremely large number of connections, you should consider increasing the operating system's per-process limit on file descriptors. | |
4.2. | Use of Resources in JAR Files |
There are two ways to access additional resources in a VoltDB database. You can place the resources in the
LOAD CLASSES is used primarily to load classes associated with stored procedures and user-defined functions. However, it will also load any additional resource files included in subfolders of the JAR file. You can remove classes that are no longer needed using the REMOVE CLASSES directive. However, there is no explicit command for removing other resources. Consequently, if you rename resources or move them to a different location and reload the JAR file, the database will end up having multiple copies. Over time, this could result in more and more unnecessary memory being used by the database. To remove obsolete resources, you must first reinitialize the database root directory, start a fresh database, reload the schema (including the new JAR files with only the needed resources) and then restore the data from a snapshot. | |
4.3. | Servers with Multiple Network Interfaces |
If a server has multiple network interfaces (and therefore multiple IP addresses) VoltDB will, by default, open ports on all available interfaces. You can limit the ports to an single interface in two ways:
Also, when using an IP address to reference a server with multiple interfaces in command line utilities (such as voltadmin stop node), use the @SystemInformation system procedure to determine which IP address VoltDB has selected to identify the server. Otherwise, if you choose the wrong IP address, the command might fail. | |
4.4. | Using VoltDB where the /tmp directory is noexec |
On startup, VoltDB extracts certain native libraries into the /tmp directory before loading them. This works in all standard operating environments. However, in custom installations where the /tmp storage is mounted with the "noexec" option, VoltDB cannot extract the libraries and, in the past, refused to start. For those cases where the /tmp directory is assigned on storage mounted with the ‘noexec’ option, you can assign an alternative storage for VoltDB to use for extracting and executing temporary files. This is now done automatically on Kubernetes and does not require any user intervention. On non-Kubernetes environments, you can identify an alternative location by assigning it to
export VOLTDB_OPTS="-Dvolt.tmpdir=/volttemp \ -Dorg.xerial.snappy.tempdir=/volttemp \ -Djna.tmpdir=/volttemp" When using an alternate temporary directory, files can accumulate over time since the directory is not automatically purged on startup. So you should make sure you periodically delete old files from the directory. | |
5. Platforms | |
5.1. | Kubernetes Compatibility |
See the Volt Kubernetes Compatibility Chart for information on which versions of the Volt Operator and Helm charts support which version of VoltDB. See the VoltDB Operator Release Notes for additional information about individual releases of the VoltDB Operator. |