1 4 package com.tcsimulator; 5 6 import EDU.oswego.cs.dl.util.concurrent.LinkedQueue; 7 8 import com.tc.exception.TCRuntimeException; 9 import com.tc.object.config.ConfigVisitor; 10 import com.tc.object.config.DSOApplicationConfig; 11 import com.tc.simulator.app.ApplicationBuilder; 12 import com.tc.simulator.app.DSOApplicationBuilder; 13 import com.tc.simulator.app.ErrorContext; 14 import com.tc.simulator.app.GlobalIdGenerator; 15 import com.tc.simulator.container.Container; 16 import com.tc.simulator.container.ContainerConfig; 17 import com.tc.simulator.container.ContainerStateFactory; 18 import com.tc.simulator.control.Control; 19 import com.tc.simulator.crasher.ControlProvider; 20 import com.tc.simulator.listener.ResultsListener; 21 import com.tcsimulator.container.ContainerStateFactoryObject; 22 23 public class ContainerBuilder implements Runnable , ResultsListener { 24 25 private static final LinkedQueue statsOutputQueue = new LinkedQueue(); 26 27 private final TestSpec testSpec; 28 private final String vmName; 29 30 public ContainerBuilder(String vmName) { 31 this.vmName = vmName; 32 testSpec = new TestSpec(); 33 } 34 35 public static void visitDSOApplicationConfig(ConfigVisitor visitor, DSOApplicationConfig cfg) { 36 cfg.addRoot("testSpec", ContainerBuilder.class.getName() + ".testSpec"); 37 cfg.addIncludePattern(ContainerBuilder.class.getName()); 38 cfg.addWriteAutolock("* " + ContainerBuilder.class.getName() + ".*(..)"); 39 visitor.visitDSOApplicationConfig(cfg, ControlProviderImpl.class); 40 visitor.visitDSOApplicationConfig(cfg, ControlImpl.class); 41 visitor.visitDSOApplicationConfig(cfg, DistributedGlobalIdGenerator.class); 42 visitor.visitDSOApplicationConfig(cfg, ContainerStateFactoryObject.class); 43 } 44 45 private void println(Object msg) { 46 System.out.println("ContainerBuilder: " + msg); 47 } 48 49 public void run() { 50 ContainerStateFactory containerStateFactory; 51 Control control; 52 GlobalIdGenerator globalIdGenerator; 53 ApplicationBuilder appBuilder; 54 55 try { 56 containerStateFactory = new ContainerStateFactoryObject(statsOutputQueue); 57 globalIdGenerator = new DistributedGlobalIdGenerator(); 58 ControlProvider provider = new ControlProviderImpl(); 59 control = provider.getOrCreateControlByName(getClass().getName(), this.testSpec.getGlobalVmCount()); 60 appBuilder = new DSOApplicationBuilder(testSpec.getTestConfig(), Thread.currentThread().getContextClassLoader()); 61 } catch (Throwable t) { 62 throw new TCRuntimeException(t); 63 } 64 Container container = new Container(new ContainerConfigObject(), containerStateFactory, globalIdGenerator, control, 65 this, appBuilder); 66 container.run(); 67 } 68 69 public static void main(String [] args) throws Exception { 70 String vmName = args[0]; 71 new ContainerBuilder(vmName).run(); 72 } 73 74 private final class ContainerConfigObject implements ContainerConfig { 75 76 public int getApplicationInstanceCount() { 77 synchronized (testSpec) { 78 return testSpec.getContainerSpecFor(vmName).getExecutionCount(); 79 } 80 } 81 82 public long getContainerStartTimeout() { 83 return 5 * 60 * 1000; 84 } 85 86 public long getApplicationStartTimeout() { 87 return 5 * 60 * 1000; 88 } 89 90 public long getApplicationExecutionTimeout() { 91 synchronized (testSpec) { 92 return testSpec.getAppExecutionTimeout(); 93 } 94 } 95 96 public boolean dumpErrors() { 97 return true; 98 } 99 100 public boolean dumpOutput() { 101 return true; 102 } 103 104 public boolean aggregate() { 105 return false; 106 } 107 108 public boolean stream() { 109 return false; 110 } 111 112 public boolean isMaster() { 113 return false; 114 } 115 116 } 117 118 121 122 public void setGlobalId(long globalId) { 123 return; 124 } 125 126 public void notifyStartTimeout() { 127 println("Start timeout!"); 128 Thread.dumpStack(); 129 } 130 131 public void notifyExecutionTimeout() { 132 println("Execution timeout!"); 133 Thread.dumpStack(); 134 } 135 136 public void notifyError(ErrorContext ectxt) { 137 ectxt.dump(System.err); 138 } 139 140 public void notifyResult(Object result) { 141 println("Result: " + result); 142 } 143 } 144 | Popular Tags |