Skip to content
This repository has been archived by the owner on Apr 19, 2023. It is now read-only.

Remove class reference from nailgun stats #131

Merged
merged 1 commit into from
Mar 31, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@

import java.io.InputStream;
import java.io.PrintStream;
import java.lang.reflect.Method;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
Expand Down Expand Up @@ -107,7 +106,7 @@ public class NGServer implements Runnable {
/**
* a collection of all classes executed by this server so far
*/
private final Map allNailStats;
private final Map<String, NailStats> allNailStats;

/**
* Remember the security manager we start with so we can restore it later
Expand Down Expand Up @@ -237,15 +236,16 @@ public Class getDefaultNailClass() {
* @return a NailStats object for the specified class
*/
private NailStats getOrCreateStatsFor(Class nailClass) {
NailStats result = null;
NailStats result;
synchronized (allNailStats) {
result = (NailStats) allNailStats.get(nailClass);
String nailClassName = nailClass.getName();
result = allNailStats.get(nailClassName);
if (result == null) {
result = new NailStats(nailClass);
allNailStats.put(nailClass, result);
result = new NailStats(nailClassName);
allNailStats.put(nailClassName, result);
}
}
return (result);
return result;
}

/**
Expand All @@ -266,10 +266,7 @@ void nailStarted(Class nailClass) {
* @param nailClass the nail class that finished
*/
void nailFinished(Class nailClass) {
NailStats stats;
synchronized (allNailStats) {
stats = (NailStats) allNailStats.get(nailClass);
}
NailStats stats = getOrCreateStatsFor(nailClass);
stats.nailFinished();
}

Expand All @@ -280,15 +277,15 @@ void nailFinished(Class nailClass) {
*
* @return a snapshot of this NGServer's nail statistics.
*/
public Map getNailStats() {
Map result = new java.util.TreeMap();
public Map<String, NailStats> getNailStats() {
Map<String, NailStats> result = new java.util.TreeMap();
synchronized (allNailStats) {
for (Iterator i = allNailStats.keySet().iterator(); i.hasNext();) {
Class nailclass = (Class) i.next();
result.put(nailclass.getName(), ((NailStats) allNailStats.get(nailclass)).clone());
String nailclass = (String) i.next();
result.put(nailclass, (NailStats)(allNailStats.get(nailclass)).clone());
}
}
return (result);
return result;
}

/**
Expand Down Expand Up @@ -327,33 +324,6 @@ public void shutdown(boolean exitVM) {

sessionPool.shutdown();

Class[] argTypes = new Class[1];
argTypes[0] = NGServer.class;
Object[] argValues = new Object[1];
argValues[0] = this;

// make sure that all aliased classes have associated nailstats
// so they can be shut down.
for (Iterator i = getAliasManager().getAliases().iterator(); i.hasNext();) {
Alias alias = (Alias) i.next();
getOrCreateStatsFor(alias.getAliasedClass());
}

synchronized (allNailStats) {
for (Iterator i = allNailStats.values().iterator(); i.hasNext();) {
NailStats ns = (NailStats) i.next();
Class nailClass = ns.getNailClass();

// yes, I know this is lazy, relying upon the exception
// to handle the case of no nailShutdown method.
try {
Method nailShutdown = nailClass.getMethod("nailShutdown", argTypes);
nailShutdown.invoke(null, argValues);
} catch (Throwable toDiscard) {
}
}
}

// restore system streams
System.setIn(in);
System.setOut(out);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

public class NailStats implements Cloneable {

private final Class nailclass;
private final String nailclass;
private long runCounter;
private long refCounter;
private final Object lock;
Expand All @@ -35,7 +35,7 @@ public class NailStats implements Cloneable {
* Creates a new NailStats object for the specified class
* @param nailclass the class for which we'll collect statistics
*/
NailStats(Class nailclass) {
NailStats(String nailclass) {
this.nailclass = nailclass;
runCounter = 0;
refCounter = 0;
Expand Down Expand Up @@ -87,8 +87,8 @@ public long getRefCount() {
* Returns the class for which we're tracking statistics
* @return the class for which we're tracking statistics
*/
public Class getNailClass() {
return (nailclass);
public String getNailClass() {
return nailclass;
}

/**
Expand Down Expand Up @@ -129,6 +129,6 @@ public Object clone() {
* object.
*/
public String toString() {
return (nailclass.getName() + ": " + getRunCount() + "/" + getRefCount());
return (nailclass + ": " + getRunCount() + "/" + getRefCount());
}
}