private String planningThreadName() {
        // Ideally, operatorId should be used as the threadPoolName as Flink guarantees its uniqueness
        // within a job. SplitEnumeratorContext doesn't expose the OperatorCoordinator.Context, which
        // would contain the OperatorID. Need to discuss with Flink community whether it is ok to expose
        // a public API like the protected method "OperatorCoordinator.Context getCoordinatorContext()"
        // from SourceCoordinatorContext implementation. For now, <table name>-<random UUID> is used as
        // the unique thread pool name.
        return lazyTable().name() + "-" + UUID.randomUUID();
    }
Copy from iceberg-flink:iceberg-flink-1.15:1.3.1
inlong-sort/sort-flink/sort-flink-v1.15/sort-connectors/iceberg/src/main/java/org/apache/inlong/sort/iceberg/source/IcebergSource.java