VoltDB
4.0.1.11
February, 2015
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 [email protected]. Thank you.
VoltDB 4.0 is a major release. It consolidates and completes many features introduced over the past few months, including elasticity and changes to the user interface to improve overall ease of use of the product. Note that some changes to product syntax and functions will affect existing applications. Users of previous versions need to pay special attention to the section on Special Considerations for Existing Customers.
Benefits of VoltDB 4.0 include:
Elasticity — the ability to add nodes to the database cluster "on the fly" — with support for all standard features including K-safety, command logging, and export.
New SQL support including:
Improved use of indexes
Performance improvements for views
More robust support for expressions in indexes, functions, and clauses
Support for inner, outer, and self joins
Improved server-based export
A new, more consistent command line interface (CLI) for starting the database cluster
To accommodate new features and focus on improved ease of use, a number of changes have been made to the VoltDB product, including changes to functionality from earlier versions. Existing customers should be aware of the following changes in behavior that could impact their applications.
1.1. | Try the VoltDB Enterprise Edition. |
With V4.0, the durability and availability features associated with production usage move from the VoltDB community edition to the enterprise edition. This includes K-safety and snapshot save and restore. We encourage anyone who has been using the community edition to try the enterprise edition, which comes with a 30 day trial license. The community edition is still freely available for research and application development. However, the Enterprise Edition is recommended for all production environments. | |
1.2. | Recompile your application catalogs when upgrading. |
To avoid possible mismatches between catalogs and server software, VoltDB now requires that you recompile your application catalog whenever you upgrade. This change was introduced in VoltDB 3.7. | |
1.3. | Upgrade both server and Java client systems. |
The Java client library implements client affinity, allowing the client to route procedure calls to the most effective database server. VoltDB 4.0 changes the hashing algorithms for partitioning. As result, attempting to call a VoltDB v4.0 database using a VoltDB 3.x Java client library can result in spurious errors and decreased performance. We strongly recommend upgrading both server and client systems when upgrading to VoltDB V4.0. (This change does not affect non-Java clients.) | |
1.4. | Check the latest system requirements |
With 4.0. VoltDB has updated system requirements. CentOS 5.8 and OS X 10.6 are no longer supported. Also, VoltDB now requires Java 7. If you have not already, be sure to upgrade your server software to meet the new requirements:
| |
1.5. | Update scripts that use the CLI to start VoltDB. |
VoltDB 4.0 introduces a new command line interface (CLI) for starting server nodes. The commands for voltdb create, recover, rejoin, and add now use standard LINUX command line syntax, including argument switches, consistent with the other VoltDB command line utilities voltadmin, csvloader, and sqlcmd. As a result, you will need to update any scripts you have for starting VoltDB servers from the command line. (Note that the REST interface has not changed.) For example, the command to start a new database cluster looks like this: $ voltdb create mycatalog.jar \ --deployment=deployment.xml \ --host=voltsvr1 \ --license=~/license.xml There are also short forms for the most common switches: $ voltdb create mycatalog.jar \ -d deployment.xml \ -H voltsvr1 \ -l ~/license.xml If you would prefer to temporarily continue using the old syntax for the voltdb command, you can either:
| |
1.6. | Changes related to elasticity. |
With 4.0, elasticity (the ability to expand a running database) is enabled by default. There are several consequences of this change:
| |
1.7. | Update the deployment file for any database using export. |
With 4.0, support for remote clients has been dropped. All export clients must run on the database server. This change provides both more reliability and better performance for the export process. As part of this change, the configuration of export in the
deployment file has changed to simplify configuration.
Specifically, the <export enabled="true" target="file"> <configuration> <property name="type">csv</property> <property name="nonce">MyExport</property> </configuration> </export> | |
1.8. | Evaluate your schema for possible use of ASSUMEUNIQUE. |
In previous releases, VoltDB allowed you to define unique indexes on partitioned tables, although the index could not be guaranteed to be unique. If an index on a partitioned table does not include the partitioning column, there is no way for VoltDB to ensure the index is unique except within the partition where the query is executed. To ensure global uniqueness for UNIQUE and PRIMARY KEY indexes, VoltDB no longer allows you to define such indexes on partitioned tables if the index does not include the partitioning column. As a result, schema that compiled successfully in the past may fail to compile under VoltDB 4.0. However, there is an alternative. A new keyword, ASSUMEUNIQUE, has been added. You can use ASSUMEUNIQUE anywhere you use UNIQUE. The difference is that an ASSUMEUNIQUE index can be defined on a partitioned table where the index does not contain the partitioning column. VoltDB treats ASSUMEUNIQUE indexes as if they were unique, providing all the performance advantages of unique indexes. However, it is your responsibility to ensure the index is actually globally unique. Although VoltDB verifies the index entry is unique within the current partition when a record is inserted, the danger is that if the index is not actually unique, any operation that repartitions the data could generate a constraint violation when two matching ASSUMEUNIQUE entries fall within the same partition. Operations that could generate such violations include restoring a snapshot to a different cluster configuration or rebalancing as a result of adding nodes. When this happens the repartitioning operation is likely to fail and you must correct the conflict before continuing. Therefore, although there are performance advantages to using ASSUMEUNIQUE indexes, you use them at your own risk. You should ensure that the indexes are actually globally unique, either by design or by external verification, before inserting ASSUMEUNIQUE records into the database itself. |
The recommended platform for production use of VoltDB is CentOS 6.3 or later, Ubuntu 10.4 or 12.4, and OpenJDK or Sun JDK 7 or later. Macintosh OS X 10.7 and later is supported as a development platform. However, there are certain configuration options in the base platforms that are important when running VoltDB.
When upgrading from a previous version of VoltDB — especially with an existing database — there are a number of important notes that you should be aware of. Some changes to the structure and syntax of the VoltDB schema and deployment files may make old application catalogs and configuration files incompatible with newer versions.
Although incompatible changes are avoided wherever possible, some changes are necessary to add new features. It is always recommended that applications catalogs be recompiled when upgrading the VoltDB version. It is also important to note that the catalog is saved as part of snapshots and command logging. As a consequence, you must be careful to ensure an incompatible catalog is not loaded accidentally by starting a database with the recover action after an upgrade.
The process for upgrading VoltDB for a running database is as follows:
Place the database in admin mode (using voltadmin pause or the VoltDB Enterprise Manager).
Perform a manual snapshot of the database (using voltadmin save).
Shutdown the database (using voltadmin shutdown).
Upgrade VoltDB.
Recompile the application catalog using the new version of VoltDB.
Restart the database using the create option, the new catalog, and starting in admin mode (specified in the deployment file).
Restore the snapshot created in Step #2 (using voltadmin restore).
Return the database to normal operations (using voltadmin resume).
When using the Enterprise Manager, it is also recommended that you
delete the Enterprise Manager configuration files (stored by default in
the .voltdb
subfolder in the home directory of the
current account) when performing an upgrade.
Users of previous versions of VoltDB should take note of the following changes that might impact their existing applications.
1. Release V4.0.1.11 | |
1.1. | Bug Fixes |
| |
2. Release V4.0.1.10 | |
2.1. | Bug Fixes |
| |
3. Release V4.0.1.9 | |
3.1. | Bug Fixes |
| |
4. Release V4.0.1.8 | |
4.1. | Bug Fixes |
| |
5. Release V4.0.1.7 | |
5.1. | Bug Fixes |
| |
6. Release V4.0.1.6 | |
6.1. | Bug Fixes |
| |
7. Release V4.0.1.5 | |
7.1. | Bug Fixes |
| |
8. Release V4.0.1.4 | |
8.1. | Bug Fixes |
| |
9. Release V4.0.1.3 | |
9.1. | Bug Fixes |
| |
10. Release V4.0.1.2 | |
10.1. | Bug Fixes |
| |
11. Release V4.0.1 | |
11.1. | Further testing and hardening of the new elastic functionality |
A number of issues have been discovered and resolved in the elastic cluster functionality that is introduced in version 4.0. In particular, edge cases related to error conditions when nodes fail during elastic scaling have been identified and corrected. | |
11.2. | Java client improvements |
This release includes several improvements to the Java client, including:
As a consequence of this last change, the method ClientResponse.getException() has been removed from the client API. Also, the causedBy property of ProcCallExceptions no longer returns an exception, All underlining exception information is returned as text by the getStatusString() method. | |
11.3. | JDBC improvements |
A number of improvements have been made to the JDBC interface as well. Similar to the Java API, the JDBC interface is provided as a single JAR file with no external dependencies. This means that if you use Guava and depended on the Guava library provided by VoltDB, you must either provide your own Guava JAR file or change the dependency to "com.google_voltpatches.common.*". Other improvements to the JDBC interface include:
| |
11.4. | SQL support for CASE expressions |
VoltDB now supports the CASE-WHEN-THEN-ELSE-END syntax in queries. For example: SELECT Prod_name, CASE WHEN price > 100.00 THEN `Expensive` ELSE `Cheap` END FROM products ORDER BY Prod_name; | |
11.5. | SQL support for HAVING with aggregate functions |
VoltDB now supports the use of aggregate functions in the HAVING clause. For example: SELECT game_id, count(*) FROM games GROUP BY game_id HAVING count(*) > 1; | |
11.6. | Default Java heap size increased |
The default Java heap size for the VoltDB server process has been increased from 1GB to 2GB. The new default more closely matches recommended settings for general purpose usage, More detailed recommendations can be found in the revised "Server Process Memory Usage" section of the VoltDB Planning Guide. | |
11.7. | Recovery issues with resized clusters |
In previous versions there was an issue where, if a cluster was reduced in size and then restored from snapshots, future command logs of the cluster could not be recovered. One symptom of this issue is the fatal error "No viable snapshots to restore" during recovery. The problem only occurs if the number of unique partitions in the cluster was reduced, either by reducing the number of servers, reducing the sites per host, or increasing the K-safety factor. With this release, the issue has been corrected. The issue is resolved for any affected databases by following the instructions for upgrading in the previous section; specifically, saving a snapshot, upgrading the software to VoltDB 4.0.1 or later, then restoring the snapshot. | |
12. Release V4.0 | |
12.1. | Bug fixes |
In addition to the new features and enhancements listed above, VoltDB V4.0 includes fixes to a number of limitations in previous versions, including the following:
|
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.
This release includes two new features that are currently under development. Although functional, we at VoltDB are still investigating the appropriate direction and level of completeness required for these features. We would appreciate feedback from the user community.
1.1. | Export to Kafka |
VoltDB now supports export to Apache Kafka, a distributed commit log service that operates like a message queue. Kafka is selectable as the target export client, similar to the existing file and JDBC export clients. Customers interested in trying our new Kafka export capabilities and providing feedback, please contact [email protected] for details. | |
1.2. | Migrate from MySQL to VoltDB |
VoltDB includes a new utility, voltify, that helps you migrate from an existing MySQL database to VoltDB. The utility connects to a running MySQL database and creates a target schema and starter project in VoltDB to match the source database. If you are interested, you can find instructions for volity in the VoltDB github repository at the following URL: http://github.com/VoltDB/voltdb/blob/master/tools/voltify-README.md We encourage anyone who tries it to provide feedback in the VoltDB forums, http://forum.voltdb.com. Thank you. |