Skip to content

Consistency in CtOkHttp4Client ExecutorService usage #569

Description

@pintomau

Hey.

We're evaluating the usage of Virtual Threads with Executors.newVirtualThreadPerTaskExecutor();.

I've noticed that there's an inconsistency in the usage of ExecutorService executor in CtOkHttp4Client:

    public CtOkHttp4Client(final ExecutorService executor) {
        super(executor);
        okHttpClient = clientBuilder.get().dispatcher(createDispatcher(executor, MAX_REQUESTS, MAX_REQUESTS)).build();
    }

    public CtOkHttp4Client(final ExecutorService executor, final BuilderOptions options) {
        super(executor);
        okHttpClient = options.plus(clientBuilder.get().dispatcher(createDispatcher(MAX_REQUESTS, MAX_REQUESTS)))
                .build();
    }

    public CtOkHttp4Client(final ExecutorService executor, final int maxRequests, final int maxRequestsPerHost) {
        super(executor);
        okHttpClient = clientBuilder.get()
                .dispatcher(createDispatcher(executor, maxRequests, maxRequestsPerHost))
                .build();
    }

    public CtOkHttp4Client(final ExecutorService executor, final int maxRequests, final int maxRequestsPerHost,
            final BuilderOptions options) {
        super(executor);
        okHttpClient = options
                .plus(clientBuilder.get().dispatcher(createDispatcher(executor, maxRequests, maxRequestsPerHost)))
                .build();
    }

The second constructor doesn't reuse the passed executorService when creating the dispatcher, while all others that get the same argument do.

It just so happens that this one would be the ideal one for us 🤠.

Is there a reason for this, or is it an oversight?

Besides this, any thoughts or recommendations on using the Virtual Threads executor with the SDK?
Maybe you've already done experimenting on your end? Is the SDK prone to Thread Pinning?

Thanks.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions