remove StoragePool & synchronized.

This commit is contained in:
Jaehong Kim
2015-07-17 16:04:25 +09:00
parent 2c2ffa1731
commit da4635c03a
12 changed files with 11 additions and 157 deletions
@@ -38,10 +38,4 @@ public interface TraceId {
short getFlags();
boolean isRoot();
int getTraceCount();
int incrementTraceCount();
int decrementTraceCount();
}
@@ -75,22 +75,6 @@ public class DefaultAsyncTraceId implements AsyncTraceId {
return startTime;
}
@Override
public int getTraceCount() {
return traceId.getTraceCount();
}
@Override
public int incrementTraceCount() {
return traceId.incrementTraceCount();
}
@Override
public int decrementTraceCount() {
return traceId.decrementTraceCount();
}
@Override
public TraceId getParentTraceId() {
return traceId;
@@ -108,5 +92,4 @@ public class DefaultAsyncTraceId implements AsyncTraceId {
builder.append("}");
return builder.toString();
}
}
@@ -60,7 +60,6 @@ public final class DefaultTrace implements Trace {
this.traceId = new DefaultTraceId(traceContext.getAgentId(), traceContext.getAgentStartTime(), transactionId);
this.sampling = sampling;
this.traceId.incrementTraceCount();
Span span = createSpan();
this.spanRecorder = new DefaultSpanRecorder(traceContext, span, traceId, sampling);
this.spanRecorder.recordTraceId(traceId);
@@ -84,7 +83,6 @@ public final class DefaultTrace implements Trace {
this.traceId = continueTraceId;
this.sampling = sampling;
this.traceId.incrementTraceCount();
Span span = createSpan();
this.spanRecorder = new DefaultSpanRecorder(traceContext, span, traceId, sampling);
this.spanRecorder.recordTraceId(traceId);
@@ -180,7 +178,6 @@ public final class DefaultTrace implements Trace {
// If the stack is not handled properly, NullPointerException will be thrown after this. Is it OK?
if (this.storage != null) {
this.traceId.decrementTraceCount();
this.storage.close();
this.storage = null;
}
@@ -26,7 +26,6 @@ import com.navercorp.pinpoint.exception.PinpointException;
import com.navercorp.pinpoint.profiler.context.storage.AsyncStorage;
import com.navercorp.pinpoint.profiler.context.storage.Storage;
import com.navercorp.pinpoint.profiler.context.storage.StorageFactory;
import com.navercorp.pinpoint.profiler.context.storage.StoragePool;
import com.navercorp.pinpoint.profiler.monitor.metric.MetricRegistry;
import com.navercorp.pinpoint.profiler.util.NamedThreadLocal;
@@ -50,8 +49,6 @@ public class ThreadLocalTraceFactory implements TraceFactory {
private final StorageFactory storageFactory;
private final Sampler sampler;
private final StoragePool storagePool;
// Unique id for tracing a internal stacktrace and calculating a slow time of activethreadcount
// moved here in order to make codes simpler for now
private final AtomicLong transactionId = new AtomicLong(0);
@@ -73,7 +70,6 @@ public class ThreadLocalTraceFactory implements TraceFactory {
this.metricRegistry = metricRegistry;
this.storageFactory = storageFactory;
this.sampler = sampler;
this.storagePool = new StoragePool(storageFactory);
}
@@ -132,7 +128,7 @@ public class ThreadLocalTraceFactory implements TraceFactory {
final boolean sampling = true;
final DefaultTrace trace = new DefaultTrace(traceContext, traceID, sampling);
// final Storage storage = storageFactory.createStorage();
final Storage storage = storagePool.getStorage(traceID);
final Storage storage = storageFactory.createStorage();
trace.setStorage(storage);
threadLocal.set(trace);
return trace;
@@ -172,7 +168,7 @@ public class ThreadLocalTraceFactory implements TraceFactory {
// final Storage storage = storageFactory.createStorage();
final DefaultTrace trace = new DefaultTrace(traceContext, nextTransactionId(), sampling);
final TraceId traceId = trace.getTraceId();
final Storage storage = storagePool.getStorage(traceId);
final Storage storage = storageFactory.createStorage();
trace.setStorage(storage);
trace.setTraceType(traceType);
threadLocal.set(trace);
@@ -209,7 +205,7 @@ public class ThreadLocalTraceFactory implements TraceFactory {
final TraceId parentTraceId = traceId.getParentTraceId();
final boolean sampling = true;
final DefaultTrace trace = new DefaultTrace(traceContext, parentTraceId, sampling);
final Storage storage = storagePool.getStorage(parentTraceId);
final Storage storage = storageFactory.createStorage();
trace.setStorage(new AsyncStorage(storage));
final AsyncTrace asyncTrace = new AsyncTrace(trace, asyncId, traceId.nextAsyncSequence(), startTime);
@@ -47,11 +47,6 @@ public class AsyncStorage implements Storage {
storage.flush();
}
@Override
public void setCloseHandler(StorageCloseHandler closeHandler) {
storage.setCloseHandler(closeHandler);
}
@Override
public void close() {
storage.close();
@@ -40,7 +40,6 @@ public class BufferedStorage implements Storage {
private List<SpanEvent> storage;
private final DataSender dataSender;
private final SpanChunkFactory spanChunkFactory;
private StorageCloseHandler closeHandler;
public BufferedStorage(DataSender dataSender, SpanChunkFactory spanChunkFactory) {
this(dataSender, spanChunkFactory, DEFAULT_BUFFER_SIZE);
@@ -62,14 +61,13 @@ public class BufferedStorage implements Storage {
@Override
public void store(SpanEvent spanEvent) {
List<SpanEvent> flushData = null;
synchronized (this) {
storage.add(spanEvent);
if (storage.size() >= bufferSize) {
// data copy
flushData = storage;
storage = new ArrayList<SpanEvent>(bufferSize);
}
storage.add(spanEvent);
if (storage.size() >= bufferSize) {
// data copy
flushData = storage;
storage = new ArrayList<SpanEvent>(bufferSize);
}
if (flushData != null) {
final SpanChunk spanChunk = spanChunkFactory.create(flushData);
if (isDebug) {
@@ -99,10 +97,8 @@ public class BufferedStorage implements Storage {
public void flush() {
List<SpanEvent> spanEventList;
synchronized (this) {
spanEventList = storage;
this.storage = new ArrayList<SpanEvent>(bufferSize);
}
spanEventList = storage;
this.storage = new ArrayList<SpanEvent>(bufferSize);
if (spanEventList != null && !spanEventList.isEmpty()) {
final SpanChunk spanChunk = spanChunkFactory.create(spanEventList);
@@ -113,19 +109,8 @@ public class BufferedStorage implements Storage {
}
}
public StorageCloseHandler getCloseHandler() {
return closeHandler;
}
public void setCloseHandler(StorageCloseHandler closeHandler) {
this.closeHandler = closeHandler;
}
@Override
public void close() {
if(closeHandler != null) {
closeHandler.handle();
}
}
@Override
@@ -51,10 +51,6 @@ public class LogStorageFactory implements StorageFactory {
public void flush() {
}
@Override
public void setCloseHandler(StorageCloseHandler closeHandler) {
}
@Override
public void close() {
}
@@ -66,10 +66,6 @@ public class SpanStorage implements Storage {
public void flush() {
}
@Override
public void setCloseHandler(StorageCloseHandler closeHandler) {
}
@Override
public void close() {
}
@@ -39,7 +39,5 @@ public interface Storage {
void flush();
void setCloseHandler(StorageCloseHandler closeHandler);
void close();
}
@@ -1,26 +0,0 @@
/*
* Copyright 2014 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.context.storage;
/**
*
* @author jaehong.kim
*
*/
public interface StorageCloseHandler {
void handle();
}
@@ -1,56 +0,0 @@
/*
* Copyright 2014 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.context.storage;
import java.util.concurrent.ConcurrentHashMap;
import com.navercorp.pinpoint.bootstrap.context.TraceId;
/**
*
* @author jaehong.kim
*
*/
public class StoragePool {
private final StorageFactory storageFactory;
private final ConcurrentHashMap<TraceId, Storage> pool = new ConcurrentHashMap<TraceId, Storage>();
public StoragePool(final StorageFactory storageFactory) {
this.storageFactory = storageFactory;
}
public Storage getStorage(final TraceId traceId) {
Storage storage = pool.get(traceId);
if (storage == null) {
final Storage newStorage = storageFactory.createStorage();
newStorage.setCloseHandler(new StorageCloseHandler() {
@Override
public void handle() {
if (traceId.getTraceCount() == 0) {
pool.remove(traceId);
}
}
});
storage = pool.putIfAbsent(traceId, newStorage);
if (storage == null) {
storage = newStorage;
}
}
return storage;
}
}
@@ -60,10 +60,6 @@ public final class SimpleSpanStorage implements Storage {
public void flush() {
}
@Override
public void setCloseHandler(StorageCloseHandler closeHandler) {
}
@Override
public void close() {
}