Skip to content

Commit

Permalink
[#10693] change retry with grpc retry
Browse files Browse the repository at this point in the history
  • Loading branch information
donghun-cho committed Mar 19, 2024
1 parent 8e99ae5 commit 47de4fc
Show file tree
Hide file tree
Showing 23 changed files with 136 additions and 275 deletions.
7 changes: 5 additions & 2 deletions agent-module/agent/src/main/resources/pinpoint-root.config
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,11 @@ profiler.transport.grpc.metadata.ssl.enable=false
profiler.transport.grpc.metadata.sender.executor.queue.size=1000
profiler.transport.grpc.metadata.sender.channel.executor.queue.size=1000
profiler.transport.grpc.metadata.sender.request.timeout.millis=6000
profiler.transport.grpc.metadata.sender.retry.max.count=3
profiler.transport.grpc.metadata.sender.retry.delay.millis=1000
profiler.transport.grpc.metadata.sender.retry.enable=true
profiler.transport.grpc.metadata.sender.retry.buffer.size=16M
profiler.transport.grpc.metadata.sender.retry.per.rpc.buffer.limit=1M
profiler.transport.grpc.metadata.sender.max.attempts=3
profiler.transport.grpc.metadata.sender.hedging.delay.millis=1000
profiler.transport.grpc.metadata.sender.keepalive.time.millis=30000
profiler.transport.grpc.metadata.sender.keepalive.timeout.millis=60000
profiler.transport.grpc.metadata.sender.loadbalancer=pick_first
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
package com.navercorp.pinpoint.profiler.test;

import com.navercorp.pinpoint.bootstrap.context.MethodDescriptor;
import com.navercorp.pinpoint.common.profiler.message.EnhancedDataSender;
import com.navercorp.pinpoint.common.profiler.message.DataSender;
import com.navercorp.pinpoint.io.ResponseMessage;
import com.navercorp.pinpoint.profiler.cache.IdAllocator;
import com.navercorp.pinpoint.profiler.cache.Result;
Expand All @@ -35,10 +35,10 @@ public class MockApiMetaDataService implements ApiMetaDataService {

private final SimpleCache<String> apiCache = new SimpleCache<>(new IdAllocator.ZigZagAllocator());

private final EnhancedDataSender<MetaDataType, ResponseMessage> enhancedDataSender;
private final DataSender<MetaDataType> dataSender;

public MockApiMetaDataService(EnhancedDataSender<MetaDataType, ResponseMessage> enhancedDataSender) {
this.enhancedDataSender = Objects.requireNonNull(enhancedDataSender, "enhancedDataSender");
public MockApiMetaDataService(DataSender<MetaDataType> dataSender) {
this.dataSender = Objects.requireNonNull(dataSender, "dataSender");
}

@Override
Expand All @@ -51,7 +51,7 @@ public int cacheApi(final MethodDescriptor methodDescriptor) {
final ApiMetaData apiMetadata = new ApiMetaData(result.getId(), methodDescriptor.getApiDescriptor(),
methodDescriptor.getLineNumber(), methodDescriptor.getType());

this.enhancedDataSender.request(apiMetadata);
this.dataSender.send(apiMetadata);

return result.getId();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@

import com.google.inject.Inject;
import com.google.inject.Provider;
import com.navercorp.pinpoint.common.profiler.message.EnhancedDataSender;
import com.navercorp.pinpoint.io.ResponseMessage;
import com.navercorp.pinpoint.common.profiler.message.DataSender;
import com.navercorp.pinpoint.profiler.metadata.ApiMetaDataService;
import com.navercorp.pinpoint.profiler.metadata.MetaDataType;

Expand All @@ -30,17 +29,17 @@
*/
public class MockApiMetaDataServiceProvider implements Provider<ApiMetaDataService> {

private final Provider<EnhancedDataSender<MetaDataType, ResponseMessage>> enhancedDataSenderProvider;
private final Provider<DataSender<MetaDataType>> dataSenderProvider;

@Inject
public MockApiMetaDataServiceProvider(Provider<EnhancedDataSender<MetaDataType, ResponseMessage>> enhancedDataSenderProvider) {
this.enhancedDataSenderProvider = Objects.requireNonNull(enhancedDataSenderProvider, "enhancedDataSenderProvider");
public MockApiMetaDataServiceProvider(Provider<DataSender<MetaDataType>> dataSenderProvider) {
this.dataSenderProvider = Objects.requireNonNull(dataSenderProvider, "dataSenderProvider");
}

@Override
public ApiMetaDataService get() {
final EnhancedDataSender<MetaDataType, ResponseMessage> enhancedDataSender = this.enhancedDataSenderProvider.get();
return new MockApiMetaDataService(enhancedDataSender);
final DataSender<MetaDataType> dataSender = this.dataSenderProvider.get();
return new MockApiMetaDataService(dataSender);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,8 @@
*/
package com.navercorp.pinpoint.profiler.context.exception.storage;

import com.navercorp.pinpoint.common.profiler.message.EnhancedDataSender;
import com.navercorp.pinpoint.common.profiler.message.DataSender;
import com.navercorp.pinpoint.common.util.CollectionUtils;
import com.navercorp.pinpoint.io.ResponseMessage;
import com.navercorp.pinpoint.profiler.context.exception.model.ExceptionMetaData;
import com.navercorp.pinpoint.profiler.context.exception.model.ExceptionMetaDataFactory;
import com.navercorp.pinpoint.profiler.context.exception.model.ExceptionWrapper;
Expand All @@ -38,12 +37,12 @@ public class BufferedExceptionStorage implements ExceptionStorage {
private static final boolean isDebug = logger.isDebugEnabled();

private final ArrayBuffer<ExceptionWrapper> buffer;
private final EnhancedDataSender<MetaDataType, ResponseMessage> dataSender;
private final DataSender<MetaDataType> dataSender;
private final ExceptionMetaDataFactory factory;

public BufferedExceptionStorage(
int bufferSize,
EnhancedDataSender<MetaDataType, ResponseMessage> dataSender,
DataSender<MetaDataType> dataSender,
ExceptionMetaDataFactory exceptionMetaDataFactory
) {
this.dataSender = Objects.requireNonNull(dataSender, "dataSender");
Expand Down Expand Up @@ -79,7 +78,7 @@ private void sendExceptionMetaData(List<ExceptionWrapper> exceptionWrappers) {
if (isDebug) {
logger.debug("Flush {}", exceptionMetaData);
}
final boolean success = this.dataSender.request(exceptionMetaData);
final boolean success = this.dataSender.send(exceptionMetaData);
if (!success) {
// Do not call exceptionMetaData.toString()
logger.debug("send fail");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@
*/
package com.navercorp.pinpoint.profiler.context.exception.storage;

import com.navercorp.pinpoint.common.profiler.message.EnhancedDataSender;
import com.navercorp.pinpoint.io.ResponseMessage;
import com.navercorp.pinpoint.common.profiler.message.DataSender;
import com.navercorp.pinpoint.profiler.context.exception.model.ExceptionMetaDataFactory;
import com.navercorp.pinpoint.profiler.metadata.MetaDataType;

Expand All @@ -27,10 +26,10 @@
*/
public class ExceptionStorageFactory {

private final EnhancedDataSender<MetaDataType, ResponseMessage> dataSender;
private final DataSender<MetaDataType> dataSender;
private final int bufferSize;

public ExceptionStorageFactory(EnhancedDataSender<MetaDataType, ResponseMessage> dataSender, int bufferSize) {
public ExceptionStorageFactory(DataSender<MetaDataType> dataSender, int bufferSize) {
this.dataSender = Objects.requireNonNull(dataSender, "dataSender");
this.bufferSize = bufferSize;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.navercorp.pinpoint.common.config.Value;
import com.navercorp.pinpoint.common.config.util.ValueAnnotationProcessor;
import com.navercorp.pinpoint.common.config.util.spring.PropertyPlaceholderHelper;
import com.navercorp.pinpoint.common.util.ByteSizeUnit;
import com.navercorp.pinpoint.grpc.client.config.ClientOption;
import com.navercorp.pinpoint.grpc.client.config.SslOption;

Expand Down Expand Up @@ -65,14 +66,15 @@ public class GrpcTransportConfig {
public final static long DEFAULT_RENEW_TRANSPORT_PERIOD_MILLIS_DISABLE = 3153600000000L;
private static final long DEFAULT_RENEW_TRANSPORT_PERIOD_MILLIS = DEFAULT_RENEW_TRANSPORT_PERIOD_MILLIS_DISABLE; // Disabled

private static final int DEFAULT_METADATA_RETRY_MAX_COUNT = 3;
private static final int DEFAULT_METADATA_RETRY_DELAY_MILLIS = 1000;

private static final boolean DEFAULT_METADATA_RETRY_ENABLE = false;
private static final long DEFAULT_METADATA_RETRY_BUFFER_SIZE = 1L << 24; // 16M
private static final long DEFAULT_METADATA_PER_RPC_BUFFER_LIMIT = 1L << 20; // 1M
private static final int DEFAULT_METADATA_MAX_ATTEMPTS = 3;
private static final long DEFAULT_METADATA_HEDGING_DELAY_MILLIS = 1000;
@Deprecated
private static final int DEFAULT_METADATA_RETRY_MAX_COUNT = -1;
@Deprecated
private static final int DEFAULT_METADATA_RETRY_DELAY_MILLIS = -1;

public static final boolean DEFAULT_NETTY_SYSTEM_PROPERTY_TRY_REFLECTIVE_SET_ACCESSIBLE = true;

Expand Down Expand Up @@ -112,21 +114,21 @@ public class GrpcTransportConfig {
private int metadataSenderExecutorQueueSize = DEFAULT_METADATA_SENDER_EXECUTOR_QUEUE_SIZE;
@Value("${profiler.transport.grpc.metadata.sender.channel.executor.queue.size}")
private int metadataChannelExecutorQueueSize = DEFAULT_METADATA_CHANNEL_EXECUTOR_QUEUE_SIZE;
@Value("${profiler.transport.grpc.metadata.sender.retry.max.count}")
private int metadataRetryMaxCount = DEFAULT_METADATA_RETRY_MAX_COUNT;
@Value("${profiler.transport.grpc.metadata.sender.retry.delay.millis}")
private int metadataRetryDelayMillis = DEFAULT_METADATA_RETRY_DELAY_MILLIS;
//grpc client retry
@Value("${profiler.transport.grpc.metadata.sender.retry.enable}")
private boolean metadataRetryEnable = DEFAULT_METADATA_RETRY_ENABLE;
@Value("${profiler.transport.grpc.metadata.sender.retry.buffer.size}")
private long metadataRetryBufferSize = DEFAULT_METADATA_RETRY_BUFFER_SIZE;
@Value("${profiler.transport.grpc.metadata.sender.retry.per.rpc.buffer.limit}")
private long metadataPerRpcBufferLimit = DEFAULT_METADATA_PER_RPC_BUFFER_LIMIT;
@Value("${profiler.transport.grpc.metadata.sender.max.attempts}")
private int metadataMaxAttempts = DEFAULT_METADATA_MAX_ATTEMPTS;
@Value("${profiler.transport.grpc.metadata.sender.hedging.delay.millis}")
private long metadataHedgingDelayMillis = DEFAULT_METADATA_HEDGING_DELAY_MILLIS;
@Deprecated
@Value("${profiler.transport.grpc.metadata.sender.retry.max.count}")
private int metadataRetryMaxCount = DEFAULT_METADATA_RETRY_MAX_COUNT;
@Deprecated
@Value("${profiler.transport.grpc.metadata.sender.retry.delay.millis}")
private int metadataRetryDelayMillis = DEFAULT_METADATA_RETRY_DELAY_MILLIS;

@Value("${profiler.transport.grpc.stat.collector.ip}")
private String statCollectorIp = DEFAULT_IP;
Expand Down Expand Up @@ -418,6 +420,16 @@ public boolean isNettySystemPropertyTryReflectiveSetAccessible() {
return nettySystemPropertyTryReflectiveSetAccessible;
}


@Value("${profiler.transport.grpc.metadata.sender.retry.buffer.size}")
void setMetadataRetryBufferSize(String metadataRetryBufferSize) {
this.metadataRetryBufferSize = ByteSizeUnit.getByteSize(metadataRetryBufferSize, DEFAULT_METADATA_RETRY_BUFFER_SIZE);
}
@Value("${profiler.transport.grpc.metadata.sender.retry.per.rpc.buffer.limit}")
void setMetadataPerRpcBufferLimit(String metadataPerRpcBufferLimit) {
this.metadataPerRpcBufferLimit = ByteSizeUnit.getByteSize(metadataPerRpcBufferLimit, DEFAULT_METADATA_PER_RPC_BUFFER_LIMIT);
}

@Override
public String toString() {
final StringBuilder sb = new StringBuilder("GrpcTransportConfig{");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,9 @@ private void bindAgentDataSender() {
bind(agentDataSender).toProvider(AgentGrpcDataSenderProvider.class).in(Scopes.SINGLETON);
expose(agentDataSender);

Key<EnhancedDataSender<MetaDataType, ResponseMessage>> metadataDataSender = Key.get(dataSenderTypeLiteral, MetadataDataSender.class);
TypeLiteral<DataSender<MetaDataType>> metadataDataSenderTypeLiteral = new TypeLiteral<DataSender<MetaDataType>>() {
};
Key<DataSender<MetaDataType>> metadataDataSender = Key.get(metadataDataSenderTypeLiteral, MetadataDataSender.class);
bind(metadataDataSender).toProvider(MetadataGrpcDataSenderProvider.class).in(Scopes.SINGLETON);
expose(metadataDataSender);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ public class GrpcModuleLifeCycle implements ModuleLifeCycle {
private final PLogger logger = PLoggerFactory.getLogger(this.getClass());

private final Provider<EnhancedDataSender<MetaDataType, ResponseMessage>> agentDataSenderProvider;
private final Provider<EnhancedDataSender<MetaDataType, ResponseMessage>> metadataDataSenderProvider;
private final Provider<DataSender<MetaDataType>> metadataDataSenderProvider;
private final Provider<DataSender<SpanType>> spanDataSenderProvider;
private final Provider<DataSender<MetricType>> statDataSenderProvider;

private final Provider<ExecutorService> dnsExecutorServiceProvider;
private final Provider<ScheduledExecutorService> reconnectScheduledExecutorProvider;

private EnhancedDataSender<MetaDataType, ResponseMessage> agentDataSender;
private EnhancedDataSender<MetaDataType, ResponseMessage> metadataDataSender;
private DataSender<MetaDataType> metadataDataSender;

private DataSender<SpanType> spanDataSender;
private DataSender<MetricType> statDataSender;
Expand All @@ -62,7 +62,7 @@ public class GrpcModuleLifeCycle implements ModuleLifeCycle {
@Inject
public GrpcModuleLifeCycle(
@AgentDataSender Provider<EnhancedDataSender<MetaDataType, ResponseMessage>> agentDataSenderProvider,
@MetadataDataSender Provider<EnhancedDataSender<MetaDataType, ResponseMessage>> metadataDataSenderProvider,
@MetadataDataSender Provider<DataSender<MetaDataType>> metadataDataSenderProvider,
@SpanDataSender Provider<DataSender<SpanType>> spanDataSenderProvider,
@StatDataSender Provider<DataSender<MetricType>> statDataSenderProvider,
Provider<ExecutorService> dnsExecutorServiceProvider,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@

import com.google.inject.Inject;
import com.google.inject.Provider;
import com.navercorp.pinpoint.common.profiler.message.EnhancedDataSender;
import com.navercorp.pinpoint.io.ResponseMessage;
import com.navercorp.pinpoint.common.profiler.message.DataSender;
import com.navercorp.pinpoint.profiler.context.exception.storage.ExceptionStorageFactory;
import com.navercorp.pinpoint.profiler.context.module.MetadataDataSender;
import com.navercorp.pinpoint.profiler.context.monitor.config.ExceptionTraceConfig;
Expand All @@ -32,12 +31,12 @@
public class ExceptionStorageFactoryProvider implements Provider<ExceptionStorageFactory> {

private final ExceptionTraceConfig exceptionTraceConfig;
private final EnhancedDataSender<MetaDataType, ResponseMessage> spanTypeDataSender;
private final DataSender<MetaDataType> spanTypeDataSender;

@Inject
public ExceptionStorageFactoryProvider(
ExceptionTraceConfig exceptionTraceConfig,
@MetadataDataSender EnhancedDataSender<MetaDataType, ResponseMessage> metadataDataSender
@MetadataDataSender DataSender<MetaDataType> metadataDataSender
) {
this.exceptionTraceConfig = Objects.requireNonNull(exceptionTraceConfig, "exceptionTraceConfig");
this.spanTypeDataSender = metadataDataSender;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.protobuf.GeneratedMessageV3;
import com.navercorp.pinpoint.common.profiler.message.EnhancedDataSender;
import com.navercorp.pinpoint.common.profiler.message.DataSender;
import com.navercorp.pinpoint.common.profiler.message.MessageConverter;
import com.navercorp.pinpoint.grpc.client.ChannelFactory;
import com.navercorp.pinpoint.grpc.client.ChannelFactoryBuilder;
Expand All @@ -29,7 +29,6 @@
import com.navercorp.pinpoint.grpc.client.config.ClientOption;
import com.navercorp.pinpoint.grpc.client.config.ClientRetryOption;
import com.navercorp.pinpoint.grpc.client.retry.HedgingServiceConfigBuilder;
import com.navercorp.pinpoint.io.ResponseMessage;
import com.navercorp.pinpoint.profiler.context.grpc.config.GrpcTransportConfig;
import com.navercorp.pinpoint.profiler.context.module.MetadataDataSender;
import com.navercorp.pinpoint.profiler.metadata.MetaDataType;
Expand All @@ -46,7 +45,7 @@
/**
* @author jaehong.kim
*/
public class MetadataGrpcDataSenderProvider implements Provider<EnhancedDataSender<MetaDataType, ResponseMessage>> {
public class MetadataGrpcDataSenderProvider implements Provider<DataSender<MetaDataType>> {

private final Logger logger = LogManager.getLogger(this.getClass());

Expand Down Expand Up @@ -77,7 +76,7 @@ public void setClientInterceptor(@MetadataDataSender List<ClientInterceptor> cli
}

@Override
public EnhancedDataSender<MetaDataType, ResponseMessage> get() {
public DataSender<MetaDataType> get() {
final String collectorIp = grpcTransportConfig.getMetadataCollectorIp();
final int collectorPort = grpcTransportConfig.getMetadataCollectorPort();
final boolean sslEnable = grpcTransportConfig.isMetadataSslEnable();
Expand All @@ -88,10 +87,7 @@ public EnhancedDataSender<MetaDataType, ResponseMessage> get() {

final ChannelFactory channelFactory = channelFactoryBuilder.build();

final int retryMaxCount = grpcTransportConfig.getMetadataRetryMaxCount();
final int retryDelayMillis = grpcTransportConfig.getMetadataRetryDelayMillis();

return new MetadataGrpcDataSender<>(collectorIp, collectorPort, senderExecutorQueueSize, messageConverter, channelFactory, retryMaxCount, retryDelayMillis, clientRetryEnable);
return new MetadataGrpcDataSender(collectorIp, collectorPort, senderExecutorQueueSize, messageConverter, channelFactory);
}

protected ChannelFactoryBuilder newChannelFactoryBuilder(boolean sslEnable, boolean clientRetryEnable) {
Expand Down Expand Up @@ -122,6 +118,10 @@ protected ChannelFactoryBuilder newChannelFactoryBuilder(boolean sslEnable, bool
hedgingServiceConfigBuilder.setMaxAttempts(grpcTransportConfig.getMetadataMaxAttempts());
hedgingServiceConfigBuilder.setHedgingDelayMillis(grpcTransportConfig.getMetadataHedgingDelayMillis());

//for compatibility
hedgingServiceConfigBuilder.setMaxCount(grpcTransportConfig.getMetadataRetryMaxCount());
hedgingServiceConfigBuilder.setRetryDelayMillis(grpcTransportConfig.getMetadataRetryDelayMillis());

channelFactoryBuilder.setClientRetryOption(new ClientRetryOption(
grpcTransportConfig.getMetadataRetryBufferSize(),
grpcTransportConfig.getMetadataPerRpcBufferLimit(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@

import com.google.inject.Inject;
import com.google.inject.Provider;
import com.navercorp.pinpoint.common.profiler.message.EnhancedDataSender;
import com.navercorp.pinpoint.io.ResponseMessage;
import com.navercorp.pinpoint.common.profiler.message.DataSender;
import com.navercorp.pinpoint.profiler.cache.SimpleCache;
import com.navercorp.pinpoint.profiler.context.module.MetadataDataSender;
import com.navercorp.pinpoint.profiler.metadata.ApiMetaDataService;
Expand All @@ -33,20 +32,20 @@
*/
public class ApiMetaDataServiceProvider implements Provider<ApiMetaDataService> {

private final Provider<EnhancedDataSender<MetaDataType, ResponseMessage>> enhancedDataSenderProvider;
private final Provider<DataSender<MetaDataType>> dataSenderProvider;
private final SimpleCacheFactory simpleCacheFactory;

@Inject
public ApiMetaDataServiceProvider(@MetadataDataSender Provider<EnhancedDataSender<MetaDataType, ResponseMessage>> enhancedDataSenderProvider, SimpleCacheFactory simpleCacheFactory) {
this.enhancedDataSenderProvider = Objects.requireNonNull(enhancedDataSenderProvider, "enhancedDataSenderProvider");
public ApiMetaDataServiceProvider(@MetadataDataSender Provider<DataSender<MetaDataType>> dataSenderProvider, SimpleCacheFactory simpleCacheFactory) {
this.dataSenderProvider = Objects.requireNonNull(dataSenderProvider, "dataSenderProvider");
this.simpleCacheFactory = Objects.requireNonNull(simpleCacheFactory, "simpleCacheFactory");

}

@Override
public ApiMetaDataService get() {
final EnhancedDataSender<MetaDataType, ResponseMessage> enhancedDataSender = this.enhancedDataSenderProvider.get();
final DataSender<MetaDataType> dataSender = this.dataSenderProvider.get();
final SimpleCache<String> simpleCache = simpleCacheFactory.newSimpleCache();
return new DefaultApiMetaDataService(enhancedDataSender, simpleCache);
return new DefaultApiMetaDataService(dataSender, simpleCache);
}
}

0 comments on commit 47de4fc

Please sign in to comment.