-
Notifications
You must be signed in to change notification settings - Fork 3.7k
Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
/* | ||
* Copyright 2024 NAVER Corp. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package com.navercorp.pinpoint.profiler.sender.grpc; | ||
|
||
import com.google.protobuf.GeneratedMessageV3; | ||
import com.navercorp.pinpoint.common.profiler.message.EnhancedDataSender; | ||
import com.navercorp.pinpoint.common.profiler.message.MessageConverter; | ||
import com.navercorp.pinpoint.grpc.MessageFormatUtils; | ||
import com.navercorp.pinpoint.grpc.client.ChannelFactory; | ||
import com.navercorp.pinpoint.grpc.trace.MetadataGrpc; | ||
import com.navercorp.pinpoint.grpc.trace.PApiMetaData; | ||
import com.navercorp.pinpoint.grpc.trace.PExceptionMetaData; | ||
import com.navercorp.pinpoint.grpc.trace.PResult; | ||
import com.navercorp.pinpoint.grpc.trace.PSqlMetaData; | ||
import com.navercorp.pinpoint.grpc.trace.PSqlUidMetaData; | ||
import com.navercorp.pinpoint.grpc.trace.PStringMetaData; | ||
import com.navercorp.pinpoint.io.ResponseMessage; | ||
import io.grpc.stub.StreamObserver; | ||
|
||
import java.util.concurrent.atomic.AtomicLong; | ||
import java.util.function.BiConsumer; | ||
|
||
/** | ||
*/ | ||
public class MetadataGrpcHedgingDataSender<T> extends GrpcDataSender<T> implements EnhancedDataSender<T, ResponseMessage> { | ||
// | ||
private final MetadataGrpc.MetadataStub metadataStub; | ||
|
||
private final AtomicLong requestCount = new AtomicLong(0); | ||
Check warning on line 43 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
|
||
public MetadataGrpcHedgingDataSender(String host, int port, int executorQueueSize, | ||
MessageConverter<T, GeneratedMessageV3> messageConverter, | ||
ChannelFactory channelFactory) { | ||
super(host, port, executorQueueSize, messageConverter, channelFactory); | ||
Check warning on line 48 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
|
||
this.metadataStub = MetadataGrpc.newStub(managedChannel); | ||
} | ||
Check warning on line 51 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
|
||
// Unsupported Operation | ||
@Override | ||
public boolean request(T data, int retry) { | ||
throw new UnsupportedOperationException("unsupported operation request(data, retry)"); | ||
Check warning on line 56 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
} | ||
|
||
@Override | ||
public boolean request(T data, BiConsumer<ResponseMessage, Throwable> listener) { | ||
throw new UnsupportedOperationException("unsupported operation request(data, listener)"); | ||
Check warning on line 61 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
} | ||
|
||
@Override | ||
public boolean send(T data) { | ||
throw new UnsupportedOperationException("unsupported operation send(data)"); | ||
Check warning on line 66 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
} | ||
|
||
@Override | ||
public boolean request(final T data) { | ||
try { | ||
final GeneratedMessageV3 message = messageConverter.toMessage(data); | ||
Check warning on line 72 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
|
||
if (message instanceof PSqlMetaData) { | ||
final PSqlMetaData sqlMetaData = (PSqlMetaData) message; | ||
this.metadataStub.requestSqlMetaData(sqlMetaData, newLogStreamObserver(sqlMetaData)); | ||
Check warning on line 76 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
} else if (message instanceof PSqlUidMetaData) { | ||
final PSqlUidMetaData sqlUidMetaData = (PSqlUidMetaData) message; | ||
this.metadataStub.requestSqlUidMetaData(sqlUidMetaData, newLogStreamObserver(sqlUidMetaData)); | ||
Check warning on line 79 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
} else if (message instanceof PApiMetaData) { | ||
final PApiMetaData apiMetaData = (PApiMetaData) message; | ||
this.metadataStub.requestApiMetaData(apiMetaData, newLogStreamObserver(apiMetaData)); | ||
Check warning on line 82 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
} else if (message instanceof PStringMetaData) { | ||
final PStringMetaData stringMetaData = (PStringMetaData) message; | ||
this.metadataStub.requestStringMetaData(stringMetaData, newLogStreamObserver(stringMetaData)); | ||
Check warning on line 85 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
} else if (message instanceof PExceptionMetaData) { | ||
final PExceptionMetaData exceptionMetaData = (PExceptionMetaData) message; | ||
this.metadataStub.requestExceptionMetaData(exceptionMetaData, newLogStreamObserver(exceptionMetaData)); | ||
} else { | ||
Check warning on line 89 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
if (logger.isWarnEnabled()) { | ||
logger.warn("Unsupported message {}", MessageFormatUtils.debugLog(message)); | ||
Check warning on line 91 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
} | ||
} | ||
} catch (Throwable e) { | ||
logger.info("Failed to send metadata={}", data, e); | ||
return false; | ||
} | ||
return true; | ||
Check warning on line 98 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
} | ||
|
||
private StreamObserver<PResult> newLogStreamObserver(GeneratedMessageV3 message) { | ||
String type = message.getClass().getSimpleName(); | ||
long requestCount = this.requestCount.incrementAndGet(); | ||
return new LogResponseStreamObserver<>(logger, type, requestCount); | ||
Check warning on line 104 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
} | ||
|
||
@Override | ||
public void stop() { | ||
if (shutdown) { | ||
return; | ||
Check warning on line 110 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
} | ||
this.shutdown = true; | ||
Check warning on line 112 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
|
||
super.release(); | ||
} | ||
Check warning on line 115 in agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/grpc/MetadataGrpcHedgingDataSender.java
|
||
} |