Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#12064] Seperate hbase connection for Uid #12126

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ hbase.client.executor.maxPoolSize=64
hbase.client.executor.queueCapacity=5120
hbase.client.executor.prestartAllCoreThreads=false

# experimental configuration
hbase.client.pinpoint.id.executor.corePoolSize=2
hbase.client.pinpoint.id.executor.maxPoolSize=8
hbase.client.pinpoint.id.executor.queueCapacity=1280

# warmup hbase connection cache
hbase.client.warmup.enable=false

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ hbase.client.executor.corePoolSize=64
hbase.client.executor.maxPoolSize=64
hbase.client.executor.queueCapacity=5120

# experimental configuration
hbase.client.pinpoint.id.executor.corePoolSize=16
hbase.client.pinpoint.id.executor.maxPoolSize=16
hbase.client.pinpoint.id.executor.queueCapacity=1280

# warmup hbase connection cache
hbase.client.warmup.enable=true

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.navercorp.pinpoint.collector.config.BatchHbaseClientConfiguration;
import com.navercorp.pinpoint.collector.config.HbaseAsyncConfiguration;
import com.navercorp.pinpoint.collector.config.HbasePinpointIdTemplateConfiguration;
import com.navercorp.pinpoint.collector.config.SchedulerConfiguration;
import com.navercorp.pinpoint.collector.dao.hbase.encode.ApplicationIndexRowKeyEncoderV1;
import com.navercorp.pinpoint.collector.dao.hbase.encode.ApplicationIndexRowKeyEncoderV2;
Expand Down Expand Up @@ -37,6 +38,7 @@
HbasePutWriterConfiguration.class,

BatchHbaseClientConfiguration.class,
HbasePinpointIdTemplateConfiguration.class,

HbaseAsyncConfiguration.class,
SchedulerConfiguration.class,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
package com.navercorp.pinpoint.collector.config;

import com.navercorp.pinpoint.common.hbase.ConnectionFactoryBean;
import com.navercorp.pinpoint.common.hbase.HbaseTableFactory;
import com.navercorp.pinpoint.common.hbase.HbaseTemplate;
import com.navercorp.pinpoint.common.hbase.TableFactory;
import com.navercorp.pinpoint.common.hbase.async.AsyncConnectionFactoryBean;
import com.navercorp.pinpoint.common.hbase.async.AsyncTableCustomizer;
import com.navercorp.pinpoint.common.hbase.async.AsyncTableFactory;
import com.navercorp.pinpoint.common.hbase.async.HbaseAsyncTableFactory;
import com.navercorp.pinpoint.common.hbase.async.HbaseAsyncTemplate;
import com.navercorp.pinpoint.common.hbase.config.HbaseTemplateConfiguration;
import com.navercorp.pinpoint.common.hbase.config.ParallelScan;
import com.navercorp.pinpoint.common.hbase.scan.ResultScannerFactory;
import com.navercorp.pinpoint.common.hbase.util.ScanMetricReporter;
import com.navercorp.pinpoint.common.profiler.concurrent.ExecutorFactory;
import com.navercorp.pinpoint.common.profiler.concurrent.PinpointThreadFactory;
import com.navercorp.pinpoint.common.server.executor.ExecutorCustomizer;
import com.navercorp.pinpoint.common.server.executor.ExecutorProperties;
import com.navercorp.pinpoint.common.util.CpuUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.AsyncConnection;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.security.User;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.concurrent.ThreadPoolExecutorFactoryBean;

import java.util.Optional;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadFactory;

