Skip to content

Commit

Permalink
BlockingQueue and guard adding null
Browse files Browse the repository at this point in the history
  • Loading branch information
tbradellis committed Feb 17, 2022
1 parent 6be021f commit 7a3ac78
Showing 1 changed file with 63 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,17 @@
import com.newrelic.Function;
import com.newrelic.InfiniteTracing;
import com.newrelic.InfiniteTracingConfig;
import com.newrelic.agent.*;
import com.newrelic.agent.Agent;
import com.newrelic.agent.AgentConnectionEstablishedListener;
import com.newrelic.agent.ExpirationService;
import com.newrelic.agent.GCService;
import com.newrelic.agent.HarvestService;
import com.newrelic.agent.HarvestServiceImpl;
import com.newrelic.agent.RPMServiceManager;
import com.newrelic.agent.RPMServiceManagerImpl;
import com.newrelic.agent.ThreadService;
import com.newrelic.agent.TracerService;
import com.newrelic.agent.TransactionService;
import com.newrelic.agent.attributes.AttributesService;
import com.newrelic.agent.browser.BrowserService;
import com.newrelic.agent.browser.BrowserServiceImpl;
Expand Down Expand Up @@ -43,9 +53,23 @@
import com.newrelic.agent.samplers.NoopSamplerService;
import com.newrelic.agent.samplers.SamplerService;
import com.newrelic.agent.samplers.SamplerServiceImpl;
import com.newrelic.agent.service.analytics.*;
import com.newrelic.agent.service.analytics.InfiniteTracingEnabledCheck;
import com.newrelic.agent.service.analytics.InsightsService;
import com.newrelic.agent.service.analytics.InsightsServiceImpl;
import com.newrelic.agent.service.analytics.SpanEventCreationDecider;
import com.newrelic.agent.service.analytics.SpanEventsService;
import com.newrelic.agent.service.analytics.TransactionDataToDistributedTraceIntrinsics;
import com.newrelic.agent.service.analytics.TransactionEventsService;
import com.newrelic.agent.service.async.AsyncTransactionService;
import com.newrelic.agent.service.module.*;
import com.newrelic.agent.service.module.JarAnalystFactory;
import com.newrelic.agent.service.module.JarCollectorConnectionListener;
import com.newrelic.agent.service.module.JarCollectorHarvestListener;
import com.newrelic.agent.service.module.JarCollectorInputs;
import com.newrelic.agent.service.module.JarCollectorService;
import com.newrelic.agent.service.module.JarCollectorServiceImpl;
import com.newrelic.agent.service.module.JarCollectorServiceProcessor;
import com.newrelic.agent.service.module.JarData;
import com.newrelic.agent.service.module.TrackedAddSet;
import com.newrelic.agent.sql.SqlTraceService;
import com.newrelic.agent.sql.SqlTraceServiceImpl;
import com.newrelic.agent.stats.StatsEngine;
Expand All @@ -62,27 +86,28 @@
import com.newrelic.api.agent.NewRelic;

import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Level;

/**
* Service Manager implementation
*
* <p>
* This class is thread-safe.
*/
public class ServiceManagerImpl extends AbstractService implements ServiceManager {

private final ConcurrentMap<String, Service> services = new ConcurrentHashMap<>();
private final CoreService coreService;
private final ConfigService configService;

private final BlockingQueue<StatsWork> statsWork = new LinkedBlockingQueue<>();
private volatile ExtensionService extensionService;
private volatile ProfilerService profilerService;
private volatile TracerService tracerService;
Expand Down Expand Up @@ -587,10 +612,34 @@ private void replayStartupStatsWork() {
statsWork.clear();
}

private final List<StatsWork> statsWork = new ArrayList<>();
@Override
public UtilizationService getUtilizationService() {
return utilizationService;
}

@Override
public DistributedTraceService getDistributedTraceService() {
return distributedTraceService;
}

@Override
public SpanEventsService getSpanEventsService() {
return spanEventsService;
}

@Override
public SourceLanguageService getSourceLanguageService() {
return sourceLanguageService;
}

@Override
public ExpirationService getExpirationService() {
return expirationService;
}

private class InitialStatsService extends AbstractService implements StatsService {
private final MetricAggregator metricAggregator = new StatsServiceMetricAggregator(this);
private final Logger initialStatsServiceLogger = Agent.LOG.getChildLogger("com.newrelic.InitialStatsService");

protected InitialStatsService() {
super("Bootstrap stats service");
Expand All @@ -603,7 +652,12 @@ public boolean isEnabled() {

@Override
public void doStatsWork(StatsWork statsWork) {
ServiceManagerImpl.this.statsWork.add(statsWork);
if (statsWork != null) {
ServiceManagerImpl.this.statsWork.add(statsWork);
} else {
initialStatsServiceLogger.log(Level.WARNING, "Problem adding a StatsWork to queue in InitialStatsService. StatsWork was null.");
}

}

@Override
Expand All @@ -625,29 +679,4 @@ public MetricAggregator getMetricAggregator() {
}
}

@Override
public UtilizationService getUtilizationService() {
return utilizationService;
}

@Override
public DistributedTraceService getDistributedTraceService() {
return distributedTraceService;
}

@Override
public SpanEventsService getSpanEventsService() {
return spanEventsService;
}

@Override
public SourceLanguageService getSourceLanguageService() {
return sourceLanguageService;
}

@Override
public ExpirationService getExpirationService() {
return expirationService;
}

}

0 comments on commit 7a3ac78

Please sign in to comment.