MySQL Roadmap/Redesign [This email follows a consensus amongst people attending the Module Triages that we would like to explore the possibility of cutting edge engineering techniques such as "design before you start mashing manifests together" and "lets ask the public what features they'd like before deciding on their behalf". As such this is an attempt at pulling together an initial explanation of the pain points of the current module and where we should go from here.]
Background The puppetlabs-mysql (we'll refer to it simple as the mysql module from now on) module accreted from a number of PRs that solved immediate and instant pain points for users over a number of years. A couple of months back I took a stab at a fairly large refactoring of the module. The two things I wanted to solve was: * Improve the type/providers so they could be used via puppet resource and fix numerous bugs. * Rewrite the module to follow our fledgling best practices. * Make it possible to pass in arbitrary configuration values so we didn't need a parameter per my.cnf entry. This refactoring/rewrite semi-worked. It exposed a metric ton of issues and problems along the way, and our introduction of an acceptance framework helped us to fix most of those. It did solve the goal of making the module easier to work with, and it did improve the situation of arbitrary configuration, but the general consensus of myself, and the users, is that there's still a large amount of significant problems that fundamentally stem from the fact the module has no base design, it just kind of happened, and the rewrite attempted to retain backwards compatibility with that API. *Problems we know about* A user of the module asked his local DBA expert to help us review the module, which lead to a number of issues which I'll list out below. I've taken liberties with this review, rewriting parts and condensing others to make it more suitable here. *Configuration Variables* MySQL doesn't treat all configuration values equally, but we do. We don't handle: *Initial startup configuration.* Certain settings, like innodb_log_file_size need to be set before we ever start the service. If they change after the service is up and running you have to be able to shutdown MySQL, then delete the appropriate ib_logfile files, then restart. *Dynamic configuration* MySQL allows a whole bunch of stuff to be set via mysql set. We should use this where possible and not restart MySQL for no reason. *Defaults* Our $default_options don't reflect what DBAs consider good defaults. *Password hashes* We require plain text passwords in most places in the module, rather than letting people pass in the hash directly if they want to. *Client Certificates* We don't have any facility to use these. *Configuration in general* We're still just relying heavily on my.cnf, rather than breaking things up into a conf.d. *Smaller concerns* A lot of these relate to the module as it is today, not what we'd do with any redesign work: * server/account_security.pp inflexible. * server/root_password.pp the endless troublemaker. Only works as root thanks to /root, should use /etc/something and --defaults-file. * db.pp has lots of issues. * types need further work. Where do we go from here? I don't want to constrain the design based on my pre-conceptions so first I want to continue to gather requirements and criticisms of the module in this email thread. I've started writing up my own thoughts and those are basically: * Configuration is the biggest problem we face and we need to tackle it head on. * Ordering is the next largest problem, we have a number of use cases and it's difficult to handle them all. (stuff like handling existing mysql setups on a box, people want to take those other with puppet surprisingly often). I have a lot more words written down but that's basically the two things I suspect we need to address out of the gate. Anyway, let me know what you people think puppetlabs-mysql needs. -- Ashley Penney ashley.pen...@puppetlabs.com Module Engineer *Join us at PuppetConf 2014, September 23-24 in San Francisco* -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/CAC9eg%2B%3DLhKvGjCPGmziu4MdFcbhEbU-BRd67d6ntchZANaoNaA%40mail.gmail.com. For more options, visit https://groups.google.com/groups/opt_out.