)]}'
{"trove/guestagent/datastore/stable/mysql/manager.py":[{"author":{"_account_id":10266,"name":"Simon Chang","email":"schang@tesora.com","username":"changsimon"},"change_message_id":"eb307f722e86648a56258463757ef66dd27a680b","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from trove.guestagent import volume"},{"line_number":26,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlAppStatus"},{"line_number":27,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlAdmin"},{"line_number":28,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlApp"},{"line_number":29,"context_line":"from trove.guestagent.strategies.replication import get_replication_strategy"},{"line_number":30,"context_line":"from trove.openstack.common import log as logging"},{"line_number":31,"context_line":"from trove.common.i18n import _"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba7be1f8_df6e18c9","line":28,"updated":"2015-02-20 20:59:58.000000000","message":"Being explicit in classification is good. However, in general ...\n\ntrove.guestagent.datastore.experimental.mysql.service\n\n... warns me that this is experimental.\n\n\ntrove.guestagent.datastore.mysql.service\n\n... already means stable to me.","commit_id":"e10d5dc4bc2f4030331fbee19a18f2549162a702"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"0a5c1fafa7abef12b722a320c1ab6ecedf089c82","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from trove.guestagent import volume"},{"line_number":26,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlAppStatus"},{"line_number":27,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlAdmin"},{"line_number":28,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlApp"},{"line_number":29,"context_line":"from trove.guestagent.strategies.replication import get_replication_strategy"},{"line_number":30,"context_line":"from trove.openstack.common import log as logging"},{"line_number":31,"context_line":"from trove.common.i18n import _"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba7be1f8_a9fb5d45","line":28,"in_reply_to":"ba7be1f8_356a6c81","updated":"2015-02-25 16:59:31.000000000","message":"I\u0027m not sure I fully buy in to that argument. \n\nThe signalling mechanism we want to achieve via this BP, imho is to tell users and operators what parts of the trove codebase are not sufficiently tested and the experimental -- and technical preview classifications are sufficient for that. \n\nThe default for _any_ trove code is that is should be exercised in the gate and therefore stable -- why is it that trove.common is not marked as trove.common.stable above? Similarly for trove.taskmanager or trove.instance or any of the trove models that are already tested today. The reason is that there is an implied notion of stability in as much as this code has been exercised as part of the gate tests, and there is a guarantee that things will work. Adding a separate \"stable\" classification here, therefore imo makes things murkier here.   \n\nAnother good reason to leave the stable code as is, without changing their module path is backwards compat. If folks out there are already using code that is stable, they can continue doing so transparently after an upgrade. Changing from trove.guestagent.datastore.mysql.service to trove.guestagent.datastore.stable.mysql.service would meant that there\u0027s a manual step required by operators during upgrade that would force them to change the module load path of their guestagent manager, and imo that should not be necessary for a stable datastore.","commit_id":"e10d5dc4bc2f4030331fbee19a18f2549162a702"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"cf576c51b78d7420cb47bf7b239693bb9e2ebaec","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from trove.guestagent import volume"},{"line_number":26,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlAppStatus"},{"line_number":27,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlAdmin"},{"line_number":28,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlApp"},{"line_number":29,"context_line":"from trove.guestagent.strategies.replication import get_replication_strategy"},{"line_number":30,"context_line":"from trove.openstack.common import log as logging"},{"line_number":31,"context_line":"from trove.common.i18n import _"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba7be1f8_65b43d82","line":28,"in_reply_to":"ba7be1f8_4f1165ab","updated":"2015-02-25 09:24:10.000000000","message":"I tend to agree with Simon\u0027s reasoning here -- I think we need to call out the guest datastores which are experimental, but can leave the stable ones in place -- i.e. don\u0027t explicitly call out that a guest datastore is stable.\n\nThis has the added advantage of not messing about with the module path of guest datastores that are currently stable in trove.","commit_id":"e10d5dc4bc2f4030331fbee19a18f2549162a702"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"14dd571221f9134b646d12f20ac336339fe3202b","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from trove.guestagent import volume"},{"line_number":26,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlAppStatus"},{"line_number":27,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlAdmin"},{"line_number":28,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlApp"},{"line_number":29,"context_line":"from trove.guestagent.strategies.replication import get_replication_strategy"},{"line_number":30,"context_line":"from trove.openstack.common import log as logging"},{"line_number":31,"context_line":"from trove.common.i18n import _"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba7be1f8_356a6c81","line":28,"in_reply_to":"ba7be1f8_65b43d82","updated":"2015-02-25 12:00:18.000000000","message":"So I could make the converse argument and state that we would only have the stable ones tagged as such and leave the others untagged. \n\nIn a general sense, if there are only two classifications (Good and Bad, White and Black, ...) it makes sense to imply by absence of a classification.\n\nNow, in our case we have a 3 way classification for datastores and a 2 way classification for strategies. It is considerably more clear to classify all of them.\n\nThe \u0027cost\u0027 of moving the current datastores is small, it is a one time thing. And it will make it unambiguous in the future.\n\nI strongly recommend against the notion of an implied classification.","commit_id":"e10d5dc4bc2f4030331fbee19a18f2549162a702"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"9dfc93c006ae11030940bf0f2300e26683a808b8","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from trove.guestagent import volume"},{"line_number":26,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlAppStatus"},{"line_number":27,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlAdmin"},{"line_number":28,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlApp"},{"line_number":29,"context_line":"from trove.guestagent.strategies.replication import get_replication_strategy"},{"line_number":30,"context_line":"from trove.openstack.common import log as logging"},{"line_number":31,"context_line":"from trove.common.i18n import _"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba7be1f8_3aab298a","line":28,"in_reply_to":"ba7be1f8_a9fb5d45","updated":"2015-02-25 17:06:49.000000000","message":"I believe it is generally industry accepted practice to flag things as \"generally available\", \"released\" or otherwise stamped as \"stable\".\n\nI don\u0027t believe that in the future indicating something is \"stable\" by dropping the \u0027experimental\u0027 qualifier sends quite the same message as marking it \"stable\".\n\nBut, let\u0027s decide and get this over the finish line.","commit_id":"e10d5dc4bc2f4030331fbee19a18f2549162a702"},{"author":{"_account_id":14829,"name":"Ashleigh Farnham","username":"ashleighfarnham","inactive":true},"change_message_id":"d3472b9fb1c478fa5017dd3135ee54bb7833616f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from trove.guestagent import volume"},{"line_number":26,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlAppStatus"},{"line_number":27,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlAdmin"},{"line_number":28,"context_line":"from trove.guestagent.datastore.stable.mysql.service import MySqlApp"},{"line_number":29,"context_line":"from trove.guestagent.strategies.replication import get_replication_strategy"},{"line_number":30,"context_line":"from trove.openstack.common import log as logging"},{"line_number":31,"context_line":"from trove.common.i18n import _"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba7be1f8_4f1165ab","line":28,"in_reply_to":"ba7be1f8_df6e18c9","updated":"2015-02-23 19:30:36.000000000","message":"I agree with your reasoning here Simon. I don\u0027t know if we need to explicitly say when something is stable. Though it does make it clear in the event that something sneaks through that should have been marked experimental but wasn\u0027t. Something like that may stand out with this approach.","commit_id":"e10d5dc4bc2f4030331fbee19a18f2549162a702"}],"trove/guestagent/strategies/backup/experimental/couchbase_impl.py":[{"author":{"_account_id":10266,"name":"Simon Chang","email":"schang@tesora.com","username":"changsimon"},"change_message_id":"eb307f722e86648a56258463757ef66dd27a680b","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.common import exception"},{"line_number":20,"context_line":"from trove.common import utils"},{"line_number":21,"context_line":"from trove.guestagent.datastore.experimental.couchbase import service"},{"line_number":22,"context_line":"from trove.guestagent.datastore.experimental.couchbase import system"},{"line_number":23,"context_line":"from trove.guestagent.strategies.backup import base"},{"line_number":24,"context_line":"from trove.common.i18n import _"},{"line_number":25,"context_line":"from trove.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba7be1f8_c4b64f8a","line":22,"updated":"2015-02-20 20:59:58.000000000","message":"What if we want to add new features (let\u0027s say for example... replication) to a datastore that is already in stable status? Would the new feature code be implemented directly into stable? Or it would graduate through experimental, technical-preview, then stable.","commit_id":"e10d5dc4bc2f4030331fbee19a18f2549162a702"},{"author":{"_account_id":9746,"name":"Doug Shelley","email":"dougshelley66@gmail.com","username":"dougshelley"},"change_message_id":"f39be80adc94fb80c64373e08cf5aa8aa0616f6b","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.common import exception"},{"line_number":20,"context_line":"from trove.common import utils"},{"line_number":21,"context_line":"from trove.guestagent.datastore.experimental.couchbase import service"},{"line_number":22,"context_line":"from trove.guestagent.datastore.experimental.couchbase import system"},{"line_number":23,"context_line":"from trove.guestagent.strategies.backup import base"},{"line_number":24,"context_line":"from trove.common.i18n import _"},{"line_number":25,"context_line":"from trove.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba7be1f8_3ed0c1f5","line":22,"in_reply_to":"ba7be1f8_c1bb5ae3","updated":"2015-02-24 13:09:25.000000000","message":"Agree with Edmond that stable vs experimental will be governed by code reviewers.","commit_id":"e10d5dc4bc2f4030331fbee19a18f2549162a702"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"739ddc7b605939738015c7cae8a994968d032a1f","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.common import exception"},{"line_number":20,"context_line":"from trove.common import utils"},{"line_number":21,"context_line":"from trove.guestagent.datastore.experimental.couchbase import service"},{"line_number":22,"context_line":"from trove.guestagent.datastore.experimental.couchbase import system"},{"line_number":23,"context_line":"from trove.guestagent.strategies.backup import base"},{"line_number":24,"context_line":"from trove.common.i18n import _"},{"line_number":25,"context_line":"from trove.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba7be1f8_5bd90721","line":22,"in_reply_to":"ba7be1f8_c1bb5ae3","updated":"2015-02-24 12:39:37.000000000","message":"Yes, I could provide a sample of how to do that by splitting out MySQL and MariaDB/Percona?","commit_id":"e10d5dc4bc2f4030331fbee19a18f2549162a702"},{"author":{"_account_id":13355,"name":"Edmond Kotowski","email":"ekotowski@gmail.com","username":"ekotowski"},"change_message_id":"74596b1004e9a690e56d248c454ac81eef26d05c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.common import exception"},{"line_number":20,"context_line":"from trove.common import utils"},{"line_number":21,"context_line":"from trove.guestagent.datastore.experimental.couchbase import service"},{"line_number":22,"context_line":"from trove.guestagent.datastore.experimental.couchbase import system"},{"line_number":23,"context_line":"from trove.guestagent.strategies.backup import base"},{"line_number":24,"context_line":"from trove.common.i18n import _"},{"line_number":25,"context_line":"from trove.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba7be1f8_c1bb5ae3","line":22,"in_reply_to":"ba7be1f8_c4b64f8a","updated":"2015-02-24 03:25:25.000000000","message":"As long as you added the appropriate int-tests and unit tests with the new feature it could stay in stable. You could also potentially put the new feature code first in experimental while the other mature code stays in stable.  Once you have the int-tests running for the new feature you could move it. This will have to basically be governed on code reviews.","commit_id":"e10d5dc4bc2f4030331fbee19a18f2549162a702"}],"trove/tests/unittests/backup/test_backupagent.py":[{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"cf576c51b78d7420cb47bf7b239693bb9e2ebaec","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from trove.common.context import TroveContext"},{"line_number":24,"context_line":"from trove.conductor import api as conductor_api"},{"line_number":25,"context_line":"from trove.guestagent.common import operating_system"},{"line_number":26,"context_line":"from trove.guestagent.strategies.backup.stable import mysql_impl"},{"line_number":27,"context_line":"from trove.guestagent.strategies.backup.experimental import couchbase_impl"},{"line_number":28,"context_line":"from trove.guestagent.strategies.restore.base import RestoreRunner"},{"line_number":29,"context_line":"from trove.backup.state import BackupState"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba7be1f8_a0146344","line":26,"updated":"2015-02-25 09:24:10.000000000","message":"Similarly for strategies -- I prefer leaving the stable ones where they exist today.","commit_id":"e10d5dc4bc2f4030331fbee19a18f2549162a702"}]}
