Skip to content

Commit

Permalink
refactoring
Browse files Browse the repository at this point in the history
- Instrumentor.addClassFileTransformer() -> transform()
- modify classFilter
  • Loading branch information
emeroad committed Nov 16, 2015
1 parent 01b55e6 commit 23a98ce
Show file tree
Hide file tree
Showing 25 changed files with 180 additions and 79 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package com.navercorp.pinpoint.plugin.spring.beans;
package com.navercorp.test.pinpoint.plugin.spring.beans;

import org.junit.Test;
import org.junit.runner.RunWith;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package com.navercorp.pinpoint.plugin.spring.beans;
package com.navercorp.test.pinpoint.plugin.spring.beans;

public class Excluded {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package com.navercorp.pinpoint.plugin.spring.beans;
package com.navercorp.test.pinpoint.plugin.spring.beans;

import org.springframework.stereotype.Component;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package com.navercorp.pinpoint.plugin.spring.beans;
package com.navercorp.test.pinpoint.plugin.spring.beans;


public class Maru implements Comparable<Maru> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package com.navercorp.pinpoint.plugin.spring.beans;
package com.navercorp.test.pinpoint.plugin.spring.beans;

public class Morae {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package com.navercorp.pinpoint.plugin.spring.beans;
package com.navercorp.test.pinpoint.plugin.spring.beans;

import org.springframework.stereotype.Controller;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@
* limitations under the License.
*/

package com.navercorp.pinpoint.plugin.spring.beans;

package com.navercorp.test.pinpoint.plugin.spring.beans;

public class Outer {
private Inner inner;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package com.navercorp.pinpoint.plugin.spring.beans;
package com.navercorp.test.pinpoint.plugin.spring.beans;

import org.springframework.stereotype.Component;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package com.navercorp.pinpoint.plugin.spring.beans;
package com.navercorp.test.pinpoint.plugin.spring.beans;

import java.lang.reflect.Method;

Expand Down
18 changes: 9 additions & 9 deletions agent/src/test/resources/spring-beans-test.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,24 @@
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- retransformed by bean name -->
<bean id="maru" class="com.navercorp.pinpoint.plugin.spring.beans.Maru"/>
<bean id="maru" class="com.navercorp.test.pinpoint.plugin.spring.beans.Maru"/>

<!-- retransformed by class -->
<bean id="morae" class="com.navercorp.pinpoint.plugin.spring.beans.Morae"/>
<bean id="morae" class="com.navercorp.test.pinpoint.plugin.spring.beans.Morae"/>

<!-- retransformed by class. duplicated class -->
<bean id="duplicatedMorae" class="com.navercorp.pinpoint.plugin.spring.beans.Morae"/>
<bean id="duplicatedMorae" class="com.navercorp.test.pinpoint.plugin.spring.beans.Morae"/>

<!-- retransformed by annotation -->
<bean id="mozzi" class="com.navercorp.pinpoint.plugin.spring.beans.Mozzi" scope="prototype"/>
<bean id="mozzi" class="com.navercorp.test.pinpoint.plugin.spring.beans.Mozzi" scope="prototype"/>

<!-- excluded -->
<bean id="excluded" class="com.navercorp.pinpoint.plugin.spring.beans.Excluded"/>
<bean id="excluded" class="com.navercorp.test.pinpoint.plugin.spring.beans.Excluded"/>

<!-- inner bean -->
<bean id="outer" class="com.navercorp.pinpoint.plugin.spring.beans.Outer">
<bean id="outer" class="com.navercorp.test.pinpoint.plugin.spring.beans.Outer">
<property name="inner">
<bean class="com.navercorp.pinpoint.plugin.spring.beans.Inner"/>
<bean class="com.navercorp.test.pinpoint.plugin.spring.beans.Inner"/>
</property>
</bean>

Expand All @@ -31,7 +31,7 @@
<property name="proxyTargetClass" value="true"></property>
</bean>

<bean id="testAdvisor" class="com.navercorp.pinpoint.plugin.spring.beans.TestAdvisor"/>
<bean id="testAdvisor" class="com.navercorp.test.pinpoint.plugin.spring.beans.TestAdvisor"/>

<bean id="proxyTarget" class="com.navercorp.pinpoint.plugin.spring.beans.ProxyTarget"/>
<bean id="proxyTarget" class="com.navercorp.test.pinpoint.plugin.spring.beans.ProxyTarget"/>
</beans>
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public <T> Class<? extends T> injectClass(ClassLoader targetClassLoader, String
}

@Override
public void addClassFileTransformer(ClassLoader classLoader, String targetClassName, TransformCallback transformCallback) {
public void transform(ClassLoader classLoader, String targetClassName, TransformCallback transformCallback) {
checkOpen();
instrumentContext.addClassFileTransformer(classLoader, targetClassName, transformCallback);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public interface Instrumentor {

<T> Class<? extends T> injectClass(ClassLoader targetClassLoader, String className);

void addClassFileTransformer(ClassLoader classLoader, String targetClassName, TransformCallback transformCallback);
void transform(ClassLoader classLoader, String targetClassName, TransformCallback transformCallback);

void retransform(Class<?> target, TransformCallback transformCallback);
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public <T> Class<? extends T> injectClass(ClassLoader targetClassLoader, String
}

@Override
public void addClassFileTransformer(ClassLoader classLoader, String targetClassName, TransformCallback transformCallback) {
public void transform(ClassLoader classLoader, String targetClassName, TransformCallback transformCallback) {
instrumentContext.addClassFileTransformer(classLoader, targetClassName, transformCallback);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package com.navercorp.pinpoint.jdk8.lambda;
package com.navercorp.test.pinpoint.jdk8.lambda;

import java.util.function.Predicate;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.navercorp.pinpoint.jdk8.lambda;
package com.navercorp.test.pinpoint.jdk8.lambda;

/**
* @author Jongho Moon
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package com.navercorp.pinpoint.jdk8.lambda;
package com.navercorp.test.pinpoint.jdk8.lambda;

import java.util.function.Predicate;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

package com.navercorp.pinpoint.jdk8.lambda;
package com.navercorp.test.pinpoint.jdk8.lambda;

import org.springframework.stereotype.Controller;

Expand Down
6 changes: 3 additions & 3 deletions java8-test/src/test/resources/lambda-test.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="maru" class="com.navercorp.pinpoint.jdk8.lambda.Maru"/>
<bean id="maru" class="com.navercorp.test.pinpoint.jdk8.lambda.Maru"/>

<bean id="morae" class="com.navercorp.pinpoint.jdk8.lambda.Morae">
<bean id="morae" class="com.navercorp.test.pinpoint.jdk8.lambda.Morae">
<constructor-arg ref="mozzi"/>
</bean>

<bean id="mozzi" class="com.navercorp.pinpoint.jdk8.lambda.Mozzi" scope="prototype">
<bean id="mozzi" class="com.navercorp.test.pinpoint.jdk8.lambda.Mozzi" scope="prototype">
<constructor-arg value="4"/>
</bean>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public byte[] doInTransform(Instrumentor instrumentor, ClassLoader loader, Strin

for (InstrumentClass nestedClass : target.getNestedClasses(ClassFilters.chain(ClassFilters.enclosingMethod("executeAsync", "java.util.concurrent.Executor"), ClassFilters.interfaze("java.util.concurrent.Callable")))) {
logger.debug("Find nested class {}", target.getName());
instrumentor.addClassFileTransformer(loader, nestedClass.getName(), new TransformCallback() {
instrumentor.transform(loader, nestedClass.getName(), new TransformCallback() {
@Override
public byte[] doInTransform(Instrumentor instrumentor, ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws InstrumentException {
InstrumentClass target = instrumentor.getInstrumentClass(loader, className, classfileBuffer);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,11 @@ public class ClassFileTransformerDispatcher implements ClassFileTransformer, Dyn
private final TransformerRegistry transformerRegistry;
private final DynamicTransformerRegistry dynamicTransformerRegistry;

private final DefaultProfilerPluginContext globalContext;
private final DefaultProfilerPluginContext globalContext;
private final Filter<String> debugTargetFilter;
private final DebugTransformer debugTransformer;

private final ClassFileFilter pinpointClassFilter;
private final ClassFileFilter unmodifiableFilter;

public ClassFileTransformerDispatcher(DefaultAgent agent, List<DefaultProfilerPluginContext> pluginContexts) {
Expand All @@ -62,26 +63,29 @@ public ClassFileTransformerDispatcher(DefaultAgent agent, List<DefaultProfilerPl
this.debugTargetFilter = agent.getProfilerConfig().getProfilableClassFilter();
this.debugTransformer = new DebugTransformer(globalContext);

this.unmodifiableFilter = new UnmodifiableClassFilter(agentClassLoader);

this.pinpointClassFilter = new PinpointClassFilter(agentClassLoader);
this.unmodifiableFilter = new UnmodifiableClassFilter();

this.transformerRegistry = createTransformerRegistry(pluginContexts);
this.dynamicTransformerRegistry = new DefaultDynamicTransformerRegistry();
}

@Override
public byte[] transform(ClassLoader classLoader, String jvmClassName, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classFileBuffer) throws IllegalClassFormatException {
ClassFileTransformer transformer = dynamicTransformerRegistry.getTransformer(classLoader, jvmClassName);

if (transformer != null) {
return transform0(classLoader, jvmClassName, classBeingRedefined, protectionDomain, classFileBuffer, transformer);
if (!pinpointClassFilter.accept(classLoader, jvmClassName, classBeingRedefined, protectionDomain, classFileBuffer)) {
return null;
}

final ClassFileTransformer dynamicTransformer = dynamicTransformerRegistry.getTransformer(classLoader, jvmClassName);
if (dynamicTransformer != null) {
return transform0(classLoader, jvmClassName, classBeingRedefined, protectionDomain, classFileBuffer, dynamicTransformer);
}

if (!unmodifiableFilter.accept(classLoader, jvmClassName, classBeingRedefined, protectionDomain, classFileBuffer)) {
return null;
}

transformer = this.transformerRegistry.findTransformer(jvmClassName);

ClassFileTransformer transformer = this.transformerRegistry.findTransformer(jvmClassName);
if (transformer == null) {
// For debug
// TODO What if a modifier is duplicated?
Expand All @@ -101,9 +105,9 @@ private byte[] transform0(ClassLoader classLoader, String jvmClassName, Class<?>

if (isDebug) {
if (classBeingRedefined == null) {
logger.debug("[transform] classLoader:{} className:{} trnasformer:{}", classLoader, javaClassName, transformer.getClass().getName());
logger.debug("[transform] classLoader:{} className:{} transformer:{}", classLoader, javaClassName, transformer.getClass().getName());
} else {
logger.debug("[retransform] classLoader:{} className:{} trnasformer:{}", classLoader, javaClassName, transformer.getClass().getName());
logger.debug("[retransform] classLoader:{} className:{} transformer:{}", classLoader, javaClassName, transformer.getClass().getName());
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/*
* *
* * 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;

import java.security.ProtectionDomain;

/**
* @author emeroad
*/
public class PinpointClassFilter implements ClassFileFilter {

private final ClassLoader agentLoader;

public PinpointClassFilter(ClassLoader agentLoader) {
if (agentLoader == null) {
throw new NullPointerException("agentLoader must not be null");
}
this.agentLoader = agentLoader;
}

@Override
public boolean accept(ClassLoader classLoader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classFileBuffer) {
// bootstrap classLoader
if (classLoader == null) {
return CONTINUE;
}
if (classLoader == agentLoader) {
// skip classes loaded by agent class loader.
return SKIP;
}

// Skip pinpoint packages too.
if (className.startsWith("com/navercorp/pinpoint/")) {
return SKIP;
}

return CONTINUE;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,8 @@
*/
public class UnmodifiableClassFilter implements ClassFileFilter {

private final ClassLoader agentLoader;

public UnmodifiableClassFilter(ClassLoader agentLoader) {
if (agentLoader == null) {
throw new NullPointerException("agentLoader must not be null");
}
this.agentLoader = agentLoader;
public UnmodifiableClassFilter() {
}

@Override
Expand All @@ -41,16 +36,6 @@ public boolean accept(ClassLoader classLoader, String className, Class<?> classB
}
}

if (classLoader == agentLoader) {
// skip classes loaded by agent class loader.
return SKIP;
}

// Skip pinpoint packages too.
if (className.startsWith("com/navercorp/pinpoint/")) {
return SKIP;
}

return CONTINUE;
}
}
Loading

0 comments on commit 23a98ce

Please sign in to comment.