VoltDB
4.6.15
June 6, 2017
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.
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 your application catalog.
Restart the database using the create option, the recompiled application 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. Users of pre-V4 releases should pay special attention to the upgrade instructions for V3 users available as a separate document.
1. Release V4.6.15 (June 6, 2017) | ||||
1.1. | Additional debugging information | |||
This release reports additional information if a byte buffer overflow error occurs while writing the DR binary log. | ||||
2. Release V4.6.14 (February 24, 2017) | ||||
2.1. | Recent improvement | |||
The following change has been implemented in both V4.6.14 and V4.6.11.3
| ||||
3. Release V4.6.13 (November 7, 2016) | ||||
The following issues were resolved in this release. | ||||
3.1. | The DR master database stalls with the message "IllegalStateException: invocation buffer in not compiled" | |||
When using database replication (DR), there was a race condition that could cause the master database to stall and report the error "IllegalStateException: invocation buffer in not compiled". Although the error is real, the database did not stop as it should have. The database now takes the appropriate action and stops when this error occurs. Also fixed in V4.6.11.2. | ||||
4. Release V4.6.12 (July 21, 2016) | ||||
The following issues were resolved in this release. | ||||
4.1. | When using database replication (DR), running out of disk space on one node could crash the cluster. | |||
Database replication (DR) buffers data on disk in the database root directory
( | ||||
4.2. | Under a heavy workload of multi-partition transactions, the DR agent could run out of Java heap space. | |||
When using database replication (DR), the DR agent buffers data for each unique partition separately. With a heavy multi-partition (MP) workload and a large partition count, processing of the MP transactions on the replica could cause the buffers on the DR agent to fill up, exceeding the allotted heap space. This issue has been fixed and the DR agent now applies back pressure to avoid exceeding the available space. | ||||
5. Release V4.6.11 | ||||
The following issue was resolved in this release. | ||||
5.1. | Under certain circumstances, the DR master database stopped sending queued transactions after the initial snapshot | |||
When starting database replication (DR) it was possible for the master database to fail to send queued transactions after the initial snapshot completed. The result was that the replica showed no transactions being processed and, eventually, the master database DR overflow would exceed its limit and DR would stop. This issue has been fixed. | ||||
6. Release V4.6.10 | ||||
The following issue was resolved in this release. | ||||
6.1. | Race condition causes DR to stop, memory usage to grow, and eventually stalls the database. | |||
There was a race condition in database replication (DR) that would cause a process thread (InvocationBufferServer) to die, stopping DR and eventually blocking transactions in the database. This problem has been corrected. | ||||
7. Release V4.6.9 | ||||
The following issues are resolved in this release. | ||||
7.1. | Rejoin failure due to clock skew causes subsequent rejoins and snapshots to fail. | |||
Previously, if a rejoin operation fails due to the difference in clock time between nodes exceeding the allowable multi-partition limit (100 milliseconds), any subsequent attempt to rejoin a node or generate a snapshot will fail as well. This problem has been corrected. | ||||
7.2. | Database replication (DR) improvements. | |||
Several failure cases related to database replication (DR) have been fixed. Specifically:
Both of these issues have been resolved. | ||||
8. Release V4.6.8 | ||||
The following issues are resolved in this release. | ||||
8.1. | Uni-directional network outages could impact DR | |||
Previously, when using database replication (DR), the master database did not always resume sending data to the replica after a uni-directional network outage. This problem has been corrected. | ||||
9. Release V4.6.7 | ||||
9.1. | Bug Fixes | |||
| ||||
10. Release V4.6.6 | ||||
10.1. | Improvements to DR | |||
Changes have been made to improve memory utilization for database replication (DR) buffering in virtualized environments and snapshot processing. | ||||
10.2. | Improved performance of JDBC prepared statements and ad hoc queries with parameters | |||
When processing ad hoc queries that use parameters and placeholders (rather than a single SQL statement as a text string), VoltDB now makes use of previously cached queries to significantly improve performance for repeated queries. This can be most notable for JDBC prepared statements that are implemented as ad hoc queries with parameters. | ||||
10.3. | Support fix for Red Hat 5 | |||
This release includes an updated ZeroMQ library required to support Red Hat Enterprise Linux 5.x. | ||||
10.4. | Timeout during DR initiation | |||
There was an issue where, if the master database was under load, the DR agent would timeout attempting to retrieve the initial DR snapshot. This issue has been resolved by extending the timeout period on the DR agent from 5 seconds to 90 seconds and modifying the master database to issue periodic ACKs even when processing snapshots for DR initiation. | ||||
10.5. | Race condition stops DR master database | |||
Under certain circumstances, a race condition in database replication (DR) was found that could result in a node on the master cluster crashing with the error "java.lang.IllegalStateException: buffer is already compiled". This issue has been resolved. | ||||
11. Release V4.6.5 | ||||
11.1. | Bug Fixes | |||
| ||||
12. Release V4.6.3 | ||||
12.1. | Bug Fixes | |||
| ||||
13. Release V4.6.2 | ||||
13.1. | Bug Fixes | |||
| ||||
14. Release V4.6.1 | ||||
14.1. | Bug Fixes | |||
| ||||
15. Release V4.6 | ||||
15.1. | Support for Ubuntu 14.04 | |||
VoltDB has been tested and validated on Ubuntu 14.04. The VoltDB server software now supports the Ubuntu long-term support releases 10.04, 12.04, and 14.04. | ||||
15.2. | Native snapshots create a flag file on completion | |||
When a native format snapshot completes, either for a snapshot initiated manually with voltadmin
SAVE or periodic snapshots created by the system automatically , a flag file is now created to indicate
the snapshot is done. The flag file is created in the same directory as the snapshot using the snapshot's unique
identifier as the file name and | ||||
15.3. | New SQL functions | |||
This release contains both enhancements to existing SQL functions as well as new functions, many provided for compatibility with other SQL implementations. Changes include:.
See the appendix on SQL functions in Using VoltDB for more information. | ||||
15.4. | Support for INSERT INTO... SELECT | |||
VoltDB now supports the INSERT INTO... SELECT statement. For the initial release, this statement is limited to partitioned procedures only (it cannot be used in multi-partition stored procedures or as an ad hoc statement from the sqlcmd prompt). Broader usage will follow in future releases. See the documentation of INSERT in Using VoltDB for more information. | ||||
15.5. | Support in Java client API for automatic reconnection of failed connections | |||
This release includes support in the Java client API for enabling automatic reconnection of the client. By default, if a connection to a database server is lost, it is up to the client application to detect the lost connection and reconnect as appropriate. Now you can enable automatic reconnection as part of the client configuration. When enabled, auto-reconnect periodically attempts to reconnect to servers whose connection was lost. To enable auto-reconnect, you set a property on the client configuration before creating the client object. For example: ClientConfig config = new ClientConfig("", "");
config.setReconnectOnConnectionLoss(true);
client = ClientFactory.createClient(config); | ||||
15.6. | Support for custom load procedures in the kafkaloader | |||
The kafkaloader is a tool for bulk loading data into a VolltDB database from a Kafka message queue. By
default, kafkaloader uses a custom procedure to batch multiple rows into a single insert operation. You can now
specify an alternate stored procedure to use for loading the data into the table. To specify an alternate stored
procedure, use the | ||||
15.7. | Improved performance deleting data with low-cardinality indexes | |||
Low-cardinality indexes — that is, indexes with very few unique values — can be problematic because finding any single row requires scanning all the rows with the same index value. Deleting records from such a table amplifies the problem because the database must not only find and delete the data but also the index entry itself. In previous versions of VoltDB, deleting large volumes of data from a table with a low-cardinality index could take a long time. This release adds a performance optimization to dramatically improve the latency of delete operations on low-cardinality indexes. This optimization will also benefit any index with a commonly recurring value, such as the null value. | ||||
15.8. | New Java property to disable DR ports | |||
A new Java property, VOLTDB_DISABLE_DR, has been added that allows you to disable the DR port listening ports when you start the VoltDB database process. This property is intended to help protect VoltDB against port scanners. See the implementation note concerning port hardening for details. | ||||
15.9. | Fix for issues with aggregate functions of small VARCHAR columns | |||
A error was introduced in version 4.5 where use of the MIN() and MAX() functions on small VARCHAR columns could produce incorrect answers. This issue only occurred for VARCHAR columns of 63 bytes or less — that is, VARCHAR(15) or VARCHAR(63 BYTES) or smaller. This bug is now fixed. Because the issue introduced in v4.5 involves wrong answers, anyone using v4.5 is urged to upgrade to v4.6 at their earliest possible convenience. | ||||
15.10. | Fix for unused command logging segment files being created | |||
A timing issue related to command logging in earlier versions could result in unnecessary segment files being
created. Under the worst conditions, unused segment files could continue to be created, filling up the
This bug has now been fixed. Note that when the database restarts (for example, when you upgrade to 4.6) any extra segment files created by an earlier version as a result of this bug issue will automatically be deleted. | ||||
16. Release V4.5 | ||||
16.1. | Support for Java 8 | |||
VoltDB has been tested and validated on Java 8. The VoltDB server software now supports both the Java 7 and Java 8 JDKs. The VoltDB Java client library continues to support Java 6 as well as 7 and 8. | ||||
16.2. | Support for exporting data to the RabbitMQ messaging service | |||
An export connector for the RabbitMQ messaging service has been added to the VoltDB server software. See the chapter on "Exporting Live Data" in the Using VoltDB manual for details. | ||||
16.3. | Kafka export connector improvements | |||
The Kafka export connector has been extended and improved to allow more control over the data being exported, including support for VARBINARY columns and new properties to control the format of the data and the value used as the Kafka partitioning key. More information is available in the export chapter of the Using VoltDB manual. | ||||
16.4. | Further improvements to temporary table usage | |||
This release includes further performance improvements to the query planner, reducing temptable usage for multi-partition stored procedures. These improvements focus specifically on reducing temptable usage for queries involving GROUP BY clauses. | ||||
16.5. | New FORMAT_CURRENCY() function | |||
A new SQL function, FORMAT_CURRENCY(), converts a DECIMAL value to a text string. The function takes two arguments: the DECIMAL value and an integer specifying the decimal place to which the value is rounded. For example FORMAT_CURRENCY(1234.567, 2) = "1,234.57". See the Using VoltDB manual for details. | ||||
16.6. | New graph available in Web Studio | |||
The graphs in VoltDB Web Studio have been enhanced, improving the accuracy of the latency graph, fixing a bug where the partition starvation graph was not available on K-safe clusters, and adding a new graph: the transaction breakdown graph. The transaction breakdown graph is a pie chart showing the weighted average of execution time for stored procedures running on the database cluster. The new graph type is selectable from the pulldown menu above the graphs in the Web Studio interface. | ||||
16.7. | Large number of joins no longer need explicit join order | |||
Previously a query joining six or more tables required the user to explicitly list the join order as an additional argument to the Java SQLStmt declaration. VoltDB now assumes that joins of six or more tables, without an explicit join order, are joined in the order the tables are listed in the query. This change allows many large joins to compile and run, even as ad hoc queries. Note, however, that the order of the tables in the query may not be the optimal join order, so explicitly defining a join order is still recommended when performance is a consideration. See the VoltDB Performance Guide for more information on join order. | ||||
16.8. | Additional string format as input to TIMESTAMP columns | |||
When casting between TIMESTAMP and VARCHAR datatypes, VoltDB uses the string format YYYY-MM-DD hh.mm.ss.nnnnnn to represent the TIMESTAMP value. Previously, when entering a text string as input to a TIMESTAMP value, you had to provide the complete string, including both date and time (including fractional microseconds). You can now use just the date portion of the string as input, YYYY-MM-DD, and VoltDB assumes 00.00.00.000000 as the time portion. | ||||
16.9. | Bug fixes | |||
In addition to the preceding new features and enhancements, a number of known issues have been corrected, including:
| ||||
17. Release V4.4.1 | ||||
ImportantV4.4.1 is primarily a bug fix release. Anyone using V4.4 — especially those using export functionality — are strongly recommended to upgrade. | ||||
17.1. | Issue with export stopping after system failure and rejoin: fixed | |||
It was possible for pending export data to get stuck in the overflow queue if nodes fail unexpectedly. The consequences of this bug were that the pending data was not written to the export target after the node rejoined and export would eventually stop altogether after a restart. This bug has been fixed. | ||||
17.2. | Issue with "transactions moving backwards": fixed | |||
There was a problem where certain operations, such as command log recovery, could result in an error warning of "transactions moving backwards". Most instances of this error have been eliminated. However, if you encounter this error after upgrading to V4.4.1, please contact support@voltdb.com. | ||||
17.3. | Null pointer exception in export to file: fixed | |||
A race condition in the export-to-file client could result in a null pointer exception (NPE), causing export to stop. This bug has been fixed. | ||||
17.4. | Recovery failed after starting from an old catalog: fixed | |||
VoltDB recently added the ability to start the database using a catalog compiled with an older version of VoltDB. In this situation, VoltDB recompiled the catalog before starting. However, the recompiled catalog was not correctly saved as part of the command logs. As a consequence, the resulting command logs could not be recovered when the database restarted. This bug has been fixed. | ||||
17.5. | Kafka export did not handle the property skipinternals correctly: fixed | |||
A new property added to the export-to-kafka connector in 4.4 could cause the database to fail with a Java out-of-memory error. This bug has been fixed. | ||||
18. Release V4.4 | ||||
18.1. | Import from Kafka | |||
VoltDB now includes the kafkaloader utility, which is similar to csvloader, in that it imports from an Apache Kafka message queue and writes the records into the specified VoltDB database table. One difference with the kafkaloader is that, rather than the load process being a one-time event, kafkaloader continues to run, monitoring the queue for additional records and acting as a persistent import function. See the Using VoltDB manual for details. | ||||
18.2. | Change to csvloader defaults | |||
Previously, if CSV input contained missing fields, the default behavior for the csvloader
was to generate an error. The default behavior has been changed so csvloader now treats missing
values as null, to be more in keeping with other applications such as spreadsheets. You can revert to the previous
behavior, if you wish, by including the flag | ||||
18.3. | Ability to update the application catalog or deployment separately | |||
The voltadmin update command originally required both a catalog and a deployment file. You can now specify either or both on the command line. If you specify just a catalog or just a deployment file, the other is assumed to remain the same. The file extensions .jar and .xml are used to identify which type of file is being updated. For example, all of the following are valid commands: $ voltadmin update mycatalog.jar mydeployment.xml $ voltadmin update mycatalog.jar $ voltadmin update mydeployment.xml | ||||
18.4. | New automatic stored procedure, upsert, for inserting or updating a record | |||
When a schema is compiled into an application catalog, several simple stored procedures are created automatically for each table, including create for all tables and select, delete, and insert for tables with a primary key. A new automatic procedure, upsert, has been added for tables with primary keys. The upsert procedure inserts a new record if one does not already exist for the specified primary key, or updates the existing record if it does. See the Using VoltDB manual for details. | ||||
18.5. | Improved handling of temporary memory (temp tables) during query processing | |||
VoltDB has a limit on the amount of memory, known as temp tables, that can be used when processing SQL queries. It is possible to exceed this limit when performing very complex queries or queries with large intermediate result sets. In this release, the management of temp tables has been significantly improved, allowing more complex queries and combinations of queries to operate effectively within the limit. Users who have previously used the <temptables> setting in the deployment file to increase the temp table limit may find that this is no longer necessary, | ||||
18.6. | Increased support for subqueries in ad hoc and multi-partition queries | |||
Earlier releases limited use of subqueries in ad hoc and multi-partition transactions to replicated tables only. This limitation is now removed; ad hoc and multi-partition SELECT queries can include subqueries involving both replicated and partitioned tables. | ||||
18.7. | Support for project.xml files will be removed in a future release | |||
Prior to VoltDB V3.0, a project definition file was required to compile an application catalog. With V3.0, support for compiling schema files directly was added and use of the project definition file was deprecated and removed from the documentation. However, support for project definition files has remained in the product up to the current release. However, that support will be removed in an upcoming version. Anyone still using a project definition file should migrate to current usage to avoid problems in the future. | ||||
18.8. | Bug fixes | |||
In addition to the preceding new features and enhancements, a number of known issues have been corrected, including:
| ||||
19. Release V4.3 | ||||
19.1. | Export to Kafka | |||
VoltDB now includes export to Apache Kafka as a standard export client. Kafka export was added as a software preview several releases ago. You can now select and configure Kafka export in the deployment file or through the REST interface. (Kafka export is not accessible from the VoltDB Enterprise Manager at this time.) See the chapter on export in the Using VoltDB manual for details. | ||||
19.2. | Kerberos Security | |||
VoltDB now allows you to use Kerberos to authenticate Java clients to the VoltDB server. Kerberos security in VoltDB supports the same users, roles, and permissions defined in the deployment file and schema as with normal security, but uses the Kerberos authentication protocols to identify authorized clients to the database servers. Kerberos authentication is limited to Java clients only. An explanation of how to implement Kerberos security in VoltDB will be added to the security chapter of the Using VoltDB manual shortly after version 4.3 releases. | ||||
19.3. | New sample application demonstrating time-based reporting and incremental deleting of old records | |||
This release adds a new example application, windowing, to the VoltDB kit. This new application demonstrates how to perform two common tasks for real-time, big data applications:
The sample code demonstrates techniques for performing these common tasks using VoltDB's builtin functions and capabilities to achieve maximum throughput with minimal interruption to ongoing data ingestion. | ||||
19.4. | Changes to VARCHAR | |||
In previous versions, the length of a VARCHAR column was defined in bytes. Starting with 4.3, the length of a VARCHAR column is now declared in characters rather than bytes. This change is made for compliance with the SQL standard and for improved handling of multi-byte UTF-8 character sets. Three major effects of this change are:
The impact on strings defined as less than 16 characters results from short VARCHAR columns being stored inline as their maximum possible length. Where previously VARCHAR(15) would consume 15 bytes, now it will consume four bytes for every character, or 60 bytes. For longer VARCHARS, the strings are stored in pooled memory as their actual length, so there is no change to the memory they require. The increased memory consumption, especially for schemas with many of short VARCHARS, could impact the ability to restore snapshots created in previous versions of the product, if memory usage is an issue. It is possible to reproduce the previous behavior in VARCHAR declarations by including the keyword BYTES. For example VARCHAR(64 BYTES). | ||||
19.5. | Simplifying the configuration and starting of clusters | |||
Two changes have been made to simplify the process for configuring and starting VoltDB clusters.
| ||||
19.6. | ||||
Several new SQL string functions have been added to simplify coding:
| ||||
19.7. | System procedure to stop a single node in a cluster | |||
The @StopNode system procedure let's you stop the VoltDB process on an individual member node of a VoltDB cluster in an orderly way. You specify the host ID of the node you want to stop as an argument to the @StopNode procedure. You can use @StopNode to remove a node from the cluster for hardware upgrades or other maintenance, then return the node to the cluster with voltdb rejoin. Note that the @StopNode procedure only works if the cluster is K-safe and stopping the node will not stop the cluster itself. In other words, the cluster must remain viable after the system procedure executes. You cannot use @StopNode to shutdown the cluster. | ||||
19.8. | JDBC improvements | |||
Improvements continue to be made to the JDBC interface, focusing on reliability and extended functionality. This release fixes an issue where the connection would fail if the connection string included an inaccessible server. | ||||
19.9. | SQL improvements | |||
This version also includes a number of changes to SQL parsing to ensure correctness and proper index usage, specifically in edge cases related to complex joins and order by clauses. | ||||
19.10. | csvloader improvements | |||
The csvloader now provides additional context when reporting errors in the input file, making it easier to debug and correct the errors by identifying the specific input field that causes the error. | ||||
19.11. | Bug fixes | |||
In addition to the preceding new features and enhancements, a number of known issues have been corrected, including:
| ||||
20. Release V4.2 | ||||
20.1. | The voltdb create and voltadmin update commands automatically recompile old catalogs | |||
In previous releases, the server process would not start with a catalog compiled by an earlier version of VoltDB. Starting with 4.2, when you create a new database using the voltdb create command and an old catalog, VoltDB automatically recompiles the catalog before starting the server. This means you can upgrade VoltDB versions without manually recompiling the catalog. The same is true when updating the catalog on a running database with the voltadmin update command or @UpdateApplicationCatalog system procedure. Note, however, using older catalogs does not currently work with the voltdb recover command or the VoltDB Enterprise Manager. If the catalog is old enough to contain outdated or no longer valid schema syntax, VoltDB reports an error and either stops (in the case of voltdb create) or cancels the update (in the case of voltadmin update). In this case, you must update the schema source file and recompile the catalog yourself. | ||||
20.2. | New LIMIT PARTITION ROWS constraint when defining tables | |||
The VoltDB compiler now supports a new constraint, LIMIT PARTITION ROWS, that lets you limit the size of individual tables. The LIMIT PARTITION ROWS constraint is declared in the CREATE TABLE statement and limits the number of rows that can be inserted into any partition for that table. See the Using VoltDB manual for details. | ||||
20.3. | Support for subqueries in SELECT | |||
The SELECT statement now supports subqueries as table references in the FROM clause. For the initial release subqueries have certain constraints:
See the documentation of the SELECT statement in the Using VoltDB manual for details. | ||||
20.4. | Ability to specify the network interface for individual ports | |||
Previously, you could specify a port number for each port when starting VoltDB and a separate network interface for internal versus external ports. It is now possible to specify both the interface and the port number for individual ports when starting VoltDB. For example, the following command specifies the network interface 15.16.2.24 and the port number 21212 for the client port but the default external interface and port 31313 for the admin port. $ voltdb create voter.jar --client=15.16.2.24:21212 --admin=31313 Note that the | ||||
20.5. | Control of elastic rebalance moved to deployment file | |||
The interface to control the rebalance operations when nodes are added to an elastic cluster have changed from
using Java system properties to elements and attributes in the deployment file. You can now adjust the length and
size of rebalance operations using the attributes <deployment> . . . <systemsettings> <elastic duration="15" throughput="1"/> </systemsettings> </deployment> See the section on "Configuring How VoltDB Rebalances New Nodes" in the Using VoltDB for details. | ||||
20.6. | Rebalance performance improvements | |||
Previously, elastic rebalancing would occupy all partitions in the cluster. With this release, each rebalance operation only uses those partitions it needs, freeing up any remaining partitions for other database transactions. This change does not improve the performance of the rebalance itself, but can significantly reduce the impact rebalance has on ongoing client transactions. | ||||
20.7. | Latency improvements during operational activities | |||
This release contains a number of improvements to reduce latency spikes during operational activities such as snapshots, rejoin, and export. In addition, Java heap usage during export and rejoin has been reduced. | ||||
20.8. | JDBC improvements | |||
This release includes a number of improvements to the JDBC interface, including extended support for returning metadata, the SetFloat() method, and automatic conversion of numeric values to strings for VARCHAR columns. | ||||
20.9. | Additional memory protection for command logging | |||
In extreme cases, where the disks used for command logging cannot keep up with the write requests coming from VoltDB, the logging packets start to fill up memory. If this condition persisted, it could result in the server process running out of Java heap space. Command logging now includes a back pressure mechanism that will slow the processing of VoltDB transactions if the command logs begin to back up, as a way to avoid this situation. | ||||
20.10. | Server and cluster shutdown improvements | |||
Previously, the @Shutdown system procedure (and voltadmin shutdown command) simply stopped the database process. The result was similar to a node failing, generating error messages and crash logs as the nodes stopped. User-requested shutdown is now handled as a synchronized event within the cluster, eliminating misleading error messages and unnecessary log files. This is the first step in an effort to provide a more orderly shutdown behavior. In addition to cluster shutdown improvements, now when you stop a server process with CTRL-C (or, more specifically, the Unix signal SIGINT), the cluster performs a more orderly removal of that node from the cluster, rather than handling the event as an unexpected crash. In this way, removing a server from a K-safe cluster (for maintenance or replacement) is faster and less disruptive of ongoing transactions. | ||||
20.11. | Better csvloader performance on clusters with large partition counts | |||
Previously, the csvloader utility provided good performance on small and medium-sized systems. But performance would drop off on clusters with a large number of partitions. This bug has been corrected and csvloader provides scalable performance for loading partitioned tables into different size clusters. | ||||
20.12. | Additional improvements | |||
| ||||
20.13. | Bug fixes | |||
In addition to the preceding new features and enhancements, a number of known issues have been corrected, including:
| ||||
21. Release V4.0.2.3 | ||||
21.1. | "Admission control error" fixed | |||
There was an issue in earlier releases where VoltDB could miscalculate the outstanding transactions. Two consequences of this situation were that the database server would issue an "admission control" error stating that there was a negative outstanding transaction byte count or client applications encountered connectivity issues. This problem has now been corrected. | ||||
21.2. | Queued export data is maintained when cycling all servers | |||
In previous releases, if all servers in the cluster failed and rejoined without stopping the database itself, data waiting in the export queue could be lost. This only happened if all servers in the cluster were cycled (stopped and rejoined). The cause of this problem has now been corrected. | ||||
22. Release V4.0.2 | ||||
22.1. | Support for running the VoltDB server process in the background | |||
When starting the VoltDB server process from the command line (using the voltdb
create, add, recover, or rejoin command)
you can use the | ||||
22.2. | Client timeout extended | |||
When the VoltDB server does not receive a response from a client connection for a set amount of time, the server times out and closes the connection. The client timeout period has been extended from 4 to 30 seconds so connections are more resilient to network issues. | ||||
22.3. | Data loaded in csvloader batch mode is compatible with command logging | |||
In recent releases, performance of the csvloader utility was improved by introducing batch mode. However, batch mode inserts were not immediately recognized or recorded by the command logs. As a result, data loaded using csvloader batch mode did not become durable until the next snapshot occurred. This issue has been resolved and all data loaded with csvloader is now immediately durable. | ||||
22.4. | The TRUNCATE TABLE statement optimized to improve performance and reduce memory usage | |||
TRUNCATE TABLE, and its equivalent statement DELETE with no WHERE clause, have been optimized to significantly improve performance and reduce the amount of memory used during execution. | ||||
22.5. | Join order is no longer case sensitive | |||
In early releases of V4, when specifying join order for a query, the table names had to be in all uppercase. This issue has been resolved and the table names are no longer case sensitive. | ||||
22.6. | Restore could fail on clusters with large numbers of partitions | |||
There was an issue where attempting to restore a snapshot on a cluster with a large number of tables and partitions could fail, reporting an error that the "next message length" was too long. This problem has been resolved. | ||||
22.7. | Support for Groovy inline stored procedures | |||
It is now possible to declare complex stored procedures inline in the schema using the CREATE PROCEDURE AS statement and embedded Groovy code. See the Using VoltDB manual for details.. | ||||
23. Release V4.0.1 | ||||
23.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. | ||||
23.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. | ||||
23.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:
| ||||
23.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; | ||||
23.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; | ||||
23.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. | ||||
23.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. | ||||
24. Release V4.0 | ||||
24.1. | New Features | |||
VoltDB 4.0 is a major release. It consolidates and completes many features introduced in preceding releases, including elasticity and changes to the user interface to improve overall ease of use of the product. Benefits of VoltDB 4.0 include:
| ||||
24.2. | 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. | 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. |