Meeting will happen in #d9readiness on drupal.slack.com.

Hello and welcome to this Drupal 9 readiness meeting!

This meeting:
➤ Is for core and contributed project developers as well as people who have integrations and services related to core. Site developers who want to stay in the know to keep up-to-date for the easiest Drupal 9 upgrade of their sites are also welcome.
➤ Usually happens every other Monday at 18:00 UTC.
➤ Is done over chat.
➤ Happens in threads, which you can follow to be notified of new replies even if you don’t comment in the thread. You may also join the meeting later and participate asynchronously!
➤ Has a public agenda anyone can add to: `https://www.drupal.org/project/drupal/issues/3066478`
➤*Transcript will be exported and posted* to the agenda issue. For anonymous comments, start with a :bust_in_silhouette: emoji. To take a comment or thread off the record, start with a :no_entry_sign: emoji.

Moderated By: mikelutz

0️⃣ Who is here today? Comment in the thread below to introduce yourself.

tedbow :ocean: Ted from Ithaca, NY, USA
greg.1.anderson Greg from SF CA USA
Alona Oneill Alona. San Francisco, CA, USA
valthebald Valery from Sofia, Bulgaria
catch Nat. From the UK.
mikelutz Mike, guest moderator. :slightly_smiling_face:
Nick Wilde Nick, he/him, Victoria BC :flag-ca: /T'So-uke lands. Contrib maintainer/keeping an eye on things for work/interested party
mixologic Ryan, Portland, OR Drupal Association.
berdir Sascha, Switzerland. partially here, might have to leave early
drumm Neil, Brooklyn, NY, USA Drupal Association
Gabor Hojtsy (he/him) Gábor, core comitter catching up late -- thanks @mikelutz for running the meeting!

1️⃣ Do you have suggested topics you are looking to discuss? Post in this thread and we’ll open threads for them as appropriate.

catch Maybe or fold it into the schema one.
mikelutz Yes, I think that falls under 3️⃣ . I added the issue link to the thread.
valthebald Examples module for D9 is looking for maintainer(s)
andypost I'd like to pay attention on module renames (actions and menu) - right now 2 blockers need help
-
-

2️⃣ Multiple branch compatibility, semantic versioning, and composer.json proposal

mikelutz @xjm Correct me if I’m wrong, but these all seemed intertwined into the same topic.
mikelutz
tedbow I have looking at these issues. It seems if we fix #2313917 then it solve the *immediate* problem with 2641658
tedbow b/c you won’t need to do `- drupal:system (>= 8.1)` because `core` key could handle this
tedbow I am not sure what are time frame for having contrib modules support semver but obviously we would need 2641658 for that.
mixologic From a perspective Contrib modules supporting semver has been blocked on core supporting it.
tedbow if we actually did before contrib semver would ever need info dependencies in info yml to support semver. because if at that point we could rely on composer.json we won’t handle this ourselves
mixologic I think you're missing a word in that last statement
tedbow @mixologic yes, mean to be question “would we ever need?”
mixologic No, I dont think we would need the info.yml dependencies to support semver.
mixologic Unless we're concerned about the small amount of overlap where both would be acceptable
mixologic (dependencies in both info.yml and composer.json)
tedbow ok but 3005229 still needs Framework and Release Manager reviews.
tedbow so info files for dependencies *might* not be deprecated
mixologic Sure. I think is a good, low hanging fruit kind of step that solves one problem well in the interim, even if it might or might not be replaced by composer.json later.
tedbow ok
tedbow 1 thought I had is that right now for our `dependencies` we combine the project name and version constraint - `mymodule (>2.x)` which means we have to parse it ourselves not rely on yml. what if we introduces a new optional yml dependency format.
tedbow `- "mymodule": ">2.x"`
tedbow and if you used this new format it is composer format not our Drupal specific one?
tedbow this would make the migration to `composer.josn` easier
tedbow so if you use new format we would pass it directly to `\Composer\Semver\Semver::satisfies()`
mixologic so, split the dependency from its constraints? Im not sure what that really gets us beyond saving the parsing step
tedbow well. if we documented that *if* you use this new format it will be evaluted directly by `\Composer\Semver\Semver::satisfies()` it would
tedbow because we basically won’t parse it all
mixologic I think the issue is that composer does okay with 8.x by itself, but it doesnt know what to do with 8.x-1.0
tedbow are we talking about contrib dependencies?
mixologic so we have to parse in order to strip out the extraneous `8.x-` for the contrib deps
mixologic Yes, I was
tedbow what if we stripped in out from “VERSION” instead of the module it is depending on?
tedbow I guess I am thinking of core now not `project_composer`
mixologic Im not sure I understand what you mean on that last comment
tedbow so to not allow …
tedbow `- "mymodule": ">8.x-2.x"`
tedbow only
tedbow `- "mymodule": ">2.x"`
tedbow in info `dependencies`
tedbow would that allow us not to have to parse
mixologic ah for the 'newer' style.
tedbow yeah if having the “newer” style would not just be too confusing for devs. because it would use the same key
tedbow basically the idea was if you want semver support use the newer style. old eventually deprecated(or info.ym deprecated)
tedbow part of my worry is here -
tedbow if we do this it will start to make *some* composer strings work in `dependencies` which could the update script in much harder
mixologic Im not sure it makes it much harder.. those would just be straight copies to the composer.json
tedbow well but you have figure if they meant to use composer or the old style. Currently *only* the old style is supported

