VoltDB
4.9.11
December 20, 2018
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.
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.
If you are upgrading to a version prior to 4.2, you must also recompile your application catalog using the new version before restarting VoltDB. However, for version 4.2 and later, VoltDB automatically recompiles old catalogs when you create a new database, eliminating the need for this extra step.
Restart the database using the create option, the existing 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).
Again, starting with VoltDB 4.2 you no longer need to recompile your application catalog. The voltdb create command does this automatically for catalogs created with earlier versions.
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.
Note: The VoltDB Enterprise Manager is part of the VoltDB Enterprise Edition and continues to be supported for customers who are currently using it. However, due to limitations in its implementation, no further development work is being done on the Enterprise Manager and it is not recommended for new deployments. The Enterprise Manager's functionality will be replaced by new, more robust, deployment and management capabilities in the future.
1. Release V4.9.11 (December 20, 2018) | ||||
The following issue was resolved in this release. | ||||
1.1. | A node rejoin fails with a fatal "ParameterSet doesn't support type" or "array out of bounds" error | |||
There was an issue where a rejoining node could fail with either a "ParameterSet doesn't support type" or "array out of bounds" error. This condition could occur only when using K-safety and database replication (DR) and a failed node on the master cluster was rejoining. This issue has been resolved. | ||||
2. Release V4.9.10 (March 23, 2018) | ||||
The following issue was resolved in this release. | ||||
2.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. | ||||
3. Release V4.9.9 (July 13, 2017) | ||||
3.1. | Recent improvements | |||
The following limitation in previous versions have been resolved:
| ||||
4. Release V4.9.8 (June 22, 2016) | ||||
The following issues are resolved in this release. | ||||
4.1. | Bug fixes | |||
| ||||
5. Release V4.9.7 (February 11, 2016) | ||||
The following issue was resolved in this release. | ||||
5.1. | Race condition involving large deletes and snapshots | |||
In rare cases, frequent deletes can cause memory compaction that coincides with a simultaneous snapshot. In the past, the result was that the servers would stop processing transactions and fill the log file with multiple messages reporting "tuple count > 0 after streaming". This error has been corrected. The triggering condition, although rare, can still occur. However, now if compaction coincides with an automated snapshot (such as a command log snapshot), the snapshot is requeued. If compaction coincides with a manual snapshot, the snapshot is canceled and reported to the user. If this occurs, simply reinitiate the manual snapshot. | ||||
6. Release V4.9.6 (August 4, 2015) | ||||
The following issues are resolved in this release. | ||||
6.1. | Further improvements to DR buffering | |||
Additional changes have been made to improve memory utilization for database replication (DR) buffering in
virtualized environments and snapshot processing. The setting | ||||
6.2. | 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. | ||||
6.3. | 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. | ||||
7. Release V4.9.5 | ||||
The following issues are resolved in this release. | ||||
7.1. | Improved DR buffering | |||
Changes have been made to DR buffering to use Java-managed DirectByteBuffers instead of unmanaged
DirectByteBuffers. This change requires setting | ||||
8. Release V4.9.4 | ||||
The following issues are resolved in this release. | ||||
8.1. | Exception when inputting decimal values with a scale greater than 12 | |||
Previously, when inserting values into a VoltDB DECIMAL datatype, any values with a scale greater than 12 (that is, more than 12 decimal places) were rejected and generated an exception in the JDBC interface. This behavior has been changed and VoltDB now rounds higher precision values to the closest 12 decimal digits. | ||||
8.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. | ||||
9. Release V4.9.3 | ||||
This release contains no new features but corrects the following issues from earlier releases. | ||||
9.1. | Issues related to using INSERT INTO SELECT with export tables | |||
There was an issue in earlier releases where using an INSERT INTO SELECT statement with an export table as the target for the insert either generated a null pointer exception or did not insert the expected data into the export stream. The issue only applies to INSERT INTO SELECT as an ad hoc query or within a multi-partitioned stored procedure.
These issues have now been corrected. | ||||
9.2. | Database failure when reporting long-running queries | |||
There was an issue in previous versions (starting with VoltDB 4.8), where if a query runs for a significant amount of time, VoltDB attempts to log a warning. However, the warning generates an error (index out of bounds) and stops the database. This issue is now fixed. | ||||
9.3. | Command log recovery hangs if the log contains a catalog update followed by an ad hoc INSERT, UPDATE or DELETE. | |||
There was an issue in earlier releases where command log recovery would hang if the command logs contained an application catalog update (for example, from a voltadmin update command) followed by a subsequent ad hoc query that writes to the database. The recovery would either stop or silently fail to process the transaction when attempting to replay the ad hoc query. This issue is now fixed. | ||||
10. Release V4.9.2 | ||||
ImportantBecause of the serious nature of the issue with the JSON HTTP interface identified below, any customers using
VoltDB 4.9 or 4.9.1 should either upgrade to 4.9.2 or should turn off the http port (using the | ||||
10.1. | Bug fix: Leaving VoltDB Management Center connected to the server could hang the database | |||
In previous releases, a defect in the JSON HTTP server could cause the server to stop handling client requests if the Management Center browser window was left open for a few hours. The more Management Center sessions in use, the sooner the problem would manifest itself. If you have a server that has experienced this issue, you may stop the server and rejoin it to the cluster. Or you can stop the entire cluster and recover the database. The problem is resolved in this release. Because this issue impedes normal operation of the database, we recommend any customers using VoltDB 4.9 or 4.9.1 update to VoltDB 4.9.2 as soon as possible. | ||||
10.2. | Bug fix: voltdb collect fails with a traceback | |||
Under certain conditions, the voltdb collect command could fail displaying a traceback reporting an attribute error. This problem has been resolved. | ||||
10.3. | Support for CSV output when exporting to HttpFS from the HTTP connector | |||
HTTP export now supports CSV output format when using HttpFS as a destination for WebHDFS export. To export CSV data to HttpFS, add the following properties to the export configuration in the deployment.xml: <property name="httpfs.enable">true</property> <property name="type">csv</property> | ||||
11. Release V4.9.1 | ||||
11.1. | Support for HttpFS added to the HTTP export connector | |||
HTTP export now supports HttpFS as a destination for WebHDFS export using the Avro format. CSV format will be supported in the next major release. To enable exporting to HttpFS add the following properties to the export configuration in the deployment.xml: <property name="httpfs.enable">true</property> <property name="type">avro</property> | ||||
11.2. | Bug fixes | |||
The following bugs were fixed in this release:
| ||||
12. Release V4.9 | ||||
12.1. | VoltDB Management Center | |||
VoltDB 4.9 introduces a new management console that is available from any running VoltDB database. The VoltDB Management Center integrates the catalog report and web studio functionality, plus the monitoring functions of the VoltDB Enterprise Manager, into a single interface. Available at http://server:8080 by default, the Management Center provides real-time monitoring, a schema browser, and interactive SQL queries. | ||||
12.2. | Reorganization of security roles and permissions | |||
Security has been revamped in this release, providing new permissions organized around functional capabilities. Security still operates on the basic principles of users assigned to roles in the deployment file and roles assigned permissions in the schema. However, the generic permissions (not associated with a specific stored procedure) have been reorganized and renamed to match logical functions. So, for example, there are named permissions for SQLREAD (that is, read-only ad hoc SQL queries), SQL (all SQL queries), ALLPROC (all stored procedures, including the default stored procedures), and ADMIN (full access, including read and modify system procedures). For backwards compatibility, the previous named permissions ADHOC and SYSPROC are still permitted and map to the new SQL and ADMIN permissions. Note, however, that this mapping increases the permissions of the old permissions slightly, giving ADHOC access to default procedures and giving SYSPROC access to all user-defined stored procedures. This release also includes two new predefined roles, ADMINISTRATOR and USER, that are always available and can be assigned to users in the deployment file. The ADMINSTRATOR role has ADMIN permissions and the USER role has SQL and ALLPROC permissions. In other words, the ADMINISTRATOR role has full access while the USER role can run any SQL query, stored procedure, or read-only system procedure, but cannot access system procedures that modify the database (such as @Shutdown and @SnapshotRestore). See the chapter on security in the Using VoltDB manual for details. | ||||
12.3. | Improvements to sqlcmd | |||
The sqlcmd utility for entering interactive SQL queries from a command line is being overhauled. The first
major addition is a new command line argument, | ||||
12.4. | Ability to time out long read queries | |||
It is now possible to cancel read queries that take too long based on a predefined query timeout period. The
query timeout property, which is a child of <systemsettings> <query timeout="3000"/> </systemsettings> By default, there is no query timeout limit. See the section on database configuration options in the Administrators Guide for details. | ||||
12.5. | Support for multiple column DISTINCT | |||
Previously, VoltDB supported use of the DISTINCT keyword on a single column only. You can now use DISTINCT with multiple columns. | ||||
12.6. | New Log4J category for logging all ad hoc queries | |||
A new logger has been added to the VoltDB Log4J configuration that logs any ad hoc queries to the database. The new logger, called ADHOC, is not enabled by default, but can be enabled to record the text of the query and, if security is enabled, the user who submitted it. | ||||
12.7. | Support for CentOS and Red Hat 7.0 | |||
VoltDB support for CentOS and Red Hat as base operating operating systems has been extended to include version 7.0. | ||||
12.8. | Deprecation Notice | |||
Support for several older technologies, obsolete synonyms for existing commands, and features that were superseded in previous releases will be removed in the next major release of VoltDB. The deprecated features that will be removed in VoltDB v5.0 include:
In addition, use of Java 7 as the JDK will be supported but deprecated starting with VoltDB 5.0. This means Java 7 will be supported for the initial releases of VoltDB V5.0. However, use of Java 8 is recommended. Support for Java 7 will be removed from VoltDB some time after Java 7 reaches end-of-llife, currently scheduled for April 2015. | ||||
12.9. | Bug fixes | |||
In addition to the preceding new features and enhancements, a number of known issues have been corrected, including:
| ||||
13. Release V4.8 | ||||
13.1. | Ability to select recent logs in voltdb collect | |||
The voltdb collect command has a new argument, | ||||
13.2. | Support for Avro format when exporting to Hadoop | |||
The HTTP connector now supports writing the export files in the Apache Avro format. See the chapter on Export in the Using VoltDB manual for details. | ||||
13.3. | New UPSERT statement | |||
A new SQL statement, UPSERT is now supported. UPSERT has syntax similar to the INSERT statement, except it can only be used on tables that have a primary key. If a record with the specified key value doesn't exist, the UPSERT statement performs an insert operation; if such a record does exist, it performs an update operation. See the documentation for UPSERT for details. | ||||
13.4. | New CPU selector for the @Statistics system procedure | |||
The @Statistics system procedure has a new selector, CPU, which returns information on the percent of total available CPU used by the VotlDB server process for each server in the cluster. | ||||
13.5. | New SET_FIELD() function | |||
A new function has been added that lets you modify JSON fields within a SQL query. The SET_FIELD() function returns a copy of a JSON-encoded string with the specified field replaced. For example, the following SQL statement replaces the "statebird" field in the JSON-encoded column Description when the State column contains "New Hampshire": UPDATE Region SET Description = SET_FIELD(Description,'statebird','"purple finch"') WHERE State = 'New Hampshire'; See the description of the SET_FIELD() function in the Using VoltDB manual for details. | ||||
13.6. | Additional functions to support legacy JDBC applications | |||
A number of aliases, common in JDBC interfaces, have been added to provide access to existing functions. New aliases include INSERT, LTRIM, RTRIM, SUBSTR, LCASE, and UCASE. These aliases are not currently listed in the documentation, but will be added in a future update. | ||||
13.7. | Bug fixes | |||
In addition to the preceding new features and enhancements, a number of known issues have been corrected, including:
| ||||
14. Release V4.7 | ||||
14.1. | New jdbcloader utility | |||
The new jdbcloader copies the contents of a database table from a remote database using JDBC and inserts the records into a VoltDB table. Similar to the csvloader and kafkaloader utilities, jdbcloader provides yet another way to move data from other sources into VoltDB. See the jdbcloader reference page in the Using VoltDB manual for details. | ||||
14.2. | New export connector for Hadoop (HTTP) | |||
VoltDB now includes an export connector that lets you export data to Hadoop via the WebHDFS API. The HTTP connector can be configured to export data to WebHDFS URLs, including the table name and other metadata as part of the URL. See the chapter on Export in the Using VoltDB manual for details. | ||||
14.3. | Improved FIELD() functionality | |||
The FIELD() function has been improved to provide easier access to lower-level fields within JSON strings. Originally, the second argument to the FIELD() function specified the name of a top-level field to be returned. Starting with this release, you can specify a field name path, separating the levels with periods, so you can select sub fields. For example, if the Film column contains the following the JSON-encoded string: {"title":"Mark of Zorro","year":"1920", "cast":{"Zorro":"Douglas Fairbanks", "Lolita":"Marguerite De La Motte", "Pedro":"Noah Beery"}, "alternateTitles:["La marca del Zorro", "Das Zeichen des Zorro", "Zorros Kendemaerke", "Il segno di Zorro"] } You can extract the top-level field containing "1920" using | ||||
14.4. | Ability to use INSERT INTO... SELECT in multi-partitioned procedures and queries | |||
It is now possible to use the INSERT INTO... SELECT statement in multi-partitioned procedures and queries. This means you can also use the statement in ad hoc queries, including interactive queries run through the sqlcmd utility. See the description of INSERT in the Using VoltDB manual for further information. | ||||
14.5. | The @Statistics memory report has been extended | |||
New information has been added to the results of the MEMORY selector for the @Statistics system procedure. A new column (PHYSICALMEMORY) has been added reporting the total physical memory for each server in the cluster. See the description of the @Statistics system procedure in the Using VoltDB manual for details. | ||||
14.6. | Bug fixes | |||
In addition to the preceding new features and enhancements, a number of known issues have been corrected, including:
| ||||
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 [email protected]. | ||||
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 voltify 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. |