Skip to content

Commit

Permalink
[#noissue] Refactor PingSession
Browse files Browse the repository at this point in the history
  • Loading branch information
emeroad committed Aug 14, 2024
1 parent 2c53cc7 commit 8ef64b2
Show file tree
Hide file tree
Showing 7 changed files with 89 additions and 71 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@
import com.navercorp.pinpoint.collector.service.AgentInfoService;
import com.navercorp.pinpoint.collector.util.ManagedAgentLifeCycle;
import com.navercorp.pinpoint.common.server.bo.AgentInfoBo;
import com.navercorp.pinpoint.common.trace.ServiceType;
import com.navercorp.pinpoint.grpc.Header;
import com.navercorp.pinpoint.grpc.server.lifecycle.LifecycleListener;
import com.navercorp.pinpoint.grpc.server.lifecycle.PingSession;
import org.apache.logging.log4j.LogManager;
Expand Down Expand Up @@ -50,11 +48,10 @@ public AgentLifecycleListener(KeepAliveService lifecycleService, AgentInfoServic
@Override
public void connect(PingSession lifecycle) {
logger.info("connect:{}", lifecycle);
final Header header = lifecycle.getHeader();
try {
if (lifecycle.getServiceType() == ServiceType.UNDEFINED.getCode()) {
if (lifecycle.isUndefinedServiceType()) {
// fallback
final AgentInfoBo agentInfoBo = agentInfoService.getSimpleAgentInfo(header.getAgentId(), header.getAgentStartTime());
final AgentInfoBo agentInfoBo = agentInfoService.getSimpleAgentInfo(lifecycle.getAgentId(), lifecycle.getAgentStartTime());

Check warning on line 54 in collector/src/main/java/com/navercorp/pinpoint/collector/receiver/grpc/service/AgentLifecycleListener.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/receiver/grpc/service/AgentLifecycleListener.java#L54

Added line #L54 was not covered by tests
logger.info("ServiceType is UNDEFINED. Fallback:AgentInfo lookup {} -> {}", lifecycle, agentInfoBo);
if (agentInfoBo != null) {
lifecycle.setServiceType(agentInfoBo.getServiceTypeCode());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,10 @@
import com.navercorp.pinpoint.collector.util.ManagedAgentLifeCycle;
import com.navercorp.pinpoint.common.server.util.AgentEventType;
import com.navercorp.pinpoint.common.server.util.AgentLifeCycleState;
import com.navercorp.pinpoint.grpc.Header;
import com.navercorp.pinpoint.grpc.server.lifecycle.PingSession;
import com.navercorp.pinpoint.grpc.server.lifecycle.PingSessionRegistry;

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.util.Collection;
import java.util.Objects;
Expand Down Expand Up @@ -60,11 +58,12 @@ public void updateState() {
}
}

private AgentProperty newChannelProperties(Header header, short serviceType) {
final String applicationName = header.getApplicationName();
final String agentId = header.getAgentId();
final long agentStartTime = header.getAgentStartTime();
return new DefaultAgentProperty(applicationName, serviceType, agentId, agentStartTime, header.getProperties());
private AgentProperty newChannelProperties(PingSession pingSession) {
final String applicationName = pingSession.getApplicationName();
final String agentId = pingSession.getAgentId();
final long agentStartTime = pingSession.getAgentStartTime();
short serviceType = pingSession.getServiceType();
return new DefaultAgentProperty(applicationName, serviceType, agentId, agentStartTime, pingSession.getProperties());

Check warning on line 66 in collector/src/main/java/com/navercorp/pinpoint/collector/receiver/grpc/service/KeepAliveService.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/receiver/grpc/service/KeepAliveService.java#L62-L66

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

public void updateState(PingSession lifecycle, ManagedAgentLifeCycle managedAgentLifeCycle) {
Expand All @@ -75,24 +74,18 @@ public void updateState(PingSession lifecycle, ManagedAgentLifeCycle managedAgen
}

public void updateState(PingSession pingSession, boolean closeState, AgentLifeCycleState agentLifeCycleState, AgentEventType agentEventType) {
final Header header = pingSession.getHeader();
if (header == null) {
// TODO dump client ip for debug
logger.warn("Not found request header");
return;
}

final long pingTimestamp = System.currentTimeMillis();
final long socketId = header.getSocketId();
final long socketId = pingSession.getSocketId();

Check warning on line 79 in collector/src/main/java/com/navercorp/pinpoint/collector/receiver/grpc/service/KeepAliveService.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/receiver/grpc/service/KeepAliveService.java#L79

Added line #L79 was not covered by tests
if (socketId == -1) {
// TODO dump client ip for debug
logger.warn("SocketId not exist. header:{}", header);
logger.warn("SocketId not exist. pingSession:{}", pingSession);

Check warning on line 82 in collector/src/main/java/com/navercorp/pinpoint/collector/receiver/grpc/service/KeepAliveService.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/receiver/grpc/service/KeepAliveService.java#L82

Added line #L82 was not covered by tests
// skip
return;
}

try {
final AgentProperty agentProperty = newChannelProperties(header, pingSession.getServiceType());
final AgentProperty agentProperty = newChannelProperties(pingSession);

Check warning on line 88 in collector/src/main/java/com/navercorp/pinpoint/collector/receiver/grpc/service/KeepAliveService.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/receiver/grpc/service/KeepAliveService.java#L88

Added line #L88 was not covered by tests
long eventIdentifier = AgentLifeCycleAsyncTaskService.createEventIdentifier((int)socketId, (int) pingSession.nextEventIdAllocator());
this.agentLifeCycleAsyncTask.handleLifeCycleEvent(agentProperty , pingTimestamp, agentLifeCycleState, eventIdentifier);
this.agentEventAsyncTask.handleEvent(agentProperty, pingTimestamp, agentEventType);
Expand All @@ -102,15 +95,8 @@ public void updateState(PingSession pingSession, boolean closeState, AgentLifeCy
}

public void updateState(PingSession pingSession) {
final Header header = pingSession.getHeader();
if (header == null) {
// TODO dump client ip for debug
logger.warn("Not found request header");
return;
}

try {
final AgentProperty agentProperty = newChannelProperties(header, pingSession.getServiceType());
final AgentProperty agentProperty = newChannelProperties(pingSession);

Check warning on line 99 in collector/src/main/java/com/navercorp/pinpoint/collector/receiver/grpc/service/KeepAliveService.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/receiver/grpc/service/KeepAliveService.java#L99

Added line #L99 was not covered by tests
this.agentLifeCycleAsyncTask.handlePingEvent(agentProperty);
} catch (Exception e) {
logger.warn("Failed to update state. ping session={}", pingSession, e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
import com.navercorp.pinpoint.common.trace.ServiceType;
import com.navercorp.pinpoint.common.util.BytesUtils;
import com.navercorp.pinpoint.loader.service.ServiceTypeRegistryService;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

Expand Down Expand Up @@ -61,15 +61,7 @@ public void handleLifeCycleEvent(AgentProperty agentProperty, long eventTimestam
Objects.requireNonNull(agentLifeCycleState, "agentLifeCycleState");

final String agentId = agentProperty.getAgentId();
if (agentId == null) {
logger.warn("Failed to handle event of agent life cycle, agentId is null. agentProperty={}", agentProperty);
return;
}
final String applicationName = agentProperty.getApplicationName();
if (applicationName == null) {
logger.warn("Failed to handle event of agent life cycle, applicationName is null. agentProperty={}", agentProperty);
return;
}

final long startTimestamp = agentProperty.getStartTime();
final AgentLifeCycleBo agentLifeCycleBo = new AgentLifeCycleBo(agentId, startTimestamp, eventTimestamp, eventIdentifier, agentLifeCycleState);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,12 @@ public Object get(String key) {

@Override
public String toString() {
final StringBuilder sb = new StringBuilder("DefaultAgentProperty{");
sb.append("applicationName='").append(applicationName).append('\'');
sb.append(", agentId='").append(agentId).append('\'');
sb.append(", agentStartTime=").append(agentStartTime);
sb.append(", properties=").append(properties);
sb.append(", serviceType=").append(serviceType);
sb.append('}');
return sb.toString();
return "DefaultAgentProperty{" +

Check warning on line 68 in collector/src/main/java/com/navercorp/pinpoint/collector/service/async/DefaultAgentProperty.java

View check run for this annotation

Codecov / codecov/patch

collector/src/main/java/com/navercorp/pinpoint/collector/service/async/DefaultAgentProperty.java#L68

Added line #L68 was not covered by tests
"applicationName='" + applicationName + '\'' +
", agentId='" + agentId + '\'' +
", agentStartTime=" + agentStartTime +
", properties=" + properties +
", serviceType=" + serviceType +
'}';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
import com.navercorp.pinpoint.grpc.Header;
import com.navercorp.pinpoint.grpc.server.ServerContext;
import com.navercorp.pinpoint.grpc.server.TransportMetadata;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.util.Objects;

Expand Down Expand Up @@ -50,7 +50,7 @@ public void connect() {

final Long transportId = transportMetadata.getTransportId();
final Header header = ServerContext.getAgentInfo();
final PingSession pingSession = new PingSession(transportId, header);
final PingSession pingSession = PingSession.of(transportId, header);

Check warning on line 53 in grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/DefaultPingEventHandler.java

View check run for this annotation

Codecov / codecov/patch

grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/DefaultPingEventHandler.java#L53

Added line #L53 was not covered by tests
pingSession.setLastPingTimeMillis(System.currentTimeMillis());
final PingSession oldSession = pingSessionRegistry.add(pingSession.getId(), pingSession);
if (oldSession != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.navercorp.pinpoint.common.trace.ServiceType;
import com.navercorp.pinpoint.grpc.Header;

import java.util.Map;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicLongFieldUpdater;

Expand All @@ -30,21 +31,36 @@ public class PingSession {
private static final AtomicLongFieldUpdater<PingSession> UPDATER = AtomicLongFieldUpdater.newUpdater(PingSession.class, "eventIdAllocator");

private final Long id;
private final Header header;
private final String applicationName;
private final String agentId;
private final long agentStartTime;
private final long socketId;
private final Map<String, Object> properties;

private short serviceType;

private volatile long eventIdAllocator = 0;

private short serviceType = ServiceType.UNDEFINED.getCode();
private boolean updated = false;
private long lastPingTimeMillis;

public PingSession(Long id, Header header) {
this.id = Objects.requireNonNull(id, "transportMetadata");
this.header = Objects.requireNonNull(header, "header");
public static PingSession of(Long id, Header header) {
Objects.requireNonNull(id, "id");
Objects.requireNonNull(header, "header");

Check warning on line 49 in grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/PingSession.java

View check run for this annotation

Codecov / codecov/patch

grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/PingSession.java#L48-L49

Added lines #L48 - L49 were not covered by tests

return new PingSession(id, header.getApplicationName(), header.getAgentId(), header.getAgentStartTime(),
(short) header.getServiceType(), header.getSocketId(), header.getProperties());

Check warning on line 52 in grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/PingSession.java

View check run for this annotation

Codecov / codecov/patch

grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/PingSession.java#L51-L52

Added lines #L51 - L52 were not covered by tests
}

public Header getHeader() {
return header;
public PingSession(Long id, String applicationName, String agentId, long agentStartTime, short serviceType, long socketId, Map<String, Object> properties) {
this.id = Objects.requireNonNull(id, "id");

this.applicationName = Objects.requireNonNull(applicationName, "applicationName");
this.agentId = Objects.requireNonNull(agentId, "agentId");
this.agentStartTime = agentStartTime;
this.serviceType = serviceType;
this.socketId = socketId;
this.properties = Objects.requireNonNull(properties, "properties");
}

public Long getId() {
Expand All @@ -56,18 +72,45 @@ public long nextEventIdAllocator() {
}

public short getServiceType() {
if (serviceType != ServiceType.UNDEFINED.getCode()) {
synchronized (this) {
return serviceType;
}
return (short) header.getServiceType();
}

public void setServiceType(short serviceType) {
if (header.getServiceType() == ServiceType.UNDEFINED.getCode()) {
this.serviceType = serviceType;
synchronized (this) {
if (this.serviceType == ServiceType.UNDEFINED.getCode()) {
this.serviceType = serviceType;
}
}
}

public boolean isUndefinedServiceType() {
synchronized (this) {

Check warning on line 89 in grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/PingSession.java

View check run for this annotation

Codecov / codecov/patch

grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/PingSession.java#L89

Added line #L89 was not covered by tests
return this.serviceType == ServiceType.UNDEFINED.getCode();
}
}

public String getApplicationName() {
return applicationName;

Check warning on line 95 in grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/PingSession.java

View check run for this annotation

Codecov / codecov/patch

grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/PingSession.java#L95

Added line #L95 was not covered by tests
}

public String getAgentId() {
return agentId;

Check warning on line 99 in grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/PingSession.java

View check run for this annotation

Codecov / codecov/patch

grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/PingSession.java#L99

Added line #L99 was not covered by tests
}

public long getAgentStartTime() {
return agentStartTime;

Check warning on line 103 in grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/PingSession.java

View check run for this annotation

Codecov / codecov/patch

grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/PingSession.java#L103

Added line #L103 was not covered by tests
}

public long getSocketId() {
return socketId;

Check warning on line 107 in grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/PingSession.java

View check run for this annotation

Codecov / codecov/patch

grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/PingSession.java#L107

Added line #L107 was not covered by tests
}

public Map<String, Object> getProperties() {
return this.properties;

Check warning on line 111 in grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/PingSession.java

View check run for this annotation

Codecov / codecov/patch

grpc/src/main/java/com/navercorp/pinpoint/grpc/server/lifecycle/PingSession.java#L111

Added line #L111 was not covered by tests
}

// Flag to avoid duplication.
public boolean isUpdated() {
return updated;
Expand All @@ -89,7 +132,11 @@ public void setLastPingTimeMillis(long lastPingTimeMillis) {
public String toString() {
return "PingSession{" +
"id=" + id +
", header=" + header +
", applicationName='" + applicationName + '\'' +
", agentId='" + agentId + '\'' +
", agentStartTime=" + agentStartTime +
", socketId=" + socketId +
", properties=" + properties +
", eventIdAllocator=" + eventIdAllocator +
", serviceType=" + serviceType +
", updated=" + updated +
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.navercorp.pinpoint.grpc.server.lifecycle;

import com.navercorp.pinpoint.common.trace.ServiceType;
import com.navercorp.pinpoint.grpc.Header;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

Expand All @@ -11,9 +10,8 @@ class PingSessionTest {

@Test
void getServiceType() {
Header header = new Header("name", "agentId", "agentName", "appName",
ServiceType.SPRING.getCode(), 11, 22, Collections.emptyList());
PingSession session = new PingSession(1L, header);
PingSession session = new PingSession(1L, "name", "agentId", 1234,
ServiceType.SPRING.getCode(), 11, Collections.emptyMap());

Assertions.assertEquals(ServiceType.SPRING.getCode(), session.getServiceType());

Expand All @@ -23,9 +21,8 @@ void getServiceType() {

@Test
void getServiceType_undefined() {
Header header = new Header("name", "agentId", "agentName", "appName",
ServiceType.UNDEFINED.getCode(), 11, 22, Collections.emptyList());
PingSession session = new PingSession(1L, header);
PingSession session = new PingSession(1L, "name", "agentId", 1234,
ServiceType.UNDEFINED.getCode(), 11, Collections.emptyMap());

Assertions.assertEquals(ServiceType.UNDEFINED.getCode(), session.getServiceType());

Expand All @@ -35,10 +32,10 @@ void getServiceType_undefined() {

@Test
void nextEventIdAllocator() {
Header header = new Header("name", "agentId", "agentName", "appName",
ServiceType.SPRING.getCode(), 11, 22, Collections.emptyList());

PingSession session = new PingSession(1L, header);

PingSession session = new PingSession(1L, "name", "agentId", 1234,
ServiceType.SPRING.getCode(), 11, Collections.emptyMap());

Assertions.assertEquals(1, session.nextEventIdAllocator());
Assertions.assertEquals(2, session.nextEventIdAllocator());
Expand Down

0 comments on commit 8ef64b2

Please sign in to comment.