<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.openstack.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tim+Simpson</id>
		<title>OpenStack - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.openstack.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tim+Simpson"/>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/wiki/Special:Contributions/Tim_Simpson"/>
		<updated>2026-07-08T12:03:35Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveBPMeeting&amp;diff=68009</id>
		<title>Meetings/TroveBPMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveBPMeeting&amp;diff=68009"/>
				<updated>2014-11-17T15:47:54Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Nov 17 Meeting CANCELED */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Weekly Trove Blueprint Meeting =&lt;br /&gt;
For those interested, we have blueprint meetings in #openstack-trove weekly, Mondays at 18:00 UTC. &amp;lt;br /&amp;gt;&lt;br /&gt;
Feel free to add items in the agenda below if you want to bring a blueprint up for approval. &amp;lt;br /&amp;gt;&lt;br /&gt;
Please follow the BP template at https://wiki.openstack.org/wiki/TroveBlueprint &amp;lt;br /&amp;gt;&lt;br /&gt;
Please submit RST specs as change requests to https://github.com/openstack/trove-specs  &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nov 17 Meeting CANCELED==&lt;br /&gt;
* Add support for DB2 Express-C datastore (https://review.openstack.org/#/c/133856/) - Mariam John&lt;br /&gt;
* Add support for Apache CouchDB datastore (https://review.openstack.org/#/c/133849/) - Mariam John&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Meeting Agenda History: https://wiki.openstack.org/wiki/Trove/MeetingAgendaHistory#Trove_Blueprint_Meeting_Agenda_History&amp;lt;br/&amp;gt;&lt;br /&gt;
Meeting Chat Logs: http://eavesdrop.openstack.org/meetings/trove_bp_review/2014/&lt;br /&gt;
&lt;br /&gt;
== Nov. 24 Meeting ==&lt;br /&gt;
[grapex]&lt;br /&gt;
* Example Snippet Generator - Tim Simpson&lt;br /&gt;
[denis_makogon]&lt;br /&gt;
* Clustering action improvements&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/deprecate-cluster-action&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveBPMeeting&amp;diff=68005</id>
		<title>Meetings/TroveBPMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveBPMeeting&amp;diff=68005"/>
				<updated>2014-11-17T15:40:07Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Nov. 24 Meeting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Weekly Trove Blueprint Meeting =&lt;br /&gt;
For those interested, we have blueprint meetings in #openstack-trove weekly, Mondays at 18:00 UTC. &amp;lt;br /&amp;gt;&lt;br /&gt;
Feel free to add items in the agenda below if you want to bring a blueprint up for approval. &amp;lt;br /&amp;gt;&lt;br /&gt;
Please follow the BP template at https://wiki.openstack.org/wiki/TroveBlueprint &amp;lt;br /&amp;gt;&lt;br /&gt;
Please submit RST specs as change requests to https://github.com/openstack/trove-specs  &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nov 17 Meeting CANCELED==&lt;br /&gt;
* Example Snippet Generator - Tim Simpson&lt;br /&gt;
* Add support for DB2 Express-C datastore (https://review.openstack.org/#/c/133856/) - Mariam John&lt;br /&gt;
* Add support for Apache CouchDB datastore (https://review.openstack.org/#/c/133849/) - Mariam John&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Meeting Agenda History: https://wiki.openstack.org/wiki/Trove/MeetingAgendaHistory#Trove_Blueprint_Meeting_Agenda_History&amp;lt;br/&amp;gt;&lt;br /&gt;
Meeting Chat Logs: http://eavesdrop.openstack.org/meetings/trove_bp_review/2014/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nov. 24 Meeting ==&lt;br /&gt;
[grapex]&lt;br /&gt;
* Example Snippet Generator - Tim Simpson&lt;br /&gt;
[denis_makogon]&lt;br /&gt;
* Clustering action improvements&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/deprecate-cluster-action&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveBPMeeting&amp;diff=67941</id>
		<title>Meetings/TroveBPMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveBPMeeting&amp;diff=67941"/>
				<updated>2014-11-14T18:42:24Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Nov 17 Meeting CANCELED */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Weekly Trove Blueprint Meeting =&lt;br /&gt;
For those interested, we have blueprint meetings in #openstack-trove weekly, Mondays at 18:00 UTC. &amp;lt;br /&amp;gt;&lt;br /&gt;
Feel free to add items in the agenda below if you want to bring a blueprint up for approval. &amp;lt;br /&amp;gt;&lt;br /&gt;
Please follow the BP template at https://wiki.openstack.org/wiki/TroveBlueprint &amp;lt;br /&amp;gt;&lt;br /&gt;
Please submit RST specs as change requests to https://github.com/openstack/trove-specs  &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nov 17 Meeting CANCELED==&lt;br /&gt;
* Example Snippet Generator - Tim Simpson&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Meeting Agenda History: https://wiki.openstack.org/wiki/Trove/MeetingAgendaHistory#Trove_Blueprint_Meeting_Agenda_History&amp;lt;br/&amp;gt;&lt;br /&gt;
Meeting Chat Logs: http://eavesdrop.openstack.org/meetings/trove_bp_review/2014/&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveBPMeeting&amp;diff=67940</id>
		<title>Meetings/TroveBPMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveBPMeeting&amp;diff=67940"/>
				<updated>2014-11-14T18:42:11Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Nov 10 Meeting CANCELED */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Weekly Trove Blueprint Meeting =&lt;br /&gt;
For those interested, we have blueprint meetings in #openstack-trove weekly, Mondays at 18:00 UTC. &amp;lt;br /&amp;gt;&lt;br /&gt;
Feel free to add items in the agenda below if you want to bring a blueprint up for approval. &amp;lt;br /&amp;gt;&lt;br /&gt;
Please follow the BP template at https://wiki.openstack.org/wiki/TroveBlueprint &amp;lt;br /&amp;gt;&lt;br /&gt;
Please submit RST specs as change requests to https://github.com/openstack/trove-specs  &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nov 17 Meeting CANCELED==&lt;br /&gt;
* Example Snippet Generator&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Meeting Agenda History: https://wiki.openstack.org/wiki/Trove/MeetingAgendaHistory#Trove_Blueprint_Meeting_Agenda_History&amp;lt;br/&amp;gt;&lt;br /&gt;
Meeting Chat Logs: http://eavesdrop.openstack.org/meetings/trove_bp_review/2014/&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Trove/event_simulator&amp;diff=63575</id>
		<title>Trove/event simulator</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Trove/event_simulator&amp;diff=63575"/>
				<updated>2014-09-24T19:51:33Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: Created page with &amp;quot;The event simulator is a module used by the Trove integration tests to simulate time and run the tests as quickly as possible while also making sure they run deterministically...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The event simulator is a module used by the Trove integration tests to simulate time and run the tests as quickly as possible while also making sure they run deterministically.&lt;br /&gt;
&lt;br /&gt;
== Fake Mode Recap ==&lt;br /&gt;
To explain the event simulator, a recap of Trove's &amp;quot;fake mode&amp;quot; is in order. Fake mode is just a special configuration of Trove where certain major components, such as the Nova API client, are replaced by long lived test doubles. These &amp;quot;fakes&amp;quot; are more complex than a mock in that they are long lived and work to present a consistent facade of behavior in the components they represent. &lt;br /&gt;
&lt;br /&gt;
For example, when a &amp;quot;fake&amp;quot; Nova server is provisioned, it actually creates an object in a dictionary which is marked as being built. Requests to &amp;quot;show&amp;quot; this object using the Nova client's servers.get method will return a server in a building status. The creation of the fake server will also spawn an eventlet thread that will, after a few seconds, update the status of the fake server object to &amp;quot;active.&amp;quot; Because of this, Trove can use this fake Nova client in place of the real thing. Similar fakes are created for Cinder, the guestagent, and other major components.&lt;br /&gt;
&lt;br /&gt;
Because the fake objects need to wait a bit of time before changing their state this means that fake mode takes awhile to run even though nothing is happening. This is exacerbated by the tests, which need to poll the status of Trove objects repeatedly, sleeping each time in between.&lt;br /&gt;
&lt;br /&gt;
One solution would be to rewrite all of the tests to never sleep, and change the fake objects accordingly. This could be done at the expense of being unable to use the same tests against a real deployment of Trove, and conversely being unable to make sure the real tests written for Trove work without running against a real deployment, which may be expensive in terms of time and resources.&lt;br /&gt;
&lt;br /&gt;
This is where the event simulator comes in.&lt;br /&gt;
&lt;br /&gt;
== Event Simulator ==&lt;br /&gt;
&lt;br /&gt;
The root of the problem is time.sleep is getting called and waiting for actions which themselves are being delayed for no reason other than to make sure the tests can order themselves correctly.&lt;br /&gt;
&lt;br /&gt;
Event Simulator fixes things (where &amp;quot;fix&amp;quot; is meant in the Vegas sense of the word) by monkey patching the time.sleep calls as well as calls to spawn eventlet threads.&lt;br /&gt;
&lt;br /&gt;
When the app asks to launch a thread, the event simulator places the function that would be run into a &amp;quot;fake_thread&amp;quot; of which it keeps a collection. The initial fake thread ends up being the tests themselves. All of these fake threads are managed by a central loop (kind of like a reactor pattern). Each thread is run if and only if it doesn't need to sleep anymore. Fake threads acknowledge they wish to sleep using the fake_sleep method of event_simulator which replaces time.sleep during monkey_patching.&lt;br /&gt;
&lt;br /&gt;
This by itself would not work if the code running for these fake threads were associated to regular eventlet threads which might run wherever.&lt;br /&gt;
&lt;br /&gt;
To fix that, and the second problem being addressed, which is that test runs won't be deterministic (i.e. speed of the test machine and other factors could lead to threads running in a different order), event_simulator wraps all of the threads it runs into simulated coroutines. This means only one fake thread gets run at any given time. &lt;br /&gt;
&lt;br /&gt;
The way this works is every eventlet thread is wrapped in a event_simulator.Coroutine object, which waits on a semaphore to run. Code which runs the coroutine is in a different thread, and as soon as it asks the coroutine to run waits for its own semaphore. When the running coroutine finishes or wishes to sleep, it releases the calling thread's semaphore and goes back to waiting on it's own (greenthreads couldn't be used as eventlet itself is built off of them leading to unpredictable results).&lt;br /&gt;
&lt;br /&gt;
The end result is that only one thread of execution ever executes at a time, and that time.sleep *must* be called for events to proceed in fake mode. For example, if you did a busy wait by simply polling for a resource nothing would ever happen and the tests would hang.&lt;br /&gt;
&lt;br /&gt;
== Repl Demos ==&lt;br /&gt;
&lt;br /&gt;
It can be easier to understand how this works if you run a repl to experiment.&lt;br /&gt;
&lt;br /&gt;
Start by entering your Trove directory and running the tests using tox, by running &amp;quot;tox -epy27&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Once they finish, run the following:&lt;br /&gt;
&lt;br /&gt;
    .tox/py27/bin/python run_tests.py --stop --group=dbaas.guest.initialize --nocapture --repl&lt;br /&gt;
&lt;br /&gt;
This will execute the run_tests.py script directly. The --repl tells the code to enter an interactive REPL loop as soon as the tests finish. Because the group &amp;quot;nadda&amp;quot; does not exist no tests will be executed. However it can be useful to run a REPL if you're trying to debug test code.&lt;br /&gt;
&lt;br /&gt;
When the repl starts, enter these lines:&lt;br /&gt;
&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; from trove.tests.util import test_config&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; from trove.tests.util import create_dbaas_client&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; from trove.tests.util.users import Requirements&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; reqs = Requirements(is_admin=True)&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; user = test_config.users.find_user(reqs)&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; client = create_dbaas_client(user)&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; instance = client.instances.create(&amp;quot;Test Instance&amp;quot;, 1, {'size':1})&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; instance.status&lt;br /&gt;
    u'BUILD'&lt;br /&gt;
&lt;br /&gt;
The last line should cause the status of the instance to be spit out, which will be building.&lt;br /&gt;
&lt;br /&gt;
Try this:&lt;br /&gt;
&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; instance = client.instances.get(instance.id)&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; instance.status&lt;br /&gt;
    u'BUILD'&lt;br /&gt;
&lt;br /&gt;
Notice no matter how long you run those last two lines in real life, the status will always be building.&lt;br /&gt;
&lt;br /&gt;
Now try this:&lt;br /&gt;
&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; import time&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; time.sleep(3)&lt;br /&gt;
    CREATING os_admin @ %&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; instance = client.instances.get(instance.id)&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; instance.status&lt;br /&gt;
    u'BUILD'&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; time.sleep(30)&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; instance = client.instances.get(instance.id)&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; time.sleep(30)&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; instance.status&lt;br /&gt;
    u'ACTIVE'&lt;br /&gt;
&lt;br /&gt;
The Trove instance eventually does become active, but only after time.sleep, which in this context is just calling the event simulator, is called either enough times or with a high enough argument to pass enough simulated time. &lt;br /&gt;
&lt;br /&gt;
You can use the repl like this in order to explore how Trove works internally and better understand it, which can help not only with testing but also when developing new features.&lt;br /&gt;
&lt;br /&gt;
Here's another example you can paste into the repl which uses the Trove management API to show how the volume, server, and finally guest agent comes online to turn a Trove instance status to ACTIVE:&lt;br /&gt;
&lt;br /&gt;
    import time&lt;br /&gt;
    from trove.tests.util import test_config&lt;br /&gt;
    from trove.tests.util import create_client&lt;br /&gt;
    from trove.tests.util.users import Requirements&lt;br /&gt;
    client = create_client(is_admin=False)&lt;br /&gt;
    admin_client = create_client(is_admin=True)&lt;br /&gt;
    instance = client.instances.create(&amp;quot;Test Instance&amp;quot;, 1, {'size':1})&lt;br /&gt;
    &lt;br /&gt;
    def print_status():&lt;br /&gt;
        mgmt_instance = admin_client.management.show(instance.id)&lt;br /&gt;
        vs = (&amp;quot;None&amp;quot; if mgmt_instance.volume is None &lt;br /&gt;
                     else mgmt_instance.volume['status'])&lt;br /&gt;
        ns = (&amp;quot;None&amp;quot; if mgmt_instance.server is None &lt;br /&gt;
                     else mgmt_instance.server['status'])&lt;br /&gt;
        print(&amp;quot;Trove API Status = %s&amp;quot; % mgmt_instance.status)&lt;br /&gt;
        print(&amp;quot;   volume status = %s&amp;quot; % vs)&lt;br /&gt;
        print(&amp;quot;   server status = %s&amp;quot; % ns)&lt;br /&gt;
        print(&amp;quot;    agent status = %s&amp;quot; % mgmt_instance.service_status)&lt;br /&gt;
    &lt;br /&gt;
    print_status()&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    print_status()&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    print_status()&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    print_status()&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Trove/ExampleGenerator&amp;diff=61056</id>
		<title>Trove/ExampleGenerator</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Trove/ExampleGenerator&amp;diff=61056"/>
				<updated>2014-08-21T13:23:21Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: Generate the API doc request / response snippets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
The API docs have a bunch of snippets featuring the JSON request and respond headers and body. Currently these are made by manually with no validation that they resemble what Trove is actually doing.&lt;br /&gt;
&lt;br /&gt;
We can instead generate these docs using simple Python code. Rackspace has used such code for about two years but was unable to submit it as until recently there was no place for it to live. However during the Austin midcycle (now half a year ago) we asked Anne Gentle, guest speaker, if it would be acceptable to move the Trove API docs to the main Trove repo. Through the hard work of Anne, Andreas Jaeger, and others the docs were moved. Following up on that we can finally move the doc generation tool to Trove.&lt;br /&gt;
&lt;br /&gt;
The snippet generator is all Proboscis (sorry) but this means it will fit in with all the tests run with run_tests.py (yay!). We can have it write the snippets to apidocs/src/samples, meaning if something changes due to work by a developer they'll know it and have to check it in to avoid errors in the gate. This will ensure we don't change our API unless we really want to. :)&lt;br /&gt;
&lt;br /&gt;
Here's the breakdown of the work:&lt;br /&gt;
&lt;br /&gt;
* Add snippet generator to tests, let it run every time.&lt;br /&gt;
* This is tangential but we'll probably want to remove all the XML snippets, as well as all mention of XML from the docs, to help with this next part:&lt;br /&gt;
* In its current form, the snippet generator doesn't generate all snippets (there have been more created since we last updated it) so we'll have to add additional generated snippets until finally *all* the snippets are generated.&lt;br /&gt;
&lt;br /&gt;
==Public API==&lt;br /&gt;
No changes- except our contract will be even less likely to change.&lt;br /&gt;
&lt;br /&gt;
==CLI interface==&lt;br /&gt;
No changes.&lt;br /&gt;
&lt;br /&gt;
==ReST Part==&lt;br /&gt;
No changes.&lt;br /&gt;
&lt;br /&gt;
==Internal API==&lt;br /&gt;
No changes.&lt;br /&gt;
&lt;br /&gt;
==RPC API description==&lt;br /&gt;
No changes.&lt;br /&gt;
&lt;br /&gt;
==Guest Agent==&lt;br /&gt;
No changes.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveBPMeeting&amp;diff=51224</id>
		<title>Meetings/TroveBPMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveBPMeeting&amp;diff=51224"/>
				<updated>2014-05-05T17:31:12Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* BluePrints for next meeting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Weekly Trove Blueprint Meeting =&lt;br /&gt;
For those interested, we have blueprint meetings in #openstack-trove weekly, Mondays at 18:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
 &lt;br /&gt;
=== Agenda for Weekly Trove Blueprint Meeting - May 5 ===&lt;br /&gt;
* Percona support [mattgriffin]: &lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/support-percona-xtrabackup-2.2&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/support-ps-5.6&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/support-pxc-5.5-and-5.6&lt;br /&gt;
* Instance database log manipulations [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/dbinstance-log&lt;br /&gt;
* Cassandra configuration management support [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/cassandra-configuration-management&lt;br /&gt;
* Cassandra incremental backup support [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/incremental-backup-restore-cassandra&lt;br /&gt;
* Volume data snapshoting/applying [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/volume-snapshot&lt;br /&gt;
* Update database instance name [nehav]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/update-instance-name&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BluePrints for next meeting ===&lt;br /&gt;
* Pluggable conductor manager [boden]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/pluggable-conductor-manager&lt;br /&gt;
* Configurable DB plugins [boden]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/configurable-db-plugins&lt;br /&gt;
* Multi-path plugin support; added notes to existing BP [boden]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/extensions-update&lt;br /&gt;
* Allow configs to be rendered based on datastore version [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/datastore-configs-cant-use-multiple-versions&lt;br /&gt;
* Trove client for cross-region-backup [esmute]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/cross-region-backup-availability&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meeting Agenda History: https://wiki.openstack.org/wiki/Trove/MeetingAgendaHistory#Trove_Blueprint_Meeting_Agenda_History&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveBPMeeting&amp;diff=50774</id>
		<title>Meetings/TroveBPMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveBPMeeting&amp;diff=50774"/>
				<updated>2014-05-01T13:22:35Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* BluePrints for next meeting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Weekly Trove Blueprint Meeting =&lt;br /&gt;
For those interested, we have blueprint meetings in #openstack-trove weekly, Mondays at 18:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
 &lt;br /&gt;
=== Agenda for Weekly Trove Blueprint Meeting - May 5 ===&lt;br /&gt;
* Percona support [mattgriffin]: &lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/support-percona-xtrabackup-2.2&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/support-ps-5.6&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/support-pxc-5.5-and-5.6&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BluePrints for next meeting ===&lt;br /&gt;
* Pluggable conductor manager [boden]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/pluggable-conductor-manager&lt;br /&gt;
* Configurable DB plugins [boden]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/configurable-db-plugins&lt;br /&gt;
* Multi-path plugin support; added notes to existing BP [boden]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/extensions-update&lt;br /&gt;
* Instance database log manipulations [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/dbinstance-log&lt;br /&gt;
* Allow configs to be rendered based on datastore version [grapex]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/datastore-configs-cant-use-multiple-versions&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meeting Agenda History: https://wiki.openstack.org/wiki/Trove/MeetingAgendaHistory#Trove_Blueprint_Meeting_Agenda_History&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Trove/use-datastore-version-when-considering-configs&amp;diff=50773</id>
		<title>Trove/use-datastore-version-when-considering-configs</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Trove/use-datastore-version-when-considering-configs&amp;diff=50773"/>
				<updated>2014-05-01T13:14:43Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Justification/Benefits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
Trove currently can use different config files for each datastore, but uses the same configs for each datastore version. This blueprint is to add the tiny bit of functionality to allow an operator to optionally use different configs each datastore version.&lt;br /&gt;
&lt;br /&gt;
== Justification/Benefits ==&lt;br /&gt;
As versions of a datastore change, it makes sense to allow operators to optionally offer different config values for each version.&lt;br /&gt;
&lt;br /&gt;
== Impacts ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration === &lt;br /&gt;
Today a template is loaded by looking in the path &amp;quot;{manager}/config.template&amp;quot;.format(manager=datastore.manager).&lt;br /&gt;
We can allow for this new functionality by creating instead a list option in the configs which contains different name patterns to look for. Each one will be tried in order to see if there's a match. I propose these defaults:&lt;br /&gt;
    ['{manager}/{version}/{flavor_ram}.config.template',&lt;br /&gt;
     '{manager}/{version}/config.template',&lt;br /&gt;
     '{manager}/config.template']&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
No impact.&lt;br /&gt;
&lt;br /&gt;
=== Public API ===&lt;br /&gt;
No impact.&lt;br /&gt;
&lt;br /&gt;
==== CLI interface====&lt;br /&gt;
No impact.&lt;br /&gt;
&lt;br /&gt;
==== ReST Part ====&lt;br /&gt;
No impact.&lt;br /&gt;
&lt;br /&gt;
=== Internal API ===&lt;br /&gt;
No impact.&lt;br /&gt;
&lt;br /&gt;
==== RPC API description====&lt;br /&gt;
No impact.&lt;br /&gt;
&lt;br /&gt;
=== Guest Agent ===&lt;br /&gt;
No impact.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Trove/use-datastore-version-when-considering-configs&amp;diff=50772</id>
		<title>Trove/use-datastore-version-when-considering-configs</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Trove/use-datastore-version-when-considering-configs&amp;diff=50772"/>
				<updated>2014-05-01T13:13:10Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: Created page with &amp;quot;== Description == Trove currently can use different config files for each datastore, but uses the same configs for each datastore version. This blueprint is to add the tiny bi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
Trove currently can use different config files for each datastore, but uses the same configs for each datastore version. This blueprint is to add the tiny bit of functionality to allow an operator to optionally use different configs each datastore version.&lt;br /&gt;
&lt;br /&gt;
== Justification/Benefits ==&lt;br /&gt;
As versions of a datastore change, it makes sense to offer different config values.&lt;br /&gt;
&lt;br /&gt;
== Impacts ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration === &lt;br /&gt;
Today a template is loaded by looking in the path &amp;quot;{manager}/config.template&amp;quot;.format(manager=datastore.manager).&lt;br /&gt;
We can allow for this new functionality by creating instead a list option in the configs which contains different name patterns to look for. Each one will be tried in order to see if there's a match. I propose these defaults:&lt;br /&gt;
    ['{manager}/{version}/{flavor_ram}.config.template',&lt;br /&gt;
     '{manager}/{version}/config.template',&lt;br /&gt;
     '{manager}/config.template']&lt;br /&gt;
&lt;br /&gt;
=== Database ===&lt;br /&gt;
No impact.&lt;br /&gt;
&lt;br /&gt;
=== Public API ===&lt;br /&gt;
No impact.&lt;br /&gt;
&lt;br /&gt;
==== CLI interface====&lt;br /&gt;
No impact.&lt;br /&gt;
&lt;br /&gt;
==== ReST Part ====&lt;br /&gt;
No impact.&lt;br /&gt;
&lt;br /&gt;
=== Internal API ===&lt;br /&gt;
No impact.&lt;br /&gt;
&lt;br /&gt;
==== RPC API description====&lt;br /&gt;
No impact.&lt;br /&gt;
&lt;br /&gt;
=== Guest Agent ===&lt;br /&gt;
No impact.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=48239</id>
		<title>Meetings/TroveMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=48239"/>
				<updated>2014-04-09T17:50:32Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Agenda for Apr. 9 (weekly meeting) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Weekly Trove (DBaaS) team meeting =&lt;br /&gt;
&lt;br /&gt;
For those interested, we have meetings in #openstack-meeting-alt Weekly, Wednesdays at 18:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
&lt;br /&gt;
Logs available: http://eavesdrop.openstack.org/meetings/trove/2014/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agenda for Mar. 19 ==&lt;br /&gt;
* https://blueprints.launchpad.net/trove/+spec/refactoring-datastore-options-in-cfg&lt;br /&gt;
* Moving away from mockito (https://blueprints.launchpad.net/trove/+spec/remove-mockito)&lt;br /&gt;
* Clustering API Container vs Joins approach.&lt;br /&gt;
&lt;br /&gt;
== Agenda for Mar. 26 ==&lt;br /&gt;
* Summit sessions [hub_cap]&lt;br /&gt;
* Data Store abstraction start/stop/status/control [amrith]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/trove-guest-agent-datastore-control&lt;br /&gt;
* Icehouse, RC1, and juno&lt;br /&gt;
&lt;br /&gt;
== Agenda for Mar. 31 (blueprint meeting) ==&lt;br /&gt;
Networking related blueprints:&lt;br /&gt;
* Network attribute management [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/network-manager-spec&lt;br /&gt;
* Neutron Support for Trove [annashen]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/neutron-support&lt;br /&gt;
* Trove Managed Instances on Private Network [juice]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/trove-guest-private-network &lt;br /&gt;
Others:&lt;br /&gt;
*Point in time recovery [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/point-in-time-recovery&lt;br /&gt;
*Data volume snapshot [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/volume-snapshot&lt;br /&gt;
*Instance metadata [imsplitbit]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/trove-metadata&lt;br /&gt;
&lt;br /&gt;
== Agenda for Apr. 2 ==&lt;br /&gt;
*Icehouse RC1 cut and Juno branch open&lt;br /&gt;
*ATL Dev Summit topics&lt;br /&gt;
*Open discussion&lt;br /&gt;
&lt;br /&gt;
== Agenda for Apr. 7 (blueprint meeting) ==&lt;br /&gt;
*Point in time recovery [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/point-in-time-recovery&lt;br /&gt;
*Data volume snapshot [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/volume-snapshot&lt;br /&gt;
*Networking [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/network-manager-spec&lt;br /&gt;
*Cross-region backups [esmute]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/cross-region-backup-migration&lt;br /&gt;
*Descriptions to Datastore Configuration Group Parameters [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/add-descriptions-to-config-parameters-api&lt;br /&gt;
*Categorize the trove-manage commands [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/categorize-the-trove-manage-commands&lt;br /&gt;
*Neutron Network Support [annashen]&lt;br /&gt;
**https://blueprints.launchpad.net/trove/+spec/neutron-support&lt;br /&gt;
*Trove-Managed Instances [juice]&lt;br /&gt;
**https://blueprints.launchpad.net/trove/+spec/trove-managed-instances&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agenda for Apr. 9 (weekly meeting)==&lt;br /&gt;
* Design Summit Session Proposals&lt;br /&gt;
* Refactoring backup/restore strategies [denis_makogon]&lt;br /&gt;
** https://bugs.launchpad.net/trove/+bug/1287684&lt;br /&gt;
* Moving the docs [grapex]&lt;br /&gt;
&lt;br /&gt;
== Agenda for Apr. 14 (blueprint meeting) ==&lt;br /&gt;
* Datastore Capabilities [k-pom]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/capabilities&lt;br /&gt;
*Descriptions to Datastore Configuration Group Parameters [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/add-descriptions-to-config-parameters-api&lt;br /&gt;
*Categorize the trove-manage commands [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/categorize-the-trove-manage-commands&lt;br /&gt;
*Point in time recovery [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/point-in-time-recovery&lt;br /&gt;
*Data volume snapshot [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/volume-snapshot&lt;br /&gt;
*Networking [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/network-manager-spec&lt;br /&gt;
* Move the Trove Guest Agent to its own module [robert]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/moving-trove-guestagent&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=48237</id>
		<title>Meetings/TroveMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=48237"/>
				<updated>2014-04-09T17:50:17Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Agenda for Apr. 9 (weekly meeting) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Weekly Trove (DBaaS) team meeting =&lt;br /&gt;
&lt;br /&gt;
For those interested, we have meetings in #openstack-meeting-alt Weekly, Wednesdays at 18:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
&lt;br /&gt;
Logs available: http://eavesdrop.openstack.org/meetings/trove/2014/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agenda for Mar. 19 ==&lt;br /&gt;
* https://blueprints.launchpad.net/trove/+spec/refactoring-datastore-options-in-cfg&lt;br /&gt;
* Moving away from mockito (https://blueprints.launchpad.net/trove/+spec/remove-mockito)&lt;br /&gt;
* Clustering API Container vs Joins approach.&lt;br /&gt;
&lt;br /&gt;
== Agenda for Mar. 26 ==&lt;br /&gt;
* Summit sessions [hub_cap]&lt;br /&gt;
* Data Store abstraction start/stop/status/control [amrith]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/trove-guest-agent-datastore-control&lt;br /&gt;
* Icehouse, RC1, and juno&lt;br /&gt;
&lt;br /&gt;
== Agenda for Mar. 31 (blueprint meeting) ==&lt;br /&gt;
Networking related blueprints:&lt;br /&gt;
* Network attribute management [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/network-manager-spec&lt;br /&gt;
* Neutron Support for Trove [annashen]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/neutron-support&lt;br /&gt;
* Trove Managed Instances on Private Network [juice]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/trove-guest-private-network &lt;br /&gt;
Others:&lt;br /&gt;
*Point in time recovery [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/point-in-time-recovery&lt;br /&gt;
*Data volume snapshot [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/volume-snapshot&lt;br /&gt;
*Instance metadata [imsplitbit]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/trove-metadata&lt;br /&gt;
&lt;br /&gt;
== Agenda for Apr. 2 ==&lt;br /&gt;
*Icehouse RC1 cut and Juno branch open&lt;br /&gt;
*ATL Dev Summit topics&lt;br /&gt;
*Open discussion&lt;br /&gt;
&lt;br /&gt;
== Agenda for Apr. 7 (blueprint meeting) ==&lt;br /&gt;
*Point in time recovery [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/point-in-time-recovery&lt;br /&gt;
*Data volume snapshot [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/volume-snapshot&lt;br /&gt;
*Networking [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/network-manager-spec&lt;br /&gt;
*Cross-region backups [esmute]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/cross-region-backup-migration&lt;br /&gt;
*Descriptions to Datastore Configuration Group Parameters [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/add-descriptions-to-config-parameters-api&lt;br /&gt;
*Categorize the trove-manage commands [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/categorize-the-trove-manage-commands&lt;br /&gt;
*Neutron Network Support [annashen]&lt;br /&gt;
**https://blueprints.launchpad.net/trove/+spec/neutron-support&lt;br /&gt;
*Trove-Managed Instances [juice]&lt;br /&gt;
**https://blueprints.launchpad.net/trove/+spec/trove-managed-instances&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agenda for Apr. 9 (weekly meeting)==&lt;br /&gt;
* Refactoring backup/restore strategies [denis_makogon]&lt;br /&gt;
** https://bugs.launchpad.net/trove/+bug/1287684&lt;br /&gt;
* Moving the docs&lt;br /&gt;
&lt;br /&gt;
== Agenda for Apr. 14 (blueprint meeting) ==&lt;br /&gt;
* Datastore Capabilities [k-pom]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/capabilities&lt;br /&gt;
*Descriptions to Datastore Configuration Group Parameters [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/add-descriptions-to-config-parameters-api&lt;br /&gt;
*Categorize the trove-manage commands [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/categorize-the-trove-manage-commands&lt;br /&gt;
*Point in time recovery [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/point-in-time-recovery&lt;br /&gt;
*Data volume snapshot [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/volume-snapshot&lt;br /&gt;
*Networking [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/network-manager-spec&lt;br /&gt;
* Move the Trove Guest Agent to its own module [robert]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/moving-trove-guestagent&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=48234</id>
		<title>Meetings/TroveMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=48234"/>
				<updated>2014-04-09T17:40:57Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Agenda for Apr. 14 (blueprint meeting) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Weekly Trove (DBaaS) team meeting =&lt;br /&gt;
&lt;br /&gt;
For those interested, we have meetings in #openstack-meeting-alt Weekly, Wednesdays at 18:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
&lt;br /&gt;
Logs available: http://eavesdrop.openstack.org/meetings/trove/2014/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agenda for Mar. 19 ==&lt;br /&gt;
* https://blueprints.launchpad.net/trove/+spec/refactoring-datastore-options-in-cfg&lt;br /&gt;
* Moving away from mockito (https://blueprints.launchpad.net/trove/+spec/remove-mockito)&lt;br /&gt;
* Clustering API Container vs Joins approach.&lt;br /&gt;
&lt;br /&gt;
== Agenda for Mar. 26 ==&lt;br /&gt;
* Summit sessions [hub_cap]&lt;br /&gt;
* Data Store abstraction start/stop/status/control [amrith]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/trove-guest-agent-datastore-control&lt;br /&gt;
* Icehouse, RC1, and juno&lt;br /&gt;
&lt;br /&gt;
== Agenda for Mar. 31 (blueprint meeting) ==&lt;br /&gt;
Networking related blueprints:&lt;br /&gt;
* Network attribute management [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/network-manager-spec&lt;br /&gt;
* Neutron Support for Trove [annashen]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/neutron-support&lt;br /&gt;
* Trove Managed Instances on Private Network [juice]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/trove-guest-private-network &lt;br /&gt;
Others:&lt;br /&gt;
*Point in time recovery [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/point-in-time-recovery&lt;br /&gt;
*Data volume snapshot [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/volume-snapshot&lt;br /&gt;
*Instance metadata [imsplitbit]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/trove-metadata&lt;br /&gt;
&lt;br /&gt;
== Agenda for Apr. 2 ==&lt;br /&gt;
*Icehouse RC1 cut and Juno branch open&lt;br /&gt;
*ATL Dev Summit topics&lt;br /&gt;
*Open discussion&lt;br /&gt;
&lt;br /&gt;
== Agenda for Apr. 7 (blueprint meeting) ==&lt;br /&gt;
*Point in time recovery [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/point-in-time-recovery&lt;br /&gt;
*Data volume snapshot [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/volume-snapshot&lt;br /&gt;
*Networking [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/network-manager-spec&lt;br /&gt;
*Cross-region backups [esmute]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/cross-region-backup-migration&lt;br /&gt;
*Descriptions to Datastore Configuration Group Parameters [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/add-descriptions-to-config-parameters-api&lt;br /&gt;
*Categorize the trove-manage commands [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/categorize-the-trove-manage-commands&lt;br /&gt;
*Neutron Network Support [annashen]&lt;br /&gt;
**https://blueprints.launchpad.net/trove/+spec/neutron-support&lt;br /&gt;
*Trove-Managed Instances [juice]&lt;br /&gt;
**https://blueprints.launchpad.net/trove/+spec/trove-managed-instances&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agenda for Apr. 9 (weekly meeting)==&lt;br /&gt;
* Refactoring backup/restore strategies [denis_makogon]&lt;br /&gt;
** https://bugs.launchpad.net/trove/+bug/1287684&lt;br /&gt;
&lt;br /&gt;
== Agenda for Apr. 14 (blueprint meeting) ==&lt;br /&gt;
* Datastore Capabilities [k-pom]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/capabilities&lt;br /&gt;
*Descriptions to Datastore Configuration Group Parameters [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/add-descriptions-to-config-parameters-api&lt;br /&gt;
*Categorize the trove-manage commands [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/categorize-the-trove-manage-commands&lt;br /&gt;
*Point in time recovery [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/point-in-time-recovery&lt;br /&gt;
*Data volume snapshot [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/volume-snapshot&lt;br /&gt;
*Networking [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/network-manager-spec&lt;br /&gt;
* Move the Trove Guest Agent to its own module [robert]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/moving-trove-guestagent&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=48231</id>
		<title>Meetings/TroveMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=48231"/>
				<updated>2014-04-09T17:33:05Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Agenda for Apr. 14 (blueprint meeting) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Weekly Trove (DBaaS) team meeting =&lt;br /&gt;
&lt;br /&gt;
For those interested, we have meetings in #openstack-meeting-alt Weekly, Wednesdays at 18:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
&lt;br /&gt;
Logs available: http://eavesdrop.openstack.org/meetings/trove/2014/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agenda for Mar. 19 ==&lt;br /&gt;
* https://blueprints.launchpad.net/trove/+spec/refactoring-datastore-options-in-cfg&lt;br /&gt;
* Moving away from mockito (https://blueprints.launchpad.net/trove/+spec/remove-mockito)&lt;br /&gt;
* Clustering API Container vs Joins approach.&lt;br /&gt;
&lt;br /&gt;
== Agenda for Mar. 26 ==&lt;br /&gt;
* Summit sessions [hub_cap]&lt;br /&gt;
* Data Store abstraction start/stop/status/control [amrith]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/trove-guest-agent-datastore-control&lt;br /&gt;
* Icehouse, RC1, and juno&lt;br /&gt;
&lt;br /&gt;
== Agenda for Mar. 31 (blueprint meeting) ==&lt;br /&gt;
Networking related blueprints:&lt;br /&gt;
* Network attribute management [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/network-manager-spec&lt;br /&gt;
* Neutron Support for Trove [annashen]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/neutron-support&lt;br /&gt;
* Trove Managed Instances on Private Network [juice]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/trove-guest-private-network &lt;br /&gt;
Others:&lt;br /&gt;
*Point in time recovery [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/point-in-time-recovery&lt;br /&gt;
*Data volume snapshot [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/volume-snapshot&lt;br /&gt;
*Instance metadata [imsplitbit]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/trove-metadata&lt;br /&gt;
&lt;br /&gt;
== Agenda for Apr. 2 ==&lt;br /&gt;
*Icehouse RC1 cut and Juno branch open&lt;br /&gt;
*ATL Dev Summit topics&lt;br /&gt;
*Open discussion&lt;br /&gt;
&lt;br /&gt;
== Agenda for Apr. 7 (blueprint meeting) ==&lt;br /&gt;
*Point in time recovery [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/point-in-time-recovery&lt;br /&gt;
*Data volume snapshot [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/volume-snapshot&lt;br /&gt;
*Networking [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/network-manager-spec&lt;br /&gt;
*Cross-region backups [esmute]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/cross-region-backup-migration&lt;br /&gt;
*Descriptions to Datastore Configuration Group Parameters [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/add-descriptions-to-config-parameters-api&lt;br /&gt;
*Categorize the trove-manage commands [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/categorize-the-trove-manage-commands&lt;br /&gt;
*Neutron Network Support [annashen]&lt;br /&gt;
**https://blueprints.launchpad.net/trove/+spec/neutron-support&lt;br /&gt;
*Trove-Managed Instances [juice]&lt;br /&gt;
**https://blueprints.launchpad.net/trove/+spec/trove-managed-instances&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agenda for Apr. 9 (weekly meeting)==&lt;br /&gt;
* Refactoring backup/restore strategies [denis_makogon]&lt;br /&gt;
** https://bugs.launchpad.net/trove/+bug/1287684&lt;br /&gt;
&lt;br /&gt;
== Agenda for Apr. 14 (blueprint meeting) ==&lt;br /&gt;
* Datastore Capabilities [k-pom]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/capabilities&lt;br /&gt;
*Descriptions to Datastore Configuration Group Parameters [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/add-descriptions-to-config-parameters-api&lt;br /&gt;
*Categorize the trove-manage commands [cp16net]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/categorize-the-trove-manage-commands&lt;br /&gt;
*Point in time recovery [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/point-in-time-recovery&lt;br /&gt;
*Data volume snapshot [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/volume-snapshot&lt;br /&gt;
*Networking [denis_makogon]&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/network-manager-spec&lt;br /&gt;
* Move the Trove Guest Agent to its own module&lt;br /&gt;
** https://blueprints.launchpad.net/trove/+spec/moving-trove-guestagent&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Trove-Guest-Agent-Upgrades&amp;diff=45099</id>
		<title>Trove-Guest-Agent-Upgrades</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Trove-Guest-Agent-Upgrades&amp;diff=45099"/>
				<updated>2014-03-10T03:55:44Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Feedback/Discussion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Introduction ===&lt;br /&gt;
This article describes the design for Guest Agent upgrades in Trove.  Currently Guest Agent upgrades are implemented through external deployment tools that push new code to each guest instance.  Usually the same deployment tools for upgrading the control plane handles guest agent upgrades.  This can create a bottle neck on the deployment infrastructure.&lt;br /&gt;
&lt;br /&gt;
==== Blueprint ==== &lt;br /&gt;
https://blueprints.launchpad.net/trove/+spec/upgrade-guestagent&lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
# Version the RPC API and tie it to the API version (see nova for examples)&lt;br /&gt;
#* This is to help prevent non-backward compatibility between the Trove API and the guest but is not necessarily a dependency for upgrades &lt;br /&gt;
# Implement a notification based upgrade path for guest agent&lt;br /&gt;
# Allow for different upgrade strategies (swift, jenkins, local disk, rysnc, etc)&lt;br /&gt;
# Avoid upgrading during times when guest agents are doing other work (i.e. backups, resize, restart)&lt;br /&gt;
#* This doesn't seem to be a concern given that the agent can only handle a single message at a time&lt;br /&gt;
# Reduce overall downtime during upgrade cycles&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
New properties will be added to the trove configs to allow:&lt;br /&gt;
* Enabling/Disabling Guest Agent Upgrades&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
guest_automatic_updates: False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Specifying an upgrade strategy&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
guest_upgrade_strategy: swift&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Affected Trove Components ====&lt;br /&gt;
* python-troveclient (optional)&lt;br /&gt;
* trove admin API&lt;br /&gt;
* guest agent&lt;br /&gt;
&lt;br /&gt;
==== Schema Changes ====&lt;br /&gt;
[[File:Upgrades.png]]&lt;br /&gt;
&lt;br /&gt;
==== Workflow ====&lt;br /&gt;
 1. An external process (outside of Trove) will create an upgrade package or artifact&lt;br /&gt;
 * This process will be mapped to a defined strategy in the Guest Agent.&lt;br /&gt;
 * It's possible the admin may want to trigger an automatic backup at this point&lt;br /&gt;
[[File:Workflow0.png]]&lt;br /&gt;
 2. An Admin user will notify a Guest Agent that an upgrade is available through the Trove Management API&lt;br /&gt;
 3. A new upgrade record will be create in the DB for the request.&lt;br /&gt;
 4. The Guest Agent will process the RPC message created by the API call and handle the upgrade accordingly&lt;br /&gt;
[[File:Workflow1.png]] &lt;br /&gt;
&lt;br /&gt;
 5. The Guest Agent will download the package from the location specified in the RPC message&lt;br /&gt;
[[File:Workflow2.png]]&lt;br /&gt;
&lt;br /&gt;
==== Guest Agent Message Handling ====&lt;br /&gt;
 1. Guest agent will handle the message for upgrading to a particular version&lt;br /&gt;
 2. Simple validation on the message will occur after the message is parsed &lt;br /&gt;
     a. Check the strategy type, check to see if guest_automatic_updates is enabled&lt;br /&gt;
     b. Check the location of the package in the message and whether it exists&lt;br /&gt;
 3. Update the upgrade 'event' in the Trove upgrades database table&lt;br /&gt;
 4. Execute or process the message&lt;br /&gt;
&lt;br /&gt;
[[File: Message_handling.png]]&lt;br /&gt;
&lt;br /&gt;
==== Guest Agent Process Upgrade Message ====&lt;br /&gt;
 1. Choose the correct strategy to process the upgrade&lt;br /&gt;
 2. Download the file from the given location (retry n-times before Failing)&lt;br /&gt;
 3. Decrypt the package&lt;br /&gt;
 4. Validate the package&lt;br /&gt;
     a. check size, check version, checksum, format etc&lt;br /&gt;
 5. Install the package (pip install)&lt;br /&gt;
 6. Restart (retry n-times before Failing)&lt;br /&gt;
&lt;br /&gt;
[[File: Ga_processing.png]]&lt;br /&gt;
&lt;br /&gt;
 * on start up update the status of the upgrade to SUCCESS&lt;br /&gt;
 ** if start up fails try to install the last known working version, record the status as FAILED&lt;br /&gt;
     I can see this being a config value that gets updated or a file that is written to disk on the instance&lt;br /&gt;
&lt;br /&gt;
==== Trove Management REST API ====&lt;br /&gt;
Create a notification request to upgrade a trove guest agent&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Relative URL:  /v1.0/{admin_tenant_id}/mgmt/upgrades&lt;br /&gt;
&lt;br /&gt;
HTTP Method: POST&lt;br /&gt;
&lt;br /&gt;
HTTP Headers:&lt;br /&gt;
  Accept: application/json&lt;br /&gt;
  Content-Type: application/json &lt;br /&gt;
  User-Agent: python-troveclient &lt;br /&gt;
  X-Auth-Project-Id: tenant_name &lt;br /&gt;
  X-Auth-Token: HPAuth10_xxxx &lt;br /&gt;
&lt;br /&gt;
HTTP Post Body&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;instance_id&amp;quot;: '&amp;lt;UUID&amp;gt;'&lt;br /&gt;
    &amp;quot;instance_version&amp;quot;: &amp;quot;v1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;strategy&amp;quot;: &amp;quot;swift&amp;quot;,&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;http://swift/tenant/container/trove-guestagent-v1.0.1.tar.gz&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Note: Will need a call return a list of upgrades filtered by state and/or instance_id&lt;br /&gt;
&lt;br /&gt;
==== Trove RPC API ====&lt;br /&gt;
unpacked context&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   ...&lt;br /&gt;
    &amp;quot;is_admin&amp;quot;: True,&lt;br /&gt;
    &amp;quot;tenant&amp;quot;:&amp;quot;&amp;lt;SANITIZED&amp;gt;&amp;quot;,&lt;br /&gt;
    &amp;quot;method&amp;quot;: &amp;quot;upgrade&amp;quot;,&lt;br /&gt;
    &amp;quot;instance_id&amp;quot;: '&amp;lt;UUID&amp;gt;'&lt;br /&gt;
    &amp;quot;instance_version&amp;quot;: &amp;quot;v1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;strategy&amp;quot;: &amp;quot;swift&amp;quot;,&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;http://swift/tenant/container/trove-guestagent-v1.0.1.tar.gz&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Versioning and Package Validation ====&lt;br /&gt;
* The Guest Agent will be responsible for validating the package before upgrading&lt;br /&gt;
&lt;br /&gt;
==== Scenarios ====&lt;br /&gt;
# What happens when the Guest Agent is in a non-upgradeable state?  (backup/restore, resize, restart, error)&lt;br /&gt;
#* The message should remain in the queue until the next time the Guest Agent checks and the state is in 'Running'&lt;br /&gt;
# What happens when an upgrade fails, and how does that feedback to Trove?&lt;br /&gt;
#* Record it as a FAIL in the Trove Database, Admin will have to query.&lt;br /&gt;
# Can we rollback or install a previous version?&lt;br /&gt;
&lt;br /&gt;
=== Feedback/Discussion ===&lt;br /&gt;
&lt;br /&gt;
==== Configs ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): &amp;quot;New properties will be added to the trove configs to allow Enabling/Disabling Guest Agent Upgrades and Specifying an upgrade strategy&amp;quot;. Is it necessary to add a CONF switch for either of these? If the cloud admin doesn't want to initiate a guestagent upgrade via API/RPC, then as long as they don't issue the request, all is well. Or are you suggesting that users can initiate their own upgrades (i.e. this operation isn't limited to the admin role)? As for the upgrade strategy (e.g. &amp;quot;swift&amp;quot;), this is already in the message payload in your examples, so why the need for the CONF? Is the idea to mimic the 'datastore_registry_ext' concept to allow providers to write and add their own strategies?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): We could leave out the CONF flag for disable/enable upgrades.  I'm a little hesitant about removing the strategy key/value though. For instance if for some reason we have different strategies for upgrading guests in dev or staging one day.  For now I think we are only considering Admin users for sending upgrade notifications.  I think the workflow might resemble the restore from backup concept a little more but yes we want to allow folks to extend this to define their own strategies.  &lt;br /&gt;
*[[User:Esp|esp]]: I thought of another use for the CONF switch to enable/disable.  We might want to use it for disabling REST API calls that are specific to upgrades.&lt;br /&gt;
*[[User:GrapeX|grapex]]: Just to make sure, when we talk about a strategy for the guest upgrade this will be on the Trove side, yes?&lt;br /&gt;
&lt;br /&gt;
==== Supported Packaging Types ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Is there a short list of packaging schemes everyone believes we should support? In Austin it looked like some were ok with a simple &amp;quot;pip install&amp;quot;, whereas others had strict requirements on package signing, crypto, etc.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): Initially we are looking at creating a tarball that would include all dependencies to avoid pulling down other packages.  We could come up with a list though.  (pypi, tar.gz, etc)  The crypto piece should be optional and part of a strategy.  The concern was having credentials unencrypted in swift.&lt;br /&gt;
* [[User:GrapeX|grapex]] I think the rule should be that we keep things flexible enough that operators can use whatever upgrade strategies works best for them. Whatever goes into CI should be very simple IMO.&lt;br /&gt;
&lt;br /&gt;
==== Upgrade Status ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): It seems this is inferred, but since it's not explicitly mentioned I'll ask: There is no introduction of a new INSTANCE state (e.g. ACTIVE, BACKUP), correct? To take it a step further then, the idea would be that the user sees ACTIVE, despite a possible in-flight upgrade? In the case of an upgrade failure, would the user still see ACTIVE but we'd have FAILED recorded in the upgrade table?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC):  The thought was to 'hide' the upgrade status from the user although I'm not sure we decided that yet.  That being said I think we need to create a set of upgrade states that are granular enough to handle various failures.  For example if the instance can't talk to swift due to network problem we could just fail/abort the upgrade.  An Admin will have to come back and retry again later.  The user should not see any issues.  But if we botch the install and the guest can't start at all then we got a big problem that the user will see.&lt;br /&gt;
* [[User:GrapeX|grapex]] The table is called &amp;quot;upgrade&amp;quot; but it seems to me the more useful bit of information to store in the database is the current version of the guest agent as reported by the agent itself during it's heartbeat / status update. We could store that along with a new status which would be, more generally, the status of the guest agent itself. This new status would be set to error states if the upgrade was botched, which the user wouldn't see but admins could peek at. Why not call the table &amp;quot;agent_status&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
==== Trove Database Schema ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Every upgrade attempt will be a new record in the upgrades table, or will each instance have a dedicated row? I would much prefer the former.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): I was thinking a new record for each upgrade event.  Kind of like an audit trail or upgrade history table.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): What is the purpose of deleted/deleted_at for upgrades? In the scenario of a botched upgrade, a new upgrade request should be fired, incurring a new row to be inserted.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): The deleted flag was put there to stay consistent with some of the existing tables.  In the event that we might want to purge the table that would support a logical delete for a batch delete job that would run once in a while.  I'd be willing to drop both of these columns as I can't see a scenario for it at the moment.&lt;br /&gt;
&lt;br /&gt;
* [[User:GrapeX|grapex]] I'll be honest- I feel like there are dozens of features in Trove which could use something like this to compliment the logs. I don't think building this audit trail as part of this feature makes sense- we should probably set our sights on making a real audit trail that would be more general. We talked awhile back about having &amp;quot;events&amp;quot; in the database, and Basnight also worked on having something similar awhile back which never was completed.&lt;br /&gt;
&lt;br /&gt;
==== Rollback Support ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): As for whether a rollback to a previous install should be supported: that's likely contingent upon the packaging schemes supported.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): Agreed.  This one is a bit weird.  It was my attempt to address the question of what happens when we upgrade and the guest can't start.  My current approach was to write to a file (like the config file or a new one) when an upgrade is successful to keep track of that last known running version.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[User:Agingh1pster|agingh1pster]]: question 2 - what happens if a agent never upgrades.  Is the instance considered dead?&lt;br /&gt;
* [[User:Esp|esp]]: I think that if we got into a situation where a Guest Agent failed to update (indefinitely)  the cloud admin would have to figure out something else.  i.e. contact the user, migrate the instance via backup/restore etc.&lt;br /&gt;
&lt;br /&gt;
* [[User:GrapeX|grapex]]: I agree with Amcrn- rollbacks is very contingent on the packaging schemes. At Rackspace we're using Debian packages, which works well. I'm for supporting whatever people need to use but I think we should try to avoid inventing a new packaging system. At the very least I think the issue of rollbacks should be saved for a later iteration.&lt;br /&gt;
&lt;br /&gt;
==== Instance Version ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Can you elaborate on the instance_version logic?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): This was kind of a convenience thing to be able to track the instance_version through an entire upgrade cycle.  It saves us from parsing the name of the package/file.  At first I was thinking, maybe you need to be at a particular version before upgrading.  So if for some reason a guest agent is at version 1, version 2 failed but the next upgrade available is version 3.  Not sure this is a valid case or not, especially if we just make sure that version 3 has everything it needs from version 1 and 2.   Not to mention that if discover that version 2 was crap and we want to install version 3 instead that would definitely not be valid.&lt;br /&gt;
&lt;br /&gt;
==== Trove Managment API ====&lt;br /&gt;
*[[User:Agingh1pster|agingh1pster]]: I don't see api for getting the status of the agent upgrades&lt;br /&gt;
*[[User:Esp|esp]]: good point.  I was gonna add that in but forgot.  it would have to be a management API addition if we are really gonna hide the upgrade status from the user&lt;br /&gt;
*[[User:Esp|esp]]: We can update the existing /mgmt/instance route (the one that shows the details of the instance).  In addition to this we can create a new route that will allow an admin to list all the failed upgrades.  Need to document what this might look like.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Non-Admin Call Initiated Upgrades ====&lt;br /&gt;
* [[User:GrapeX|grapex]]: I don't see any talk here about the idea of allowing Trove code to make the upgrade RPC call automatically if it detects an agent is out of date. If we stored the version of the guest in the database it would be very easy to detect this during any of the guest RPC calls. Trove could even wait for the upgrade to finish if it was in the middle of a task that was already long running (such as anything deferred to task manager). In my experience the upgrade time for a guest agent using debian packages is very small, and during an upgrade only a fraction of users are actually hitting the API, so it would be enormously helpful to be able to upgrade the users who need the newer version the most.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Trove-Guest-Agent-Upgrades&amp;diff=45098</id>
		<title>Trove-Guest-Agent-Upgrades</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Trove-Guest-Agent-Upgrades&amp;diff=45098"/>
				<updated>2014-03-10T03:48:26Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Rollback Support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Introduction ===&lt;br /&gt;
This article describes the design for Guest Agent upgrades in Trove.  Currently Guest Agent upgrades are implemented through external deployment tools that push new code to each guest instance.  Usually the same deployment tools for upgrading the control plane handles guest agent upgrades.  This can create a bottle neck on the deployment infrastructure.&lt;br /&gt;
&lt;br /&gt;
==== Blueprint ==== &lt;br /&gt;
https://blueprints.launchpad.net/trove/+spec/upgrade-guestagent&lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
# Version the RPC API and tie it to the API version (see nova for examples)&lt;br /&gt;
#* This is to help prevent non-backward compatibility between the Trove API and the guest but is not necessarily a dependency for upgrades &lt;br /&gt;
# Implement a notification based upgrade path for guest agent&lt;br /&gt;
# Allow for different upgrade strategies (swift, jenkins, local disk, rysnc, etc)&lt;br /&gt;
# Avoid upgrading during times when guest agents are doing other work (i.e. backups, resize, restart)&lt;br /&gt;
#* This doesn't seem to be a concern given that the agent can only handle a single message at a time&lt;br /&gt;
# Reduce overall downtime during upgrade cycles&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
New properties will be added to the trove configs to allow:&lt;br /&gt;
* Enabling/Disabling Guest Agent Upgrades&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
guest_automatic_updates: False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Specifying an upgrade strategy&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
guest_upgrade_strategy: swift&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Affected Trove Components ====&lt;br /&gt;
* python-troveclient (optional)&lt;br /&gt;
* trove admin API&lt;br /&gt;
* guest agent&lt;br /&gt;
&lt;br /&gt;
==== Schema Changes ====&lt;br /&gt;
[[File:Upgrades.png]]&lt;br /&gt;
&lt;br /&gt;
==== Workflow ====&lt;br /&gt;
 1. An external process (outside of Trove) will create an upgrade package or artifact&lt;br /&gt;
 * This process will be mapped to a defined strategy in the Guest Agent.&lt;br /&gt;
 * It's possible the admin may want to trigger an automatic backup at this point&lt;br /&gt;
[[File:Workflow0.png]]&lt;br /&gt;
 2. An Admin user will notify a Guest Agent that an upgrade is available through the Trove Management API&lt;br /&gt;
 3. A new upgrade record will be create in the DB for the request.&lt;br /&gt;
 4. The Guest Agent will process the RPC message created by the API call and handle the upgrade accordingly&lt;br /&gt;
[[File:Workflow1.png]] &lt;br /&gt;
&lt;br /&gt;
 5. The Guest Agent will download the package from the location specified in the RPC message&lt;br /&gt;
[[File:Workflow2.png]]&lt;br /&gt;
&lt;br /&gt;
==== Guest Agent Message Handling ====&lt;br /&gt;
 1. Guest agent will handle the message for upgrading to a particular version&lt;br /&gt;
 2. Simple validation on the message will occur after the message is parsed &lt;br /&gt;
     a. Check the strategy type, check to see if guest_automatic_updates is enabled&lt;br /&gt;
     b. Check the location of the package in the message and whether it exists&lt;br /&gt;
 3. Update the upgrade 'event' in the Trove upgrades database table&lt;br /&gt;
 4. Execute or process the message&lt;br /&gt;
&lt;br /&gt;
[[File: Message_handling.png]]&lt;br /&gt;
&lt;br /&gt;
==== Guest Agent Process Upgrade Message ====&lt;br /&gt;
 1. Choose the correct strategy to process the upgrade&lt;br /&gt;
 2. Download the file from the given location (retry n-times before Failing)&lt;br /&gt;
 3. Decrypt the package&lt;br /&gt;
 4. Validate the package&lt;br /&gt;
     a. check size, check version, checksum, format etc&lt;br /&gt;
 5. Install the package (pip install)&lt;br /&gt;
 6. Restart (retry n-times before Failing)&lt;br /&gt;
&lt;br /&gt;
[[File: Ga_processing.png]]&lt;br /&gt;
&lt;br /&gt;
 * on start up update the status of the upgrade to SUCCESS&lt;br /&gt;
 ** if start up fails try to install the last known working version, record the status as FAILED&lt;br /&gt;
     I can see this being a config value that gets updated or a file that is written to disk on the instance&lt;br /&gt;
&lt;br /&gt;
==== Trove Management REST API ====&lt;br /&gt;
Create a notification request to upgrade a trove guest agent&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Relative URL:  /v1.0/{admin_tenant_id}/mgmt/upgrades&lt;br /&gt;
&lt;br /&gt;
HTTP Method: POST&lt;br /&gt;
&lt;br /&gt;
HTTP Headers:&lt;br /&gt;
  Accept: application/json&lt;br /&gt;
  Content-Type: application/json &lt;br /&gt;
  User-Agent: python-troveclient &lt;br /&gt;
  X-Auth-Project-Id: tenant_name &lt;br /&gt;
  X-Auth-Token: HPAuth10_xxxx &lt;br /&gt;
&lt;br /&gt;
HTTP Post Body&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;instance_id&amp;quot;: '&amp;lt;UUID&amp;gt;'&lt;br /&gt;
    &amp;quot;instance_version&amp;quot;: &amp;quot;v1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;strategy&amp;quot;: &amp;quot;swift&amp;quot;,&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;http://swift/tenant/container/trove-guestagent-v1.0.1.tar.gz&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Note: Will need a call return a list of upgrades filtered by state and/or instance_id&lt;br /&gt;
&lt;br /&gt;
==== Trove RPC API ====&lt;br /&gt;
unpacked context&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   ...&lt;br /&gt;
    &amp;quot;is_admin&amp;quot;: True,&lt;br /&gt;
    &amp;quot;tenant&amp;quot;:&amp;quot;&amp;lt;SANITIZED&amp;gt;&amp;quot;,&lt;br /&gt;
    &amp;quot;method&amp;quot;: &amp;quot;upgrade&amp;quot;,&lt;br /&gt;
    &amp;quot;instance_id&amp;quot;: '&amp;lt;UUID&amp;gt;'&lt;br /&gt;
    &amp;quot;instance_version&amp;quot;: &amp;quot;v1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;strategy&amp;quot;: &amp;quot;swift&amp;quot;,&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;http://swift/tenant/container/trove-guestagent-v1.0.1.tar.gz&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Versioning and Package Validation ====&lt;br /&gt;
* The Guest Agent will be responsible for validating the package before upgrading&lt;br /&gt;
&lt;br /&gt;
==== Scenarios ====&lt;br /&gt;
# What happens when the Guest Agent is in a non-upgradeable state?  (backup/restore, resize, restart, error)&lt;br /&gt;
#* The message should remain in the queue until the next time the Guest Agent checks and the state is in 'Running'&lt;br /&gt;
# What happens when an upgrade fails, and how does that feedback to Trove?&lt;br /&gt;
#* Record it as a FAIL in the Trove Database, Admin will have to query.&lt;br /&gt;
# Can we rollback or install a previous version?&lt;br /&gt;
&lt;br /&gt;
=== Feedback/Discussion ===&lt;br /&gt;
&lt;br /&gt;
==== Configs ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): &amp;quot;New properties will be added to the trove configs to allow Enabling/Disabling Guest Agent Upgrades and Specifying an upgrade strategy&amp;quot;. Is it necessary to add a CONF switch for either of these? If the cloud admin doesn't want to initiate a guestagent upgrade via API/RPC, then as long as they don't issue the request, all is well. Or are you suggesting that users can initiate their own upgrades (i.e. this operation isn't limited to the admin role)? As for the upgrade strategy (e.g. &amp;quot;swift&amp;quot;), this is already in the message payload in your examples, so why the need for the CONF? Is the idea to mimic the 'datastore_registry_ext' concept to allow providers to write and add their own strategies?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): We could leave out the CONF flag for disable/enable upgrades.  I'm a little hesitant about removing the strategy key/value though. For instance if for some reason we have different strategies for upgrading guests in dev or staging one day.  For now I think we are only considering Admin users for sending upgrade notifications.  I think the workflow might resemble the restore from backup concept a little more but yes we want to allow folks to extend this to define their own strategies.  &lt;br /&gt;
*[[User:Esp|esp]]: I thought of another use for the CONF switch to enable/disable.  We might want to use it for disabling REST API calls that are specific to upgrades.&lt;br /&gt;
*[[User:GrapeX|grapex]]: Just to make sure, when we talk about a strategy for the guest upgrade this will be on the Trove side, yes?&lt;br /&gt;
&lt;br /&gt;
==== Supported Packaging Types ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Is there a short list of packaging schemes everyone believes we should support? In Austin it looked like some were ok with a simple &amp;quot;pip install&amp;quot;, whereas others had strict requirements on package signing, crypto, etc.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): Initially we are looking at creating a tarball that would include all dependencies to avoid pulling down other packages.  We could come up with a list though.  (pypi, tar.gz, etc)  The crypto piece should be optional and part of a strategy.  The concern was having credentials unencrypted in swift.&lt;br /&gt;
* [[User:GrapeX|grapex]] I think the rule should be that we keep things flexible enough that operators can use whatever upgrade strategies works best for them. Whatever goes into CI should be very simple IMO.&lt;br /&gt;
&lt;br /&gt;
==== Upgrade Status ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): It seems this is inferred, but since it's not explicitly mentioned I'll ask: There is no introduction of a new INSTANCE state (e.g. ACTIVE, BACKUP), correct? To take it a step further then, the idea would be that the user sees ACTIVE, despite a possible in-flight upgrade? In the case of an upgrade failure, would the user still see ACTIVE but we'd have FAILED recorded in the upgrade table?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC):  The thought was to 'hide' the upgrade status from the user although I'm not sure we decided that yet.  That being said I think we need to create a set of upgrade states that are granular enough to handle various failures.  For example if the instance can't talk to swift due to network problem we could just fail/abort the upgrade.  An Admin will have to come back and retry again later.  The user should not see any issues.  But if we botch the install and the guest can't start at all then we got a big problem that the user will see.&lt;br /&gt;
* [[User:GrapeX|grapex]] The table is called &amp;quot;upgrade&amp;quot; but it seems to me the more useful bit of information to store in the database is the current version of the guest agent as reported by the agent itself during it's heartbeat / status update. We could store that along with a new status which would be, more generally, the status of the guest agent itself. This new status would be set to error states if the upgrade was botched, which the user wouldn't see but admins could peek at. Why not call the table &amp;quot;agent_status&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
==== Trove Database Schema ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Every upgrade attempt will be a new record in the upgrades table, or will each instance have a dedicated row? I would much prefer the former.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): I was thinking a new record for each upgrade event.  Kind of like an audit trail or upgrade history table.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): What is the purpose of deleted/deleted_at for upgrades? In the scenario of a botched upgrade, a new upgrade request should be fired, incurring a new row to be inserted.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): The deleted flag was put there to stay consistent with some of the existing tables.  In the event that we might want to purge the table that would support a logical delete for a batch delete job that would run once in a while.  I'd be willing to drop both of these columns as I can't see a scenario for it at the moment.&lt;br /&gt;
&lt;br /&gt;
* [[User:GrapeX|grapex]] I'll be honest- I feel like there are dozens of features in Trove which could use something like this to compliment the logs. I don't think building this audit trail as part of this feature makes sense- we should probably set our sights on making a real audit trail that would be more general. We talked awhile back about having &amp;quot;events&amp;quot; in the database, and Basnight also worked on having something similar awhile back which never was completed.&lt;br /&gt;
&lt;br /&gt;
==== Rollback Support ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): As for whether a rollback to a previous install should be supported: that's likely contingent upon the packaging schemes supported.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): Agreed.  This one is a bit weird.  It was my attempt to address the question of what happens when we upgrade and the guest can't start.  My current approach was to write to a file (like the config file or a new one) when an upgrade is successful to keep track of that last known running version.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[User:Agingh1pster|agingh1pster]]: question 2 - what happens if a agent never upgrades.  Is the instance considered dead?&lt;br /&gt;
* [[User:Esp|esp]]: I think that if we got into a situation where a Guest Agent failed to update (indefinitely)  the cloud admin would have to figure out something else.  i.e. contact the user, migrate the instance via backup/restore etc.&lt;br /&gt;
&lt;br /&gt;
* [[User:GrapeX|grapex]]: I agree with Amcrn- rollbacks is very contingent on the packaging schemes. At Rackspace we're using Debian packages, which works well. I'm for supporting whatever people need to use but I think we should try to avoid inventing a new packaging system. At the very least I think the issue of rollbacks should be saved for a later iteration.&lt;br /&gt;
&lt;br /&gt;
==== Instance Version ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Can you elaborate on the instance_version logic?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): This was kind of a convenience thing to be able to track the instance_version through an entire upgrade cycle.  It saves us from parsing the name of the package/file.  At first I was thinking, maybe you need to be at a particular version before upgrading.  So if for some reason a guest agent is at version 1, version 2 failed but the next upgrade available is version 3.  Not sure this is a valid case or not, especially if we just make sure that version 3 has everything it needs from version 1 and 2.   Not to mention that if discover that version 2 was crap and we want to install version 3 instead that would definitely not be valid.&lt;br /&gt;
&lt;br /&gt;
==== Trove Managment API ====&lt;br /&gt;
*[[User:Agingh1pster|agingh1pster]]: I don't see api for getting the status of the agent upgrades&lt;br /&gt;
*[[User:Esp|esp]]: good point.  I was gonna add that in but forgot.  it would have to be a management API addition if we are really gonna hide the upgrade status from the user&lt;br /&gt;
*[[User:Esp|esp]]: We can update the existing /mgmt/instance route (the one that shows the details of the instance).  In addition to this we can create a new route that will allow an admin to list all the failed upgrades.  Need to document what this might look like.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Trove-Guest-Agent-Upgrades&amp;diff=45097</id>
		<title>Trove-Guest-Agent-Upgrades</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Trove-Guest-Agent-Upgrades&amp;diff=45097"/>
				<updated>2014-03-10T03:43:15Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Trove Database Schema */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Introduction ===&lt;br /&gt;
This article describes the design for Guest Agent upgrades in Trove.  Currently Guest Agent upgrades are implemented through external deployment tools that push new code to each guest instance.  Usually the same deployment tools for upgrading the control plane handles guest agent upgrades.  This can create a bottle neck on the deployment infrastructure.&lt;br /&gt;
&lt;br /&gt;
==== Blueprint ==== &lt;br /&gt;
https://blueprints.launchpad.net/trove/+spec/upgrade-guestagent&lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
# Version the RPC API and tie it to the API version (see nova for examples)&lt;br /&gt;
#* This is to help prevent non-backward compatibility between the Trove API and the guest but is not necessarily a dependency for upgrades &lt;br /&gt;
# Implement a notification based upgrade path for guest agent&lt;br /&gt;
# Allow for different upgrade strategies (swift, jenkins, local disk, rysnc, etc)&lt;br /&gt;
# Avoid upgrading during times when guest agents are doing other work (i.e. backups, resize, restart)&lt;br /&gt;
#* This doesn't seem to be a concern given that the agent can only handle a single message at a time&lt;br /&gt;
# Reduce overall downtime during upgrade cycles&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
New properties will be added to the trove configs to allow:&lt;br /&gt;
* Enabling/Disabling Guest Agent Upgrades&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
guest_automatic_updates: False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Specifying an upgrade strategy&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
guest_upgrade_strategy: swift&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Affected Trove Components ====&lt;br /&gt;
* python-troveclient (optional)&lt;br /&gt;
* trove admin API&lt;br /&gt;
* guest agent&lt;br /&gt;
&lt;br /&gt;
==== Schema Changes ====&lt;br /&gt;
[[File:Upgrades.png]]&lt;br /&gt;
&lt;br /&gt;
==== Workflow ====&lt;br /&gt;
 1. An external process (outside of Trove) will create an upgrade package or artifact&lt;br /&gt;
 * This process will be mapped to a defined strategy in the Guest Agent.&lt;br /&gt;
 * It's possible the admin may want to trigger an automatic backup at this point&lt;br /&gt;
[[File:Workflow0.png]]&lt;br /&gt;
 2. An Admin user will notify a Guest Agent that an upgrade is available through the Trove Management API&lt;br /&gt;
 3. A new upgrade record will be create in the DB for the request.&lt;br /&gt;
 4. The Guest Agent will process the RPC message created by the API call and handle the upgrade accordingly&lt;br /&gt;
[[File:Workflow1.png]] &lt;br /&gt;
&lt;br /&gt;
 5. The Guest Agent will download the package from the location specified in the RPC message&lt;br /&gt;
[[File:Workflow2.png]]&lt;br /&gt;
&lt;br /&gt;
==== Guest Agent Message Handling ====&lt;br /&gt;
 1. Guest agent will handle the message for upgrading to a particular version&lt;br /&gt;
 2. Simple validation on the message will occur after the message is parsed &lt;br /&gt;
     a. Check the strategy type, check to see if guest_automatic_updates is enabled&lt;br /&gt;
     b. Check the location of the package in the message and whether it exists&lt;br /&gt;
 3. Update the upgrade 'event' in the Trove upgrades database table&lt;br /&gt;
 4. Execute or process the message&lt;br /&gt;
&lt;br /&gt;
[[File: Message_handling.png]]&lt;br /&gt;
&lt;br /&gt;
==== Guest Agent Process Upgrade Message ====&lt;br /&gt;
 1. Choose the correct strategy to process the upgrade&lt;br /&gt;
 2. Download the file from the given location (retry n-times before Failing)&lt;br /&gt;
 3. Decrypt the package&lt;br /&gt;
 4. Validate the package&lt;br /&gt;
     a. check size, check version, checksum, format etc&lt;br /&gt;
 5. Install the package (pip install)&lt;br /&gt;
 6. Restart (retry n-times before Failing)&lt;br /&gt;
&lt;br /&gt;
[[File: Ga_processing.png]]&lt;br /&gt;
&lt;br /&gt;
 * on start up update the status of the upgrade to SUCCESS&lt;br /&gt;
 ** if start up fails try to install the last known working version, record the status as FAILED&lt;br /&gt;
     I can see this being a config value that gets updated or a file that is written to disk on the instance&lt;br /&gt;
&lt;br /&gt;
==== Trove Management REST API ====&lt;br /&gt;
Create a notification request to upgrade a trove guest agent&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Relative URL:  /v1.0/{admin_tenant_id}/mgmt/upgrades&lt;br /&gt;
&lt;br /&gt;
HTTP Method: POST&lt;br /&gt;
&lt;br /&gt;
HTTP Headers:&lt;br /&gt;
  Accept: application/json&lt;br /&gt;
  Content-Type: application/json &lt;br /&gt;
  User-Agent: python-troveclient &lt;br /&gt;
  X-Auth-Project-Id: tenant_name &lt;br /&gt;
  X-Auth-Token: HPAuth10_xxxx &lt;br /&gt;
&lt;br /&gt;
HTTP Post Body&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;instance_id&amp;quot;: '&amp;lt;UUID&amp;gt;'&lt;br /&gt;
    &amp;quot;instance_version&amp;quot;: &amp;quot;v1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;strategy&amp;quot;: &amp;quot;swift&amp;quot;,&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;http://swift/tenant/container/trove-guestagent-v1.0.1.tar.gz&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Note: Will need a call return a list of upgrades filtered by state and/or instance_id&lt;br /&gt;
&lt;br /&gt;
==== Trove RPC API ====&lt;br /&gt;
unpacked context&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   ...&lt;br /&gt;
    &amp;quot;is_admin&amp;quot;: True,&lt;br /&gt;
    &amp;quot;tenant&amp;quot;:&amp;quot;&amp;lt;SANITIZED&amp;gt;&amp;quot;,&lt;br /&gt;
    &amp;quot;method&amp;quot;: &amp;quot;upgrade&amp;quot;,&lt;br /&gt;
    &amp;quot;instance_id&amp;quot;: '&amp;lt;UUID&amp;gt;'&lt;br /&gt;
    &amp;quot;instance_version&amp;quot;: &amp;quot;v1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;strategy&amp;quot;: &amp;quot;swift&amp;quot;,&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;http://swift/tenant/container/trove-guestagent-v1.0.1.tar.gz&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Versioning and Package Validation ====&lt;br /&gt;
* The Guest Agent will be responsible for validating the package before upgrading&lt;br /&gt;
&lt;br /&gt;
==== Scenarios ====&lt;br /&gt;
# What happens when the Guest Agent is in a non-upgradeable state?  (backup/restore, resize, restart, error)&lt;br /&gt;
#* The message should remain in the queue until the next time the Guest Agent checks and the state is in 'Running'&lt;br /&gt;
# What happens when an upgrade fails, and how does that feedback to Trove?&lt;br /&gt;
#* Record it as a FAIL in the Trove Database, Admin will have to query.&lt;br /&gt;
# Can we rollback or install a previous version?&lt;br /&gt;
&lt;br /&gt;
=== Feedback/Discussion ===&lt;br /&gt;
&lt;br /&gt;
==== Configs ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): &amp;quot;New properties will be added to the trove configs to allow Enabling/Disabling Guest Agent Upgrades and Specifying an upgrade strategy&amp;quot;. Is it necessary to add a CONF switch for either of these? If the cloud admin doesn't want to initiate a guestagent upgrade via API/RPC, then as long as they don't issue the request, all is well. Or are you suggesting that users can initiate their own upgrades (i.e. this operation isn't limited to the admin role)? As for the upgrade strategy (e.g. &amp;quot;swift&amp;quot;), this is already in the message payload in your examples, so why the need for the CONF? Is the idea to mimic the 'datastore_registry_ext' concept to allow providers to write and add their own strategies?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): We could leave out the CONF flag for disable/enable upgrades.  I'm a little hesitant about removing the strategy key/value though. For instance if for some reason we have different strategies for upgrading guests in dev or staging one day.  For now I think we are only considering Admin users for sending upgrade notifications.  I think the workflow might resemble the restore from backup concept a little more but yes we want to allow folks to extend this to define their own strategies.  &lt;br /&gt;
*[[User:Esp|esp]]: I thought of another use for the CONF switch to enable/disable.  We might want to use it for disabling REST API calls that are specific to upgrades.&lt;br /&gt;
*[[User:GrapeX|grapex]]: Just to make sure, when we talk about a strategy for the guest upgrade this will be on the Trove side, yes?&lt;br /&gt;
&lt;br /&gt;
==== Supported Packaging Types ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Is there a short list of packaging schemes everyone believes we should support? In Austin it looked like some were ok with a simple &amp;quot;pip install&amp;quot;, whereas others had strict requirements on package signing, crypto, etc.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): Initially we are looking at creating a tarball that would include all dependencies to avoid pulling down other packages.  We could come up with a list though.  (pypi, tar.gz, etc)  The crypto piece should be optional and part of a strategy.  The concern was having credentials unencrypted in swift.&lt;br /&gt;
* [[User:GrapeX|grapex]] I think the rule should be that we keep things flexible enough that operators can use whatever upgrade strategies works best for them. Whatever goes into CI should be very simple IMO.&lt;br /&gt;
&lt;br /&gt;
==== Upgrade Status ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): It seems this is inferred, but since it's not explicitly mentioned I'll ask: There is no introduction of a new INSTANCE state (e.g. ACTIVE, BACKUP), correct? To take it a step further then, the idea would be that the user sees ACTIVE, despite a possible in-flight upgrade? In the case of an upgrade failure, would the user still see ACTIVE but we'd have FAILED recorded in the upgrade table?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC):  The thought was to 'hide' the upgrade status from the user although I'm not sure we decided that yet.  That being said I think we need to create a set of upgrade states that are granular enough to handle various failures.  For example if the instance can't talk to swift due to network problem we could just fail/abort the upgrade.  An Admin will have to come back and retry again later.  The user should not see any issues.  But if we botch the install and the guest can't start at all then we got a big problem that the user will see.&lt;br /&gt;
* [[User:GrapeX|grapex]] The table is called &amp;quot;upgrade&amp;quot; but it seems to me the more useful bit of information to store in the database is the current version of the guest agent as reported by the agent itself during it's heartbeat / status update. We could store that along with a new status which would be, more generally, the status of the guest agent itself. This new status would be set to error states if the upgrade was botched, which the user wouldn't see but admins could peek at. Why not call the table &amp;quot;agent_status&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
==== Trove Database Schema ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Every upgrade attempt will be a new record in the upgrades table, or will each instance have a dedicated row? I would much prefer the former.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): I was thinking a new record for each upgrade event.  Kind of like an audit trail or upgrade history table.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): What is the purpose of deleted/deleted_at for upgrades? In the scenario of a botched upgrade, a new upgrade request should be fired, incurring a new row to be inserted.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): The deleted flag was put there to stay consistent with some of the existing tables.  In the event that we might want to purge the table that would support a logical delete for a batch delete job that would run once in a while.  I'd be willing to drop both of these columns as I can't see a scenario for it at the moment.&lt;br /&gt;
&lt;br /&gt;
* [[User:GrapeX|grapex]] I'll be honest- I feel like there are dozens of features in Trove which could use something like this to compliment the logs. I don't think building this audit trail as part of this feature makes sense- we should probably set our sights on making a real audit trail that would be more general. We talked awhile back about having &amp;quot;events&amp;quot; in the database, and Basnight also worked on having something similar awhile back which never was completed.&lt;br /&gt;
&lt;br /&gt;
==== Rollback Support ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): As for whether a rollback to a previous install should be supported: that's likely contingent upon the packaging schemes supported.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): Agreed.  This one is a bit weird.  It was my attempt to address the question of what happens when we upgrade and the guest can't start.  My current approach was to write to a file (like the config file or a new one) when an upgrade is successful to keep track of that last known running version.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[User:Agingh1pster|agingh1pster]]: question 2 - what happens if a agent never upgrades.  Is the instance considered dead?&lt;br /&gt;
* [[User:Esp|esp]]: I think that if we got into a situation where a Guest Agent failed to update (indefinitely)  the cloud admin would have to figure out something else.  i.e. contact the user, migrate the instance via backup/restore etc.&lt;br /&gt;
&lt;br /&gt;
==== Instance Version ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Can you elaborate on the instance_version logic?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): This was kind of a convenience thing to be able to track the instance_version through an entire upgrade cycle.  It saves us from parsing the name of the package/file.  At first I was thinking, maybe you need to be at a particular version before upgrading.  So if for some reason a guest agent is at version 1, version 2 failed but the next upgrade available is version 3.  Not sure this is a valid case or not, especially if we just make sure that version 3 has everything it needs from version 1 and 2.   Not to mention that if discover that version 2 was crap and we want to install version 3 instead that would definitely not be valid.&lt;br /&gt;
&lt;br /&gt;
==== Trove Managment API ====&lt;br /&gt;
*[[User:Agingh1pster|agingh1pster]]: I don't see api for getting the status of the agent upgrades&lt;br /&gt;
*[[User:Esp|esp]]: good point.  I was gonna add that in but forgot.  it would have to be a management API addition if we are really gonna hide the upgrade status from the user&lt;br /&gt;
*[[User:Esp|esp]]: We can update the existing /mgmt/instance route (the one that shows the details of the instance).  In addition to this we can create a new route that will allow an admin to list all the failed upgrades.  Need to document what this might look like.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Trove-Guest-Agent-Upgrades&amp;diff=45096</id>
		<title>Trove-Guest-Agent-Upgrades</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Trove-Guest-Agent-Upgrades&amp;diff=45096"/>
				<updated>2014-03-10T03:40:24Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Upgrade Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Introduction ===&lt;br /&gt;
This article describes the design for Guest Agent upgrades in Trove.  Currently Guest Agent upgrades are implemented through external deployment tools that push new code to each guest instance.  Usually the same deployment tools for upgrading the control plane handles guest agent upgrades.  This can create a bottle neck on the deployment infrastructure.&lt;br /&gt;
&lt;br /&gt;
==== Blueprint ==== &lt;br /&gt;
https://blueprints.launchpad.net/trove/+spec/upgrade-guestagent&lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
# Version the RPC API and tie it to the API version (see nova for examples)&lt;br /&gt;
#* This is to help prevent non-backward compatibility between the Trove API and the guest but is not necessarily a dependency for upgrades &lt;br /&gt;
# Implement a notification based upgrade path for guest agent&lt;br /&gt;
# Allow for different upgrade strategies (swift, jenkins, local disk, rysnc, etc)&lt;br /&gt;
# Avoid upgrading during times when guest agents are doing other work (i.e. backups, resize, restart)&lt;br /&gt;
#* This doesn't seem to be a concern given that the agent can only handle a single message at a time&lt;br /&gt;
# Reduce overall downtime during upgrade cycles&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
New properties will be added to the trove configs to allow:&lt;br /&gt;
* Enabling/Disabling Guest Agent Upgrades&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
guest_automatic_updates: False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Specifying an upgrade strategy&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
guest_upgrade_strategy: swift&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Affected Trove Components ====&lt;br /&gt;
* python-troveclient (optional)&lt;br /&gt;
* trove admin API&lt;br /&gt;
* guest agent&lt;br /&gt;
&lt;br /&gt;
==== Schema Changes ====&lt;br /&gt;
[[File:Upgrades.png]]&lt;br /&gt;
&lt;br /&gt;
==== Workflow ====&lt;br /&gt;
 1. An external process (outside of Trove) will create an upgrade package or artifact&lt;br /&gt;
 * This process will be mapped to a defined strategy in the Guest Agent.&lt;br /&gt;
 * It's possible the admin may want to trigger an automatic backup at this point&lt;br /&gt;
[[File:Workflow0.png]]&lt;br /&gt;
 2. An Admin user will notify a Guest Agent that an upgrade is available through the Trove Management API&lt;br /&gt;
 3. A new upgrade record will be create in the DB for the request.&lt;br /&gt;
 4. The Guest Agent will process the RPC message created by the API call and handle the upgrade accordingly&lt;br /&gt;
[[File:Workflow1.png]] &lt;br /&gt;
&lt;br /&gt;
 5. The Guest Agent will download the package from the location specified in the RPC message&lt;br /&gt;
[[File:Workflow2.png]]&lt;br /&gt;
&lt;br /&gt;
==== Guest Agent Message Handling ====&lt;br /&gt;
 1. Guest agent will handle the message for upgrading to a particular version&lt;br /&gt;
 2. Simple validation on the message will occur after the message is parsed &lt;br /&gt;
     a. Check the strategy type, check to see if guest_automatic_updates is enabled&lt;br /&gt;
     b. Check the location of the package in the message and whether it exists&lt;br /&gt;
 3. Update the upgrade 'event' in the Trove upgrades database table&lt;br /&gt;
 4. Execute or process the message&lt;br /&gt;
&lt;br /&gt;
[[File: Message_handling.png]]&lt;br /&gt;
&lt;br /&gt;
==== Guest Agent Process Upgrade Message ====&lt;br /&gt;
 1. Choose the correct strategy to process the upgrade&lt;br /&gt;
 2. Download the file from the given location (retry n-times before Failing)&lt;br /&gt;
 3. Decrypt the package&lt;br /&gt;
 4. Validate the package&lt;br /&gt;
     a. check size, check version, checksum, format etc&lt;br /&gt;
 5. Install the package (pip install)&lt;br /&gt;
 6. Restart (retry n-times before Failing)&lt;br /&gt;
&lt;br /&gt;
[[File: Ga_processing.png]]&lt;br /&gt;
&lt;br /&gt;
 * on start up update the status of the upgrade to SUCCESS&lt;br /&gt;
 ** if start up fails try to install the last known working version, record the status as FAILED&lt;br /&gt;
     I can see this being a config value that gets updated or a file that is written to disk on the instance&lt;br /&gt;
&lt;br /&gt;
==== Trove Management REST API ====&lt;br /&gt;
Create a notification request to upgrade a trove guest agent&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Relative URL:  /v1.0/{admin_tenant_id}/mgmt/upgrades&lt;br /&gt;
&lt;br /&gt;
HTTP Method: POST&lt;br /&gt;
&lt;br /&gt;
HTTP Headers:&lt;br /&gt;
  Accept: application/json&lt;br /&gt;
  Content-Type: application/json &lt;br /&gt;
  User-Agent: python-troveclient &lt;br /&gt;
  X-Auth-Project-Id: tenant_name &lt;br /&gt;
  X-Auth-Token: HPAuth10_xxxx &lt;br /&gt;
&lt;br /&gt;
HTTP Post Body&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;instance_id&amp;quot;: '&amp;lt;UUID&amp;gt;'&lt;br /&gt;
    &amp;quot;instance_version&amp;quot;: &amp;quot;v1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;strategy&amp;quot;: &amp;quot;swift&amp;quot;,&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;http://swift/tenant/container/trove-guestagent-v1.0.1.tar.gz&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Note: Will need a call return a list of upgrades filtered by state and/or instance_id&lt;br /&gt;
&lt;br /&gt;
==== Trove RPC API ====&lt;br /&gt;
unpacked context&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   ...&lt;br /&gt;
    &amp;quot;is_admin&amp;quot;: True,&lt;br /&gt;
    &amp;quot;tenant&amp;quot;:&amp;quot;&amp;lt;SANITIZED&amp;gt;&amp;quot;,&lt;br /&gt;
    &amp;quot;method&amp;quot;: &amp;quot;upgrade&amp;quot;,&lt;br /&gt;
    &amp;quot;instance_id&amp;quot;: '&amp;lt;UUID&amp;gt;'&lt;br /&gt;
    &amp;quot;instance_version&amp;quot;: &amp;quot;v1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;strategy&amp;quot;: &amp;quot;swift&amp;quot;,&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;http://swift/tenant/container/trove-guestagent-v1.0.1.tar.gz&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Versioning and Package Validation ====&lt;br /&gt;
* The Guest Agent will be responsible for validating the package before upgrading&lt;br /&gt;
&lt;br /&gt;
==== Scenarios ====&lt;br /&gt;
# What happens when the Guest Agent is in a non-upgradeable state?  (backup/restore, resize, restart, error)&lt;br /&gt;
#* The message should remain in the queue until the next time the Guest Agent checks and the state is in 'Running'&lt;br /&gt;
# What happens when an upgrade fails, and how does that feedback to Trove?&lt;br /&gt;
#* Record it as a FAIL in the Trove Database, Admin will have to query.&lt;br /&gt;
# Can we rollback or install a previous version?&lt;br /&gt;
&lt;br /&gt;
=== Feedback/Discussion ===&lt;br /&gt;
&lt;br /&gt;
==== Configs ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): &amp;quot;New properties will be added to the trove configs to allow Enabling/Disabling Guest Agent Upgrades and Specifying an upgrade strategy&amp;quot;. Is it necessary to add a CONF switch for either of these? If the cloud admin doesn't want to initiate a guestagent upgrade via API/RPC, then as long as they don't issue the request, all is well. Or are you suggesting that users can initiate their own upgrades (i.e. this operation isn't limited to the admin role)? As for the upgrade strategy (e.g. &amp;quot;swift&amp;quot;), this is already in the message payload in your examples, so why the need for the CONF? Is the idea to mimic the 'datastore_registry_ext' concept to allow providers to write and add their own strategies?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): We could leave out the CONF flag for disable/enable upgrades.  I'm a little hesitant about removing the strategy key/value though. For instance if for some reason we have different strategies for upgrading guests in dev or staging one day.  For now I think we are only considering Admin users for sending upgrade notifications.  I think the workflow might resemble the restore from backup concept a little more but yes we want to allow folks to extend this to define their own strategies.  &lt;br /&gt;
*[[User:Esp|esp]]: I thought of another use for the CONF switch to enable/disable.  We might want to use it for disabling REST API calls that are specific to upgrades.&lt;br /&gt;
*[[User:GrapeX|grapex]]: Just to make sure, when we talk about a strategy for the guest upgrade this will be on the Trove side, yes?&lt;br /&gt;
&lt;br /&gt;
==== Supported Packaging Types ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Is there a short list of packaging schemes everyone believes we should support? In Austin it looked like some were ok with a simple &amp;quot;pip install&amp;quot;, whereas others had strict requirements on package signing, crypto, etc.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): Initially we are looking at creating a tarball that would include all dependencies to avoid pulling down other packages.  We could come up with a list though.  (pypi, tar.gz, etc)  The crypto piece should be optional and part of a strategy.  The concern was having credentials unencrypted in swift.&lt;br /&gt;
* [[User:GrapeX|grapex]] I think the rule should be that we keep things flexible enough that operators can use whatever upgrade strategies works best for them. Whatever goes into CI should be very simple IMO.&lt;br /&gt;
&lt;br /&gt;
==== Upgrade Status ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): It seems this is inferred, but since it's not explicitly mentioned I'll ask: There is no introduction of a new INSTANCE state (e.g. ACTIVE, BACKUP), correct? To take it a step further then, the idea would be that the user sees ACTIVE, despite a possible in-flight upgrade? In the case of an upgrade failure, would the user still see ACTIVE but we'd have FAILED recorded in the upgrade table?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC):  The thought was to 'hide' the upgrade status from the user although I'm not sure we decided that yet.  That being said I think we need to create a set of upgrade states that are granular enough to handle various failures.  For example if the instance can't talk to swift due to network problem we could just fail/abort the upgrade.  An Admin will have to come back and retry again later.  The user should not see any issues.  But if we botch the install and the guest can't start at all then we got a big problem that the user will see.&lt;br /&gt;
* [[User:GrapeX|grapex]] The table is called &amp;quot;upgrade&amp;quot; but it seems to me the more useful bit of information to store in the database is the current version of the guest agent as reported by the agent itself during it's heartbeat / status update. We could store that along with a new status which would be, more generally, the status of the guest agent itself. This new status would be set to error states if the upgrade was botched, which the user wouldn't see but admins could peek at. Why not call the table &amp;quot;agent_status&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
==== Trove Database Schema ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Every upgrade attempt will be a new record in the upgrades table, or will each instance have a dedicated row? I would much prefer the former.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): I was thinking a new record for each upgrade event.  Kind of like an audit trail or upgrade history table.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): What is the purpose of deleted/deleted_at for upgrades? In the scenario of a botched upgrade, a new upgrade request should be fired, incurring a new row to be inserted.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): The deleted flag was put there to stay consistent with some of the existing tables.  In the event that we might want to purge the table that would support a logical delete for a batch delete job that would run once in a while.  I'd be willing to drop both of these columns as I can't see a scenario for it at the moment.&lt;br /&gt;
&lt;br /&gt;
==== Rollback Support ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): As for whether a rollback to a previous install should be supported: that's likely contingent upon the packaging schemes supported.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): Agreed.  This one is a bit weird.  It was my attempt to address the question of what happens when we upgrade and the guest can't start.  My current approach was to write to a file (like the config file or a new one) when an upgrade is successful to keep track of that last known running version.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[User:Agingh1pster|agingh1pster]]: question 2 - what happens if a agent never upgrades.  Is the instance considered dead?&lt;br /&gt;
* [[User:Esp|esp]]: I think that if we got into a situation where a Guest Agent failed to update (indefinitely)  the cloud admin would have to figure out something else.  i.e. contact the user, migrate the instance via backup/restore etc.&lt;br /&gt;
&lt;br /&gt;
==== Instance Version ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Can you elaborate on the instance_version logic?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): This was kind of a convenience thing to be able to track the instance_version through an entire upgrade cycle.  It saves us from parsing the name of the package/file.  At first I was thinking, maybe you need to be at a particular version before upgrading.  So if for some reason a guest agent is at version 1, version 2 failed but the next upgrade available is version 3.  Not sure this is a valid case or not, especially if we just make sure that version 3 has everything it needs from version 1 and 2.   Not to mention that if discover that version 2 was crap and we want to install version 3 instead that would definitely not be valid.&lt;br /&gt;
&lt;br /&gt;
==== Trove Managment API ====&lt;br /&gt;
*[[User:Agingh1pster|agingh1pster]]: I don't see api for getting the status of the agent upgrades&lt;br /&gt;
*[[User:Esp|esp]]: good point.  I was gonna add that in but forgot.  it would have to be a management API addition if we are really gonna hide the upgrade status from the user&lt;br /&gt;
*[[User:Esp|esp]]: We can update the existing /mgmt/instance route (the one that shows the details of the instance).  In addition to this we can create a new route that will allow an admin to list all the failed upgrades.  Need to document what this might look like.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Trove-Guest-Agent-Upgrades&amp;diff=45095</id>
		<title>Trove-Guest-Agent-Upgrades</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Trove-Guest-Agent-Upgrades&amp;diff=45095"/>
				<updated>2014-03-10T03:35:17Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Supported Packaging Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Introduction ===&lt;br /&gt;
This article describes the design for Guest Agent upgrades in Trove.  Currently Guest Agent upgrades are implemented through external deployment tools that push new code to each guest instance.  Usually the same deployment tools for upgrading the control plane handles guest agent upgrades.  This can create a bottle neck on the deployment infrastructure.&lt;br /&gt;
&lt;br /&gt;
==== Blueprint ==== &lt;br /&gt;
https://blueprints.launchpad.net/trove/+spec/upgrade-guestagent&lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
# Version the RPC API and tie it to the API version (see nova for examples)&lt;br /&gt;
#* This is to help prevent non-backward compatibility between the Trove API and the guest but is not necessarily a dependency for upgrades &lt;br /&gt;
# Implement a notification based upgrade path for guest agent&lt;br /&gt;
# Allow for different upgrade strategies (swift, jenkins, local disk, rysnc, etc)&lt;br /&gt;
# Avoid upgrading during times when guest agents are doing other work (i.e. backups, resize, restart)&lt;br /&gt;
#* This doesn't seem to be a concern given that the agent can only handle a single message at a time&lt;br /&gt;
# Reduce overall downtime during upgrade cycles&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
New properties will be added to the trove configs to allow:&lt;br /&gt;
* Enabling/Disabling Guest Agent Upgrades&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
guest_automatic_updates: False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Specifying an upgrade strategy&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
guest_upgrade_strategy: swift&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Affected Trove Components ====&lt;br /&gt;
* python-troveclient (optional)&lt;br /&gt;
* trove admin API&lt;br /&gt;
* guest agent&lt;br /&gt;
&lt;br /&gt;
==== Schema Changes ====&lt;br /&gt;
[[File:Upgrades.png]]&lt;br /&gt;
&lt;br /&gt;
==== Workflow ====&lt;br /&gt;
 1. An external process (outside of Trove) will create an upgrade package or artifact&lt;br /&gt;
 * This process will be mapped to a defined strategy in the Guest Agent.&lt;br /&gt;
 * It's possible the admin may want to trigger an automatic backup at this point&lt;br /&gt;
[[File:Workflow0.png]]&lt;br /&gt;
 2. An Admin user will notify a Guest Agent that an upgrade is available through the Trove Management API&lt;br /&gt;
 3. A new upgrade record will be create in the DB for the request.&lt;br /&gt;
 4. The Guest Agent will process the RPC message created by the API call and handle the upgrade accordingly&lt;br /&gt;
[[File:Workflow1.png]] &lt;br /&gt;
&lt;br /&gt;
 5. The Guest Agent will download the package from the location specified in the RPC message&lt;br /&gt;
[[File:Workflow2.png]]&lt;br /&gt;
&lt;br /&gt;
==== Guest Agent Message Handling ====&lt;br /&gt;
 1. Guest agent will handle the message for upgrading to a particular version&lt;br /&gt;
 2. Simple validation on the message will occur after the message is parsed &lt;br /&gt;
     a. Check the strategy type, check to see if guest_automatic_updates is enabled&lt;br /&gt;
     b. Check the location of the package in the message and whether it exists&lt;br /&gt;
 3. Update the upgrade 'event' in the Trove upgrades database table&lt;br /&gt;
 4. Execute or process the message&lt;br /&gt;
&lt;br /&gt;
[[File: Message_handling.png]]&lt;br /&gt;
&lt;br /&gt;
==== Guest Agent Process Upgrade Message ====&lt;br /&gt;
 1. Choose the correct strategy to process the upgrade&lt;br /&gt;
 2. Download the file from the given location (retry n-times before Failing)&lt;br /&gt;
 3. Decrypt the package&lt;br /&gt;
 4. Validate the package&lt;br /&gt;
     a. check size, check version, checksum, format etc&lt;br /&gt;
 5. Install the package (pip install)&lt;br /&gt;
 6. Restart (retry n-times before Failing)&lt;br /&gt;
&lt;br /&gt;
[[File: Ga_processing.png]]&lt;br /&gt;
&lt;br /&gt;
 * on start up update the status of the upgrade to SUCCESS&lt;br /&gt;
 ** if start up fails try to install the last known working version, record the status as FAILED&lt;br /&gt;
     I can see this being a config value that gets updated or a file that is written to disk on the instance&lt;br /&gt;
&lt;br /&gt;
==== Trove Management REST API ====&lt;br /&gt;
Create a notification request to upgrade a trove guest agent&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Relative URL:  /v1.0/{admin_tenant_id}/mgmt/upgrades&lt;br /&gt;
&lt;br /&gt;
HTTP Method: POST&lt;br /&gt;
&lt;br /&gt;
HTTP Headers:&lt;br /&gt;
  Accept: application/json&lt;br /&gt;
  Content-Type: application/json &lt;br /&gt;
  User-Agent: python-troveclient &lt;br /&gt;
  X-Auth-Project-Id: tenant_name &lt;br /&gt;
  X-Auth-Token: HPAuth10_xxxx &lt;br /&gt;
&lt;br /&gt;
HTTP Post Body&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;instance_id&amp;quot;: '&amp;lt;UUID&amp;gt;'&lt;br /&gt;
    &amp;quot;instance_version&amp;quot;: &amp;quot;v1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;strategy&amp;quot;: &amp;quot;swift&amp;quot;,&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;http://swift/tenant/container/trove-guestagent-v1.0.1.tar.gz&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Note: Will need a call return a list of upgrades filtered by state and/or instance_id&lt;br /&gt;
&lt;br /&gt;
==== Trove RPC API ====&lt;br /&gt;
unpacked context&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   ...&lt;br /&gt;
    &amp;quot;is_admin&amp;quot;: True,&lt;br /&gt;
    &amp;quot;tenant&amp;quot;:&amp;quot;&amp;lt;SANITIZED&amp;gt;&amp;quot;,&lt;br /&gt;
    &amp;quot;method&amp;quot;: &amp;quot;upgrade&amp;quot;,&lt;br /&gt;
    &amp;quot;instance_id&amp;quot;: '&amp;lt;UUID&amp;gt;'&lt;br /&gt;
    &amp;quot;instance_version&amp;quot;: &amp;quot;v1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;strategy&amp;quot;: &amp;quot;swift&amp;quot;,&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;http://swift/tenant/container/trove-guestagent-v1.0.1.tar.gz&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Versioning and Package Validation ====&lt;br /&gt;
* The Guest Agent will be responsible for validating the package before upgrading&lt;br /&gt;
&lt;br /&gt;
==== Scenarios ====&lt;br /&gt;
# What happens when the Guest Agent is in a non-upgradeable state?  (backup/restore, resize, restart, error)&lt;br /&gt;
#* The message should remain in the queue until the next time the Guest Agent checks and the state is in 'Running'&lt;br /&gt;
# What happens when an upgrade fails, and how does that feedback to Trove?&lt;br /&gt;
#* Record it as a FAIL in the Trove Database, Admin will have to query.&lt;br /&gt;
# Can we rollback or install a previous version?&lt;br /&gt;
&lt;br /&gt;
=== Feedback/Discussion ===&lt;br /&gt;
&lt;br /&gt;
==== Configs ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): &amp;quot;New properties will be added to the trove configs to allow Enabling/Disabling Guest Agent Upgrades and Specifying an upgrade strategy&amp;quot;. Is it necessary to add a CONF switch for either of these? If the cloud admin doesn't want to initiate a guestagent upgrade via API/RPC, then as long as they don't issue the request, all is well. Or are you suggesting that users can initiate their own upgrades (i.e. this operation isn't limited to the admin role)? As for the upgrade strategy (e.g. &amp;quot;swift&amp;quot;), this is already in the message payload in your examples, so why the need for the CONF? Is the idea to mimic the 'datastore_registry_ext' concept to allow providers to write and add their own strategies?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): We could leave out the CONF flag for disable/enable upgrades.  I'm a little hesitant about removing the strategy key/value though. For instance if for some reason we have different strategies for upgrading guests in dev or staging one day.  For now I think we are only considering Admin users for sending upgrade notifications.  I think the workflow might resemble the restore from backup concept a little more but yes we want to allow folks to extend this to define their own strategies.  &lt;br /&gt;
*[[User:Esp|esp]]: I thought of another use for the CONF switch to enable/disable.  We might want to use it for disabling REST API calls that are specific to upgrades.&lt;br /&gt;
*[[User:GrapeX|grapex]]: Just to make sure, when we talk about a strategy for the guest upgrade this will be on the Trove side, yes?&lt;br /&gt;
&lt;br /&gt;
==== Supported Packaging Types ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Is there a short list of packaging schemes everyone believes we should support? In Austin it looked like some were ok with a simple &amp;quot;pip install&amp;quot;, whereas others had strict requirements on package signing, crypto, etc.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): Initially we are looking at creating a tarball that would include all dependencies to avoid pulling down other packages.  We could come up with a list though.  (pypi, tar.gz, etc)  The crypto piece should be optional and part of a strategy.  The concern was having credentials unencrypted in swift.&lt;br /&gt;
* [[User:GrapeX|grapex]] I think the rule should be that we keep things flexible enough that operators can use whatever upgrade strategies works best for them. Whatever goes into CI should be very simple IMO.&lt;br /&gt;
&lt;br /&gt;
==== Upgrade Status ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): It seems this is inferred, but since it's not explicitly mentioned I'll ask: There is no introduction of a new INSTANCE state (e.g. ACTIVE, BACKUP), correct? To take it a step further then, the idea would be that the user sees ACTIVE, despite a possible in-flight upgrade? In the case of an upgrade failure, would the user still see ACTIVE but we'd have FAILED recorded in the upgrade table?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC):  The thought was to 'hide' the upgrade status from the user although I'm not sure we decided that yet.  That being said I think we need to create a set of upgrade states that are granular enough to handle various failures.  For example if the instance can't talk to swift due to network problem we could just fail/abort the upgrade.  An Admin will have to come back and retry again later.  The user should not see any issues.  But if we botch the install and the guest can't start at all then we got a big problem that the user will see.&lt;br /&gt;
&lt;br /&gt;
==== Trove Database Schema ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Every upgrade attempt will be a new record in the upgrades table, or will each instance have a dedicated row? I would much prefer the former.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): I was thinking a new record for each upgrade event.  Kind of like an audit trail or upgrade history table.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): What is the purpose of deleted/deleted_at for upgrades? In the scenario of a botched upgrade, a new upgrade request should be fired, incurring a new row to be inserted.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): The deleted flag was put there to stay consistent with some of the existing tables.  In the event that we might want to purge the table that would support a logical delete for a batch delete job that would run once in a while.  I'd be willing to drop both of these columns as I can't see a scenario for it at the moment.&lt;br /&gt;
&lt;br /&gt;
==== Rollback Support ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): As for whether a rollback to a previous install should be supported: that's likely contingent upon the packaging schemes supported.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): Agreed.  This one is a bit weird.  It was my attempt to address the question of what happens when we upgrade and the guest can't start.  My current approach was to write to a file (like the config file or a new one) when an upgrade is successful to keep track of that last known running version.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[User:Agingh1pster|agingh1pster]]: question 2 - what happens if a agent never upgrades.  Is the instance considered dead?&lt;br /&gt;
* [[User:Esp|esp]]: I think that if we got into a situation where a Guest Agent failed to update (indefinitely)  the cloud admin would have to figure out something else.  i.e. contact the user, migrate the instance via backup/restore etc.&lt;br /&gt;
&lt;br /&gt;
==== Instance Version ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Can you elaborate on the instance_version logic?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): This was kind of a convenience thing to be able to track the instance_version through an entire upgrade cycle.  It saves us from parsing the name of the package/file.  At first I was thinking, maybe you need to be at a particular version before upgrading.  So if for some reason a guest agent is at version 1, version 2 failed but the next upgrade available is version 3.  Not sure this is a valid case or not, especially if we just make sure that version 3 has everything it needs from version 1 and 2.   Not to mention that if discover that version 2 was crap and we want to install version 3 instead that would definitely not be valid.&lt;br /&gt;
&lt;br /&gt;
==== Trove Managment API ====&lt;br /&gt;
*[[User:Agingh1pster|agingh1pster]]: I don't see api for getting the status of the agent upgrades&lt;br /&gt;
*[[User:Esp|esp]]: good point.  I was gonna add that in but forgot.  it would have to be a management API addition if we are really gonna hide the upgrade status from the user&lt;br /&gt;
*[[User:Esp|esp]]: We can update the existing /mgmt/instance route (the one that shows the details of the instance).  In addition to this we can create a new route that will allow an admin to list all the failed upgrades.  Need to document what this might look like.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Trove-Guest-Agent-Upgrades&amp;diff=45094</id>
		<title>Trove-Guest-Agent-Upgrades</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Trove-Guest-Agent-Upgrades&amp;diff=45094"/>
				<updated>2014-03-10T03:33:28Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Configs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Introduction ===&lt;br /&gt;
This article describes the design for Guest Agent upgrades in Trove.  Currently Guest Agent upgrades are implemented through external deployment tools that push new code to each guest instance.  Usually the same deployment tools for upgrading the control plane handles guest agent upgrades.  This can create a bottle neck on the deployment infrastructure.&lt;br /&gt;
&lt;br /&gt;
==== Blueprint ==== &lt;br /&gt;
https://blueprints.launchpad.net/trove/+spec/upgrade-guestagent&lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
# Version the RPC API and tie it to the API version (see nova for examples)&lt;br /&gt;
#* This is to help prevent non-backward compatibility between the Trove API and the guest but is not necessarily a dependency for upgrades &lt;br /&gt;
# Implement a notification based upgrade path for guest agent&lt;br /&gt;
# Allow for different upgrade strategies (swift, jenkins, local disk, rysnc, etc)&lt;br /&gt;
# Avoid upgrading during times when guest agents are doing other work (i.e. backups, resize, restart)&lt;br /&gt;
#* This doesn't seem to be a concern given that the agent can only handle a single message at a time&lt;br /&gt;
# Reduce overall downtime during upgrade cycles&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
New properties will be added to the trove configs to allow:&lt;br /&gt;
* Enabling/Disabling Guest Agent Upgrades&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
guest_automatic_updates: False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Specifying an upgrade strategy&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
guest_upgrade_strategy: swift&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Affected Trove Components ====&lt;br /&gt;
* python-troveclient (optional)&lt;br /&gt;
* trove admin API&lt;br /&gt;
* guest agent&lt;br /&gt;
&lt;br /&gt;
==== Schema Changes ====&lt;br /&gt;
[[File:Upgrades.png]]&lt;br /&gt;
&lt;br /&gt;
==== Workflow ====&lt;br /&gt;
 1. An external process (outside of Trove) will create an upgrade package or artifact&lt;br /&gt;
 * This process will be mapped to a defined strategy in the Guest Agent.&lt;br /&gt;
 * It's possible the admin may want to trigger an automatic backup at this point&lt;br /&gt;
[[File:Workflow0.png]]&lt;br /&gt;
 2. An Admin user will notify a Guest Agent that an upgrade is available through the Trove Management API&lt;br /&gt;
 3. A new upgrade record will be create in the DB for the request.&lt;br /&gt;
 4. The Guest Agent will process the RPC message created by the API call and handle the upgrade accordingly&lt;br /&gt;
[[File:Workflow1.png]] &lt;br /&gt;
&lt;br /&gt;
 5. The Guest Agent will download the package from the location specified in the RPC message&lt;br /&gt;
[[File:Workflow2.png]]&lt;br /&gt;
&lt;br /&gt;
==== Guest Agent Message Handling ====&lt;br /&gt;
 1. Guest agent will handle the message for upgrading to a particular version&lt;br /&gt;
 2. Simple validation on the message will occur after the message is parsed &lt;br /&gt;
     a. Check the strategy type, check to see if guest_automatic_updates is enabled&lt;br /&gt;
     b. Check the location of the package in the message and whether it exists&lt;br /&gt;
 3. Update the upgrade 'event' in the Trove upgrades database table&lt;br /&gt;
 4. Execute or process the message&lt;br /&gt;
&lt;br /&gt;
[[File: Message_handling.png]]&lt;br /&gt;
&lt;br /&gt;
==== Guest Agent Process Upgrade Message ====&lt;br /&gt;
 1. Choose the correct strategy to process the upgrade&lt;br /&gt;
 2. Download the file from the given location (retry n-times before Failing)&lt;br /&gt;
 3. Decrypt the package&lt;br /&gt;
 4. Validate the package&lt;br /&gt;
     a. check size, check version, checksum, format etc&lt;br /&gt;
 5. Install the package (pip install)&lt;br /&gt;
 6. Restart (retry n-times before Failing)&lt;br /&gt;
&lt;br /&gt;
[[File: Ga_processing.png]]&lt;br /&gt;
&lt;br /&gt;
 * on start up update the status of the upgrade to SUCCESS&lt;br /&gt;
 ** if start up fails try to install the last known working version, record the status as FAILED&lt;br /&gt;
     I can see this being a config value that gets updated or a file that is written to disk on the instance&lt;br /&gt;
&lt;br /&gt;
==== Trove Management REST API ====&lt;br /&gt;
Create a notification request to upgrade a trove guest agent&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Relative URL:  /v1.0/{admin_tenant_id}/mgmt/upgrades&lt;br /&gt;
&lt;br /&gt;
HTTP Method: POST&lt;br /&gt;
&lt;br /&gt;
HTTP Headers:&lt;br /&gt;
  Accept: application/json&lt;br /&gt;
  Content-Type: application/json &lt;br /&gt;
  User-Agent: python-troveclient &lt;br /&gt;
  X-Auth-Project-Id: tenant_name &lt;br /&gt;
  X-Auth-Token: HPAuth10_xxxx &lt;br /&gt;
&lt;br /&gt;
HTTP Post Body&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;instance_id&amp;quot;: '&amp;lt;UUID&amp;gt;'&lt;br /&gt;
    &amp;quot;instance_version&amp;quot;: &amp;quot;v1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;strategy&amp;quot;: &amp;quot;swift&amp;quot;,&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;http://swift/tenant/container/trove-guestagent-v1.0.1.tar.gz&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Note: Will need a call return a list of upgrades filtered by state and/or instance_id&lt;br /&gt;
&lt;br /&gt;
==== Trove RPC API ====&lt;br /&gt;
unpacked context&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   ...&lt;br /&gt;
    &amp;quot;is_admin&amp;quot;: True,&lt;br /&gt;
    &amp;quot;tenant&amp;quot;:&amp;quot;&amp;lt;SANITIZED&amp;gt;&amp;quot;,&lt;br /&gt;
    &amp;quot;method&amp;quot;: &amp;quot;upgrade&amp;quot;,&lt;br /&gt;
    &amp;quot;instance_id&amp;quot;: '&amp;lt;UUID&amp;gt;'&lt;br /&gt;
    &amp;quot;instance_version&amp;quot;: &amp;quot;v1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;strategy&amp;quot;: &amp;quot;swift&amp;quot;,&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;http://swift/tenant/container/trove-guestagent-v1.0.1.tar.gz&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Versioning and Package Validation ====&lt;br /&gt;
* The Guest Agent will be responsible for validating the package before upgrading&lt;br /&gt;
&lt;br /&gt;
==== Scenarios ====&lt;br /&gt;
# What happens when the Guest Agent is in a non-upgradeable state?  (backup/restore, resize, restart, error)&lt;br /&gt;
#* The message should remain in the queue until the next time the Guest Agent checks and the state is in 'Running'&lt;br /&gt;
# What happens when an upgrade fails, and how does that feedback to Trove?&lt;br /&gt;
#* Record it as a FAIL in the Trove Database, Admin will have to query.&lt;br /&gt;
# Can we rollback or install a previous version?&lt;br /&gt;
&lt;br /&gt;
=== Feedback/Discussion ===&lt;br /&gt;
&lt;br /&gt;
==== Configs ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): &amp;quot;New properties will be added to the trove configs to allow Enabling/Disabling Guest Agent Upgrades and Specifying an upgrade strategy&amp;quot;. Is it necessary to add a CONF switch for either of these? If the cloud admin doesn't want to initiate a guestagent upgrade via API/RPC, then as long as they don't issue the request, all is well. Or are you suggesting that users can initiate their own upgrades (i.e. this operation isn't limited to the admin role)? As for the upgrade strategy (e.g. &amp;quot;swift&amp;quot;), this is already in the message payload in your examples, so why the need for the CONF? Is the idea to mimic the 'datastore_registry_ext' concept to allow providers to write and add their own strategies?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): We could leave out the CONF flag for disable/enable upgrades.  I'm a little hesitant about removing the strategy key/value though. For instance if for some reason we have different strategies for upgrading guests in dev or staging one day.  For now I think we are only considering Admin users for sending upgrade notifications.  I think the workflow might resemble the restore from backup concept a little more but yes we want to allow folks to extend this to define their own strategies.  &lt;br /&gt;
*[[User:Esp|esp]]: I thought of another use for the CONF switch to enable/disable.  We might want to use it for disabling REST API calls that are specific to upgrades.&lt;br /&gt;
*[[User:GrapeX|grapex]]: Just to make sure, when we talk about a strategy for the guest upgrade this will be on the Trove side, yes?&lt;br /&gt;
&lt;br /&gt;
==== Supported Packaging Types ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Is there a short list of packaging schemes everyone believes we should support? In Austin it looked like some were ok with a simple &amp;quot;pip install&amp;quot;, whereas others had strict requirements on package signing, crypto, etc.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): Initially we are looking at creating a tarball that would include all dependencies to avoid pulling down other packages.  We could come up with a list though.  (pypi, tar.gz, etc)  The crypto piece should be optional and part of a strategy.  The concern was having credentials unencrypted in swift.&lt;br /&gt;
&lt;br /&gt;
==== Upgrade Status ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): It seems this is inferred, but since it's not explicitly mentioned I'll ask: There is no introduction of a new INSTANCE state (e.g. ACTIVE, BACKUP), correct? To take it a step further then, the idea would be that the user sees ACTIVE, despite a possible in-flight upgrade? In the case of an upgrade failure, would the user still see ACTIVE but we'd have FAILED recorded in the upgrade table?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC):  The thought was to 'hide' the upgrade status from the user although I'm not sure we decided that yet.  That being said I think we need to create a set of upgrade states that are granular enough to handle various failures.  For example if the instance can't talk to swift due to network problem we could just fail/abort the upgrade.  An Admin will have to come back and retry again later.  The user should not see any issues.  But if we botch the install and the guest can't start at all then we got a big problem that the user will see.&lt;br /&gt;
&lt;br /&gt;
==== Trove Database Schema ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Every upgrade attempt will be a new record in the upgrades table, or will each instance have a dedicated row? I would much prefer the former.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): I was thinking a new record for each upgrade event.  Kind of like an audit trail or upgrade history table.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): What is the purpose of deleted/deleted_at for upgrades? In the scenario of a botched upgrade, a new upgrade request should be fired, incurring a new row to be inserted.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): The deleted flag was put there to stay consistent with some of the existing tables.  In the event that we might want to purge the table that would support a logical delete for a batch delete job that would run once in a while.  I'd be willing to drop both of these columns as I can't see a scenario for it at the moment.&lt;br /&gt;
&lt;br /&gt;
==== Rollback Support ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): As for whether a rollback to a previous install should be supported: that's likely contingent upon the packaging schemes supported.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): Agreed.  This one is a bit weird.  It was my attempt to address the question of what happens when we upgrade and the guest can't start.  My current approach was to write to a file (like the config file or a new one) when an upgrade is successful to keep track of that last known running version.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[User:Agingh1pster|agingh1pster]]: question 2 - what happens if a agent never upgrades.  Is the instance considered dead?&lt;br /&gt;
* [[User:Esp|esp]]: I think that if we got into a situation where a Guest Agent failed to update (indefinitely)  the cloud admin would have to figure out something else.  i.e. contact the user, migrate the instance via backup/restore etc.&lt;br /&gt;
&lt;br /&gt;
==== Instance Version ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Can you elaborate on the instance_version logic?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): This was kind of a convenience thing to be able to track the instance_version through an entire upgrade cycle.  It saves us from parsing the name of the package/file.  At first I was thinking, maybe you need to be at a particular version before upgrading.  So if for some reason a guest agent is at version 1, version 2 failed but the next upgrade available is version 3.  Not sure this is a valid case or not, especially if we just make sure that version 3 has everything it needs from version 1 and 2.   Not to mention that if discover that version 2 was crap and we want to install version 3 instead that would definitely not be valid.&lt;br /&gt;
&lt;br /&gt;
==== Trove Managment API ====&lt;br /&gt;
*[[User:Agingh1pster|agingh1pster]]: I don't see api for getting the status of the agent upgrades&lt;br /&gt;
*[[User:Esp|esp]]: good point.  I was gonna add that in but forgot.  it would have to be a management API addition if we are really gonna hide the upgrade status from the user&lt;br /&gt;
*[[User:Esp|esp]]: We can update the existing /mgmt/instance route (the one that shows the details of the instance).  In addition to this we can create a new route that will allow an admin to list all the failed upgrades.  Need to document what this might look like.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Trove-Guest-Agent-Upgrades&amp;diff=45093</id>
		<title>Trove-Guest-Agent-Upgrades</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Trove-Guest-Agent-Upgrades&amp;diff=45093"/>
				<updated>2014-03-10T03:32:13Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Configs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Introduction ===&lt;br /&gt;
This article describes the design for Guest Agent upgrades in Trove.  Currently Guest Agent upgrades are implemented through external deployment tools that push new code to each guest instance.  Usually the same deployment tools for upgrading the control plane handles guest agent upgrades.  This can create a bottle neck on the deployment infrastructure.&lt;br /&gt;
&lt;br /&gt;
==== Blueprint ==== &lt;br /&gt;
https://blueprints.launchpad.net/trove/+spec/upgrade-guestagent&lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
# Version the RPC API and tie it to the API version (see nova for examples)&lt;br /&gt;
#* This is to help prevent non-backward compatibility between the Trove API and the guest but is not necessarily a dependency for upgrades &lt;br /&gt;
# Implement a notification based upgrade path for guest agent&lt;br /&gt;
# Allow for different upgrade strategies (swift, jenkins, local disk, rysnc, etc)&lt;br /&gt;
# Avoid upgrading during times when guest agents are doing other work (i.e. backups, resize, restart)&lt;br /&gt;
#* This doesn't seem to be a concern given that the agent can only handle a single message at a time&lt;br /&gt;
# Reduce overall downtime during upgrade cycles&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
New properties will be added to the trove configs to allow:&lt;br /&gt;
* Enabling/Disabling Guest Agent Upgrades&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
guest_automatic_updates: False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Specifying an upgrade strategy&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
guest_upgrade_strategy: swift&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Affected Trove Components ====&lt;br /&gt;
* python-troveclient (optional)&lt;br /&gt;
* trove admin API&lt;br /&gt;
* guest agent&lt;br /&gt;
&lt;br /&gt;
==== Schema Changes ====&lt;br /&gt;
[[File:Upgrades.png]]&lt;br /&gt;
&lt;br /&gt;
==== Workflow ====&lt;br /&gt;
 1. An external process (outside of Trove) will create an upgrade package or artifact&lt;br /&gt;
 * This process will be mapped to a defined strategy in the Guest Agent.&lt;br /&gt;
 * It's possible the admin may want to trigger an automatic backup at this point&lt;br /&gt;
[[File:Workflow0.png]]&lt;br /&gt;
 2. An Admin user will notify a Guest Agent that an upgrade is available through the Trove Management API&lt;br /&gt;
 3. A new upgrade record will be create in the DB for the request.&lt;br /&gt;
 4. The Guest Agent will process the RPC message created by the API call and handle the upgrade accordingly&lt;br /&gt;
[[File:Workflow1.png]] &lt;br /&gt;
&lt;br /&gt;
 5. The Guest Agent will download the package from the location specified in the RPC message&lt;br /&gt;
[[File:Workflow2.png]]&lt;br /&gt;
&lt;br /&gt;
==== Guest Agent Message Handling ====&lt;br /&gt;
 1. Guest agent will handle the message for upgrading to a particular version&lt;br /&gt;
 2. Simple validation on the message will occur after the message is parsed &lt;br /&gt;
     a. Check the strategy type, check to see if guest_automatic_updates is enabled&lt;br /&gt;
     b. Check the location of the package in the message and whether it exists&lt;br /&gt;
 3. Update the upgrade 'event' in the Trove upgrades database table&lt;br /&gt;
 4. Execute or process the message&lt;br /&gt;
&lt;br /&gt;
[[File: Message_handling.png]]&lt;br /&gt;
&lt;br /&gt;
==== Guest Agent Process Upgrade Message ====&lt;br /&gt;
 1. Choose the correct strategy to process the upgrade&lt;br /&gt;
 2. Download the file from the given location (retry n-times before Failing)&lt;br /&gt;
 3. Decrypt the package&lt;br /&gt;
 4. Validate the package&lt;br /&gt;
     a. check size, check version, checksum, format etc&lt;br /&gt;
 5. Install the package (pip install)&lt;br /&gt;
 6. Restart (retry n-times before Failing)&lt;br /&gt;
&lt;br /&gt;
[[File: Ga_processing.png]]&lt;br /&gt;
&lt;br /&gt;
 * on start up update the status of the upgrade to SUCCESS&lt;br /&gt;
 ** if start up fails try to install the last known working version, record the status as FAILED&lt;br /&gt;
     I can see this being a config value that gets updated or a file that is written to disk on the instance&lt;br /&gt;
&lt;br /&gt;
==== Trove Management REST API ====&lt;br /&gt;
Create a notification request to upgrade a trove guest agent&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Relative URL:  /v1.0/{admin_tenant_id}/mgmt/upgrades&lt;br /&gt;
&lt;br /&gt;
HTTP Method: POST&lt;br /&gt;
&lt;br /&gt;
HTTP Headers:&lt;br /&gt;
  Accept: application/json&lt;br /&gt;
  Content-Type: application/json &lt;br /&gt;
  User-Agent: python-troveclient &lt;br /&gt;
  X-Auth-Project-Id: tenant_name &lt;br /&gt;
  X-Auth-Token: HPAuth10_xxxx &lt;br /&gt;
&lt;br /&gt;
HTTP Post Body&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;instance_id&amp;quot;: '&amp;lt;UUID&amp;gt;'&lt;br /&gt;
    &amp;quot;instance_version&amp;quot;: &amp;quot;v1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;strategy&amp;quot;: &amp;quot;swift&amp;quot;,&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;http://swift/tenant/container/trove-guestagent-v1.0.1.tar.gz&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Note: Will need a call return a list of upgrades filtered by state and/or instance_id&lt;br /&gt;
&lt;br /&gt;
==== Trove RPC API ====&lt;br /&gt;
unpacked context&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   ...&lt;br /&gt;
    &amp;quot;is_admin&amp;quot;: True,&lt;br /&gt;
    &amp;quot;tenant&amp;quot;:&amp;quot;&amp;lt;SANITIZED&amp;gt;&amp;quot;,&lt;br /&gt;
    &amp;quot;method&amp;quot;: &amp;quot;upgrade&amp;quot;,&lt;br /&gt;
    &amp;quot;instance_id&amp;quot;: '&amp;lt;UUID&amp;gt;'&lt;br /&gt;
    &amp;quot;instance_version&amp;quot;: &amp;quot;v1.0.1&amp;quot;,&lt;br /&gt;
    &amp;quot;strategy&amp;quot;: &amp;quot;swift&amp;quot;,&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;http://swift/tenant/container/trove-guestagent-v1.0.1.tar.gz&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Versioning and Package Validation ====&lt;br /&gt;
* The Guest Agent will be responsible for validating the package before upgrading&lt;br /&gt;
&lt;br /&gt;
==== Scenarios ====&lt;br /&gt;
# What happens when the Guest Agent is in a non-upgradeable state?  (backup/restore, resize, restart, error)&lt;br /&gt;
#* The message should remain in the queue until the next time the Guest Agent checks and the state is in 'Running'&lt;br /&gt;
# What happens when an upgrade fails, and how does that feedback to Trove?&lt;br /&gt;
#* Record it as a FAIL in the Trove Database, Admin will have to query.&lt;br /&gt;
# Can we rollback or install a previous version?&lt;br /&gt;
&lt;br /&gt;
=== Feedback/Discussion ===&lt;br /&gt;
&lt;br /&gt;
==== Configs ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): &amp;quot;New properties will be added to the trove configs to allow Enabling/Disabling Guest Agent Upgrades and Specifying an upgrade strategy&amp;quot;. Is it necessary to add a CONF switch for either of these? If the cloud admin doesn't want to initiate a guestagent upgrade via API/RPC, then as long as they don't issue the request, all is well. Or are you suggesting that users can initiate their own upgrades (i.e. this operation isn't limited to the admin role)? As for the upgrade strategy (e.g. &amp;quot;swift&amp;quot;), this is already in the message payload in your examples, so why the need for the CONF? Is the idea to mimic the 'datastore_registry_ext' concept to allow providers to write and add their own strategies?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): We could leave out the CONF flag for disable/enable upgrades.  I'm a little hesitant about removing the strategy key/value though. For instance if for some reason we have different strategies for upgrading guests in dev or staging one day.  For now I think we are only considering Admin users for sending upgrade notifications.  I think the workflow might resemble the restore from backup concept a little more but yes we want to allow folks to extend this to define their own strategies.  &lt;br /&gt;
*[[User:Esp|esp]]: I thought of another use for the CONF switch to enable/disable.  We might want to use it for disabling REST API calls that are specific to upgrades.&lt;br /&gt;
*[[User:GrapeX:grapex]]: Just to make sure, when we talk about a strategy for the guest upgrade this will be on the Trove side, yes?&lt;br /&gt;
&lt;br /&gt;
==== Supported Packaging Types ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Is there a short list of packaging schemes everyone believes we should support? In Austin it looked like some were ok with a simple &amp;quot;pip install&amp;quot;, whereas others had strict requirements on package signing, crypto, etc.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): Initially we are looking at creating a tarball that would include all dependencies to avoid pulling down other packages.  We could come up with a list though.  (pypi, tar.gz, etc)  The crypto piece should be optional and part of a strategy.  The concern was having credentials unencrypted in swift.&lt;br /&gt;
&lt;br /&gt;
==== Upgrade Status ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): It seems this is inferred, but since it's not explicitly mentioned I'll ask: There is no introduction of a new INSTANCE state (e.g. ACTIVE, BACKUP), correct? To take it a step further then, the idea would be that the user sees ACTIVE, despite a possible in-flight upgrade? In the case of an upgrade failure, would the user still see ACTIVE but we'd have FAILED recorded in the upgrade table?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC):  The thought was to 'hide' the upgrade status from the user although I'm not sure we decided that yet.  That being said I think we need to create a set of upgrade states that are granular enough to handle various failures.  For example if the instance can't talk to swift due to network problem we could just fail/abort the upgrade.  An Admin will have to come back and retry again later.  The user should not see any issues.  But if we botch the install and the guest can't start at all then we got a big problem that the user will see.&lt;br /&gt;
&lt;br /&gt;
==== Trove Database Schema ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Every upgrade attempt will be a new record in the upgrades table, or will each instance have a dedicated row? I would much prefer the former.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): I was thinking a new record for each upgrade event.  Kind of like an audit trail or upgrade history table.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): What is the purpose of deleted/deleted_at for upgrades? In the scenario of a botched upgrade, a new upgrade request should be fired, incurring a new row to be inserted.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): The deleted flag was put there to stay consistent with some of the existing tables.  In the event that we might want to purge the table that would support a logical delete for a batch delete job that would run once in a while.  I'd be willing to drop both of these columns as I can't see a scenario for it at the moment.&lt;br /&gt;
&lt;br /&gt;
==== Rollback Support ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): As for whether a rollback to a previous install should be supported: that's likely contingent upon the packaging schemes supported.&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): Agreed.  This one is a bit weird.  It was my attempt to address the question of what happens when we upgrade and the guest can't start.  My current approach was to write to a file (like the config file or a new one) when an upgrade is successful to keep track of that last known running version.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[User:Agingh1pster|agingh1pster]]: question 2 - what happens if a agent never upgrades.  Is the instance considered dead?&lt;br /&gt;
* [[User:Esp|esp]]: I think that if we got into a situation where a Guest Agent failed to update (indefinitely)  the cloud admin would have to figure out something else.  i.e. contact the user, migrate the instance via backup/restore etc.&lt;br /&gt;
&lt;br /&gt;
==== Instance Version ====&lt;br /&gt;
* [[User:Amcrn|amcrn]] ([[User talk:Amcrn|talk]]) 22:56, 4 March 2014 (UTC): Can you elaborate on the instance_version logic?&lt;br /&gt;
* [[User:Esp|esp]] ([[User talk:Esp|talk]]) 23:06, 4 March 2014 (UTC): This was kind of a convenience thing to be able to track the instance_version through an entire upgrade cycle.  It saves us from parsing the name of the package/file.  At first I was thinking, maybe you need to be at a particular version before upgrading.  So if for some reason a guest agent is at version 1, version 2 failed but the next upgrade available is version 3.  Not sure this is a valid case or not, especially if we just make sure that version 3 has everything it needs from version 1 and 2.   Not to mention that if discover that version 2 was crap and we want to install version 3 instead that would definitely not be valid.&lt;br /&gt;
&lt;br /&gt;
==== Trove Managment API ====&lt;br /&gt;
*[[User:Agingh1pster|agingh1pster]]: I don't see api for getting the status of the agent upgrades&lt;br /&gt;
*[[User:Esp|esp]]: good point.  I was gonna add that in but forgot.  it would have to be a management API addition if we are really gonna hide the upgrade status from the user&lt;br /&gt;
*[[User:Esp|esp]]: We can update the existing /mgmt/instance route (the one that shows the details of the instance).  In addition to this we can create a new route that will allow an admin to list all the failed upgrades.  Need to document what this might look like.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=OpenPGP_Web_of_Trust/Trove_Icehouse_Sprint&amp;diff=42750</id>
		<title>OpenPGP Web of Trust/Trove Icehouse Sprint</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=OpenPGP_Web_of_Trust/Trove_Icehouse_Sprint&amp;diff=42750"/>
				<updated>2014-02-19T21:06:37Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Trove Mid-Cycle Icehouse Sprint Key Signing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Trove Mid-Cycle Icehouse Sprint Key Signing =&lt;br /&gt;
If you plan to join us, please bring one or more forms of photo identification, and make sure the real name on your key corresponds to the name on your ID. If you want additional tips, see the [[OpenPGP Web of Trust#Key Signing Process|parent article]].&lt;br /&gt;
&lt;br /&gt;
If you want to bring cards or pieces of paper with your name and key fingerprint then feel free, but if you add your information to the table below we will do our best to bring paper copies (at least enough for the people who are listed here) for use as a checklist so that you won't need to use your computer. Please bring extra pens or pencils however, if you can, since there may not be many of those to go around.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ People participating in identification exchange&lt;br /&gt;
! Real Name !! IRC Nick !! Key Fingerprint !! Preferred E-mail Address&lt;br /&gt;
|-&lt;br /&gt;
| Nikhil Manchanda || slicknik || 5674 7211 71F8 CD59 F285  353D 9692 757E BCD3 D66C || nikhil@manchanda.me&lt;br /&gt;
|-&lt;br /&gt;
| Steve Leon || esmute || 02F1 F2AE C17D 66D2 1B1B  B75C EF3B 2AB9 FFF4 F9EA || steve.leon@hp.com&lt;br /&gt;
|-&lt;br /&gt;
| Justin Hopper || juice || 7463 498F 7D3B 7DB3 FFBF 4946 C02F 046F '''EA23 8CF3''' || justin.hopper@me.com&lt;br /&gt;
|-&lt;br /&gt;
|Michael Basnight||hub_cap||9D60 7133 8AFE 4FE5 45D9  625E 9E86 DD8C 3DB5 897B||mbasnight@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
|Craig Vyvial||cp16net||8975 C9C2 E879 309A 771B  7C01 046B FABA F4BD 6CC2||cp16net@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
|Dan Nguyen||esp||D9D4 F72E 82FC EFCE 1923  B140 9163 F056 AE67 298E||dan.nguyens.mail@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
|Daniel Salinas||imsplitbit||54C5 515E 71FB 1533 2332  F115 78EE B83C 964B C17C||imsplitbit@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
|Andrew Bramley||abramley||7082 00CC 9C6F 7523 C3B1 2CB4 9E67 CA34 2DAA 044F||andrew@tesora.com&lt;br /&gt;
|-&lt;br /&gt;
|Amrith Kumar||amrith||0D22 859E BE93 63F5 9DD6  35BC 5E48 849A 9D21 A29B||amrith@tesora.com&lt;br /&gt;
|-&lt;br /&gt;
|Paul Marshall||pdmars||2DCA A0AB 6DEC A717 FC80  A6D1 9F08 2613 795C B691||paul.marshall@rackspace.com&lt;br /&gt;
|-&lt;br /&gt;
|Vipul Sabhaya||vipul||B7FA 44B3 32C7 1A3A F606 1ED7 A2C7 95BC 02AE 77A2 ||vipul.sabhaya@hp.com&lt;br /&gt;
|-&lt;br /&gt;
|Doug Shelley||dougshelley66||95FB 1D3D 900D 67F9 FDA9  C378 6B34 FD08 BA22 5C73||doug@tesora.com&lt;br /&gt;
|-&lt;br /&gt;
|Joe Cruz||jcru||A266 E400 2C05 5F0F 331E 06E6 6CB6 5D33 A00B FEE9||joe.cruz@rackspace.com&lt;br /&gt;
|-&lt;br /&gt;
|Alex Tomic || atomic77 || C503 BE83 65E4 2672 8BB7  AA1B E480 0C76 EE00 E285 || tomica@usi.ch&lt;br /&gt;
|-&lt;br /&gt;
|Tim Simpson||grapex||C5A1 91E9 A6E5 AD3F 348C  E8FE 7933 CC8C 3839 0CA3||timsimpson4gmail.com&lt;br /&gt;
|-}&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Trove/IcehouseCycleMeetup&amp;diff=42577</id>
		<title>Trove/IcehouseCycleMeetup</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Trove/IcehouseCycleMeetup&amp;diff=42577"/>
				<updated>2014-02-17T20:32:39Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Event Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Database Program (Trove) - Icehouse Mid-cycle Meetup =&lt;br /&gt;
&lt;br /&gt;
== What ==&lt;br /&gt;
&lt;br /&gt;
There will be a mid-cycle meetup for ATCs (Active Technical Contributors) to the OpenStack Database program in February, 2014.  The final schedule of topics will be determined by those that attend, shortly before the event.&lt;br /&gt;
&lt;br /&gt;
== When ==&lt;br /&gt;
&lt;br /&gt;
3 days, February 19-21, 2014&lt;br /&gt;
&lt;br /&gt;
== Where ==&lt;br /&gt;
&lt;br /&gt;
 [http://capitalfactory.com/ capital factory]&lt;br /&gt;
 701 Brazos Street&lt;br /&gt;
 Suite 1601&lt;br /&gt;
 Austin, TX  78701&lt;br /&gt;
&lt;br /&gt;
== Event Details ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Time !! Wed !! Thr !! Fri&lt;br /&gt;
|-&lt;br /&gt;
| 9-11 || Meets -n- greets || State of Tempest || Conductor next steps&lt;br /&gt;
|-&lt;br /&gt;
| 11-1 || Show -n- tell icehouse || State of Heat || Agent updates&lt;br /&gt;
|-&lt;br /&gt;
| 1-3 || Current state of blueprints || Clustering/Replication || Capabilities&lt;br /&gt;
|-&lt;br /&gt;
| 3-5 || Doc support || Clustering/Replication || MVC / Pecan / WSME&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wed Night - Tesora is sponsoring an event at http://www.maggiemaesaustin.com , food and drink provided. Super fun time!!&lt;br /&gt;
&lt;br /&gt;
Thr Night - Rax/HP are sponsoring an event at http://www.buffalobilliards.com/austin/ , food and drink provided. Bring quarters!!&lt;br /&gt;
&lt;br /&gt;
=== Key Signing Party ===&lt;br /&gt;
More details at: https://wiki.openstack.org/wiki/OpenPGP_Web_of_Trust/Trove_Icehouse_Sprint&lt;br /&gt;
&lt;br /&gt;
=== Registration ===&lt;br /&gt;
** Please confirm your attendance ASAP at https://troveicehousemeetup.eventbrite.com&lt;br /&gt;
=== Hotels === &lt;br /&gt;
Hotels close to the event (closest on the top of the list). Please note the prices are subject to change and are there only because i clicked thru the reservation system for each hotel!&lt;br /&gt;
&lt;br /&gt;
* [http://www.omnihotels.com/findahotel/austindowntown.aspx omni] - from $260&lt;br /&gt;
* [http://www.driskillhotel.com/ driskill] - from $280&lt;br /&gt;
* [http://austin.intercontinental.com/ interncontinental] - from $200&lt;br /&gt;
* [http://goo.gl/maps/uLZOw We are smack dab in the middle of downtown austin] - from $???&lt;br /&gt;
&lt;br /&gt;
'''If you are in Austin and can provide a discount code / block for rooms, please contact me (hub_cap)'''&lt;br /&gt;
&lt;br /&gt;
===  Travel === &lt;br /&gt;
* Recommended airport: AUS, Austin-Bergstrom Intl&lt;br /&gt;
&lt;br /&gt;
== Things to do ==&lt;br /&gt;
&lt;br /&gt;
Most of the RAX Trove team is from austin. Just ask someone and they can help. When in doubt, talk to hub_cap.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Trove/IcehouseCycleMeetup&amp;diff=42575</id>
		<title>Trove/IcehouseCycleMeetup</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Trove/IcehouseCycleMeetup&amp;diff=42575"/>
				<updated>2014-02-17T20:31:34Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Event Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Database Program (Trove) - Icehouse Mid-cycle Meetup =&lt;br /&gt;
&lt;br /&gt;
== What ==&lt;br /&gt;
&lt;br /&gt;
There will be a mid-cycle meetup for ATCs (Active Technical Contributors) to the OpenStack Database program in February, 2014.  The final schedule of topics will be determined by those that attend, shortly before the event.&lt;br /&gt;
&lt;br /&gt;
== When ==&lt;br /&gt;
&lt;br /&gt;
3 days, February 19-21, 2014&lt;br /&gt;
&lt;br /&gt;
== Where ==&lt;br /&gt;
&lt;br /&gt;
 [http://capitalfactory.com/ capital factory]&lt;br /&gt;
 701 Brazos Street&lt;br /&gt;
 Suite 1601&lt;br /&gt;
 Austin, TX  78701&lt;br /&gt;
&lt;br /&gt;
== Event Details ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Time !! Wed !! Thr !! Fri&lt;br /&gt;
|-&lt;br /&gt;
| 9-11 || Meets -n- greets || State of Tempest || Conductor next steps&lt;br /&gt;
|-&lt;br /&gt;
| 11-1 || Show -n- tell icehouse || State of Heat || Guest updates&lt;br /&gt;
|-&lt;br /&gt;
| 1-3 || Current state of blueprints || Clustering/Replication || Capabilities&lt;br /&gt;
|-&lt;br /&gt;
| 3-5 || Doc support || Clustering/Replication || MVC / Pecan / WSME&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wed Night - Tesora is sponsoring an event at http://www.maggiemaesaustin.com , food and drink provided. Super fun time!!&lt;br /&gt;
&lt;br /&gt;
Thr Night - Rax/HP are sponsoring an event at http://www.buffalobilliards.com/austin/ , food and drink provided. Bring quarters!!&lt;br /&gt;
&lt;br /&gt;
=== Key Signing Party ===&lt;br /&gt;
More details at: https://wiki.openstack.org/wiki/OpenPGP_Web_of_Trust/Trove_Icehouse_Sprint&lt;br /&gt;
&lt;br /&gt;
=== Registration ===&lt;br /&gt;
** Please confirm your attendance ASAP at https://troveicehousemeetup.eventbrite.com&lt;br /&gt;
=== Hotels === &lt;br /&gt;
Hotels close to the event (closest on the top of the list). Please note the prices are subject to change and are there only because i clicked thru the reservation system for each hotel!&lt;br /&gt;
&lt;br /&gt;
* [http://www.omnihotels.com/findahotel/austindowntown.aspx omni] - from $260&lt;br /&gt;
* [http://www.driskillhotel.com/ driskill] - from $280&lt;br /&gt;
* [http://austin.intercontinental.com/ interncontinental] - from $200&lt;br /&gt;
* [http://goo.gl/maps/uLZOw We are smack dab in the middle of downtown austin] - from $???&lt;br /&gt;
&lt;br /&gt;
'''If you are in Austin and can provide a discount code / block for rooms, please contact me (hub_cap)'''&lt;br /&gt;
&lt;br /&gt;
===  Travel === &lt;br /&gt;
* Recommended airport: AUS, Austin-Bergstrom Intl&lt;br /&gt;
&lt;br /&gt;
== Things to do ==&lt;br /&gt;
&lt;br /&gt;
Most of the RAX Trove team is from austin. Just ask someone and they can help. When in doubt, talk to hub_cap.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Trove/IcehouseCycleMeetup&amp;diff=42572</id>
		<title>Trove/IcehouseCycleMeetup</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Trove/IcehouseCycleMeetup&amp;diff=42572"/>
				<updated>2014-02-17T20:23:54Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Event Details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Database Program (Trove) - Icehouse Mid-cycle Meetup =&lt;br /&gt;
&lt;br /&gt;
== What ==&lt;br /&gt;
&lt;br /&gt;
There will be a mid-cycle meetup for ATCs (Active Technical Contributors) to the OpenStack Database program in February, 2014.  The final schedule of topics will be determined by those that attend, shortly before the event.&lt;br /&gt;
&lt;br /&gt;
== When ==&lt;br /&gt;
&lt;br /&gt;
3 days, February 19-21, 2014&lt;br /&gt;
&lt;br /&gt;
== Where ==&lt;br /&gt;
&lt;br /&gt;
 [http://capitalfactory.com/ capital factory]&lt;br /&gt;
 701 Brazos Street&lt;br /&gt;
 Suite 1601&lt;br /&gt;
 Austin, TX  78701&lt;br /&gt;
&lt;br /&gt;
== Event Details ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Time !! Wed !! Thr !! Fri&lt;br /&gt;
|-&lt;br /&gt;
| 9-11 || Meets -n- greets || State of Tempest || Conductor next steps&lt;br /&gt;
|-&lt;br /&gt;
| 11-1 || Show -n- tell icehouse || State of Heat || Guest updates&lt;br /&gt;
|-&lt;br /&gt;
| 1-3 || Current state of blueprints || Clustering/Replication || Capabilities&lt;br /&gt;
|-&lt;br /&gt;
| 3-5 || Doc support || Clustering/Rehplication || Pecan / WSME&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wed Night - Tesora is sponsoring an event at http://www.maggiemaesaustin.com , food and drink provided. Super fun time!!&lt;br /&gt;
Thr Night - Rax/HP are sponsoring an event at http://www.buffalobilliards.com/austin/ , food and drink provided. Bring quarters!!&lt;br /&gt;
&lt;br /&gt;
=== Key Signing Party ===&lt;br /&gt;
More details at: https://wiki.openstack.org/wiki/OpenPGP_Web_of_Trust/Trove_Icehouse_Sprint&lt;br /&gt;
&lt;br /&gt;
=== Registration ===&lt;br /&gt;
** Please confirm your attendance ASAP at https://troveicehousemeetup.eventbrite.com&lt;br /&gt;
=== Hotels === &lt;br /&gt;
Hotels close to the event (closest on the top of the list). Please note the prices are subject to change and are there only because i clicked thru the reservation system for each hotel!&lt;br /&gt;
&lt;br /&gt;
* [http://www.omnihotels.com/findahotel/austindowntown.aspx omni] - from $260&lt;br /&gt;
* [http://www.driskillhotel.com/ driskill] - from $280&lt;br /&gt;
* [http://austin.intercontinental.com/ interncontinental] - from $200&lt;br /&gt;
* [http://goo.gl/maps/uLZOw We are smack dab in the middle of downtown austin] - from $???&lt;br /&gt;
&lt;br /&gt;
'''If you are in Austin and can provide a discount code / block for rooms, please contact me (hub_cap)'''&lt;br /&gt;
&lt;br /&gt;
===  Travel === &lt;br /&gt;
* Recommended airport: AUS, Austin-Bergstrom Intl&lt;br /&gt;
&lt;br /&gt;
== Things to do ==&lt;br /&gt;
&lt;br /&gt;
Most of the RAX Trove team is from austin. Just ask someone and they can help. When in doubt, talk to hub_cap.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=40757</id>
		<title>Meetings/TroveMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=40757"/>
				<updated>2014-01-29T17:57:27Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Agenda for Jan 28nd meeting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Weekly Trove (DBaaS) team meeting =&lt;br /&gt;
&lt;br /&gt;
For those interested, we have meetings in #openstack-meeting-alt Weekly, Wednesdays at 18:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
&lt;br /&gt;
Logs available: http://eavesdrop.openstack.org/meetings/trove/2014/&lt;br /&gt;
&lt;br /&gt;
== Agenda for Jan 28nd meeting ==&lt;br /&gt;
* Tempest update.&lt;br /&gt;
&lt;br /&gt;
== Agenda for Jan 22nd meeting ==&lt;br /&gt;
* Conductor: using call instead of cast for status updates, and other conductor message sync strategies [datsun180b]&lt;br /&gt;
* KILL THA XMLZ. https://review.openstack.org/#/c/68333/ [hub_cap]&lt;br /&gt;
* Tempest work [SlickNik]:&lt;br /&gt;
** https://review.openstack.org/#/c/65040/, and https://review.openstack.org/#/c/65065/ will hopefully be merged soon.&lt;br /&gt;
** Enumerated (at a high-level) a list of Trove tests to port over at https://etherpad.openstack.org/p/trove-tempest-items&lt;br /&gt;
* Datastores mgmt API&lt;br /&gt;
* Datastore versions migrations/upgrades&lt;br /&gt;
&lt;br /&gt;
=== Open Discussion ===&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=40756</id>
		<title>Meetings/TroveMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=40756"/>
				<updated>2014-01-29T17:43:22Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Agenda for Jan 22nd meeting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Weekly Trove (DBaaS) team meeting =&lt;br /&gt;
&lt;br /&gt;
For those interested, we have meetings in #openstack-meeting-alt Weekly, Wednesdays at 18:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
&lt;br /&gt;
Logs available: http://eavesdrop.openstack.org/meetings/trove/2014/&lt;br /&gt;
&lt;br /&gt;
== Agenda for Jan 28nd meeting ==&lt;br /&gt;
* ???&lt;br /&gt;
&lt;br /&gt;
== Agenda for Jan 22nd meeting ==&lt;br /&gt;
* Conductor: using call instead of cast for status updates, and other conductor message sync strategies [datsun180b]&lt;br /&gt;
* KILL THA XMLZ. https://review.openstack.org/#/c/68333/ [hub_cap]&lt;br /&gt;
* Tempest work [SlickNik]:&lt;br /&gt;
** https://review.openstack.org/#/c/65040/, and https://review.openstack.org/#/c/65065/ will hopefully be merged soon.&lt;br /&gt;
** Enumerated (at a high-level) a list of Trove tests to port over at https://etherpad.openstack.org/p/trove-tempest-items&lt;br /&gt;
* Datastores mgmt API&lt;br /&gt;
* Datastore versions migrations/upgrades&lt;br /&gt;
&lt;br /&gt;
=== Open Discussion ===&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=38644</id>
		<title>Meetings/TroveMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=38644"/>
				<updated>2013-12-18T17:41:51Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Agenda for the next meeting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Weekly Trove (DBaaS) team meeting =&lt;br /&gt;
&lt;br /&gt;
For those interested, we have meetings in #openstack-meeting-alt Weekly, Wednesdays at 18:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
&lt;br /&gt;
== Agenda for the next meeting ==&lt;br /&gt;
* Datastore compat matrix&lt;br /&gt;
** https://wiki.openstack.org/wiki/Trove/DatastoreCompatibilityMatrix&lt;br /&gt;
* Trove DBInstance Log Operation&lt;br /&gt;
** https://wiki.openstack.org/wiki/TroveDBInstanceLogOperation&lt;br /&gt;
* Status of next meeting?&lt;br /&gt;
=== Open Discussion ===&lt;br /&gt;
* Review request&lt;br /&gt;
** https://review.openstack.org/#/c/62414/&lt;br /&gt;
** https://review.openstack.org/#/c/61969/&lt;br /&gt;
** https://review.openstack.org/#/c/61169/&lt;br /&gt;
** https://review.openstack.org/#/c/58845/&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=36055</id>
		<title>Meetings/TroveMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=36055"/>
				<updated>2013-11-20T17:52:23Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Agenda for the next meeting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Weekly Trove (DBaaS) team meeting =&lt;br /&gt;
&lt;br /&gt;
For those interested, we have meetings in #openstack-meeting-alt Weekly, Wednesdays at 18:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
&lt;br /&gt;
== Agenda for the next meeting ==&lt;br /&gt;
* Moving the reference guest into its own repo.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=33797</id>
		<title>Meetings/TroveMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=33797"/>
				<updated>2013-10-23T20:10:51Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Agenda for the next meeting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Weekly Trove (DBaaS) team meeting =&lt;br /&gt;
&lt;br /&gt;
For those interested, we have meetings in #openstack-meeting-alt Weekly, Wednesdays at 3pm CDT / 1pm PDT, or 20:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agenda from the previous meeting ==&lt;br /&gt;
*  User permission request escaping and dots in usernames (datsun180b, demorris)&lt;br /&gt;
*  Provisioning ancillary resources post ACTIVE&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/dedicated-tenant-db-provisioning Provision database in specific tenant] (isviridov)&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/shared-cluster-db-provisioning Provisioning several db processes on the same cluster] (isviridov)&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/auto-recovery-of-cluster-replica Auto-recovery of node in replica/cluster] (isviridov)&lt;br /&gt;
*  Lunchpad meetings (https://launchpad.net/sprints/+new) as tool for topic discussions scheduling (isviridov)&lt;br /&gt;
&lt;br /&gt;
== Agenda for the next meeting ==&lt;br /&gt;
* Conductor changes. (datsun180b)&lt;br /&gt;
* Tempest for integration tests. (SnowDust)&lt;br /&gt;
* Blueprint Rigor / Structure (demorris)&lt;br /&gt;
* Datastore types (ashestakov)&lt;br /&gt;
* Multiple Node templates (Heat Enabled Instance creation) (yogeshmehra)&lt;br /&gt;
* Size of pull requests&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=33787</id>
		<title>Meetings/TroveMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=33787"/>
				<updated>2013-10-23T19:33:08Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Agenda for the next meeting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Weekly Trove (DBaaS) team meeting =&lt;br /&gt;
&lt;br /&gt;
For those interested, we have meetings in #openstack-meeting-alt Weekly, Wednesdays at 3pm CDT / 1pm PDT, or 20:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agenda from the previous meeting ==&lt;br /&gt;
*  User permission request escaping and dots in usernames (datsun180b, demorris)&lt;br /&gt;
*  Provisioning ancillary resources post ACTIVE&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/dedicated-tenant-db-provisioning Provision database in specific tenant] (isviridov)&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/shared-cluster-db-provisioning Provisioning several db processes on the same cluster] (isviridov)&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/auto-recovery-of-cluster-replica Auto-recovery of node in replica/cluster] (isviridov)&lt;br /&gt;
*  Lunchpad meetings (https://launchpad.net/sprints/+new) as tool for topic discussions scheduling (isviridov)&lt;br /&gt;
&lt;br /&gt;
== Agenda for the next meeting ==&lt;br /&gt;
* Conductor changes. (datsun180b)&lt;br /&gt;
* Tempest for integration tests. (SnowDust)&lt;br /&gt;
* Blueprint Rigor / Structure (demorris)&lt;br /&gt;
* Datastore types (ashestakov)&lt;br /&gt;
* Multiple Node templates (Heat Enabled Instance creation) (yogeshmehra)&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=32833</id>
		<title>Meetings/TroveMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=32833"/>
				<updated>2013-10-16T19:46:42Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Agenda for the next meeting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Weekly Trove (DBaaS) team meeting =&lt;br /&gt;
&lt;br /&gt;
For those interested, we have meetings in #openstack-meeting-alt Weekly, Wednesdays at 3pm CDT / 1pm PDT, or 20:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agenda from the previous meeting ==&lt;br /&gt;
*  User permission request escaping and dots in usernames (datsun180b, demorris)&lt;br /&gt;
*  Provisioning ancillary resources post ACTIVE&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/dedicated-tenant-db-provisioning Provision database in specific tenant] (isviridov)&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/shared-cluster-db-provisioning Provisioning several db processes on the same cluster] (isviridov)&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/auto-recovery-of-cluster-replica Auto-recovery of node in replica/cluster] (isviridov)&lt;br /&gt;
*  Lunchpad meetings (https://launchpad.net/sprints/+new) as tool for topic discussions scheduling (isviridov)&lt;br /&gt;
&lt;br /&gt;
== Agenda for the next meeting ==&lt;br /&gt;
* Conductor changes. (datsun180b)&lt;br /&gt;
* Fake mode daemon fix, how to use it. (grapex)&lt;br /&gt;
* Tempest for integration tests. (SnowDust)&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=32831</id>
		<title>Meetings/TroveMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=32831"/>
				<updated>2013-10-16T19:44:41Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Agenda for the next meeting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Weekly Trove (DBaaS) team meeting =&lt;br /&gt;
&lt;br /&gt;
For those interested, we have meetings in #openstack-meeting-alt Weekly, Wednesdays at 3pm CDT / 1pm PDT, or 20:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agenda from the previous meeting ==&lt;br /&gt;
*  User permission request escaping and dots in usernames (datsun180b, demorris)&lt;br /&gt;
*  Provisioning ancillary resources post ACTIVE&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/dedicated-tenant-db-provisioning Provision database in specific tenant] (isviridov)&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/shared-cluster-db-provisioning Provisioning several db processes on the same cluster] (isviridov)&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/auto-recovery-of-cluster-replica Auto-recovery of node in replica/cluster] (isviridov)&lt;br /&gt;
*  Lunchpad meetings (https://launchpad.net/sprints/+new) as tool for topic discussions scheduling (isviridov)&lt;br /&gt;
&lt;br /&gt;
== Agenda for the next meeting ==&lt;br /&gt;
* Conductor changes. (datsun180b)&lt;br /&gt;
* Fake mode daemon fix, how to use it. (grapex)&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=32830</id>
		<title>Meetings/TroveMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=32830"/>
				<updated>2013-10-16T19:41:08Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Agenda for the next meeting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Weekly Trove (DBaaS) team meeting =&lt;br /&gt;
&lt;br /&gt;
For those interested, we have meetings in #openstack-meeting-alt Weekly, Wednesdays at 3pm CDT / 1pm PDT, or 20:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agenda from the previous meeting ==&lt;br /&gt;
*  User permission request escaping and dots in usernames (datsun180b, demorris)&lt;br /&gt;
*  Provisioning ancillary resources post ACTIVE&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/dedicated-tenant-db-provisioning Provision database in specific tenant] (isviridov)&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/shared-cluster-db-provisioning Provisioning several db processes on the same cluster] (isviridov)&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/auto-recovery-of-cluster-replica Auto-recovery of node in replica/cluster] (isviridov)&lt;br /&gt;
*  Lunchpad meetings (https://launchpad.net/sprints/+new) as tool for topic discussions scheduling (isviridov)&lt;br /&gt;
&lt;br /&gt;
== Agenda for the next meeting ==&lt;br /&gt;
* Conductor changes. (grapex)&lt;br /&gt;
* Fake mode daemon fix, how to use it. (grapex)&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=32829</id>
		<title>Meetings/TroveMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/TroveMeeting&amp;diff=32829"/>
				<updated>2013-10-16T19:40:49Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Agenda for the next meeting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Weekly Trove (DBaaS) team meeting =&lt;br /&gt;
&lt;br /&gt;
For those interested, we have meetings in #openstack-meeting-alt Weekly, Wednesdays at 3pm CDT / 1pm PDT, or 20:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Agenda from the previous meeting ==&lt;br /&gt;
*  User permission request escaping and dots in usernames (datsun180b, demorris)&lt;br /&gt;
*  Provisioning ancillary resources post ACTIVE&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/dedicated-tenant-db-provisioning Provision database in specific tenant] (isviridov)&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/shared-cluster-db-provisioning Provisioning several db processes on the same cluster] (isviridov)&lt;br /&gt;
*  [https://blueprints.launchpad.net/trove/+spec/auto-recovery-of-cluster-replica Auto-recovery of node in replica/cluster] (isviridov)&lt;br /&gt;
*  Lunchpad meetings (https://launchpad.net/sprints/+new) as tool for topic discussions scheduling (isviridov)&lt;br /&gt;
&lt;br /&gt;
== Agenda for the next meeting ==&lt;br /&gt;
* Conductor changes.&lt;br /&gt;
* Fake mode daemon fix, how to use it.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Reddwarf-Test-With-XmlLint&amp;diff=21613</id>
		<title>Reddwarf-Test-With-XmlLint</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Reddwarf-Test-With-XmlLint&amp;diff=21613"/>
				<updated>2013-05-01T04:57:21Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It is possible to change the HTTP client to capture the HTTP request and response bodies, save them as files, and run XmlLint to make sure the XML is well formed.&lt;br /&gt;
&lt;br /&gt;
Here's an example test configuration file which will do so:&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;include-files&amp;quot;: [&amp;quot;localhost.test.conf&amp;quot;],&lt;br /&gt;
    &amp;quot;reddwarf_client_cls&amp;quot;: &amp;quot;reddwarf.tests.util.client.XmlLintClient&amp;quot;,&lt;br /&gt;
    &amp;quot;xml_temp_file&amp;quot;:&amp;quot;lastclient-body.xml&amp;quot;,&lt;br /&gt;
    &amp;quot;xmllint_bin&amp;quot;: &amp;quot;/usr/bin/xmllint&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
There are some issues which preclude this from running in Tox normally with every run.&lt;br /&gt;
&lt;br /&gt;
First, the path to xmllint is required as shown by the &amp;quot;xmllint_bin&amp;quot; config value. This program would need to be installed somehow by Tox to be make the local testing process simple.&lt;br /&gt;
&lt;br /&gt;
Additionally, for the best results, &amp;quot;xml_temp_file&amp;quot; is used as the path of a temporary file to create which contains the lastest request or response body (piping the xml body to xmllint directly leads to inconsistent behavior and quirky results).&lt;br /&gt;
&lt;br /&gt;
'''Validating an XSD File'''&lt;br /&gt;
&lt;br /&gt;
One additional, but not mandatory, test config value is &amp;quot;xml_xsd&amp;quot; which if present will become an argument following &amp;quot;--schema&amp;quot; which is sent to xml lint.&lt;br /&gt;
&lt;br /&gt;
While this is difficult to set up for Tox, it would be relatively simple to use in the VM gated tests guided by Reddwarf Integration.&lt;br /&gt;
&lt;br /&gt;
'''Obstacles to putting this into VM runs'''&lt;br /&gt;
&lt;br /&gt;
A few obstacles stand in the way of running this in RDI, however:&lt;br /&gt;
&lt;br /&gt;
* If an invalid version is requested, the Reddwarf API currently returns a body of text which does not parse to an XML element (or a JSON body for that matter) which (rightfully) causes the test to fail when xmllint verification is turned on: https://bugs.launchpad.net/reddwarf/+bug/1174960&lt;br /&gt;
&lt;br /&gt;
* There is as of yet no agreed upon XSD schema for Reddwarf.&lt;br /&gt;
&lt;br /&gt;
If you'd like to test currently, simply install xmllint, and then change the contents of the file &amp;quot;etc/tests/xml.localhost.test.conf' to the sample file presented above. After that (assuming tox has been run once) run the following:&lt;br /&gt;
$ .tox/py27/bin/python run_tests.py --test-config=etc/tests/xml.localhost.test.conf&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Reddwarf-Test-With-XmlLint&amp;diff=21612</id>
		<title>Reddwarf-Test-With-XmlLint</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Reddwarf-Test-With-XmlLint&amp;diff=21612"/>
				<updated>2013-05-01T04:47:24Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: Describes how to add xmllint verification to test runs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It is possible to change the HTTP client to capture the HTTP request and response bodies, save them as files, and run XmlLint to make sure the XML is well formed.&lt;br /&gt;
&lt;br /&gt;
Here's an example test configuration file which will do so:&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;include-files&amp;quot;: [&amp;quot;localhost.test.conf&amp;quot;],&lt;br /&gt;
    &amp;quot;reddwarf_client_cls&amp;quot;: &amp;quot;reddwarf.tests.util.client.XmlLintClient&amp;quot;,&lt;br /&gt;
    &amp;quot;xml_temp_file&amp;quot;:&amp;quot;lastclient-body.xml&amp;quot;,&lt;br /&gt;
    &amp;quot;xmllint_bin&amp;quot;: &amp;quot;/usr/bin/xmllint&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
There are some issues which preclude this from running in Tox normally with every run.&lt;br /&gt;
&lt;br /&gt;
First, the path to xmllint is required as shown by the &amp;quot;xmllint_bin&amp;quot; config value. This program would need to be installed somehow by Tox to be make the local testing process simple.&lt;br /&gt;
&lt;br /&gt;
Additionally, for the best results, &amp;quot;xml_temp_file&amp;quot; is used as the path of a temporary file to create which contains the lastest request or response body (piping the xml body to xmllint directly leads to inconsistent behavior and quirky results).&lt;br /&gt;
&lt;br /&gt;
'''Validating an XSD File'''&lt;br /&gt;
&lt;br /&gt;
One additional, but not mandatory, test config value is &amp;quot;xml_xsd&amp;quot; which if present will become an argument following &amp;quot;--schema&amp;quot; which is sent to xml lint.&lt;br /&gt;
&lt;br /&gt;
While this is difficult to set up for Tox, it would be relatively simple to use in the VM gated tests guided by Reddwarf Integration.&lt;br /&gt;
&lt;br /&gt;
'''Obstacles to putting this into VM runs'''&lt;br /&gt;
&lt;br /&gt;
A few obstacles stand in the way of running this in RDI, however:&lt;br /&gt;
&lt;br /&gt;
* If an invalid version is requested, the Reddwarf API currently returns a body of text which does not parse to an XML element (or a JSON body for that matter) which (rightfully) causes the test to fail when xmllint verification is turned on: https://bugs.launchpad.net/reddwarf/+bug/1174960&lt;br /&gt;
&lt;br /&gt;
* There is as of yet no agreed upon XSD schema for Reddwarf.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=ReddwarfAppliesForIncubation&amp;diff=20789</id>
		<title>ReddwarfAppliesForIncubation</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=ReddwarfAppliesForIncubation&amp;diff=20789"/>
				<updated>2013-04-18T21:40:17Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Other project developers and qualifications: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Project codename:===&lt;br /&gt;
&lt;br /&gt;
RedDwarf&lt;br /&gt;
&lt;br /&gt;
===Summary:===&lt;br /&gt;
&lt;br /&gt;
A control plane and data plane for deploying and operating relational (SQL) and non-relational (NoSQL) database management systems on OpenStack.&lt;br /&gt;
&lt;br /&gt;
===Detailed Description:===&lt;br /&gt;
&lt;br /&gt;
Reddwarf is Database as a Service for Openstack. It's designed to run entirely on OpenStack, with the goal of allowing users to quickly and easily utilize the features of a database without the burden of handling complex administrative tasks. Cloud users and database administrators can provision and manage multiple database instances as needed. The service focuses on providing database resource isolation while automating complex administrative tasks including deployment, configuration, patching, backups, restores as well as horizontal and vertical scaling.  While initially focused on MySQL, the future of Reddwarf will support multiple database technologies, including relational (SQL) and non-relational (NoSQL) technologies such as Redis, MongoDB, MariaDB, PostgreSQL, etc.. The long-term vision for Reddwarf is to provide a framework to control any persistant database management system.&lt;br /&gt;
&lt;br /&gt;
Today, Reddwarf is a consumer of OpenStack. It is built on and leverages core OpenStack infrastructure services. It allows a service provider the flexibility of deployment and configuration of the core OpenStack components, and uses those components as the building blocks of its service. This includes Keystone for auth, Nova for instance creation, Cinder for volume support, Glance for images, Swift to store backups, and networking. In the future, we hope to eventually consume Ceilometer for metrics and Heat for initial image creation/orchestration, and potentially bare metal to spin up Reddwarf instances for the infrastructure database(s) within a OpenStack on OpenStack install.&lt;br /&gt;
&lt;br /&gt;
With the recent adoption of Heat as an integrated project in OpenStack, many will question the need for a defined database service as Heat can orchestrate the setup of complex database clusters as well as handle basic lifecycle management of the database cluster.  However, this is only one piece of a managing a database at scale.  Reddwarf is layer above Heat, and as the project evolves, we will be able to leverage Heat to set up the database management system, which fits perfectly into our goal of leveraging core OpenStack services. The main differentiator for persistent datastores is that they require tightly integrated and specific operations such as controls to efficiently execute/schedule backups, restore a database to a specific point in time, configuration and optimization of the database, maintenance and management of data replication (masters and slaves) for horizontal scalability, and other database management tasks.  A persistent datastore, clustered or not, is not simply a fire and forget resource. It needs constant monitoring and maintenance and we want to use this as the differentiator between Reddwarf and a service for orchestrating the creation of OpenStack resources.  However, as Heat continues to evolve, and some basic lifecycle management tasks can be executed through it, we will have the option to leverage those operations.&lt;br /&gt;
&lt;br /&gt;
===Basic roadmap for the project:===&lt;br /&gt;
&lt;br /&gt;
Currently, Reddwarf can deploy multiple MySQL implementations, including core MySQL and Percona MySQL. The API continues to evolve through the addition of new features, but as it stands is very stable in its implementation for the basic tasks of creating and maintaining a single instance database deployment. The system is built such that multiple technologies can be leveraged, from the datastore implementation itself, to the tools used to keep maintenance ongoing. For instance, the backup feature, currently in progress, allows the cloud deployer to choose mysqldump or xtrabackup to backup the datastore.  Over time, this will be expanded to support storage level snapshotting for larger volume installations.&lt;br /&gt;
&lt;br /&gt;
From a datastore perspective, Reddwarf's functionality currently is the ability to spin up secured MySQL databases, create/destroy schemas and users, and enable a root user. From a openstack project perspective, Reddwarf also has quota and limit support and consumes Oslo to build out the architecture of the API.&lt;br /&gt;
&lt;br /&gt;
Reddwarf has a healthy backlog of features such as database configuration control, manual backups and restores, and notifications. Others that are not yet started include scheduled backups, point in time database restores, API types/versions, full featured user modification, and replication for horizontal database scalability.  The current roadmap can be viewed as blueprints on launchpad and will be continually updated as new feature requests are created.  We will be working to add support for NoSQL soon.&lt;br /&gt;
&lt;br /&gt;
There are also many housekeeping blueprints to maintain parity with other OpenStack projects. Reddwarf has strived to keep in line with the ecosystem, but there are some things that are necessary, such as completing integration with devstack. As it stands, reddwarf is integrated as much as possible today, and uses local.sh to instrument the reddwarf infrastructure. It also currently uses vm-gating and runs functional tests on every review.&lt;br /&gt;
&lt;br /&gt;
===Location of project source code:===&lt;br /&gt;
&lt;br /&gt;
Reddwarf operates like any other openstack project. Blueprints are registered and approved in the same fashion as the other projects, release cycles are followed, and code is gated through unit tests and functional tests. The codebase is in stackforge. Reviews are in openstack gerrit.&lt;br /&gt;
&lt;br /&gt;
===Programming language, required technology dependencies: ===&lt;br /&gt;
&lt;br /&gt;
Python. pypi dependencies are listed in pip-requires and test-requires.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Is project currently open sourced? What license?: ===&lt;br /&gt;
&lt;br /&gt;
Yes. Apache 2.0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Level of maturity of software and team:===&lt;br /&gt;
&lt;br /&gt;
The team has followed the openstack ecosystem for a long time. They are well versed in understanding the ecosystem and follow it as closely as possible. Weekly meetings are held, a presence is always in irc, reviews are thoroughly picked through, and they hold a high standard for all code that lands in master. All features require unit and functional tests, and gating is done on these through OpenStack jenkins and a external jenkins for said functional tests. The software is run in a production OpenStack deployment at Rackspace on hundreds of nodes across multiple datacenters encompassing thousands of active database deployments.&lt;br /&gt;
&lt;br /&gt;
===Proposed project technical lead and qualifications:===&lt;br /&gt;
&lt;br /&gt;
'''Michael Basnight (hub_cap on irc)'''. Michael has lead the project since its inception at rackspace. He was the lead of the internal project, but has shifted his role within Rackspace to be fully dedicated to lead the public project. He is focused on the quality of the API, infrastructure, and testability of the project. He follows the openstack community closely and has contributed greatly to the project. He currently manages blueprints, runs the weekly meetings, and evangelizes reddwarf in the community. He has spoken at many of the OpenStack conferences and has attended almost all of the conferences since reddwarf began within Rackspace.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Other project developers and qualifications:===&lt;br /&gt;
&lt;br /&gt;
Currently HP and Rackspace contribute to the reddwarf project. They operate as a joint team within the open. They are listed below.&lt;br /&gt;
&lt;br /&gt;
'''Tim Simpson (grapex on irc)'''. Tim has worked on Reddwarf since its inception and wrote the initial tests; since then he has worked to ensure every feature reaching trunk is backed by solid testing. Following Mike's transition he has become the lead of the Rackspace Cloud Database product.&lt;br /&gt;
&lt;br /&gt;
'''Vipul Sabhaya (vipul on irc)'''.  Vipul has been involved with reddwarf since 2011.  He led the effort to get HP Cloud database as a service, based on Reddwarf launched.  Vipul also led HP's efforts to refocus all development to the Reddwarf reference implementation.  He has also promoted reddwarf by giving talks at the openstack summit, and is a member of the core team.&lt;br /&gt;
&lt;br /&gt;
'''Nikhil Manchanda (slicknik on irc)'''. Nikhil has been involved with OpenStack and reddwarf since 2012. He has led the effort on integrating reddwarf setup with devstack and has also worked on aligning reddwarf testing, packaging, and CI with OpenStack standards. He has worked on all parts of the reddwarf project, including the API, taskmanager, guestagent, client, and documentation. &lt;br /&gt;
&lt;br /&gt;
'''Jim Cooley'''.  Jim has been involved with reddwarf since 2012, He has led the efforts to launch multiple Openstack related projects: DNS (moniker), Messaging, Load Balancing, and Monitoring.  He initiated the HP move to the Reddwarf reference implementation and abandonment of their proprietary codebase and the migration into the Devstack gate (with the sponsorship of Monty Taylor, checkin currently on hold).&lt;br /&gt;
&lt;br /&gt;
'''Anna Shen (annashen on irc)'''. Anna has been involved with reddwarf since late 2011. She worked primarily on SmartAgent of HP Reddwarf 1.0 and Packaging Reddwarf, she now works on GuestAgent and API side.  &lt;br /&gt;
&lt;br /&gt;
'''Dan Nguyen (esp on irc)'''. Dan has been working on Reddwarf since 2012 and contributes code to the reddwarf API,  python-reddwarf-client, and reddwarf-integration.  He's also started to look at other openstack projects as necessary to support Reddwarf development. &lt;br /&gt;
&lt;br /&gt;
'''Steve Leon (esmute on irc)'''. Steve has been involved with reddwarf since 2012, and has been contributing to both reddwarf and its client.&lt;br /&gt;
&lt;br /&gt;
'''Saurabh Surana (saurabhs on irc)''' Saurabh has been involved with reddwarf since 2012. He mainly works on running reddwarf for HP's cloud.&lt;br /&gt;
&lt;br /&gt;
'''Justin Hopper (juice on irc)''' Justin has been involved with reddwarf since 2012.  He incorporated diskimage-builder for guest agent and contributed to the backup/restore feature in reddwarf and its client.&lt;br /&gt;
&lt;br /&gt;
'''Robert Myers (robertmyers on irc)'''. Robert has been involved with Reddwarf since late 2012. He has contributed to the API and integration tests for Reddwarf. He has also contributed to the Openstack Olso project.&lt;br /&gt;
&lt;br /&gt;
'''DJ Johnstone (djohnstone on irc)'''.  DJ has been involved with Reddwarf since late 2011.  He was the Test Lead for Rackspace Cloud Database for most of 2012 and transitioned over to development on the team in Nov.&lt;br /&gt;
&lt;br /&gt;
'''Joe Cruz (jcru on irc)'''. Joe has been involved with Reddwarf since 2012. He is currently a Software Developer on the Cloud Database team at Rackspace.&lt;br /&gt;
&lt;br /&gt;
'''Ed Cranford (datsun180b on irc)'''. He has been involved with Reddwarf since mid 2011. He is also a Software Developer on the Cloud Database team at Rackspace, contributing to reddwarf and the client.&lt;br /&gt;
&lt;br /&gt;
'''Daniel Salinas (imsplitbit on irc)'''  Co-inventor of reddwarf project.  Software Developer on the Cloud Database team at Rackspace currently working on extending Nova with OpenVz functionality.  He has over five years of DBA experience.&lt;br /&gt;
&lt;br /&gt;
'''Craig Vyvial (cp16net on irc)'''  Craig has been involved with Reddwarf since 2011.  He is currently a Software Developer on the Cloud Database team at Rackspace. He has contributed to many of the Openstack Ecosystem projects and mainly focused on developing features for Reddwarf. Craig has shared knowledge of Openstack and Reddwarf by giving presentations to user groups.&lt;br /&gt;
&lt;br /&gt;
'''Dave Fecker (davefecker on irc)''' Dave works in Quality Engineering at Rackspace. He has contributed tests to the Reddwarf project.&lt;br /&gt;
&lt;br /&gt;
===Infrastructure requirements (testing, etc): ===&lt;br /&gt;
&lt;br /&gt;
Reddwarf has built its own testing environment. Its currently run as a gating job within by jenkins. Tox runs pep8 and unit tests on each commit through openstack gerrit. The reddwarf developers understand that, over time, they will adopt the openstack testing frameworks for all new functional tests. The core of reddwarf is run on openstack and installed within devstack. Reddwarf-integration, a project on stackforge, controls the installation and setup of reddwarf for development and testing. Tests are run in a openstack/kvm environment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Have all current contributors agreed to the OpenStack CLA? ===&lt;br /&gt;
&lt;br /&gt;
Yes.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=ReddwarfAppliesForIncubation&amp;diff=20707</id>
		<title>ReddwarfAppliesForIncubation</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=ReddwarfAppliesForIncubation&amp;diff=20707"/>
				<updated>2013-04-17T23:53:58Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Project codename: &lt;br /&gt;
&lt;br /&gt;
reddwarf&lt;br /&gt;
&lt;br /&gt;
Summary (one sentence abstract of the project):&lt;br /&gt;
&lt;br /&gt;
A control plane for managing multiple database technologies.&lt;br /&gt;
&lt;br /&gt;
Detailed Description:&lt;br /&gt;
&lt;br /&gt;
Reddwarf is Database as a Service for Openstack. It's designed to run entirely on OpenStack, with the goal of allowing users to quickly and easily utilize the features of a database without the burden of handling complex administrative tasks. Cloud users and database administrators can provision and manage multiple database instances as needed. Initially, the service will focus on providing resource isolation at high performance while automating complex administrative tasks including deployment, configuration, patching, backups, restores, and monitoring. The future of Reddwarf will consume multiple database technologies, including relational and non relational technologies. The vision is for Reddwarf to control any datastore that requires ongoing maintanence, data integrity, and replication.&lt;br /&gt;
&lt;br /&gt;
Reddwarf is a consumer of OpenStack. It is built on and leverages core openstack infrastructure services. It allows a service provider the flexibility of deployment and configuration of the core OpenStack components, and uses those components as the building blocks of its service. This includes Keystone for auth, nova for instance creation, cinder for volume support, glance for images, swift to store backups, and quantum for networking. We hope to eventually consume cielometer for metrics and heat for initial image creation, and potentially bare metal to spin up reddwarf instances for the infastructure database(s) within a nova on nova install.&lt;br /&gt;
&lt;br /&gt;
One may ask how is this different from Heat. We will consume heat to set up a initial mysql datastore, which fits perfectly into our vision for using openstack services. The main differentiator for datastores is that they require specific maintainence to back up, restore, and keep continued maintainence of replication, slaves, and yet to be determined management tasks. A datastore is not simply a fire and forget resource. It needs constant monitoring and we want to use this as the differentiator between reddwarf and a service for spinning up fire and forget resources. As heat continues to evolve, and some maintanence tasks can be done through it, such as upgrades and restarts, we will consume those services. Our goal is to focus on the specifics of keeping a datastore online and use other projects as much as possible for the smaller tasks. &lt;br /&gt;
&lt;br /&gt;
Basic roadmap for the project:&lt;br /&gt;
&lt;br /&gt;
Reddwarf can currrently deploy multiple mysql implementations. The API is evolving with new features, but as it stands is very stable in its implementation for the basic tasks. In the codebase as it stands today, both stock mysql and percona mysql are supported. The system is built such that multiple technolgies can be leveraged, from the datastore implementation itself, to the tools used to keep maintiannce ongoing. For instance, the backup feature, which is inflight, allows the cloud deployer to choose mysqldump or xtrabackup to backup the datastore.&lt;br /&gt;
&lt;br /&gt;
From a datastore perspective, Reddwarf's functionality currently is the ability to spin up secured mysql databases, create/destroy schemas and users, and enable a root user. From a openstack project perspective, Reddwarf also has quota and limit support and consumes Oslo to build out the architecture of the api.&lt;br /&gt;
&lt;br /&gt;
Reddwarf has a healthy backlog of features in order to fufil mysql features. Some of the inflight features are configuration (my.cnf) edits, manual backups and restores, notifications. Others that are not yet started include automated backups, including point in time restores, API types/versions, full featured user modification, and replication. this does not encompass all features. The current roadmap can be viewed as blueprints on launchpad.&lt;br /&gt;
&lt;br /&gt;
There are also many housekeeping blueprints to maintain parity with other openstack projects. Reddwarf has strived to keep in line with the ecosystem, but there are some things that are necessary, such as completing integration with devstack. As it stands, reddwarf is integrated as much as possible today, and uses local.sh to instrument the reddwarf infrastructure. It also currently uses vm-gating and runs functional tests on every review.&lt;br /&gt;
&lt;br /&gt;
Location of project source code:&lt;br /&gt;
&lt;br /&gt;
Reddwarf operates like any other openstack project. blueprints are registered and approved in the same fashion as the other projects, release cycles are followed, and code is gated through unit tess and functional tests. The codebase is in stackforge. Reviews are in openstack gerrit.&lt;br /&gt;
&lt;br /&gt;
Programming language, required technology dependencies: &lt;br /&gt;
&lt;br /&gt;
Python. pypi dependencies are listed in pip-requires and test-requires.&lt;br /&gt;
&lt;br /&gt;
Is project currently open sourced? What license?: &lt;br /&gt;
&lt;br /&gt;
Yes. Apache 2.0.&lt;br /&gt;
&lt;br /&gt;
Level of maturity of software and team:&lt;br /&gt;
&lt;br /&gt;
The team has followed the openstack ecosystem for a long time. They are well versed in understanding the ecosystem and follow it as closely as possible. Weekly meetings are held, a presence is always in irc, reviews are thuroughly picked through, and they hold a high standard for all code that lands in master. All features require unit and functional tests, and gating is done on these thru openstack jenkins and a external jenkins for said functional tests. The software is run in production currently by rackspace on thousands of nodes.&lt;br /&gt;
&lt;br /&gt;
Proposed project technical lead and qualifications:&lt;br /&gt;
&lt;br /&gt;
Michael Basnight (hub_cap on irc). Michael has lead the project since its inception at rackspace. He was the lead of the internal project, but has shifted his role within Rackspace to be fully dedicated to lead the public project. He is focused on the quality of the API, infrastructure, and testability of the project. He follows the openstack community closely and has contributed greatly to the project. He currently manages blueprints, runs the weekly meetings, and evangelizes reddwarf in the community. He has spoken at many of the OpenStack conferences and has attended almost all of the conferences since reddwarf began within Rackspace.&lt;br /&gt;
&lt;br /&gt;
Other project developers and qualifications:&lt;br /&gt;
&lt;br /&gt;
Currently HP and Rackspace contribute to the reddwarf project. They operate as a joint team within the open. They are listed below.&lt;br /&gt;
&lt;br /&gt;
Tim Simpson (grapex on irc). Tim has worked on Reddwarf since its inception and wrote the initial tests; since then he has worked to ensure every feature reaching trunk is backed by solid testing. Following Mike's transition he has become the lead of the Rackspace Cloud Database product.&lt;br /&gt;
&lt;br /&gt;
GUYS::::: INSERT YOUR QUALS HERE :::::::&lt;br /&gt;
&lt;br /&gt;
Infrastructure requirements (testing, etc): &lt;br /&gt;
&lt;br /&gt;
Reddwarf has built its own testing environment. Its currently run as a gating job within by jenkins. Tox runs pep8 and unit tests on each commit through openstack gerrit. The reddwarf developers understand that, over time, they will adopt the openstack testing frameworks for all new functional tests. The core of reddwarf is run on openstack and installed within devstack. Reddwarf-integration, a project on stackforge, controls the installation and setup of reddwarf for development and testing. Tests are run in a openstack/kvm environment.&lt;br /&gt;
&lt;br /&gt;
Have all current contributors agreed to the OpenStack CLA? &lt;br /&gt;
&lt;br /&gt;
Yes.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=ReddwarfAppliesForIncubation&amp;diff=20706</id>
		<title>ReddwarfAppliesForIncubation</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=ReddwarfAppliesForIncubation&amp;diff=20706"/>
				<updated>2013-04-17T23:42:23Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Project codename: &lt;br /&gt;
&lt;br /&gt;
reddwarf&lt;br /&gt;
&lt;br /&gt;
Summary (one sentence abstract of the project):&lt;br /&gt;
&lt;br /&gt;
A control plane for managing multiple database technologies.&lt;br /&gt;
&lt;br /&gt;
Detailed Description:&lt;br /&gt;
&lt;br /&gt;
Reddwarf is Database as a Service for Openstack. It's designed to run entirely on OpenStack, with the goal of allowing users to quickly and easily utilize the features of a database without the burden of handling complex administrative tasks. Cloud users and database administrators can provision and manage multiple database instances as needed. Initially, the service will focus on providing resource isolation at high performance while automating complex administrative tasks including deployment, configuration, patching, backups, restores, and monitoring. The future of Reddwarf will consume multiple database technologies, including relational and non relational technologies. The vision is for Reddwarf to control any datastore that requires ongoing maintanence, data integrity, and replication.&lt;br /&gt;
&lt;br /&gt;
Reddwarf is a consumer of OpenStack. It is built on and leverages core openstack infrastructure services. It allows a service provider the flexibility of deployment and configuration of the core OpenStack components, and uses those components as the building blocks of its service. This includes Keystone for auth, nova for instance creation, cinder for volume support, glance for images, swift to store backups, and quantum for networking. We hope to eventually consume cielometer for metrics and heat for initial image creation, and potentially bare metal to spin up reddwarf instances for the infastructure database(s) within a nova on nova install.&lt;br /&gt;
&lt;br /&gt;
One may ask how is this different from Heat. We will consume heat to set up a initial mysql datastore, which fits perfectly into our vision for using openstack services. The main differentiator for datastores is that they require specific maintainence to back up, restore, and keep continued maintainence of replication, slaves, and yet to be determined management tasks. A datastore is not simply a fire and forget resource. It needs constant monitoring and we want to use this as the differentiator between reddwarf and a service for spinning up fire and forget resources. As heat continues to evolve, and some maintanence tasks can be done through it, such as upgrades and restarts, we will consume those services. Our goal is to focus on the specifics of keeping a datastore online and use other projects as much as possible for the smaller tasks. &lt;br /&gt;
&lt;br /&gt;
Basic roadmap for the project:&lt;br /&gt;
&lt;br /&gt;
Reddwarf can currrently deploy multiple mysql implementations. The API is evolving with new features, but as it stands is very stable in its implementation for the basic tasks. In the codebase as it stands today, both stock mysql and percona mysql are supported. The system is built such that multiple technolgies can be leveraged, from the datastore implementation itself, to the tools used to keep maintiannce ongoing. For instance, the backup feature, which is inflight, allows the cloud deployer to choose mysqldump or xtrabackup to backup the datastore.&lt;br /&gt;
&lt;br /&gt;
From a datastore perspective, Reddwarf's functionality currently is the ability to spin up secured mysql databases, create/destroy schemas and users, and enable a root user. From a openstack project perspective, Reddwarf also has quota and limit support and consumes Oslo to build out the architecture of the api.&lt;br /&gt;
&lt;br /&gt;
Reddwarf has a healthy backlog of features in order to fufil mysql features. Some of the inflight features are configuration (my.cnf) edits, manual backups and restores, notifications. Others that are not yet started include automated backups, including point in time restores, API types/versions, full featured user modification, and replication. this does not encompass all features. The current roadmap can be viewed as blueprints on launchpad.&lt;br /&gt;
&lt;br /&gt;
There are also many housekeeping blueprints to maintain parity with other openstack projects. Reddwarf has strived to keep in line with the ecosystem, but there are some things that are necessary, such as completing integration with devstack. As it stands, reddwarf is integrated as much as possible today, and uses local.sh to instrument the reddwarf infrastructure. It also currently uses vm-gating and runs functional tests on every review.&lt;br /&gt;
&lt;br /&gt;
Location of project source code:&lt;br /&gt;
&lt;br /&gt;
Reddwarf operates like any other openstack project. blueprints are registered and approved in the same fashion as the other projects, release cycles are followed, and code is gated through unit tess and functional tests. The codebase is in stackforge. Reviews are in openstack gerrit.&lt;br /&gt;
&lt;br /&gt;
Programming language, required technology dependencies: &lt;br /&gt;
&lt;br /&gt;
Python. pypi dependencies are listed in pip-requires and test-requires.&lt;br /&gt;
&lt;br /&gt;
Is project currently open sourced? What license?: &lt;br /&gt;
&lt;br /&gt;
Yes. Apache 2.0.&lt;br /&gt;
&lt;br /&gt;
Level of maturity of software and team:&lt;br /&gt;
&lt;br /&gt;
The team has followed the openstack ecosystem for a long time. They are well versed in understanding the ecosystem and follow it as closely as possible. Weekly meetings are held, a presence is always in irc, reviews are thuroughly picked through, and they hold a high standard for all code that lands in master. All features require unit and functional tests, and gating is done on these thru openstack jenkins and a external jenkins for said functional tests. The software is run in production currently by rackspace on thousands of nodes.&lt;br /&gt;
&lt;br /&gt;
Proposed project technical lead and qualifications:&lt;br /&gt;
&lt;br /&gt;
Michael Basnight (hub_cap on irc). Michael has lead the project since its inception at rackspace. He was the lead of the internal project, but has shifted his role within Rackspace to be fully dedicated to lead the public project. He is focused on the quality of the API, infrastructure, and testability of the project. He follows the openstack community closely and has contributed greatly to the project. He currently manages blueprints, runs the weekly meetings, and evangelizes reddwarf in the community. He has spoken at many of the OpenStack conferences and has attended almost all of the conferences since reddwarf began within Rackspace.&lt;br /&gt;
&lt;br /&gt;
Other project developers and qualifications:&lt;br /&gt;
&lt;br /&gt;
Currently HP and Rackspace contribute to the reddwarf project. They operate as a joint team within the open. They are listed below.&lt;br /&gt;
&lt;br /&gt;
GUYS::::: INSERT YOUR QUALS HERE :::::::&lt;br /&gt;
&lt;br /&gt;
Infrastructure requirements (testing, etc): &lt;br /&gt;
&lt;br /&gt;
Reddwarf has built its own testing environment. Its currently run as a gating job within by jenkins. Tox runs pep8 and unit tests on each commit through openstack gerrit. The reddwarf developers understand that, over time, they will adopt the openstack testing frameworks for all new functional tests. The core of reddwarf is run on openstack and installed within devstack. Reddwarf-integration, a project on stackforge, controls the installation and setup of reddwarf for development and testing. Tests are run in a openstack/kvm environment.&lt;br /&gt;
&lt;br /&gt;
Have all current contributors agreed to the OpenStack CLA? &lt;br /&gt;
&lt;br /&gt;
Yes.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=ReddwarfAppliesForIncubation&amp;diff=20705</id>
		<title>ReddwarfAppliesForIncubation</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=ReddwarfAppliesForIncubation&amp;diff=20705"/>
				<updated>2013-04-17T23:38:11Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Project codename: &lt;br /&gt;
&lt;br /&gt;
reddwarf&lt;br /&gt;
&lt;br /&gt;
Summary (one sentence abstract of the project):&lt;br /&gt;
&lt;br /&gt;
A control plane for managing multiple database technologies.&lt;br /&gt;
&lt;br /&gt;
Detailed Description:&lt;br /&gt;
&lt;br /&gt;
Reddwarf is Database as a Service for Openstack. It's designed to run entirely on OpenStack, with the goal of allowing users to quickly and easily utilize the features of a database without the burden of handling complex administrative tasks. Cloud users and database administrators can provision and manage multiple database instances as needed. Initially, the service will focus on providing resource isolation at high performance while automating complex administrative tasks including deployment, configuration, patching, backups, restores, and monitoring. The future of Reddwarf will consume multiple database technologies, including relational and non relational technologies. The vision is for Reddwarf to control any datastore that requires ongoing maintanence, data integrity, and replication.&lt;br /&gt;
&lt;br /&gt;
Reddwarf is a consumer of OpenStack. It is built on and leverages core openstack infrastructure services. It allows a service provider the flexibility of deployment and configuration of the core OpenStack components, and uses those components as the building blocks of its service. This includes Keystone for auth, nova for instance creation, cinder for volume support, glance for images, swift to store backups, and quantum for networking. We hope to eventually consume cielometer for metrics and heat for initial image creation, and potentially bare metal to spin up reddwarf instances for the infastructure database(s) within a nova on nova install.&lt;br /&gt;
&lt;br /&gt;
One may ask how is this different from Heat. We will consume heat to set up a initial mysql datastore, which fits perfectly into our vision for using openstack services. The main differentiator for datastores is that they require specific maintainence to back up, restore, and keep continued maintainence of replication, slaves, and yet to be determined management tasks. A datastore is not simply a fire and forget resource. It needs constant monitoring and we want to use this as the differenciator between reddwarf and a service for spinning up fire and forget resources. As heat continues to evolve, and some maintanence tasks can be done through it, such as upgrades and restarts, we will consume those services. Our goal is to focus on the specifics of keeping a datastore online and use other projects as much as possible for the smaller tasks. &lt;br /&gt;
&lt;br /&gt;
Basic roadmap for the project:&lt;br /&gt;
&lt;br /&gt;
Reddwarf can currrently deploy multiple mysql implementations. The API is evolving with new features, but as it stands the API is very stable in its implementation for the basic tasks. In the codebase as it stands today, both stock mysql and percona mysql are supported. The system is built such that multiple technolgies can be leveraged, from the datastore implementation itself, to the tools used to keep maintiannce ongoing. for instance, the backup feature, which is inflight, allows the cloud deployer to choose mysqldump or xtrabackup to backup the datastore.&lt;br /&gt;
&lt;br /&gt;
From a datastore perspective, Reddwarf's functionality currently is the ability to spin up secured mysql databases, create/destroy schemas and users, and enable a root user. From a openstack project perspective, Reddwarf also has quota and limit support and consumes Oslo to build out the architecture of the api.&lt;br /&gt;
&lt;br /&gt;
Reddwarf has a healthy backlog of features in order to fufil mysql features. Some of the inflight features are configuration (my.cnf) edits, manual backups and restores, notifications. Others that are not yet started include automated backups, including point in time restores, API types/versions, full featured user modification, and replication. this does not encompass all features. The current roadmap can be viewed as blueprints on launchpad.&lt;br /&gt;
&lt;br /&gt;
There are also many housekeeping blueprints to maintain parity with other openstack projects. Reddwarf has strived to keep in line with the ecosystem, but there are some things that are necessary, such as completing integration with devstack. As it stands, reddwarf is integrated as much as possible today, and uses local.sh to instrument the reddwarf infrastructure. It also currently uses vm-gating and runs functional tests on every review.&lt;br /&gt;
&lt;br /&gt;
Location of project source code:&lt;br /&gt;
&lt;br /&gt;
Reddwarf operates like any other openstack project. blueprints are registered and approved in the same fashion as the other projects, release cycles are followed, and code is gated through unit tess and functional tests. The codebase is in stackforge. Reviews are in openstack gerrit.&lt;br /&gt;
&lt;br /&gt;
Programming language, required technology dependencies: &lt;br /&gt;
&lt;br /&gt;
Python. pypi dependencies are listed in pip-requires and test-requires.&lt;br /&gt;
&lt;br /&gt;
Is project currently open sourced? What license?: &lt;br /&gt;
&lt;br /&gt;
Yes. Apache 2.0.&lt;br /&gt;
&lt;br /&gt;
Level of maturity of software and team:&lt;br /&gt;
&lt;br /&gt;
The team has followed the openstack ecosystem for a long time. They are well versed in understanding the ecosystem and follow it as closely as possible. Weekly meetings are held, a presence is always in irc, reviews are thuroughly picked through, and they hold a high standard for all code that lands in master. All features require unit and functional tests, and gating is done on these thru openstack jenkins and a external jenkins for said functional tests. The software is run in production currently by rackspace on thousands of nodes.&lt;br /&gt;
&lt;br /&gt;
Proposed project technical lead and qualifications:&lt;br /&gt;
&lt;br /&gt;
Michael Basnight (hub_cap on irc). Michael has lead the project since its inception at rackspace. He was the lead of the internal project, but has shifted his role within rackspace to be fully dedicated to lead the public project. He is focused on the quality of the API, infrastructure, and testability of the project. He follows the openstack community closely and has contributed greatly to the project. He currently manages blueprints, runs the weekly meetings, and evanglises reddwarf in the community. He has spoken at many of the openstack conferences and has attended almost all of the conferences since reddwarf began within rackspace.&lt;br /&gt;
&lt;br /&gt;
Other project developers and qualifications:&lt;br /&gt;
&lt;br /&gt;
Currently HP and rackspace contribute to the reddwarf project. They operate as a joint team within the open. They are listed below.&lt;br /&gt;
&lt;br /&gt;
GUYS::::: INSERT YOUR QUALS HERE :::::::&lt;br /&gt;
&lt;br /&gt;
Infrastructure requirements (testing, etc): &lt;br /&gt;
&lt;br /&gt;
Reddwarf has built its own testing environment. Its currently run as a gating job within by jenkins. Tox runs pep8 and unit tests on each commit through openstack gerrit. The reddwarf developers understand that, over time, they will adopt the openstack testing frameworks for all new functional tests. The core of reddwarf is run on openstack and installed within devstack. Reddwarf-integration, a project on stackforge, controls the installation and setup of reddwarf for development and testing. Tests are run in a openstack/kvm environment.&lt;br /&gt;
&lt;br /&gt;
Have all current contributors agreed to the OpenStack CLA? &lt;br /&gt;
&lt;br /&gt;
Yes.&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Meetings/RedDwarfMeeting&amp;diff=19926</id>
		<title>Meetings/RedDwarfMeeting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Meetings/RedDwarfMeeting&amp;diff=19926"/>
				<updated>2013-04-02T21:13:49Z</updated>
		
		<summary type="html">&lt;p&gt;Tim Simpson: /* Agenda for the next meeting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Weekly RedDwarf (DBaaS) team meeting =&lt;br /&gt;
&lt;br /&gt;
For those interested, we have meetings in #openstack-meeting-alt Weekly, Tuesdays at 21:00 UTC. Feel free to add items in the agenda below.&lt;br /&gt;
&lt;br /&gt;
== Agenda for the next meeting ==&lt;br /&gt;
* Update to Action items (http://eavesdrop.openstack.org/meetings/reddwarf/2013/reddwarf.2013-03-26-20.59.html)&lt;br /&gt;
* Status of CI int-tests&lt;br /&gt;
* Backups Discussion&lt;br /&gt;
**Status&lt;br /&gt;
**Division of Labor&lt;br /&gt;
* Notifications Plan&lt;br /&gt;
* RootWrap&lt;br /&gt;
* Need to ensure Quotas works with XML, avoid skipping tests if the Quota tests fails.&lt;br /&gt;
* Actions / Action Events&lt;br /&gt;
* Open Discussion&lt;/div&gt;</summary>
		<author><name>Tim Simpson</name></author>	</entry>

	</feed>