Sequoia is the core technology providing database clustering capabilities. It is composed of a controller implementing the RAIDb (Redundant Array of Inexpensive Databases) technology.
Sequoia controllers are replicated for HA and scalability purposes. Controllers use group communication to synchronize the cluster. Hedera is a group communication wrapper that can be plugged to work with multiple group communication implementations such as Appia, JGroups or Spread.
Sequoia comes with a JDBC driver for Java application. Additional drivers for PHP, ODBC, MySQL native API, Perl, and C/C++ applications are also provided through the Carob project. with transparent fail over capabilities.
NOTE: Sequoia is dual-licensed and distributed under the Apache License, Version 2.0 and the Gnu Public License (GPL), Version 2.0.
Here are some key features of "Sequoia":
· No modification of existing applications or databases.
· Operational with any database providing a JDBC driver.
· High availability provided by advanced RAIDb technology.
· Transparent failover and recovery capabilities.
· Performance scalability with unique load balancing and query result caching features.
· Integrated JMX-based administration and monitoring.
· 100% Java implementation allowing portability across platforms with a JRE 1.4 or greater.
What's New in This Release: [ read full changelog ]
· [SEQUOIA-690] - Clobs are not really implemented
· [SEQUOIA-812] - Sequoia may not store data records with semicolon
· [SEQUOIA-855] - Long idled persistent connections can see exceptions when sending a new request to MySQL
· [SEQUOIA-902] - Initialize command might fail with crashed recovery log
· [SEQUOIA-906] - backup with MS JDBC driver for MS SQL Server 2005
· [SEQUOIA-955] - Raidb1 load balancer and WaitForCompletionPolicy=first does not work
· [SEQUOIA-969] - Recovery log stops processing and tries to enable database if there is an unparsable statement in the recovery log
· [SEQUOIA-973] - DatabaseSQLMetaData.createDatabaseSchema hides exceptions that could be thrown by call to metaData.getExportedKeys(null, null, null)
· [SEQUOIA-974] - Recovery log does not correctly invalidate prepared statements when idle connection is timed out
· [SEQUOIA-981] - Cannot restart an Embedded Sequoia Controller because the PingResponder thread is not shutdown.
· [SEQUOIA-986] - wait for all members to join @ joinGroup is to short for Appia
· [SEQUOIA-992] - Enable Backend sends 2 equal JMX Notifications
· [SEQUOIA-998] - WARN Distributed Set savepoint did not remove itself from the total order queue is shown when a controller has no backend.
· [SEQUOIA-999] - Controller floods log with messages when applications connect with an older driver
· [SEQUOIA-1000] - Failover due to controller crash during a commit statement can issue the following warning "Transaction 4 was aborted by database"
· [SEQUOIA-1008] - Adding a VDB to a controller with the 'force' flag set will result in a 'Unique Constraint Violation' SQLException if VDB is already the 'last man down'.
· [SEQUOIA-1011] - Streaming Resultet containing database specific datatype columns may show 'Internal bug: tried to receive using the UNDEFINED deserializer' error
· [SEQUOIA-1012] - Some read requests do not have a valid request id. This can lead to this error message : 'Request '0' failed (A query with id 0 has already been scheduled)'
· [SEQUOIA-1014] - If 2 controllers are too asynchronous, then a backend may be disabled because of a request failing on one controller and not the other one
· [SEQUOIA-1017] - Sequoia.dtd missing attribute definition for idleConnectionTimeout
· [SEQUOIA-1019] - RAIDb1 callStoredProcedure and execWriteRequest methods enforce abort of transaction in case of concurrent abort, but do not log abort completion in the recovery log
· [SEQUOIA-1021] - Error message when a transaction is aborted due to deadlock : Unable to retrieve connection for transaction
· [SEQUOIA-1023] - Error when using CallableStatement with OUT and IN/OUT parameters: No value specified for parameter
· [SEQUOIA-1025] - AbstractScheduler.abortRemainingActiveTransactions will stop aborting transactions at the first failing abort.
· [SEQUOIA-1026] - Test connection statements are not properly closed
· [SEQUOIA-1029] - Recovery Log consistency check fails using Derby as the database
· [SEQUOIA-1033] - backup system throws exception because pending read request has not been processed
· [SEQUOIA-1039] - PreparedStatement.Get[Parameter]MetaData leak memory
· [SEQUOIA-1041] - Exception when executing getExportedKeys(null, null, null) : java.sql.SQLException: Table name can not be null
· [SEQUOIA-1045] - alwaysGetGeneratedKeys should also work for replace statements
· [SEQUOIA-1048] - StringIndexOutOfBoundsException when retrieving MySQL years as dates
· [SEQUOIA-1049] - preparedStatementGetParameterMetaData not retried on second controller in case of no backend available
· [SEQUOIA-1050] - Duplicate shutdown checkpoint names with non-distributed virtual databases
· [SEQUOIA-1051] - Backend state not restored from recovery log with non-distributed virtual databases
· [SEQUOIA-1052] - Call to metadata.getExportedKeys() generates NPE in SequoiaSchemaFactory
· [SEQUOIA-1054] - Recovery Log : RemoveCheckpointEvent should invalidate the connection before being retried
· [SEQUOIA-1055] - NPE in DatabaseBackend.terminateDeadlockDetectionThread
· [SEQUOIA-1063] - Begin not logged in recovery log for non-distributed virtual databases
· [SEQUOIA-1065] - with more than one firebird backend controller throws NPE
· [SEQUOIA-1066] - NullPointerException when trying to transfer a dump
· [SEQUOIA-1086] - Non-distributed RAIDb-1 demo is broken
· [SEQUOIA-1087] - Transaction with multiple locks competing with a stored procedure have a wrong lock list
· [SEQUOIA-830] - Add port to Backuper dumpServer specification
· [SEQUOIA-960] - Handle recovery log database failure
· [SEQUOIA-961] - PATCH: Support for controller "safe shutdown" via Runtime.getRuntime().addShutdownHook()
· [SEQUOIA-977] - Idle connection timeout
· [SEQUOIA-978] - Provide an option to avoid full schema refresh each time a create table statement is done against the cluster
· [SEQUOIA-1013] - SQL Console should not use query timeouts
· [SEQUOIA-1020] - Provide a better logging while replaying the recovery log and finding a task marked as still "Executing"
· [SEQUOIA-1030] - Applications with large numbers of SQL syntax errors fill up full_cluster.log with extraneous warnings and messages
· [SEQUOIA-1037] - Macro replacement should not occur for select requests
· [SEQUOIA-1038] - Upgrade to JGroups 2.4.2
· [SEQUOIA-945] - Cross-schema updates should generate a hard error that stops the application
· [SEQUOIA-963] - Add RequestInterceptor feature to allow easy addition of logic to monitor and transform requests
· [SEQUOIA-970] - Implement PreparedStatement.getParameterMetaData() method
· [SEQUOIA-985] - Add JMX Notifications for joinMember() and failedMember()
· [SEQUOIA-1001] - Extend Sequoia controller to handle differences in backend driver handling of setFetchSize() hints
· [SEQUOIA-1002] - Add defaultFetchSize property to JDBC driver to make it easier to handle very large result sets in the controller
· [SEQUOIA-1022] - Implement new console command to show the activity status of a vdb.
· [SEQUOIA-1042] - Derby Backuper for Network Server running locally
· [SEQUOIA-1058] - Patch for fixed JMX-RMIServer port