Skip to content

Conversation

@sbernauer
Copy link
Member

@sbernauer sbernauer commented Jan 14, 2026

Part of #97

Additionally, sometimes the trino-client sends a HEAD request, which we need to proxy as HEAD (ant not GET) as well:

image

@sbernauer
Copy link
Member Author

Pushed the current version as oci.stackable.tech/sandbox/sbernauer/trino-lb:0.0.0-pr100

@sbernauer
Copy link
Member Author

Updated oci.stackable.tech/sandbox/sbernauer/trino-lb:0.0.0-pr100 with the current state of the PR

@sbernauer sbernauer self-assigned this Jan 21, 2026
@sbernauer sbernauer moved this to Development: In Progress in Stackable Engineering Jan 21, 2026
@sbernauer sbernauer moved this from Development: In Progress to Development: Track in Stackable Engineering Jan 26, 2026
@sbernauer sbernauer moved this from Development: Track to Development: Waiting for Review in Stackable Engineering Jan 30, 2026
@sbernauer
Copy link
Member Author

Customer confirmed this solves their issues :)

@Techassi Techassi moved this from Development: Waiting for Review to Development: In Review in Stackable Engineering Feb 2, 2026
Comment on lines 194 to 195
trino_lb_addr: &Url,
external_trino_addr: Option<&Url>,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question: Why are these parameters called *_addr if they contain URLs? I think their names should be updated to reflect this.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See 54b235d

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice partial change, but I think the trino_lb_addr parameter should also be renamed.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I intentionally did not update that one, as that is how it is called in the config. Long term we could rename it everywhere, including in the config, but that would be a breaking change :/

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alright, let's keep it as is, but should we create an issue for that then?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's actually a bigger story and the current variable naming correct: #105

/// Endpoint of the Trino cluster the query is running on.
pub trino_endpoint: Url,

/// (Optionally, if configured) public endpoint of the Trino cluster.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: Slight reword. The fact that this option is optional implies that it only takes effect when configured.

Suggested change
/// (Optionally, if configured) public endpoint of the Trino cluster.
/// Optional public endpoint of the Trino cluster.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer my variant as it makes it a bit more clear.
Every Trino always has a public endpoint. The question is, if trino-lb was configured to know about it or not

Copy link
Member

@Techassi Techassi Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe Optionally use the ... is better then?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the relevant part is to mention that this depends on the trino-lb config.
WDYT of this?

    /// Public endpoint of the Trino cluster, if it's configured in the trino-lb config.
    /// This can e.g. be used to change segment ackUris to.

/// special handling.
#[instrument(
name = "GET /v1/statement/executing/{queryId}/{slug}/{token}",
name = "GET (or HEAD) /v1/statement/executing/{queryId}/{slug}/{token}",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note: Ideally we set this to the appropriate HTTP method in the function itself, but I'm unsure if this is supported (without using the special otel.name field/attribute).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you plan to do any work on this (if it is indeed possible)?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm personally fine as is

name = "GET (or HEAD) /v1/statement/executing/{queryId}/{slug}/{token}",
skip(state, headers)
)]
pub async fn get_trino_executing_statement(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note: This function needs to be renamed because it now now only handles GET requests, but HEAD as well.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That was the very surprising implementation details of axum, which caused the "bug" in the first place.
Even if you register it via get(), is still get's HEADs.
We register the fn with

        .route(
            "/v1/statement/executing/{query_id}/{slug}/{token}",
            get(v1::statement::get_trino_executing_statement),
        )

We do this many times with lot's of functions, so we would need to change all of them.
And I currently find the registration code readable

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That was the very surprising implementation details of axum, which caused the "bug" in the first place.

That's true, is there any documentation on this behaviour?

I'm fine with only renaming this function, because we now explicitly handle both HTTP methods.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should add a dev comment either here or at the caller site refer to that piece of information from the axum docs.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added in f5ccf0b

@sbernauer sbernauer requested a review from Techassi February 5, 2026 11:55
@sbernauer sbernauer requested review from Techassi and removed request for Techassi February 13, 2026 07:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Development: In Review

Development

Successfully merging this pull request may close these issues.

2 participants