Source:
<code>public static JobManagerSharedServices fromConfiguration( Configuration config, BlobServer blobServer, FatalErrorHandler fatalErrorHandler) throws Exception { checkNotNull(config); checkNotNull(blobServer); final String classLoaderResolveOrder = config.getString(CoreOptions.CLASSLOADER_RESOLVE_ORDER); final String[] alwaysParentFirstLoaderPatterns = CoreOptions.getParentFirstLoaderPatterns(config); final boolean failOnJvmMetaspaceOomError = config.getBoolean(CoreOptions.FAIL_ON_USER_CLASS_LOADING_METASPACE_OOM); final BlobLibraryCacheManager libraryCacheManager = new BlobLibraryCacheManager( blobServer, FlinkUserCodeClassLoaders.ResolveOrder.fromString(classLoaderResolveOrder), alwaysParentFirstLoaderPatterns, <START> fatalErrorHandler); <END> final Duration akkaTimeout; try { akkaTimeout = AkkaUtils.getTimeout(config); } catch (NumberFormatException e) { throw new IllegalConfigurationException(AkkaUtils.formatDurationParsingErrorMessage()); } final ScheduledExecutorService futureExecutor = Executors.newScheduledThreadPool( Hardware.getNumberCPUCores(), new ExecutorThreadFactory("jobmanager-future")); final int numSamples = config.getInteger(WebOptions.BACKPRESSURE_NUM_SAMPLES); final long delayBetweenSamples = config.getInteger(WebOptions.BACKPRESSURE_DELAY); final BackPressureRequestCoordinator coordinator = new BackPressureRequestCoordinator( futureExecutor, akkaTimeout.toMillis() + numSamples * delayBetweenSamples); final int cleanUpInterval = config.getInteger(WebOptions.BACKPRESSURE_CLEANUP_INTERVAL); final BackPressureStatsTrackerImpl backPressureStatsTracker = new BackPressureStatsTrackerImpl( coordinator, cleanUpInterval, config.getInteger(WebOptions.BACKPRESSURE_REFRESH_INTERVAL)); futureExecutor.scheduleWithFixedDelay( backPressureStatsTracker::cleanUpOperatorStatsCache, cleanUpInterval, cleanUpInterval, TimeUnit.MILLISECONDS); return new JobManagerSharedServices( futureExecutor, libraryCacheManager, RestartStrategyFactory.createRestartStrategyFactory(config), coordinator, backPressureStatsTracker, blobServer); }</code><technical_language>suggestion failOnJvmMetaspaceOomError ? fatalErrorHandler : null);</technical_language>

Target:
public static JobManagerSharedServices fromConfiguration( Configuration config, BlobServer blobServer, FatalErrorHandler fatalErrorHandler) throws Exception { checkNotNull(config); checkNotNull(blobServer); final String classLoaderResolveOrder = config.getString(CoreOptions.CLASSLOADER_RESOLVE_ORDER); final String[] alwaysParentFirstLoaderPatterns = CoreOptions.getParentFirstLoaderPatterns(config); final boolean failOnJvmMetaspaceOomError = config.getBoolean(CoreOptions.FAIL_ON_USER_CLASS_LOADING_METASPACE_OOM); final BlobLibraryCacheManager libraryCacheManager = new BlobLibraryCacheManager( blobServer, FlinkUserCodeClassLoaders.ResolveOrder.fromString(classLoaderResolveOrder), alwaysParentFirstLoaderPatterns, failOnJvmMetaspaceOomError ? fatalErrorHandler : null); final Duration akkaTimeout; try { akkaTimeout = AkkaUtils.getTimeout(config); } catch (NumberFormatException e) { throw new IllegalConfigurationException(AkkaUtils.formatDurationParsingErrorMessage()); } final ScheduledExecutorService futureExecutor = Executors.newScheduledThreadPool( Hardware.getNumberCPUCores(), new ExecutorThreadFactory("jobmanager-future")); final int numSamples = config.getInteger(WebOptions.BACKPRESSURE_NUM_SAMPLES); final long delayBetweenSamples = config.getInteger(WebOptions.BACKPRESSURE_DELAY); final BackPressureRequestCoordinator coordinator = new BackPressureRequestCoordinator( futureExecutor, akkaTimeout.toMillis() + numSamples * delayBetweenSamples); final int cleanUpInterval = config.getInteger(WebOptions.BACKPRESSURE_CLEANUP_INTERVAL); final BackPressureStatsTrackerImpl backPressureStatsTracker = new BackPressureStatsTrackerImpl( coordinator, cleanUpInterval, config.getInteger(WebOptions.BACKPRESSURE_REFRESH_INTERVAL)); futureExecutor.scheduleWithFixedDelay( backPressureStatsTracker::cleanUpOperatorStatsCache, cleanUpInterval, cleanUpInterval, TimeUnit.MILLISECONDS); return new JobManagerSharedServices( futureExecutor, libraryCacheManager, RestartStrategyFactory.createRestartStrategyFactory(config), coordinator, backPressureStatsTracker, blobServer); }