Performing any long running task or CPU intensive work on transport_worker threads is problematic. This is typically very bad for cluster stability.

This issue has been filed to examine the usage of transport_worked threads by ESQL, with the intention of "offloading" as much as possible, including deserialising large(ish) amounts of data.
x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/operator/exchange/ExchangeServiceTests.java
randomFrom(sink1, sink2).addPage(pages[5]);
        assertBusy(() -> assertTrue(randomFrom(sink1, sink2).waitForWriting().isDone()));
        randomFrom(sink1, sink2).addPage(pages[6]);
        
        assertFalse(randomFrom(sink1, sink2).waitForWriting().isDone());
        sink1.finish();
        assertTrue(sink1.isFinished());
        for (int i = 0; i < 5; i++) {
            assertBusy(() -> assertTrue(source.waitForReading().isDone()));
            assertEquals(pages[2 + i], source.pollPage());
        }
        
        assertFalse(source.waitForReading().isDone());
        assertBusy(() -> assertTrue(sink2.waitForWriting().isDone()));
        sink2.finish();
        assertTrue(sink2.isFinished());
        assertTrue(source.isFinished());
        assertBusy(() -> assertThat(sourceExchanger.refCount(), equalTo(2)));
        source.finish();
        assertThat(sourceExchanger.refCount(), equalTo(1));
        CountDownLatch latch = new CountDownLatch(1);
        sourceExchanger.addCompletionListener(ActionListener.releasing(latch::countDown));
        sourceExchanger.decRef();
        assertTrue(latch.await(1, TimeUnit.SECONDS));
        ESTestCase.terminate(threadPool);
    }
    /**
     * Generates sequence numbers up to the {@code maxInputSeqNo} (exclusive)
     */
    static class SeqNoGenerator implements SourceOperator.SourceOperatorFactory {