I am not a composer expert. are there any strings that would mean something different in our Drupal specific version and composer format?

mixologic no, not really
mixologic The only thing we do differently is stick the major version in our contrib version strings.
mixologic Which we'll hopefully stop doing, and just use semver as our contrib version strings.
mixologic (and there was a short time we had a weird notion of a release state called "unstable")
mixologic Which I think only the rules module ever used.
mixologic (it was some weird state between 'dev' and 'alpha')
mixologic Really the major problematic difference when we talk about the difference between drupal and composer isnt the version strings, or the constraint specifiers, its the divide between what is a 'package' and what is a 'dependency'.
mixologic Composer expects a 1:1 mapping between packages and dependencies.
mixologic Drupal puts multiple dependencies (modules) into one package (projects).
tedbow but there are current strings such as `^2.4` that our current parser doesn’t *support* but also doesn’t through an error.
I wanted to post a *test-only* patch for the becaause not all the tests will pass(as they did with the changes).

So if you just copied the values in the update script and moved them to composer so sites would different modules enabled

tedbow if some reason they were using them. I think `2.4.*` is another example
tedbow So also if we did this 8.8.0 then sites still on 8.7.0 would act differently
tedbow I am just trying to a bit paranoid here b/c of patch releases that have a caused upgrade problems
mixologic yeah, I hear that. So, I guess what Im trying to sort out is what kind of "different" they would have.
mixologic Basically it would _expand_ the potential list of modules that could be enabled.
mixologic Which to me doesnt seem BC breaking, and is more in line with 'feature addition'. Everything that worked before would continue to work.
mixologic If, somehow it made it so that a module that was able to be enabled under the old regime can no longer be enabled, thats definitely a break.
tedbow well except if you had deployment script with something like demostrated in this test

`$composer_wildcard_constraint = new Constraint(‘2.4.*’, ‘8.x’);

$tests[‘(2.4.*)-2.4.2’] = [$composer_wildcard_constraint, ‘2.4.2’, TRUE];`

tedbow this passes with 3004459 but not now. so as soon as you update to 8.8.0 your script would enable a module it didn’t before
catch I'd really like to see land in 8.8.x so that contrib modules can start supporting Drupal 9 as soon as the branch opens fwiw.
mixologic AFAIC, is ready for RTBC basically.
mixologic actually, only kinda
tedbow I think we need a couple other tests. basically not if you have value in `core` that is not supported and is not valid. your site will just say it can’t be enabled
tedbow right now with 2313917 it would crash the modules page. but that should be easy to fix
tedbow I will add a test for this
mixologic Yeah, we also should test changing the core version and having some ^8 | ^9 modules etc
mixologic verifying that if core is 9, that those constraints still match.
mixologic so, one thing that I wish we had more data on...
mixologic I have a *very* strong hunch that the number of users that have contraints in their dependencies in their custom modules is a number approaching zero.
tedbow hmmm. I could see where that hunch would come from but also something by the nature of it, I don’t think we can get data on
mixologic Because custom module dependency management would only really be something necessary in an environment where that custom module is being reused on many other sites.
mixologic So, maybe in a university setting or the like
tedbow well but won’t there a lot of custom modules that would be dependent on at least `>=` against a contrib module
mixologic But then constraints are usually to work around a specific bug, or express a specific branch of a contrib module. Its really, really, really rare for there to be more than one constraint.
tedbow but would the fact that there would be only 1 constraint in custom modules matter?
tedbow if zero I could see it mattering
mixologic Im just mentioning the risk factor.. as in some of what 'works now' might support some potential situations, that in reality are very unlikely to have ever manifested.
mixologic If a BC break happens in the forest and nobody is around to hear it, did it really happen?
tedbow I have feeling I will hear about it :stuck_out_tongue_winking_eye:
mixologic Thats a very real possibility.
mixologic But, that also brings up another thing about our current constraints.
mixologic The very worst possible constraint you can do is unbounded `>` or `>=`
mixologic Which is what a lot of contrib does, because of history
tedbow because now it is an implied <9.0-dev?
mixologic well, no, I mean for other contrib modules.
mixologic for example `webform:webform (>=8.x-5.x)`
mixologic if your module provided built in webforms and the 6.x branch of webforms is a complete rewrite, thats dangerous
mixologic Older drupal assumptions about module compatibity were such that you could somewhat sorta expect newer branches to be compatible with older branches.
mixologic Except reality has also shown that assumption to not be the case.
tedbow yes but you could make the same mistake in composer correct? `>5.x`

