Thursday, May 20, 2010

distributed pushed down joins - node-failure handling done

node-failure handling was as expected lots of small changes to various pieces of the code.
some non compatible protocol changes performed (nice not to have any existing GA release to care about :)

also when doing this, I re-implemented entire "abort of join"-handling.
it should now also be capable of handling aborting more complex joins
(but node-failure is still an special case)

this means that "testSpj -n NF_Join" now passes!!

---

this is an important step towards a releasable version.

note: this has only been implemented in the branch which also contains extension for scan.vs.scan joins. I.e not in the branch released as preview.

and, OleJohn integrated support for filters on child-joins with mysqld.

---

And as always please provide feedback on preview release that we made!

Wednesday, May 12, 2010

distributed pushed down joins - more testing

have now written and pushed ndbapi testing of our push-down join implementation (~2k LOC)

the following classes/programs was added
  • HugoQueryBuilder (class)
    Construct a pseudo-random query
    inputs: a list of tables and a options specifying which features should be used in query
  • HugoQueries (class)
    Run an arbitrary query.
    Note: Does only verify individual rows, not relations/result-set. For verifying result-sets we use random query generator
  • testSpj (program)
    Ndbapi test-program using above classes to runs various tests for our cluster specific automatic testing framework
  • hugoJoin (program)
    Stand-alone test-program that takes list of tables/options as command-line arguments
    and using above classes constructs/runs random queries
Quite happy with this, as it's very much needed to get good coverage of the implementation,
especially error cases (e.g node-failure) which is hard to test from/with SQL.

---

And please provide feedback on preview release that we made!

Friday, May 7, 2010

distributed pushed down joins - more features

update on latest accomplishments:

  1. added support for filters (compare engine_condition_pushdown) on non-root operations, this in 2 flavors:
    • - constant/immediate filters that is provided after NdbQuery has been defined, these may not contains filter conditions referencing other NdbQueryOperation's,
    • - parameterized/linked filters, these type of programs must be provided when building the NdbQuery-object.

    The constant filters should be "easy" to integrate with ndbapi/mysqld, but the parameterized/linked is harder as we need to add new features to NdbScanFilter.

    Once this is integrated into mysqld, it will provide better performance for already pushable queries, see page 43 in my UC presentation (ref: filter).

  2. added support for NdbQueryOpertation's referencing non-direct parent NdbQueryOperation's. This should also be quite easy to integrate into ndbapi/mysqld. This will mean that new types of queries will become pushable.

  3. support for "to-many" joins is made so complete that it will get until we get an ndbapi for more elaborate testing. This will mean that lots of new queries will become pushable.

Note: all the additions has only been made inside ndb(mt)d so far, nothing new has (yet) been added to ndbapi/mysqld.

---

And please provide feedback on preview release that we made!