1.4.2 stable

  Release date: 06/2013

  Fixed problems with versions


1.4.1 stable

  Release date: 06/2013
  
  Release as stable


1.5.0 alpha

  Motto/theme: Sharding support, improved transaction support
  Release date: 03/2013

  * BC break and bug fix: SQL hints enforcing the use of a specific server
    are ignored for the duration of a transaction, given a transaction
    has been properly detected. Please note, other than intended
    SQL hints did not overrule all other rules in prior versions
    in all cases (bug). For example, the QoS filter did ignore the SQL hints
    MYSQLND_MS_USE_SLAVE, MYSQLND_MS_USE_MASTER, MYSQLND_MS_USE_LAST_USED
    already in prior versions whereas transaction stickiness could
    be overruled using the SQL hints if, and only if, transaction
    stickiness was not used with a QoS filter. The new behaviour
    differs from the previous but its consistent: neither transaction
    stickiness nor QoS can be overruled by SQL hints. It is no longer
    possible to send a query to a slave using MYSQLND_MS_USE_SLAVE hint
    when in a transaction that is to be executed on the master. This is
    most likely what you expect anyway.

  * BC break and bug fix: Calls to mysqlnd_ms_set_qos() are blocked
    in the middle of a transaction if transaction stickiness is
    set and transaction boundaries are detected properly. Switching
    servers is forbidden in the middle of a transaction, thus
    changes to quality of service resulting in different servers
    being used are blocked. However, if autocommit is disabled one
    can still change QoS in between transactions like so:
    autocommit(false); mysqlnd_ms_set_qos(); begin(); ... ; commit(); mysqlnd_ms_set_qos(); begin();
    This is no longer allowed:
    autocommit(false); query()|begin(): mysqlnd_ms_set_qos();

  * Fixed #60605 PHP segmentation fault when mysqlnd_ms is enabled
   The bug was caused by using an uninitialized handle. Implicit
   connect as part of lazy connections have been extended to cover
   (hopefully) all situations in which the status of a connection
   is read before a connection has been established, for example,
   situations in which get_server_version() is called prior
   to connecting to any server. The implicit connect added
   will establish a connection to the first configured
   master.

   The extended implicit connect also means less warnings,
   for example, when calling more_results() on a connection
   handle on which no query has been run so far.

  * New filter: node_groups

   The filter lets you organize servers (master and slaves)
   in groups. Queries can be directed to a certain group of servers
   by prefixing the query statement with a SQL hint/comment, e.g.:

     /*group_name*/SELECT ...
     /*group_name*/INSERT ...

   Directing a query to a fixed and predefined subset of cluster
   nodes may be desired for cache locality optimizations (keep
   certain server caches hot with certain queries) or to build
   shard/partitioning groups. In the latter case the group_name
   can be considered a shard key. Note, however, this is only
   the client part, which is the easiest. Do not confuse the
   feature with the table filter (experimental) which supports
   schema based partitioning (do-replicate-* server config).

 * examples/ contents clearned up

 * Extended warnings during RINIT about faulty configuration file

   PHP warnings are thrown is the configuration file cannot be read,
   is empty or contains no valid JSON.

   Distributions that aim to provide a pre-configured setup including a
   configuration file stub are asked to put <literal>{}</literal> into
   the configuration file to prevent any warnings about an invalid
   configuration.

  * Fixed: Setting transaction stickiness disables all load balancing,
    including automatic failover, for the duration of a transaction.
    So far connection switches could have happened in the middle of a
    transaction in multi-master configurations and during automatic
    failover although transaction monitoring had detected
    transaction boundaries properly.

  * Added transaction monitoring based on mysqlnd tx_begin()
    (user space call: mysqli_begin(), mysqli_rollback(), ...)
    NOTE: PDO_MySQL has not yet been modified to use the appropriate
    mysqlnd library calls. Improved trx monitoring works
    with mysqli only.

  * Added new transaction stickiness setting trx_stickiness=on
    which allows the use of slaves for read only transactions.

  * Removed experimental feature notes for remember_failed
    failover setting from documentation. remember_failed is
    very useful together with the improved trx_stickiness=on
    setting.

  * Marked query cache support as beta for mysqli in config.m4. 
    It should work fine for primary copy based clusters.
    NOTE: PDO is a different story, still experimental.


1.4.2 stable

  Release date: 08/2012

1.4.1 beta

  Release date: 08/2012

  * Fixed compatibility with PHP 5.5

1.4.0 alpha

  Motto/theme: Tweaking based on user feedback
  Release date: 07/2012

  * BC break: renamed ini setting "ini_file" to "config_file".
    Earlier versions have been configured through an ini style file
    and its name was set with the ini setting "ini_file". The ini
    style soon got replaced with JSON. We are now updating the file name
    to config_file to leave the past behing and avoid confusion with
    the PHP configuration file

  * New config setting: "server_charset". Allows setting of charset
    to be used for string encoding before connections have been opened.
    Most useful with lazy connections.

  * Improved error messages if opening and/or parsing of plugin
    configuration file fails.

  * Added "wait_for_gtid_timeout" for throttling of read-your-write SELECTs

  * Weighted load balancing. Servers can have a weight. Before picking a server, the
    load balancing logic sorts the server list by weight and picks the one with the
    highest weight. Then, the weight counter is decremented and the same logic is
    applied for the next request.

  * New failover strategy "loop_before_master". If connecting to a slave
    fails the plugin can either return an error to the caller
    (strategy "disabled", default), fall back to the master (stategy "master") or
    try to connect to any of the other slaves before connecting to the master
    (stategy "loop_before_master").

  * New "max_retries" setting to be used with fail over strategy "loop_before_master".
    If "max_retries" is set to 0 (default), all alternatives will be tested
    and the search is unlimited. Set max_retries to n to limit slave connection attempts
    to n attempts before falling back to master. If, multiple master are configured
    and max_retries = n != 0, then n masters are tested. No matter whether there
    was a slave loop before or not. This means that there can be update 2 * n
    connection attempts before the plugin gives up. Experimental: stable but syntax
    may change and QoS may not support it.

  * New "remember_failed" setting to remember hosts that have failed and skip
    them for the rest of the the web request instead of attempting to connect
    again. Experimental: stable with roundrobin and random but not supported
    with QoS - syntax is likely to change due to refactoring.


