)]}'
{"trove/common/cfg.py":[{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"349128d80cb5050cd32d2e952df8b181cfc13e81","unresolved":false,"context_lines":[{"line_number":903,"context_line":"]"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"# Cassandra default (2.1)"},{"line_number":906,"context_line":"cassandra_2_1_group \u003d cfg.OptGroup("},{"line_number":907,"context_line":"    \u0027cassandra_2.1\u0027, title\u003d\u0027Cassandra 2.1 options\u0027,"},{"line_number":908,"context_line":"    help\u003d\"Oslo option group designed for Cassandra datastore\")"},{"line_number":909,"context_line":"cassandra_2_1_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_526f9ffb","line":906,"range":{"start_line":906,"start_character":0,"end_line":906,"end_character":19},"updated":"2019-03-22 10:34:28.000000000","message":"Let\u0027s define a default set of options in a base group named \"cassandra\", and than define config options for Cassandra 2.1 and 2.2 \"inheriting\" by the base options. By the way we will handle backward compatibility and additional \"cassandra_2_1_group_bc\" will not be needed.","commit_id":"087c9424739486c6c92e325f6b829e5c0533a5ef"},{"author":{"_account_id":29995,"name":"Kasper Hasior","email":"k.hasior@partner.samsung.com","username":"k.hasior"},"change_message_id":"bf6c3f0be812e2c370e20218486d97454f5a653e","unresolved":false,"context_lines":[{"line_number":903,"context_line":"]"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"# Cassandra default (2.1)"},{"line_number":906,"context_line":"cassandra_2_1_group \u003d cfg.OptGroup("},{"line_number":907,"context_line":"    \u0027cassandra_2.1\u0027, title\u003d\u0027Cassandra 2.1 options\u0027,"},{"line_number":908,"context_line":"    help\u003d\"Oslo option group designed for Cassandra datastore\")"},{"line_number":909,"context_line":"cassandra_2_1_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_2bbee8b3","line":906,"range":{"start_line":906,"start_character":0,"end_line":906,"end_character":19},"in_reply_to":"5fc1f717_526f9ffb","updated":"2019-03-25 11:06:58.000000000","message":"Done","commit_id":"087c9424739486c6c92e325f6b829e5c0533a5ef"}],"trove/common/template.py":[{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"f7b345f8120e1b33ac1f8d15c67d6352ad5c7f00","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    \u0027pxc\u0027: configurations.MySQLConfParser,"},{"line_number":36,"context_line":"    \u0027postgresql\u0027: configurations.PostgresqlConfParser,"},{"line_number":37,"context_line":"    \u0027cassandra\u0027: configurations.CassandraConfParser, # backward compatibility"},{"line_number":38,"context_line":"    \u0027cassandra_2.1\u0027: configurations.CassandraConfParser,"},{"line_number":39,"context_line":"    \u0027cassandra_2.2\u0027: configurations.CassandraConfParser,"},{"line_number":40,"context_line":"    \u0027redis\u0027: configurations.RedisConfParser,"},{"line_number":41,"context_line":"    \u0027vertica\u0027: configurations.VerticaConfParser,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_cfc2b053","line":38,"range":{"start_line":38,"start_character":15,"end_line":38,"end_character":18},"updated":"2019-03-26 09:10:28.000000000","message":"Let\u0027s be consistent with naming convention used for managers: \"cassandra_2_2\".","commit_id":"a4443422e0f58fc2d534d0cdd956dd037f6cbebb"},{"author":{"_account_id":29995,"name":"Kasper Hasior","email":"k.hasior@partner.samsung.com","username":"k.hasior"},"change_message_id":"721d42f51adc09c3b6afe562d4c2fd0667846549","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    \u0027pxc\u0027: configurations.MySQLConfParser,"},{"line_number":36,"context_line":"    \u0027postgresql\u0027: configurations.PostgresqlConfParser,"},{"line_number":37,"context_line":"    \u0027cassandra\u0027: configurations.CassandraConfParser, # backward compatibility"},{"line_number":38,"context_line":"    \u0027cassandra_2.1\u0027: configurations.CassandraConfParser,"},{"line_number":39,"context_line":"    \u0027cassandra_2.2\u0027: configurations.CassandraConfParser,"},{"line_number":40,"context_line":"    \u0027redis\u0027: configurations.RedisConfParser,"},{"line_number":41,"context_line":"    \u0027vertica\u0027: configurations.VerticaConfParser,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_78aca3ec","line":38,"range":{"start_line":38,"start_character":15,"end_line":38,"end_character":18},"in_reply_to":"5fc1f717_cfc2b053","updated":"2019-03-26 12:21:24.000000000","message":"Done","commit_id":"a4443422e0f58fc2d534d0cdd956dd037f6cbebb"}],"trove/guestagent/datastore/experimental/cassandra/2/1/__init__.py":[{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"be3d1136f7110f0c4f58d6f65d85b01c7b898677","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5fc1f717_1d915af2","updated":"2019-03-20 15:21:39.000000000","message":"I am hesitant regarding nesting each part of datastore version in the directory structure:\n\n cassandra/2/1/service.py\n\nThis solution results in \"strange\" module paths such as:\n\n trove.guestagent.datastore.experimental.cassandra.2.1.service\n\n... which doesn\u0027t comply with PEP8 [1][2] conventions.\n\nWhat I propose is to introduce a flat structure:\n\n cassandra/\n cassandra_2_1\n cassandra_2_2\n cassandra_3_11\n ...\n\n... or something in-between:\n\n cassandra/\n     2_1/\n         manager.py\n         service.py\n     2_2/\n         manager.py\n         service.py\n     3_11/\n        ...\n     manager.py\n     service.py\n\nActually I like the last approach most. It gives a reasonable balance.\n\nNote \"cassandra/manager|service.py\" - it serves as a base for Cassandra strategy. Maybe it should implement a default 2.1 strategy for backward compatibility?\n\nLet me know what is your opinion.\n\n[1] https://www.python.org/dev/peps/pep-0008/#names-to-avoid\n[2] https://www.python.org/dev/peps/pep-0008/#package-and-module-names","commit_id":"6a93ecd37918f72b9761d5b1f476f2fc4474e4a6"},{"author":{"_account_id":29995,"name":"Kasper Hasior","email":"k.hasior@partner.samsung.com","username":"k.hasior"},"change_message_id":"c87920f68dd511780aca126322f14af799a15cf2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5fc1f717_7c7c0eb5","in_reply_to":"5fc1f717_1d915af2","updated":"2019-03-22 10:43:34.000000000","message":"My intention was basically to achieve two goals:\n1) Map datastores versions directly and unambiguously into the Trove code structure;\n2) Avoid introducing different similar names for the same datastore version, e.g. In trove/common/cfg.py datastores are mapped to names like \"Cassandra_2.1\" (I find it the most intuitive solution from the end-user perspective).\nUnfortunately my solution doesn\u0027t follow PEP8 rules and requires using importlib to import modules designed this way.\nI would choose your first proposal because the second one also breaks PEP8 rules.\n\nAll base cassandra modules were moved to \"cassandra_common\" directory. According to your suggestion I am going to put them in \"cassandra\" dir. Actually these base modules implemet all Cassandra 2.1 functionalities atm but I am not sure about using it for backward compatibility - for now backward compatibility is achieved by mapping \u0027cassandra\u0027 name in trove/common/cfg.py to cassandra/2/1 (cassandra_2_1 in the future).","commit_id":"6a93ecd37918f72b9761d5b1f476f2fc4474e4a6"}],"trove/guestagent/datastore/experimental/cassandra/3/0/__init__.py":[{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"be3d1136f7110f0c4f58d6f65d85b01c7b898677","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5fc1f717_0e883e6f","updated":"2019-03-20 15:21:39.000000000","message":"This change is huge and difficult to document. Even though the implementation for Cassandra 3.0 is very similar to Cassandra 2.1 I would recommend splitting this change into two. The first one as a datastore versioning framework with Cassandra 2.1 for backward compatibility and 2.2 as a first additional version. The second with support for Cassandra 3.0. Almost 5k lines of code - this is huge, let\u0027s simplify it.","commit_id":"6a93ecd37918f72b9761d5b1f476f2fc4474e4a6"},{"author":{"_account_id":29995,"name":"Kasper Hasior","email":"k.hasior@partner.samsung.com","username":"k.hasior"},"change_message_id":"c87920f68dd511780aca126322f14af799a15cf2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5fc1f717_775f490e","in_reply_to":"5fc1f717_0e883e6f","updated":"2019-03-22 10:43:34.000000000","message":"Ok, so now I am going to focus on Cassandra 2.2.","commit_id":"6a93ecd37918f72b9761d5b1f476f2fc4474e4a6"}],"trove/guestagent/datastore/experimental/cassandra/manager.py":[{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"349128d80cb5050cd32d2e952df8b181cfc13e81","unresolved":false,"context_lines":[{"line_number":32,"context_line":"CONF \u003d cfg.CONF"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class CassandraBaseManager(manager.Manager):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    GUEST_LOG_DEFS_SYSTEM_LABEL \u003d \u0027system\u0027"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_d2de2fd9","line":35,"range":{"start_line":35,"start_character":6,"end_line":35,"end_character":26},"updated":"2019-03-22 10:34:28.000000000","message":"You can consider shortening the class name to just: CassandraManager.","commit_id":"087c9424739486c6c92e325f6b829e5c0533a5ef"},{"author":{"_account_id":29995,"name":"Kasper Hasior","email":"k.hasior@partner.samsung.com","username":"k.hasior"},"change_message_id":"bf6c3f0be812e2c370e20218486d97454f5a653e","unresolved":false,"context_lines":[{"line_number":32,"context_line":"CONF \u003d cfg.CONF"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class CassandraBaseManager(manager.Manager):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    GUEST_LOG_DEFS_SYSTEM_LABEL \u003d \u0027system\u0027"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_cb0ac477","line":35,"range":{"start_line":35,"start_character":6,"end_line":35,"end_character":26},"in_reply_to":"5fc1f717_d2de2fd9","updated":"2019-03-25 11:06:58.000000000","message":"Done","commit_id":"087c9424739486c6c92e325f6b829e5c0533a5ef"}],"trove/guestagent/datastore/experimental/cassandra_2_1/manager.py":[{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"349128d80cb5050cd32d2e952df8b181cfc13e81","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class Manager(manager.CassandraBaseManager):"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def __init__(self, manager_name\u003d\u0027cassandra_2.1\u0027):"},{"line_number":23,"context_line":"        super(Manager, self).__init__(manager_name\u003dmanager_name)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def build_app(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_d2d4efeb","line":22,"range":{"start_line":22,"start_character":37,"end_line":22,"end_character":50},"updated":"2019-03-22 10:34:28.000000000","message":"Let\u0027s avoid dots (\".\") in manager names and map them to manager module names, e.g. \"cassandra_2_2\".","commit_id":"087c9424739486c6c92e325f6b829e5c0533a5ef"},{"author":{"_account_id":29995,"name":"Kasper Hasior","email":"k.hasior@partner.samsung.com","username":"k.hasior"},"change_message_id":"bf6c3f0be812e2c370e20218486d97454f5a653e","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class Manager(manager.CassandraBaseManager):"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def __init__(self, manager_name\u003d\u0027cassandra_2.1\u0027):"},{"line_number":23,"context_line":"        super(Manager, self).__init__(manager_name\u003dmanager_name)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def build_app(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_0b63ec43","line":22,"range":{"start_line":22,"start_character":37,"end_line":22,"end_character":50},"in_reply_to":"5fc1f717_d2d4efeb","updated":"2019-03-25 11:06:58.000000000","message":"Done","commit_id":"087c9424739486c6c92e325f6b829e5c0533a5ef"}],"trove/guestagent/datastore/experimental/cassandra_2_1/service.py":[{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"349128d80cb5050cd32d2e952df8b181cfc13e81","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class CassandraApp(service.CassandraApp):"},{"line_number":20,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_32ff7368","line":20,"range":{"start_line":20,"start_character":4,"end_line":20,"end_character":8},"updated":"2019-03-22 10:34:28.000000000","message":"Avoid ugly \"pass\" statements. Let\u0027s add a doc-string instead:\n\n \"\"\"Service for Cassandra 2.1\"\"\"","commit_id":"087c9424739486c6c92e325f6b829e5c0533a5ef"},{"author":{"_account_id":29995,"name":"Kasper Hasior","email":"k.hasior@partner.samsung.com","username":"k.hasior"},"change_message_id":"bf6c3f0be812e2c370e20218486d97454f5a653e","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class CassandraApp(service.CassandraApp):"},{"line_number":20,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_2b7fc8e0","line":20,"range":{"start_line":20,"start_character":4,"end_line":20,"end_character":8},"in_reply_to":"5fc1f717_32ff7368","updated":"2019-03-25 11:06:58.000000000","message":"Done","commit_id":"087c9424739486c6c92e325f6b829e5c0533a5ef"}],"trove/guestagent/datastore/experimental/cassandra_2_2/manager.py":[{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"349128d80cb5050cd32d2e952df8b181cfc13e81","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class Manager(manager.CassandraBaseManager):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __init__(self, manager_name\u003d\u0027cassandra_2.2\u0027):"},{"line_number":24,"context_line":"        super(Manager, self).__init__(manager_name\u003dmanager_name)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def build_app(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_72789bf7","line":23,"range":{"start_line":23,"start_character":37,"end_line":23,"end_character":50},"updated":"2019-03-22 10:34:28.000000000","message":"Let\u0027s avoid dots (\".\") in manager names and map them to manager module names, e.g. \"cassandra_2_2\".","commit_id":"087c9424739486c6c92e325f6b829e5c0533a5ef"},{"author":{"_account_id":29995,"name":"Kasper Hasior","email":"k.hasior@partner.samsung.com","username":"k.hasior"},"change_message_id":"bf6c3f0be812e2c370e20218486d97454f5a653e","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class Manager(manager.CassandraBaseManager):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def __init__(self, manager_name\u003d\u0027cassandra_2.2\u0027):"},{"line_number":24,"context_line":"        super(Manager, self).__init__(manager_name\u003dmanager_name)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def build_app(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_ab6ad816","line":23,"range":{"start_line":23,"start_character":37,"end_line":23,"end_character":50},"in_reply_to":"5fc1f717_72789bf7","updated":"2019-03-25 11:06:58.000000000","message":"Done","commit_id":"087c9424739486c6c92e325f6b829e5c0533a5ef"}],"trove/guestagent/datastore/experimental/cassandra_2_2/service.py":[{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"349128d80cb5050cd32d2e952df8b181cfc13e81","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        time.sleep(5)"},{"line_number":43,"context_line":"        return super(CassandraApp, self).secure(update_user, password)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def __reset_user_password_to_default(self, username):"},{"line_number":46,"context_line":"        service.LOG.debug(\"Resetting the password of user \u0027%s\u0027 to \u0027%s\u0027.\""},{"line_number":47,"context_line":"                          % (username, self.default_superuser_password))"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_b24e03bf","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":40},"updated":"2019-03-22 10:34:28.000000000","message":"Methods with double underscore are often considered as \"private\" ones. Overriding such method in derived class is a little bit confusing. It would better have just one underscore to mark it as \"protected\" - allowed to override. This is not an official naming standard nor recommened naming convention, however, to prevent confusion let\u0027s remove one underscore.","commit_id":"087c9424739486c6c92e325f6b829e5c0533a5ef"},{"author":{"_account_id":29995,"name":"Kasper Hasior","email":"k.hasior@partner.samsung.com","username":"k.hasior"},"change_message_id":"bf6c3f0be812e2c370e20218486d97454f5a653e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        time.sleep(5)"},{"line_number":43,"context_line":"        return super(CassandraApp, self).secure(update_user, password)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def __reset_user_password_to_default(self, username):"},{"line_number":46,"context_line":"        service.LOG.debug(\"Resetting the password of user \u0027%s\u0027 to \u0027%s\u0027.\""},{"line_number":47,"context_line":"                          % (username, self.default_superuser_password))"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_8bdb5ceb","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":40},"in_reply_to":"5fc1f717_b24e03bf","updated":"2019-03-25 11:06:58.000000000","message":"Done","commit_id":"087c9424739486c6c92e325f6b829e5c0533a5ef"}],"trove/guestagent/datastore/experimental/cassandra_common/manager.py":[{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"be3d1136f7110f0c4f58d6f65d85b01c7b898677","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5fc1f717_2e909a95","updated":"2019-03-20 15:21:39.000000000","message":"Instead of \"cassandra_common\" namespace let\u0027s put base manager and service into \"cassandra\" namespace.","commit_id":"6a93ecd37918f72b9761d5b1f476f2fc4474e4a6"},{"author":{"_account_id":29995,"name":"Kasper Hasior","email":"k.hasior@partner.samsung.com","username":"k.hasior"},"change_message_id":"c87920f68dd511780aca126322f14af799a15cf2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5fc1f717_f7a819dc","in_reply_to":"5fc1f717_2e909a95","updated":"2019-03-22 10:43:34.000000000","message":"Ok","commit_id":"6a93ecd37918f72b9761d5b1f476f2fc4474e4a6"}],"trove/templates/cassandra_2.1/config.template":[{"author":{"_account_id":28695,"name":"Bartosz Zurkowski","email":"b.zurkowski@samsung.com","username":"b.zurkowski"},"change_message_id":"be3d1136f7110f0c4f58d6f65d85b01c7b898677","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5fc1f717_7a20a4b1","updated":"2019-03-20 15:21:39.000000000","message":"Let\u0027s add a separate namespace for each Cassandra version nested inside the \"cassandra\" directory. Similary to MySQL (\"templates/mysql/5.5\"), Percona and PXC:\n\n cassandra/\n     2.1/\n     2.2/","commit_id":"6a93ecd37918f72b9761d5b1f476f2fc4474e4a6"}]}