@org.springframework.context.annotation.Configuration
@ConditionalOnProperty(value = "pinpoint.collector.application.uid.enable", havingValue = "true")
public class HbasePinpointIdTemplateConfiguration {
private final Logger logger = LogManager.getLogger(HbasePinpointIdTemplateConfiguration.class);

Check warning on line 42 in collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java#L42

Added line #L42 was not covered by tests

private final HbaseTemplateConfiguration config = new HbaseTemplateConfiguration();

Check warning on line 44 in collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java#L44

Added line #L44 was not covered by tests

public HbasePinpointIdTemplateConfiguration() {
logger.info("Install {}", HbasePinpointIdTemplateConfiguration.class.getSimpleName());
}

Check warning on line 48 in collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java#L46-L48

Added lines #L46 - L48 were not covered by tests

@Bean
@ConfigurationProperties(prefix = "hbase.client.pinpoint.id.executor")
public ExecutorProperties collectorPinpointIdExecutorProperties() {
return new ExecutorProperties();

Check warning on line 53 in collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java#L53

Added line #L53 was not covered by tests
}

@Bean
public FactoryBean<ExecutorService> hbasePinpointIdThreadPool(@Qualifier("hbaseExecutorCustomizer") ExecutorCustomizer<ThreadPoolExecutorFactoryBean> executorCustomizer,
@Qualifier("collectorPinpointIdExecutorProperties") ExecutorProperties executorProperties) {
ThreadPoolExecutorFactoryBean factory = new ThreadPoolExecutorFactoryBean();
executorCustomizer.customize(factory, executorProperties);
factory.setThreadNamePrefix("PinpointId-" + factory.getThreadNamePrefix());
return factory;

Check warning on line 62 in collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java#L59-L62

Added lines #L59 - L62 were not covered by tests
}

@Bean
public FactoryBean<Connection> hbasePinpointIdConnection(Configuration configuration,
User user,
@Qualifier("hbasePinpointIdThreadPool") ExecutorService executorService) {
return new ConnectionFactoryBean(configuration, user, executorService);

Check warning on line 69 in collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java#L69

Added line #L69 was not covered by tests
}

@Bean
public TableFactory hbasePinpointIdTableFactory(@Qualifier("hbasePinpointIdConnection") Connection connection) {
return new HbaseTableFactory(connection);

Check warning on line 74 in collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java#L74

Added line #L74 was not covered by tests
}

@Bean
public FactoryBean<AsyncConnection> hbaseAsyncPinpointIdConnection(Configuration configuration, User user) {
return new AsyncConnectionFactoryBean(configuration, user);

Check warning on line 79 in collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java#L79

Added line #L79 was not covered by tests
}

@Bean
public AsyncTableFactory hbaseAsyncPinpointIdTableFactory(@Qualifier("hbaseAsyncPinpointIdConnection") AsyncConnection connection,
AsyncTableCustomizer customizer) {
return new HbaseAsyncTableFactory(connection, customizer);

Check warning on line 85 in collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java#L85

Added line #L85 was not covered by tests
}

@Bean
public HbaseAsyncTemplate asyncPinpointIdTemplate(@Qualifier("hbaseAsyncPinpointIdTableFactory") AsyncTableFactory asyncTableFactory,
ScanMetricReporter scanMetricReporter,
ResultScannerFactory resultScannerFactory) {
ExecutorService executor = newAsyncTemplateExecutor();
return new HbaseAsyncTemplate(asyncTableFactory, resultScannerFactory, scanMetricReporter, executor);

Check warning on line 93 in collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java#L92-L93

Added lines #L92 - L93 were not covered by tests
}

private ExecutorService newAsyncTemplateExecutor() {
ThreadFactory threadFactory = new PinpointThreadFactory("Pinpoint-asyncPinpointIdTemplate", true);
return ExecutorFactory.newFixedThreadPool(CpuUtils.workerCount(), 1024 * 1024, threadFactory);

Check warning on line 98 in collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java#L97-L98

Added lines #L97 - L98 were not covered by tests
}


@Bean
public HbaseTemplate hbasePinpointIdTemplate(@Qualifier("hbaseConfiguration") org.apache.hadoop.conf.Configuration configurable,
@Qualifier("hbasePinpointIdTableFactory") TableFactory tableFactory,
@Qualifier("asyncPinpointIdTemplate") HbaseAsyncTemplate asyncTemplate,
Optional<ParallelScan> parallelScan,
@Value("${hbase.client.nativeAsync:false}") boolean nativeAsync,
ResultScannerFactory resultScannerFactory,
ScanMetricReporter scanMetricReport) {
return config.hbaseTemplate(configurable, tableFactory, asyncTemplate, parallelScan, nativeAsync, resultScannerFactory, scanMetricReport);

Check warning on line 110 in collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/config/HbasePinpointIdTemplateConfiguration.java#L110

Added line #L110 was not covered by tests
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;

import java.util.Objects;
Expand All @@ -24,7 +25,8 @@
private final HbaseOperations hbaseOperations;
private final TableNameProvider tableNameProvider;

public HbaseApplicationNameDao(HbaseOperations hbaseOperations, TableNameProvider tableNameProvider) {
public HbaseApplicationNameDao(@Qualifier("hbasePinpointIdTemplate") HbaseOperations hbaseOperations,
TableNameProvider tableNameProvider) {

Check warning on line 29 in collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseApplicationNameDao.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseApplicationNameDao.java#L29

Added line #L29 was not covered by tests
this.hbaseOperations = Objects.requireNonNull(hbaseOperations, "hbaseOperations");
this.tableNameProvider = Objects.requireNonNull(tableNameProvider, "tableNameProvider");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,14 @@
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Repository;

import java.util.Objects;

@Repository
@ConditionalOnProperty(value = "pinpoint.collector.application.uid.enable", havingValue = "true")
public class HbaseApplicationUidDao implements ApplicationUidDao {

private static final HbaseColumnFamily.ApplicationUid APPLICATION_ID = HbaseColumnFamily.APPLICATION_UID;
Expand All @@ -31,7 +33,8 @@ public class HbaseApplicationUidDao implements ApplicationUidDao {

private final RowMapper<ApplicationUid> applicationIdMapper;

public HbaseApplicationUidDao(HbaseOperations hbaseOperations, TableNameProvider tableNameProvider,
public HbaseApplicationUidDao(@Qualifier("hbasePinpointIdTemplate") HbaseOperations hbaseOperations,
TableNameProvider tableNameProvider,
@Qualifier("applicationUidMapper") RowMapper<ApplicationUid> applicationIdMapper) {
this.hbaseOperations = Objects.requireNonNull(hbaseOperations, "hbaseOperations");
this.tableNameProvider = Objects.requireNonNull(tableNameProvider, "tableNameProvider");
Expand Down
5 changes: 5 additions & 0 deletions collector/src/main/resources/profiles/local/hbase.properties
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ hbase.client.executor.corePoolSize=8
hbase.client.executor.maxPoolSize=32
hbase.client.executor.queueCapacity=5120

# experimental configuration
hbase.client.pinpoint.id.executor.corePoolSize=2
hbase.client.pinpoint.id.executor.maxPoolSize=8
hbase.client.pinpoint.id.executor.queueCapacity=1280

# warmup hbase connection cache
hbase.client.warmup.enable=false

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ hbase.client.executor.corePoolSize=64
hbase.client.executor.maxPoolSize=64
hbase.client.executor.queueCapacity=5120

# experimental configuration
hbase.client.pinpoint.id.executor.corePoolSize=16
hbase.client.pinpoint.id.executor.maxPoolSize=16
hbase.client.pinpoint.id.executor.queueCapacity=1280

# warmup hbase connection cache
hbase.client.warmup.enable=true

Expand Down