add: config to emit warning for legacy target names - #4905
Conversation
While working on building this warning, I noticed that we might avoid the breaking change if we look for the filter twice in the list of embeddings:
All tests pass when I try this, including the one that revealed the breaking change, but there could be outliers that may still show a breaking change so I'd have to look for them. I think it's worth the try, but before doing that @steve-chavez do you see it as a viable alternative against this whole breaking change warning stuff? (this would still be useful for future breaking changes though) |
|
@laurenceisla I'd say go ahead if you think it's doable without a breaking change (not sure if possible). But we do need to add loadtests for these alias cases to see if the double searching you propose won't cause a noticeable regression. |
|
I think we should do the breaking change at some point anyway. The previous behavior was just wrong - once you rename it via an alias, that's the name it should go by. If you want another release with a warning etc. I'd be OK with that. But I'd also be OK without that added complexity and the status quo (the breaking fix as it is currently done on main). |
Right, after pondering it for some time, I believe the breaking change is inevitable. Will continue with the TODO list for this PR. |
|
Now that #4904 is closed. Can we still emit the @wolfgangwalther WDYT? |
|
@laurenceisla How about merging the first revert in another PR? I think we agree that it's not right to make the breaking change this way. Otherwise we risk this going into a new release somehow. |
As I wrote in an earlier comment, I am not opposed to that. I don't feel like it's necessary, but if you do, I'm ok with it. I think we should not revert it - because we will need to do it anyway, for correctness. So we better deal with it in a way that makes you feel good about it. |
afd0eb5 to
78bf1e5
Compare
laurenceisla
left a comment
There was a problem hiding this comment.
This should be ready for review now.
Loadtests. Add a test in
test/load/targets.httpthat uses the alias to see the impact of this new logic. This should be done in another PR.
Do you mean to test how it's currently working on main and to check the impact of this PR?
Just a note: The tests for the loadtest are always taken from the head branch. I.e., if you add a test in this PR, you will run it on all 3 branches under test, so you don't need a separate PR to get results from the new test. |
@laurenceisla I meant adding a new request like |
78bf1e5 to
2c00085
Compare
|
I added a loadtest and here are the results: https://github.com/PostgREST/postgrest/actions/runs/26861796165. It cannot compare to 200 HTTP responses in |
Right, I think there's no other way anyway, we'll also remove this logic on the next major. Then the slight perf drop will go away. @laurenceisla Could you rebase this PR so the |
2c00085 to
cbb508a
Compare
Correct. I found it difficult to separate the "new config" commit from the "emit warning" commit without the whole "revert"->"readd" thing, so I squashed them into a single one. In fact maybe all of the commits in this PR should be squashed when merged? |
|
@laurenceisla Yes, can you squash? 🙏 We've disabled squash/merge from github UI. |
cbb508a to
894cccf
Compare
There was a problem hiding this comment.
Addressed what was mentioned here #4905 (comment)
However I'm still leaving it on draft. Awaiting the follow up of #4905 (comment)
Edit: Should be ready for review again
85d8a7f to
d18a876
Compare
d18a876 to
f2bc3b6
Compare
f2bc3b6 to
c021f1a
Compare
| - Log schema cache queries timings on `log-level=debug` by @steve-chavez in #4805 | ||
| - Add GHC runtime metrics to the metrics endpoint by @mkleczek in #4862 | ||
| - Support running the admin server on a unix socket by @wolfgangwalther in #5003 | ||
| - Add config `url-use-legacy-target-names` to allow using the embedded table name in filters, orders or limits when it has an alias by @laurenceisla in #4075 |
There was a problem hiding this comment.
Hm, this is confusing as a feature here. I think it should be enough to list it on the fixes.
If we want to make it more obvious, maybe we should add a new "Migrating to v16" how-to?
There was a problem hiding this comment.
I think it should be enough to list it on the fixes.
Right, I'll remove it.
maybe we should add a new "Migrating to v16" how-to?
Should we include it in this PR? Or as a separate one when we decide to release the new version. I assume we'd like to mention other things apart from this config.
There was a problem hiding this comment.
Yeah, should be done in a separate PR.
c021f1a to
d5ab7a6
Compare
Adds the `url_use_legacy_target_names` config. Enabled (default): * It allows using the resource name in filters, orders or limits when it has an alias, e.g. `table?select=alias:target(*)&target.id=eq.1` * Logs a WARNING with a hint to use the alias * Returns a Warning header in the response Disabled: * It returns an error, only the alias is allowed * No warnings returned This feature is deprecated
d5ab7a6 to
7e5e692
Compare
|
@laurenceisla Can't approve through github UI because I'm the PR author 😞. But I do approve ✅, this can be merged. |
|
We would need to remember to remove this for Also, I think the sooner we remove these deprecated feats/changes the better it would be for maintainability. |
|
Note that we don't have to do this for next major, we documented:
This is a very difficult migration, I'd say we need at least 2 majors or 1 year. |
|
Wasn't there the intermediate step of changing the default value for the new config option that we wanted to do for v18? v20 should then remove it entirely. |
|
Noted a defficiency here, the log is not debounced, so if several of these deprecated requests come they could degrade the service. #5203 has a similar problem. |
See #5203 (comment) for my opinion on debounced, non-deterministic log output. |
Reverts #4104 and eases transition towards the breaking change.
When the request with the deprecated syntax comes we log a warning, like so:
Note that:
taskstothe_tasks,clientstoclientes"TODO
server-legacy-features=target-names.Loadtests. Add a test intest/load/targets.httpthat uses the alias to see the impact of this new logic. This should be done in another PR.The warning only happens forNot planned anymore, see also: add: config to emit warning for legacy target names #4905 (comment)log-level=warn, this requires Switch tolog-level=warnas default #4904 to be effective.