org.apache.pulsar.shade.org.apache.bookkeeper.mledger.impl.ManagedLedgerFactoryImpl

Here are the examples of the java api org.apache.pulsar.shade.org.apache.bookkeeper.mledger.impl.ManagedLedgerFactoryImpl taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.

1 Examples 7

14 Source : CachedClients.java
with Apache License 2.0
from streamnative

/**
 * Cached ML / BK client to be shared among threads inside a process.
 */
@Slf4j
public clreplaced CachedClients {

    private static final String OFFLOADERS_DIRECTOR = "offloadersDirectory";

    private static final String MANAGED_LEDGER_OFFLOAD_DRIVER = "managedLedgerOffloadDriver";

    private static final String MANAGED_LEDGER_OFFLOAD_MAX_THREADS = "managedLedgerOffloadMaxThreads";

    static CachedClients instance;

    private final ManagedLedgerFactoryImpl managedLedgerFactory;

    private final StatsProvider statsProvider;

    private OrderedScheduler offloaderScheduler;

    private Offloaders offloaderManager;

    private LedgerOffloader offloader;

    private CachedClients(ConnectorConfig config) throws Exception {
        this.managedLedgerFactory = initManagedLedgerFactory(config);
        this.statsProvider = createInstance(config.getStatsProvider(), StatsProvider.clreplaced, getClreplaced().getClreplacedLoader());
        // start stats provider
        ClientConfiguration clientConfiguration = new ClientConfiguration();
        config.getStatsProviderConfigs().forEach(clientConfiguration::setProperty);
        this.statsProvider.start(clientConfiguration);
        this.offloader = initManagedLedgerOffloader(config);
    }

    public static CachedClients getInstance(ConnectorConfig config) throws Exception {
        synchronized (CachedClients.clreplaced) {
            if (instance == null) {
                instance = new CachedClients(config);
            }
        }
        return instance;
    }

    public static void shutdown() throws Exception {
        synchronized (CachedClients.clreplaced) {
            if (instance != null) {
                instance.statsProvider.stop();
                instance.managedLedgerFactory.shutdown();
                instance.offloaderScheduler.shutdown();
                instance.offloaderManager.close();
                instance = null;
            }
        }
    }

    private ManagedLedgerFactoryImpl initManagedLedgerFactory(ConnectorConfig config) throws Exception {
        ClientConfiguration bkClientConfiguration = new ClientConfiguration().setZkServers(config.getZookeeperUri()).setMetadataServiceUri("zk://" + config.getZookeeperUri() + "/ledgers").setClientTcpNoDelay(false).setUseV2WireProtocol(true).setStickyReadsEnabled(false).setAllowShadedLedgerManagerFactoryClreplaced(true).setShadedLedgerManagerFactoryClreplacedPrefix("org.apache.pulsar.shade.").setReadEntryTimeout(60).setThrottleValue(config.getBookkeeperThrottleValue()).setNumIOThreads(config.getBookkeeperNumIOThreads()).setNumWorkerThreads(config.getBookkeeperNumWorkerThreads());
        ManagedLedgerFactoryConfig managedLedgerFactoryConfig = new ManagedLedgerFactoryConfig();
        managedLedgerFactoryConfig.setMaxCacheSize(config.getManagedLedgerCacheSizeMB());
        managedLedgerFactoryConfig.setNumManagedLedgerWorkerThreads(config.getManagedLedgerNumWorkerThreads());
        managedLedgerFactoryConfig.setNumManagedLedgerSchedulerThreads(config.getManagedLedgerNumSchedulerThreads());
        return new ManagedLedgerFactoryImpl(bkClientConfiguration, managedLedgerFactoryConfig);
    }

    private synchronized OrderedScheduler getOffloaderScheduler(ConnectorConfig config) {
        if (this.offloaderScheduler == null) {
            this.offloaderScheduler = OrderedScheduler.newSchedulerBuilder().numThreads(config.getManagedLedgerOffloadMaxThreads()).name("pulsar-offloader").build();
        }
        return this.offloaderScheduler;
    }

    private LedgerOffloader initManagedLedgerOffloader(ConnectorConfig config) {
        try {
            if (StringUtils.isNotBlank(config.getManagedLedgerOffloadDriver())) {
                Preconditions.checkNotNull(config.getOffloadersDirectory(), "Offloader driver is configured to be '%s' but no offloaders directory is configured.", config.getManagedLedgerOffloadDriver());
                this.offloaderManager = OffloaderUtils.searchForOffloaders(config.getOffloadersDirectory(), "");
                LedgerOffloaderFactory offloaderFactory = this.offloaderManager.getOffloaderFactory(config.getManagedLedgerOffloadDriver());
                Map<String, String> offloaderProperties = config.getOffloaderProperties();
                offloaderProperties.put(OFFLOADERS_DIRECTOR, config.getOffloadersDirectory());
                offloaderProperties.put(MANAGED_LEDGER_OFFLOAD_DRIVER, config.getManagedLedgerOffloadDriver());
                offloaderProperties.put(MANAGED_LEDGER_OFFLOAD_MAX_THREADS, String.valueOf(config.getManagedLedgerOffloadMaxThreads()));
                try {
                    return offloaderFactory.create(getProperties(offloaderProperties), ImmutableMap.of(LedgerOffloader.METADATA_SOFTWARE_VERSION_KEY.toLowerCase(), PulsarVersion.getVersion(), LedgerOffloader.METADATA_SOFTWARE_GITSHA_KEY.toLowerCase(), PulsarVersion.getGitSha()), getOffloaderScheduler(config));
                } catch (IOException ioe) {
                    log.error("Failed to create offloader: ", ioe);
                    throw new RuntimeException(ioe.getMessage(), ioe.getCause());
                }
            } else {
                log.info("No ledger offloader configured, using NULL instance");
                return NullLedgerOffloader.INSTANCE;
            }
        } catch (Throwable t) {
            throw new RuntimeException(t);
        }
    }

    public ManagedLedgerConfig getManagedLedgerConfig() {
        return new ManagedLedgerConfig().setLedgerOffloader(this.offloader);
    }

    public ManagedLedgerFactoryImpl getManagedLedgerFactory() {
        return managedLedgerFactory;
    }

    public StatsProvider getStatsProvider() {
        return statsProvider;
    }
}