1.3.2 stable

  Release date: 04/2012

  * Fixed problem with multi-master where although in a transaction
   the queries to the master weren't sticky and were spread all
   over the masters (RR). Still not sticky for Random. Random_once
   is not affected.


1.3.1 beta

  Release date: 04/2012

  * Fixed problem with building together with QC.


1.3.0 alpha

  Motto/theme: Query caching through quality-of-service concept
  Release date: 04/2012

  * Added support for MySQL 5.6.5-m8+ global transaction ID feature
    - GTID is string if using server-side feature
    - GTID continues to be a long if using client-side emulation

  * Added query cache support to quality-of-service filter
    - new compile option --enable-mysqlnd-ms-cache-support
    - new constant MYSQLND_MS_QOS_OPTION_CACHE to be used with mysqlnd_ms_set_qos()
    - new constant MYSQLND_MS_HAVE_CACHE_SUPPORT set if cache support is compiled in


1.2.1 beta

  Motto/theme: Global Transaction ID injection and quality-of-service concept
  Release date: 01/2012

  * No major changes


1.2.0 alpha

  Motto/theme: Global Transaction ID injection and quality-of-service concept
  Release date: 12/2011

  * Introduced quality-of-service (QoS) filter
  * Added mysqlnd_ms_set_qos() function to set required connection quality at runtime
  * New constants related to mysqlnd_ms_set_qos()
    - MYSQLND_MS_QOS_CONSISTENCY_STRONG
    - MYSQLND_MS_QOS_CONSISTENCY_SESSION
    - MYSQLND_MS_QOS_CONSISTENCY_EVENTUAL
    - MYSQLND_MS_QOS_OPTION_GTID
    - MYSQLND_MS_QOS_OPTION_AGE
  * Service levels provided by QoS filter
    * eventual consistency, optional option slave lag
    * session consistency, optional option GTID
    * strong consistency

  * Added global transaction ID injection (GTID)
  * Added mysqlnd_ms_get_last_gtid() to fetch last transaction id
  * Enabled support for multi master with or without slaves
  * New statistics related to GTID:
    - gtid_autocommit_injections_success
    - gtid_autocommit_injections_failure
    - gtid_commit_injections_success
	- gtid_commit_injections_failure
	- gtid_implicit_commit_injections_success
    - gtid_implicit_commit_injections_failure


1.1.2 stable / production ready

  Motto/theme : Cover replication basics with production quality
  Release date: 11/2011

  * Introduced mysqlnd_ms.disable_rw_split ini setting
  * Fixed Bug #60119 - 	host="localhost" lost in mysqlnd_ms_get_last_used_connection()


1.1.1 beta

  Motto/theme : Cover replication basics with production quality
  Release date: 10/2011

  * NOTE: 1.1.0 alpha (PECL version) has reported itself as "1.1.0-beta"
  * Fixed PECL #59982 - Unusable extension with --enable-mysqlnd-ms-table-filter
    Use of the option is NOT supported. You must not used it. Added note to m4.


1.1.0 alpha

  Motto/theme : Cover replication basics with production quality
  Release date: 09/2011

  * Code base refactored to prepare for future releases
  * Introduction of (chainable) filter concept
  * New powerful JSON based configuration syntax
  * Lazy connections improved: security relevant, state changing commands covered
  * Support for (native) prepared statements
  * Added new function - mysqlnd_ms_get_last_used_connection($obj_or_res)
  * Replaced mysqlnd_ms_set_user_pick_server() with "user" filter
  * New statistics: use_slave_guess, use_master_guess
  * Change of semantics of statistics: use_slave, use_master
  * List of broadcasted messages extended: ssl_set
  * Commands monitored to remember settings for lazy connections: change_user,
    select_db, set_charset, set_autocommit.
  * The plugin configuration file must contain a slave list. Failing to provide
    will cause an E_ERROR level error (fatal). The slave list may be empty.

  * MySQL replication filter (client-side partitioning) support prepared
  * Multi-master configuration support prepared (ini setting: mysqlnd_ms.multi_master)

  * Almost 5x more tests, code coverage through tests 75-90% for core files
  * Fixed PECL #22724 - Server switching (mysqlnd_ms_query_is_select case sensitive)
  * Fixed PECL #22784 - Using mysql_connect and mysql_select_db() won't work


1.0 alpha

  Release date: 04/2011
  Motto/theme : Cover replication basics to test user feeedback

  * Basic automatic read-write split (read: slave, write: master)
  * SQL hints to overrule automatic R/W split
  * Load balancing of slave requests


1.0 pre-alpha

  Release date: 09/2010
  Motto/theme : Proof-of-concept

  * Initial check-in
  * Hardly more than a demo of the mysqlnd
  * Hardly of any practial use.