but I guess `~` `^` make that easier to avoid

mixologic So, the composer facade seatbelts those unbounded constraints by changing them to be `^'s` instead of `>'s`
tedbow this makes me think we *should* do the new format I mentioned earlier like
`- “webform:webform”: “^5"

my worry with is that it allows some composer string to be use directly but *not all*. So it could be very confusing

mixologic yes, you can make that mistake in composer, but all their docs have steered people away from it, and its generally known to be bad practice and you really better _know what you're doing_ and better _really mean it_ if your using an unbounded constraint. But way, way too many of the dependency specifications in drupal are already this way.
tedbow yeah but seems like something we can’t auto fix for people in core because I am sure there are some contrib or custom modules relying on this. espcailly if your module does something super simple like form alter that didn’t actually change when a new major version of the module your module is depending on was released

3️⃣ Schema version and database updates hooks in Drupal 9.

mikelutz sponsored by @mixologic :slightly_smiling_face:
mikelutz from @andypost
mikelutz Seems relevant here as well, per @catch
mixologic So my question here is that `CORE_MINIMUM_SCHEMA_VERSION` is what determines whether or not an update hook is going to fire.
mixologic Are there contrib modules that have update hooks that are expected to run in order to be "installed" ? or is that atypical and that most maintainers update their schema numbers such that all the installation procudures happen properly, and you really only need the update hooks if you're actually updating?
drumm That’s atypical. Installing doesn’t fire update hooks and sets the schema version to be whatever the latest update hook is.
mikelutz @mixologic update hooks don’t run on module install. The module’s schema version is set to the largest update hook on install, and on updates, only hooks above that are ran.
mikelutz Now a good question is how long do we keep 8xxx hooks around. They will definitely be needed to update to D9, but do we make people update to 8.last first, and fire all of those updates before allowing them to update to D9 and start the 9xxx series of hooks?
drumm Someone could call whatever they want, including an update, inside their hook_install() implementation. That’s probably a bad idea, but doesn’t get any special bookkeeping or anything either way, it is just implementing a hook.
mixologic Okay, so a d8 module that is fully compatible with d9 could install on d9, and in theory should have the proper schema without running the update hooks. Anything contrary to that notion is an exception, and problematic, and not something we can support very well.
mixologic What about this scenario: user has a module installed. a new update for that module comes out with update hook `8001` if they upgrade to d9 without first upgrading their module, they wont be able to run that update hook (presuming that we set the minimum schema to 9000)
drumm If they can implement updates that run on both the original 8.x version and without deprecations on 9, they can be lenient about updates running on 8 or waiting until 9.
mikelutz Essentially, if we set the minimum to 9000, then that means we require you update to 8.lts before updating to D9. (how that works practically, I’m not certain)
mikelutz especially with contrib who won’t have LTSs.
mikelutz So, I think for now, at least we need to leave the minimum at 8000 for the sake of running updates, or have some special handling for when you are running the D9 codebase with a 8xxx schema to force an update before your site works, or something like that.
drumm There used to be a way for contrib modules to say what they required to do an update.
drumm not sure if it was ever well-used much in contrib
drumm And it still exists
mikelutz huh, I don’t think I have ever used that hook.
andypost Yep, but entity schema is remaining question here
andypost I mean
catch I think we need to ditch Drupal minimum schema version entirely, and rely on hook_update_last_removed()
catch If we add semantic versioning for contrib modules, they could start with a 1.0.x branch and hook_update_1000()
mikelutz Well that sounds terrifying, lol.
mikelutz Might be time to change the name of the hook at that point, if not come up with a different approach towards managing version schema and db updates.
drumm When I originally created hook_update_N(), I never planned on N being meaningful other than always increasing. It just happened that it didn’t need to be sequential, so people started giving it meaning.
catch Well that's also true but at least I think we need to leave minimum schema version at 8.x until we do something like that.
mikelutz I feel like, given everything that has to happen in Drupal 9, just leaving the 8xxx update hooks in there, and supporting the updates through the 8xxx and 9xxx is best for D9. I think we should target replacing the system as part of d10, as hook_update_10000+ might get a bit confusing as we jump into 2 digit majors.
catch Well I do think we should drop old core updates but that only needs hook_update_last_removed() (and test updates). However it's not blocking anything just good cleanup.
drumm A cheap hack would be parsing out underscores, so hook_update_1_0_0_00 == hook_update_10000, but that’s probably too clever.
mikelutz What does last_removed do if it finds that you need an update function that no longer exists?
drumm
fgm @drumm The hook_update_MAJOR_MINOR_PATH() path is exactly what I’ve been thinking for some time. Why do you think it’s “too clever” ?
drumm Giving those numbers implicit meaning is already a bit of a clever hack. If either minor or patch numbers are 2 digits, that’ll ruin it.
fgm not unless the ordering ceases to be a simple number comparison, but performs semver comparisons ?
andypost IIRC there was discussion to keep some 8.x parts until 9.1 so it could give a way to announce it from reports/status

4️⃣ Porting contrib DB drivers to Drupal 9

mikelutz By @fgm re: MongoDB suite
andypost Sqlserver looks maintained
andypost Btw there's a question of "mysql split" @alexpott used to hack on it
fgm argh I misssed the chat
mikelutz @fgm Feel free to continue it. These threads will be used for latecomers for the next day or so.
andypost I found the link)
fgm For the record, mongodb 8.x-1.x (the broken legacy chx version) works as a database driver and, while it remained unchanged on d.o. since 2015, another developer essentially upgraded it on its own to work on current versions and fix lots of bugs, and it might come back for maintenance on d.o., but AIUI it needs a significant core patch. Version 8.x-2.x is unrelated and does not expose mongodb as a database
andypost Actually this one

5️⃣ Deprecation cleanup status - blockers to D9 branch opening.

valthebald @mikelutz do you mind to change the heading to 6️⃣ ? :slightly_smiling_face:
mikelutz @valthebald We have an agenda, if you have something to add, would you mind adding it to 1️⃣ , and I’ll open a thread for it at the end?
valthebald oh sure
valthebald moment
mikelutz
mikelutz We are down to 144 (30) unique deprecation errors that aren’t postponed on the D9 branch opening.
mikelutz Some of them are methods marked deprecated that are actually BC shim code, and should probably just be @internal, with follow-ups to remove in D9.
mikelutz I filed to see if we want to discuss standardizing in-code documentation for BC shims, to make it easier to find and remove this code when opening a new major version.
mixologic worked out a design for how to get the deprecation tests running on contrib regularly today. will be implementing soon.

6️⃣ Examples module for D9 is looking for maintainer(s)

valthebald I've checked the code base, and was chasing the issue queue of the module since the last meeting 2 weeks ago, but haven't talked with @Mile23 yet
valthebald next steps as I see them:
- what are the main pain points
- what is Paul's availability
- focus areas?
- anyone else interested? It would be much easier
Mile23 pain points are that I don't want to be a maintainer any more. :slightly_smiling_face: My availability is whatever we can do to help someone else be the maintainer.
valthebald What help would the someone in question need, in your opinion? :slightly_smiling_face:
Mile23 I can be around to answer questions and stuff.
valthebald That sounds awesome
valthebald I will continue to look in the issue queue, so if you'd feel I can take the burden at some time, and can be around...
andypost That's great idea to have examples d9-ready
Mile23 @valthebald is now a comaintainer of examples. rock on. :slightly_smiling_face:
valthebald wohoo :rock:
Mile23 I think there's some process where I'm supposed to make an issue about it and then you can be the owner when it's RTBC or something.
Mile23 oh this one...
valthebald that's only if the current maintainer is unavailable I think
Mile23
Mile23 so much documentation.
valthebald I think it's safe to skip the full flow...
valthebald > If you found a person to be your co-maintainer, you can usually grant them maintainer status without the help of a webmaster
valthebald that's from
Mile23 oh, and there's a twitter account. :slightly_smiling_face:
valthebald :thumbsup:
Mile23
valthebald I didn't know about this one
valthebald but this is less urgent I guess, more important is make the module d9-ready
Mile23 it's up to date for all the deprecations in 8.7.x, and has a weekly CI run against 8.8.x that I think isn't failing right now.
valthebald awesome!
Mile23 oh wait, I removed the weekly ones because they were failing and sending me emails.
Mile23 anyway... thanks for taking this up. :slightly_smiling_face:
valthebald thanks to you :thank-you:
Mile23 I'm going to go learn how to make you the owner. I think I have to ask drumm or something.
Mile23 but you can pretty much do anything now, and if you have questions just send 'em over.
valthebald Great!
andypost @valthebald sounds this one for phpstan checker
valthebald @andypost thanks

7️⃣ Is there anything we missed, or that should be brought up in the next meeting?

8️⃣ I missed this, but: Module renames, action and menu blockers.

mikelutz
mikelutz
mixologic please please please let me know if there is a module in core planning on being renamed.
andypost @mixologic parent of this blocker renames actions module
mixologic There are contrib projects that have dependencies expressed on `drupal:action`
mixologic not many.. digging
mixologic yeah, about 14 modules
andypost oh, that's because they not upgraded after
andypost but on they also can relay on action entity forms (UI)
mixologic Right, but as far as Im concerned, module names are an API, because other things depend on those names.
mixologic Any site running those modules will have problems if they upgrade right?
andypost I bet composer dependencies and ones should be used to point that module for 8.x specific branch
mixologic right but they arent now. so a module would have to be updated first, otherwise it might get uninstalled because its dependency is no longer satisfied.
andypost hm... out of my head only put this rename info system module's update hooks

Thanks everybody! Feel free to continue the discussion in the threads above.

Comments

Gábor Hojtsy created an issue. See original summary.

Gábor Hojtsy’s picture

Issue summary: View changes
xjm’s picture

I'd like to talk about multiple core branch compatibility, the composer.json proposal, and core's current critical semantic versioning bugs (#2313917: Core version key in module's .info.yml doesn't respect core semantic versioning and #2641658: Module version dependency in .info.yml is ineffective for patch releases). We need to resolve the critical bugs in Drupal 8 even if we add composer.json support in Drupal 9. @tedbow has a proposal for resolving #2313917: Core version key in module's .info.yml doesn't respect core semantic versioning that I think puts us on a good direction that will work either way, without adding much complexity.

Mixologic’s picture

I'd like to talking about how we'll handle database updates, and const CORE_MINIMUM_SCHEMA_VERSION = 8000;

If I have a module, and its compatible with d8 now, and has no deprecations, yet has a few update hooks, say 8001-8004. When d9 comes out, and I make a new release of my module, should I start using 9xxx update hooks? Should the 8001-8004 hooks run if installing this module for the first time on a new d9 site? or do we simply say '8000 is the CORE_MINIMUM_SCHEMA_VERSION from here on out' ? and just increment from there, and assume that db_update hooks should all fire?

andypost’s picture

Schema issues interesting, mostly in terms that schema still not refactored, see #2908886: Split off schema management out of schema.inc and its parent

fgm’s picture

I'd like to talk about how I can best port the MongoDB suite to D9, especially now that it seems d.o. CI can instantiate non-standard services like MongoDB, which wasn't the case on the old system and meant I had to to it on github+travis. Is this an appropriate topic ?

Also, for the 8.x-1.x which looks like it might get revived, the database handlers question is relevant too.

mikelutz’s picture

Issue summary: View changes
mikelutz’s picture

Issue summary: View changes

Gábor Hojtsy’s picture

Issue summary: View changes
Status: Active » Fixed

Posting meeting log. Special thanks to @mikelutz for running the meeting and @mlhess for providing formatted logs.

fgm’s picture

FWIW, the developer who upgraded/evolved the 8.x-1.x MongoDB database driver is https://www.drupal.org/u/daffie

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.

Version: 9.x-dev » 9.0.x-dev

The 9.0.x branch will open for development soon, and the placeholder 9.x branch should no longer be used. Only issues that require a new major version should be filed against 9.0.x (for example, removing deprecated code or updating dependency major versions). New developments and disruptive changes that are allowed in a minor version should be filed against 8.9.x, and significant new features will be moved to 9.1.x at committer discretion. For more information see the Allowed changes during the Drupal 8 and 9 release cycles and the Drupal 9.0.0 release plan.