Archive for the ‘Uncategorized’ Category

Drizzle sessions at the 2011 MySQL UC

Monday, March 7th, 2011

There are a large number of Drizzle sessions at this years' MySQL UC.  If you want to know more about what you'll be using instead of MySQL in the very near future, come and check them out ; )

The team will be blogging individually about their various presentations in greater detail in the future, so keep an eye out on Planet Drizzle!

Additionally, the Friday after the conference will be Drizzle Developer Day .  It will be a good opportunity to learn more, provide feedback, etc

Here is a 25% discount code to use in case you haven't registered yet:  mys11fsd: http://oreil.ly/goaqst.

Drizzle 2010.12.05 tarball has been released

Tuesday, December 7th, 2010

Drizzle source tarball, version 2010.12.05 beta has been released.
In this release:

  • innobase plugin update to innodbase 1.1.2 from MySQL 5.5.6-rc
  • continued work on sys_vars
  • continued work on user-level locks
  • added shutdown command to the command line client - can shut down an instance you are connected to
  • more work on concurrency testing and functions (kill, execute, wait, etc)
  • continued code cleanup
  • various bug fixes

The Drizzle download file can be found here

HailDB version 2.2.0 has been released

Wednesday, September 29th, 2010

HailDB source tarball, version 2.2.0 has been released.

In this release:

- Remove dict_table_check_for_dup_indexes(). It is now unneeded, there is a check in api/ for this, so embedded_innodb never had this problem.
- file_io_threads is deprecated but still exists - we now issue a warning about this if a user attempts to set it.
- fix of rmplint errors
- import fix for IMPORT TABLESPACE of compressed tables

The HailDB download file can be found here

Testing Drizzle's transaction log

Friday, July 9th, 2010
One of my first tasks on the Drizzle team was to check out the transaction log, part of Jay Pipes' work on replication.  We needed to make sure that the log itself was rock-solid and that any code written to use it would have a worthy foundation.  As it turns out, some people are really interested in getting replication working ; )



As can be seen from the blueprint, testing will involve two of our main testing tools, the randgen and our standard test suite (test-run, dtr, etc).  So far, our efforts have been concentrated on writing tests for the test suite.  These tests have largely consisted of executing queries that should make it into the transaction log, then using the UDF print_transaction_message($log_file,$log_offset) to examine the log's contents.  The tests can be found here and executed with ./test-run --suite=transaction_log.  (NOTE:  The tests themselves are largely complete, but our expected results are not yet finalized / correct due to the bugs noted below).  I'd like to extend a special thanks to Joe Daly for his help in writing these tests and finding some bugs in the log.



While we have tested all of the available data types and basic transactions and they are looking quite solid, our efforts have still turned up some interesting bugs:
(this list is maintained at the launchpad blueprint noted above)


  • Bug #594873: transaction log incorrectly records NULL INSERT into an ENUM as the first permissible value
  • Bug #594876: transaction log not differentiating NULL values and empty string for char columns
  • Bug #596972: transaction log logging 0 for NULL INTEGER VALUES
  • Bug #599582: Transaction log does not appear to be collecting all information for multi-row REPLACE statements
  • Bug #597910: Transaction log does not appear to be capturing FOREIGN KEY information
  • Bug #599851: Transaction log not capturing CASCADE'd UPDATE data on a table using a foreign key
  • Bug #599952: transaction log attributing statements to wrong tables on multi-table, multi-statement transactions
  • Bug #600032: rollback to savepoint not handled correctly in transaction log
  • Bug #600795: LOAD DATA INFILE INSERTs not registered by the transaction log



The first 3 bugs relate to how the log captures NULL values for various data types and have been traced to a single root cause.  The remaining 6 seem more interesting and serious for replication functionality.  To summarize, the transaction log appears to have trouble with trickier (more complex) transactions.  These include changes propagated via a foreign key, multi-row REPLACE, and multi-table transactions.



Once these bugs have been addressed, we will continue with test development for the randgen.  This will include stress testing the server / log with DDL-generating grammars and validation of the data stored within the log.  Initial experiments with high-volume (10+ threads at 250k queries each) have looked promising (no crashes, locks, major slow downs over time).  In the meantime, we'll be busy with other tasks (dump+restore)



As always, we welcome any feedback, questions, or bug fixes : )
More information on Drizzle testing can be found here.

Testing BlitzDB with the randgen.

Monday, June 28th, 2010
Thanks to the hard work of Toru Maesaka, BlitzDB is now in Drizzle's trunk.  As a result, we are now testing BlitzDB in our automated tests.

One of the easiest and most powerful ways of beating up on BlitzDB is via the randgen (RQG).  The RQG's data generation facility (gendata) is quite flexible and extensible and adding BlitzDB to the mix was very easy.  Beyond adding 'BlitzDB' to the engines section of the altered gendata files and adjusting / removing some data types to accommodate BlitzDB limitations, all that is required is for us to modify the grammars to accomodate any changes to the test tables.

This new setup provides us with a test bed of both Innodb and BlitzDB tables and queries that will mix the different tables.  Of course, we still keep the original tests to provide even more testing for Innodb only.

We now have 4 tests that utilize BlitzDB in our automated testing:
  • optimizer_subquery_mix_engine
  • optimizer_subquery_mix_engine_rand
  • outer_join_mix_engine
  • outer_join_mix_engine_rand

The grammars and gendata files have been pushed to lp:randgen and the tests are part of drizzle-automation's randgen testing.

These tests are based on two of the most productive RQG grammars we have.  The 'mix' suffix means that we are mixing different storage engines across queries (we will likely add additional storage engines over time - looking at you, PBXT).  

The 'rand' tests make use of the RQG's '--seed' option for increased randomness.  For a given seed value, the queries and generated data will be consistent on any machine.  By using seed=time in certain tests, we guarantee that we are constantly trying new data and query combinations in addition to our standard tests.

Additional information regarding Drizzle testing (including the randgen) can be found here.  Please feel free to make use of the mailing lists if you want to get involved, have questions, etc - there's plenty of work for anyone who is interested : )