)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"831c6721cfc9546f6363b8db3c909dabfd27f5a9","unresolved":false,"context_lines":[{"line_number":90,"context_line":"Used the existing operating_system interface to update file"},{"line_number":91,"context_line":"ownership."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"The system module was removed and its contents moved to the Application"},{"line_number":94,"context_line":"class. This is to reduce the number of files and help facilitate"},{"line_number":95,"context_line":"overriding."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Implements: blueprint cassandra-database-user-functions"},{"line_number":98,"context_line":"Depends-On: I0faa3a4b9c7302064fb2413b572e2fc515efff0d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"5a5ae5dd_2287f762","line":95,"range":{"start_line":93,"start_character":0,"end_line":95,"end_character":11},"updated":"2016-02-03 06:33:58.000000000","message":"reducing the number of files is not a necessarily a good reason to remove the file but i dont understand how overriding would make a difference here? \n\nThe system file has been there to remove the os specific code to a common place across the datastores.","commit_id":"b398bccbe4335a9b5bca83839d99d8243464fa62"}],"trove/common/cfg.py":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"831c6721cfc9546f6363b8db3c909dabfd27f5a9","unresolved":false,"context_lines":[{"line_number":827,"context_line":"    cfg.StrOpt(\u0027root_controller\u0027,"},{"line_number":828,"context_line":"               default\u003d\u0027trove.extensions.common.service.DefaultRootController\u0027,"},{"line_number":829,"context_line":"               help\u003d\u0027Root controller implementation for cassandra.\u0027),"},{"line_number":830,"context_line":"    cfg.ListOpt(\u0027ignore_users\u0027, default\u003d[],"},{"line_number":831,"context_line":"                help\u003d\u0027Users to exclude when listing users.\u0027),"},{"line_number":832,"context_line":"    cfg.ListOpt(\u0027ignore_dbs\u0027, default\u003d[\u0027system\u0027, \u0027system_auth\u0027,"},{"line_number":833,"context_line":"                                       \u0027system_traces\u0027],"}],"source_content_type":"text/x-python","patch_set":31,"id":"7a5de9d1_b49b0972","line":830,"range":{"start_line":830,"start_character":32,"end_line":830,"end_character":42},"updated":"2016-02-03 06:33:58.000000000","message":"should we ignore os_admin by default?","commit_id":"b398bccbe4335a9b5bca83839d99d8243464fa62"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"a00c6aa0ef940fa892eaca2bc458bfdc95016340","unresolved":false,"context_lines":[{"line_number":827,"context_line":"    cfg.StrOpt(\u0027root_controller\u0027,"},{"line_number":828,"context_line":"               default\u003d\u0027trove.extensions.common.service.DefaultRootController\u0027,"},{"line_number":829,"context_line":"               help\u003d\u0027Root controller implementation for cassandra.\u0027),"},{"line_number":830,"context_line":"    cfg.ListOpt(\u0027ignore_users\u0027, default\u003d[],"},{"line_number":831,"context_line":"                help\u003d\u0027Users to exclude when listing users.\u0027),"},{"line_number":832,"context_line":"    cfg.ListOpt(\u0027ignore_dbs\u0027, default\u003d[\u0027system\u0027, \u0027system_auth\u0027,"},{"line_number":833,"context_line":"                                       \u0027system_traces\u0027],"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_66b643de","line":830,"range":{"start_line":830,"start_character":32,"end_line":830,"end_character":42},"in_reply_to":"7a5de9d1_b49b0972","updated":"2016-02-03 17:37:43.000000000","message":"Done","commit_id":"b398bccbe4335a9b5bca83839d99d8243464fa62"}],"trove/guestagent/datastore/experimental/cassandra/manager.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"314930bd3849000fc863b76aee18fe31d49f8cad","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"            self.__admin \u003d CassandraAdmin(self.app.get_current_superuser())"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if databases:"},{"line_number":110,"context_line":"            self.create_database(context, databases)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        if users:"},{"line_number":113,"context_line":"            self.create_user(context, users)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def change_passwords(self, context, users):"},{"line_number":116,"context_line":"        self.admin.change_passwords(context, users)"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a5ae5dd_a5ad9585","line":113,"range":{"start_line":109,"start_character":0,"end_line":113,"end_character":44},"updated":"2016-02-05 19:08:37.000000000","message":"This has been moved to the base and must be removed from here to avoid conflicts on prepare.","commit_id":"0630adc2795879c99b47807a2a9dc58b8db38e99"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"314930bd3849000fc863b76aee18fe31d49f8cad","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                   include_marker\u003dFalse):"},{"line_number":152,"context_line":"        return self.admin.list_users(context, limit, marker, include_marker)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def mount_volume(self, context, device_path\u003dNone, mount_point\u003dNone):"},{"line_number":155,"context_line":"        device \u003d volume.VolumeDevice(device_path)"},{"line_number":156,"context_line":"        device.mount(mount_point, write_to_fstab\u003dFalse)"},{"line_number":157,"context_line":"        LOG.debug(\"Mounted the device %s at the mount point %s.\" %"},{"line_number":158,"context_line":"                  (device_path, mount_point))"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def unmount_volume(self, context, device_path\u003dNone, mount_point\u003dNone):"},{"line_number":161,"context_line":"        device \u003d volume.VolumeDevice(device_path)"},{"line_number":162,"context_line":"        device.unmount(mount_point)"},{"line_number":163,"context_line":"        LOG.debug(\"Unmounted the device %s from the mount point %s.\" %"},{"line_number":164,"context_line":"                  (device_path, mount_point))"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def resize_fs(self, context, device_path\u003dNone, mount_point\u003dNone):"},{"line_number":167,"context_line":"        device \u003d volume.VolumeDevice(device_path)"},{"line_number":168,"context_line":"        device.resize_fs(mount_point)"},{"line_number":169,"context_line":"        LOG.debug(\"Resized the filesystem at %s.\" % mount_point)"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a5ae5dd_a596f53b","line":169,"range":{"start_line":154,"start_character":0,"end_line":169,"end_character":64},"updated":"2016-02-05 19:08:37.000000000","message":"This can be removed (it will be inherited from the base).","commit_id":"0630adc2795879c99b47807a2a9dc58b8db38e99"}],"trove/guestagent/datastore/experimental/cassandra/service.py":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"831c6721cfc9546f6363b8db3c909dabfd27f5a9","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    @property"},{"line_number":105,"context_line":"    def default_superuser_pwd_hash(self):"},{"line_number":106,"context_line":"        # Default \u0027salted_hash\u0027 value for \u0027cassandra\u0027 user on Cassandra 2.1."},{"line_number":107,"context_line":"        return \"$2a$10$wPEVuXBU7WE2Uwzqq3t19ObRJyoKztzC/Doyfr0VtDmVXC4GDAV3e\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    @property"},{"line_number":110,"context_line":"    def cqlsh_conf_path(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_e4a00fa8","line":107,"updated":"2016-02-03 06:33:58.000000000","message":"this seems strange. why hardcode something like this?","commit_id":"b398bccbe4335a9b5bca83839d99d8243464fa62"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"cc8759b12cbb8d6276bbba81125984473c9fe354","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    @property"},{"line_number":105,"context_line":"    def default_superuser_pwd_hash(self):"},{"line_number":106,"context_line":"        # Default \u0027salted_hash\u0027 value for \u0027cassandra\u0027 user on Cassandra 2.1."},{"line_number":107,"context_line":"        return \"$2a$10$wPEVuXBU7WE2Uwzqq3t19ObRJyoKztzC/Doyfr0VtDmVXC4GDAV3e\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    @property"},{"line_number":110,"context_line":"    def cqlsh_conf_path(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_1038d29f","line":107,"in_reply_to":"5a5ae5dd_9c815092","updated":"2016-02-04 00:56:03.000000000","message":"It would be great if we could generate this hash from a known string, but Cassandra unfortunately does not expose the password-hashing function like some other dbs.\n\nCreating a dummy user with a known password and getting the hash from there is also not an option as Cassandra does not allow user-related operations while the authentication/authorization is disabled.\n\nAFAIK this is the only way how to reset a lost password... :-/","commit_id":"b398bccbe4335a9b5bca83839d99d8243464fa62"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"a00c6aa0ef940fa892eaca2bc458bfdc95016340","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    @property"},{"line_number":105,"context_line":"    def default_superuser_pwd_hash(self):"},{"line_number":106,"context_line":"        # Default \u0027salted_hash\u0027 value for \u0027cassandra\u0027 user on Cassandra 2.1."},{"line_number":107,"context_line":"        return \"$2a$10$wPEVuXBU7WE2Uwzqq3t19ObRJyoKztzC/Doyfr0VtDmVXC4GDAV3e\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    @property"},{"line_number":110,"context_line":"    def cqlsh_conf_path(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_9c815092","line":107,"in_reply_to":"5a5ae5dd_e4a00fa8","updated":"2016-02-03 17:37:43.000000000","message":"Cassandra does not have a built-in way to reset lost passwords. It stores the passwords hashed in the system_auth keyspace. The procedure is to disable authentication and update the hashed value in the credentials table.\nThis value is hashed and salted value of string \u0027cassandra\u0027 (default password) on Cassandra 2.1","commit_id":"b398bccbe4335a9b5bca83839d99d8243464fa62"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"831c6721cfc9546f6363b8db3c909dabfd27f5a9","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    def _install_db(self, packages):"},{"line_number":141,"context_line":"        \"\"\"Install cassandra server\"\"\""},{"line_number":142,"context_line":"        LOG.debug(\"Installing cassandra server.\")"},{"line_number":143,"context_line":"        packager.pkg_install(packages, None, 10000)"},{"line_number":144,"context_line":"        LOG.debug(\"Finished installing Cassandra server\")"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def secure(self, update_user\u003dNone):"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_048d2b31","line":143,"range":{"start_line":143,"start_character":45,"end_line":143,"end_character":50},"updated":"2016-02-03 06:33:58.000000000","message":"can you make or use an existing config option?","commit_id":"b398bccbe4335a9b5bca83839d99d8243464fa62"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"a00c6aa0ef940fa892eaca2bc458bfdc95016340","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    def _install_db(self, packages):"},{"line_number":141,"context_line":"        \"\"\"Install cassandra server\"\"\""},{"line_number":142,"context_line":"        LOG.debug(\"Installing cassandra server.\")"},{"line_number":143,"context_line":"        packager.pkg_install(packages, None, 10000)"},{"line_number":144,"context_line":"        LOG.debug(\"Finished installing Cassandra server\")"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def secure(self, update_user\u003dNone):"}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_fc3c0431","line":143,"range":{"start_line":143,"start_character":45,"end_line":143,"end_character":50},"in_reply_to":"5a5ae5dd_048d2b31","updated":"2016-02-03 17:37:43.000000000","message":"Yeah, the problem is that we don\u0027t seem to have an option for this one. All other datastores seem to be doing it this way. I agree with you, but maybe it would be better done for all datastores at once in a stand-alone patch.","commit_id":"b398bccbe4335a9b5bca83839d99d8243464fa62"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"831c6721cfc9546f6363b8db3c909dabfd27f5a9","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        \"\"\""},{"line_number":207,"context_line":"        return os.path.exists(self._get_cqlsh_conf_path())"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def __load_current_superuser(self):"},{"line_number":210,"context_line":"        config \u003d operating_system.read_file(self._get_cqlsh_conf_path(),"},{"line_number":211,"context_line":"                                            codec\u003dIniCodec())"},{"line_number":212,"context_line":"        return models.CassandraUser("}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_24adc788","line":209,"range":{"start_line":209,"start_character":8,"end_line":209,"end_character":10},"updated":"2016-02-03 06:33:58.000000000","message":"only need a single underscore for private methods because 2 underscores denotes python default object methods.","commit_id":"b398bccbe4335a9b5bca83839d99d8243464fa62"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"a00c6aa0ef940fa892eaca2bc458bfdc95016340","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        \"\"\""},{"line_number":207,"context_line":"        return os.path.exists(self._get_cqlsh_conf_path())"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def __load_current_superuser(self):"},{"line_number":210,"context_line":"        config \u003d operating_system.read_file(self._get_cqlsh_conf_path(),"},{"line_number":211,"context_line":"                                            codec\u003dIniCodec())"},{"line_number":212,"context_line":"        return models.CassandraUser("}],"source_content_type":"text/x-python","patch_set":31,"id":"5a5ae5dd_614aad85","line":209,"range":{"start_line":209,"start_character":8,"end_line":209,"end_character":10},"in_reply_to":"5a5ae5dd_24adc788","updated":"2016-02-03 17:37:43.000000000","message":"That is true if the underscores are from both sides of the name (\u0027__init__()\u0027). There is apparently not much consensus around this. Some consider single-underscore as \u0027protected\u0027 and double-undersocre as \u0027private\u0027 (Writing Idiomatic Python, Jeff Knupp, ch. 5.7.1). Also see the PEP8 document suggests the same thing (https://www.python.org/dev/peps/pep-0008/)\n\nI am however open to changing this (I wanted to use __ for methods that can break/expose the guest or user data when not used properly - this is not that case).","commit_id":"b398bccbe4335a9b5bca83839d99d8243464fa62"}],"trove/tests/unittests/guestagent/test_cassandra_manager.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"a6979438b8c5061da1ee043ae79712c7e0391931","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            return_value\u003dFakeInstanceServiceStatus())"},{"line_number":80,"context_line":"        self.context \u003d TroveContext()"},{"line_number":81,"context_line":"        self.manager \u003d cass_manager.Manager()"},{"line_number":82,"context_line":"        self.manager._Manager__admin \u003d cass_service.CassandraAdmin("},{"line_number":83,"context_line":"            models.CassandraUser(\u0027Test\u0027))"},{"line_number":84,"context_line":"        self.admin \u003d self.manager._Manager__admin"},{"line_number":85,"context_line":"        self.pkg \u003d cass_service.packager"}],"source_content_type":"text/x-python","patch_set":35,"id":"3a57f1b5_d3ca3b6e","line":82,"range":{"start_line":82,"start_character":21,"end_line":82,"end_character":36},"updated":"2016-02-10 20:39:22.000000000","message":"This is why I think we should avoid \u0027__\u0027 variables unless deemed absolutely necessary.  This hard-coding of class names in variables in fairly fragile (besides looking ugly).","commit_id":"ec09141e74d011ac4c65d2b06a3cf683e2b42ea7"}]}
