============
Rally v0.0.2
============

Information
-----------

+------------------+-----------------+
| Commits          |     **100**     |
+------------------+-----------------+
| Bug fixes        |     **18**      |
+------------------+-----------------+
| Dev cycle        |   **45 days**   |
+------------------+-----------------+
| Release date     | **12/Mar/2015** |
+------------------+-----------------+


Details
-------

This release contains new features, new task plugins, bug fixes,
various code and API improvements.


New Features
~~~~~~~~~~~~

* rally task start **--abort-on-sla-failure**

    Stopping load before things go wrong.
    Load generation will be interrupted if SLA criteria stop passing.

* Rally verify command supports multiple Tempest sources now.

* python34 support

* postgres DB backend support


API changes
~~~~~~~~~~~


* [new] **rally [deployment | verify | task] use** subcommand

    It should be used instead of root command **rally use**

* [new] Rally as a Lib API

    To avoid code duplication between Rally as CLI tool and Rally as a Service
    we decide to make Rally as a Lib as a common part between these 2 modes.

    Rally as a Service will be a daemon that just maps HTTP request to Rally
    as a Lib API.

* [deprecated] **rally use** CLI command

* [deprecated] Old Rally as a Lib API

    Old Rally API was quite mixed up so we decide to deprecate it


Plugins
~~~~~~~

* **Task Runners**:

    [improved] Improved algorithm of generation load in **constant runner**

        Before we used processes to generate load, now it creates pool of
        processes (amount of processes is equal to CPU count) after that in
        each process use threads to generate load. So now you can easily
        generate load of 1k concurrent scenarios.

    [improved] Unify code of **constant** and **rps** runners

    [interface] Added **abort()** to runner's plugin interface

        New method **abort()** is used to immediately interrupt execution.


* **Task Scenarios**:

    [new] DesignateBasic.create_and_delete_server

    [new] DesignateBasic.create_and_list_servers

    [new] DesignateBasic.list_servers

    [new] MistralWorkbooks.list_workbooks

    [new] MistralWorkbooks.create_workbook

    [new] Quotas.neutron_update

    [new] HeatStacks.create_update_delete_stack

    [new] HeatStacks.list_stacks_and_resources

    [new] HeatStacks.create_suspend_resume_delete_stac

    [new] HeatStacks.create_check_delete_stack

    [new] NeutronNetworks.create_and_delete_routers

    [new] NovaKeypair.create_and_delete_keypair

    [new] NovaKeypair.create_and_list_keypairs

    [new] NovaKeypair.boot_and_delete_server_with_keypair

    [new] NovaServers.boot_server_from_volume_and_live_migrate

    [new] NovaServers.boot_server_attach_created_volume_and_live_migrate

    [new] CinderVolumes.create_and_upload_volume_to_image

    [fix] CinderVolumes.create_and_attach_volume

        Pass optional \*\*kwargs only to create server command

    [fix]  GlanceImages.create_image_and_boot_instances

        Pass optional \*\*kwargs only to create server command

    [fix] TempestScenario.\* removed stress cleanup.

        Major issue is that tempest stress cleanup cleans whole OpenStack.
        This is very dangerous, so it's better to remove it and leave some
        extra resources.

    [improved] NovaSecGroup.boot_and_delete_server_with_secgroups

        Add optional \*\*kwargs that are passed to boot server comment


* **Task Context**:

    [new] **stacks**

        Generates passed amount of heat stacks for all tenants.

    [new] **custom_image**

        Prepares images for internal VMs testing.

        To Support generating workloads in VMs by existing tools like: IPerf,
        Blogbench, HPCC and others we have to have prepared images, with
        already installed and configured tools.

        Rally team decide to generate such images on fly from passed to avoid
        requirements of having big repository with a lot of images.

        This context is abstract context that allows to automate next steps:

        1) runs VM with passed image (with floating ip and other stuff)
        2) execute abstract method that has access to VM
        3) snapshot this image

        In future we are going to use this as a base for making context that
        prepares images.

    [improved] **allow_ssh**

        Automatically disable it if security group are disabled in neutron.

    [improved] **keypair**

        Key pairs are stored in "users" space it means that accessing keypair
        from scenario is simpler now:

            self.context["user"]["keypair"]["private"]

    [fix] **users**

        Pass proper EndpointType for newly created users

    [fix] **sahara_edp**

        The Job Binaries data should be treated as a binary content


* **Task SLA**:

    [interface] SLA calculations is done in additive way now

        Resolves scale issues, because now we don't need to have whole
        array of iterations in memory to process SLA.

        This is required to implement **--abort-on-sla-failure** feature

    [all] SLA plugins were rewritten to implement new interface


Bug fixes
~~~~~~~~~

**18 bugs were fixed, the most critical are**:


* Fix **rally task detailed --iterations-data**

  It didn't work in case of missing atomic actions. Such situation can occur
  if scenario method raises exceptions

* Add user-friendly message if the task cannot be deleted

  In case of trying to delete task that is not in "finished" status users get
  traces instead of user-friendly message try to run it with --force key.


* Network context cleanups networks properly now


Documentation
~~~~~~~~~~~~~

* Image sizes are fixed

* New tutorial in "Step by Step" relate to **--abort-on-sla-failure**

* Various fixes
