From 757fdedcb0256929bab8fc1c45a3f3c47cee0750 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Tue, 22 May 2012 14:55:11 +0200 Subject: Add Experiment 2: Master recovery time. --- same-android/AndroidManifest.xml | 1 + .../java/com/orbekk/same/android/MainActivity.java | 2 + .../java/com/orbekk/same/android/SameService.java | 8 +- .../android/benchmark/Experiment1Activity.java | 2 +- .../java/com/orbekk/paxos/PaxosServiceImpl.java | 16 -- .../main/java/com/orbekk/same/SameController.java | 5 +- .../main/java/com/orbekk/stats/Experiments.java | 225 ++++++++++++++++++++- .../main/java/com/orbekk/stats/experiments.proto | 4 + .../src/main/java/com/orbekk/stats/Server.java | 5 +- 9 files changed, 243 insertions(+), 25 deletions(-) diff --git a/same-android/AndroidManifest.xml b/same-android/AndroidManifest.xml index 54a6356..ea986fa 100644 --- a/same-android/AndroidManifest.xml +++ b/same-android/AndroidManifest.xml @@ -23,6 +23,7 @@ + diff --git a/same-android/src/main/java/com/orbekk/same/android/MainActivity.java b/same-android/src/main/java/com/orbekk/same/android/MainActivity.java index 7bd494e..dffc23a 100644 --- a/same-android/src/main/java/com/orbekk/same/android/MainActivity.java +++ b/same-android/src/main/java/com/orbekk/same/android/MainActivity.java @@ -33,6 +33,7 @@ import android.widget.ListView; import com.orbekk.same.android.benchmark.ExampleProtobufServerActivity; import com.orbekk.same.android.benchmark.Experiment1Activity; +import com.orbekk.same.android.benchmark.Experiment2Activity; import com.orbekk.same.android.benchmark.RepeatedSetVariableActivity; public class MainActivity extends Activity { @@ -51,6 +52,7 @@ public class MainActivity extends Activity { ExampleProtobufServerActivity.class); activities.put("Experiment 1", Experiment1Activity.class); + activities.put("Experiment 2", Experiment2Activity.class); } public final static List activityList = diff --git a/same-android/src/main/java/com/orbekk/same/android/SameService.java b/same-android/src/main/java/com/orbekk/same/android/SameService.java index 21e0839..37f6e36 100644 --- a/same-android/src/main/java/com/orbekk/same/android/SameService.java +++ b/same-android/src/main/java/com/orbekk/same/android/SameService.java @@ -75,11 +75,11 @@ public class SameService extends Service { public final static int KILL_MASTER = 10; - final static int PPORT = 15070; - final static int SERVICE_PORT = 15068; + public final static int PPORT = 15070; + public final static int SERVICE_PORT = 15068; - final static String DIRECTORY_HOST = "flode.pvv.ntnu.no"; - final static int DIRECTORY_PORT = 15072; + public final static String DIRECTORY_HOST = "flode.pvv.ntnu.no"; + public final static int DIRECTORY_PORT = 15072; private Logger logger = LoggerFactory.getLogger(getClass()); private SameController sameController = null; diff --git a/same-android/src/main/java/com/orbekk/same/android/benchmark/Experiment1Activity.java b/same-android/src/main/java/com/orbekk/same/android/benchmark/Experiment1Activity.java index 862e007..30ab37e 100644 --- a/same-android/src/main/java/com/orbekk/same/android/benchmark/Experiment1Activity.java +++ b/same-android/src/main/java/com/orbekk/same/android/benchmark/Experiment1Activity.java @@ -144,7 +144,7 @@ public class Experiment1Activity extends Activity { } public void onPause() { - super.onStart(); + super.onPause(); client.disconnect(); } diff --git a/same/src/main/java/com/orbekk/paxos/PaxosServiceImpl.java b/same/src/main/java/com/orbekk/paxos/PaxosServiceImpl.java index 99991c5..c6a5fec 100644 --- a/same/src/main/java/com/orbekk/paxos/PaxosServiceImpl.java +++ b/same/src/main/java/com/orbekk/paxos/PaxosServiceImpl.java @@ -38,8 +38,6 @@ public class PaxosServiceImpl { @Override public void propose(RpcController controller, PaxosRequest request, RpcCallback done) { - logger.info("propose({}). Highest promise: {}, Highest accepted: {}", - new Object[]{request, highestPromise, highestAcceptedValue}); String clientUrl = request.getClient().getLocation(); int proposalNumber = request.getProposalNumber(); int response = @@ -53,8 +51,6 @@ public class PaxosServiceImpl { @Override public void acceptRequest(RpcController controller, PaxosRequest request, RpcCallback done) { - logger.info("acceptRequest({}). Highest promise: {}, Highest accepted: {}", - new Object[]{request, highestPromise, highestAcceptedValue}); String clientUrl = request.getClient().getLocation(); int proposalNumber = request.getProposalNumber(); int response = @@ -78,15 +74,9 @@ public class PaxosServiceImpl { private synchronized int propose(String clientUrl, int proposalNumber) { if (proposalNumber > highestPromise) { - logger.info(tag + "propose({}, {}) = accepted", - new Object[]{clientUrl, proposalNumber}); highestPromise = proposalNumber; return highestPromise; } else { - logger.info(tag + "propose({}, {}) = rejected " + - "(promised: {})", - new Object[]{clientUrl, proposalNumber, - highestPromise}); return -highestPromise; } } @@ -94,15 +84,9 @@ public class PaxosServiceImpl { private synchronized int acceptRequest(String clientUrl, int proposalNumber) { if (proposalNumber == highestPromise) { - logger.info(tag + "acceptRequest({}, {}) = accepted", - new Object[]{clientUrl, proposalNumber}); highestAcceptedValue = proposalNumber; return highestAcceptedValue; } else { - logger.info(tag + "acceptRequest({}, {}) = rejected " + - "(promise={})", - new Object[]{clientUrl, proposalNumber, - highestPromise}); return -highestPromise; } } diff --git a/same/src/main/java/com/orbekk/same/SameController.java b/same/src/main/java/com/orbekk/same/SameController.java index 04185db..8e6e977 100644 --- a/same/src/main/java/com/orbekk/same/SameController.java +++ b/same/src/main/java/com/orbekk/same/SameController.java @@ -115,8 +115,9 @@ public class SameController { private MasterController masterController = new MasterController() { @Override - public void enableMaster(String networkName, + public synchronized void enableMaster(String networkName, State lastKnownState, int masterId) { + disableMaster(); String myLocation = configuration.get("localIp") + ":" + configuration.get("pport"); String masterUrl = configuration.get("baseUrl") + @@ -131,7 +132,7 @@ public class SameController { } @Override - public void disableMaster() { + public synchronized void disableMaster() { if (master != null) { pServer.removeService(master.getNewService()); master.interrupt(); diff --git a/same/src/main/java/com/orbekk/stats/Experiments.java b/same/src/main/java/com/orbekk/stats/Experiments.java index 7c009a1..607b286 100644 --- a/same/src/main/java/com/orbekk/stats/Experiments.java +++ b/same/src/main/java/com/orbekk/stats/Experiments.java @@ -900,6 +900,227 @@ public final class Experiments { } } + public static abstract class Experiment2 + implements com.google.protobuf.Service { + protected Experiment2() {} + + public interface Interface { + public abstract void registerSample( + com.google.protobuf.RpcController controller, + com.orbekk.stats.Experiments.SimpleTiming request, + com.google.protobuf.RpcCallback done); + + } + + public static com.google.protobuf.Service newReflectiveService( + final Interface impl) { + return new Experiment2() { + @java.lang.Override + public void registerSample( + com.google.protobuf.RpcController controller, + com.orbekk.stats.Experiments.SimpleTiming request, + com.google.protobuf.RpcCallback done) { + impl.registerSample(controller, request, done); + } + + }; + } + + public static com.google.protobuf.BlockingService + newReflectiveBlockingService(final BlockingInterface impl) { + return new com.google.protobuf.BlockingService() { + public final com.google.protobuf.Descriptors.ServiceDescriptor + getDescriptorForType() { + return getDescriptor(); + } + + public final com.google.protobuf.Message callBlockingMethod( + com.google.protobuf.Descriptors.MethodDescriptor method, + com.google.protobuf.RpcController controller, + com.google.protobuf.Message request) + throws com.google.protobuf.ServiceException { + if (method.getService() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "Service.callBlockingMethod() given method descriptor for " + + "wrong service type."); + } + switch(method.getIndex()) { + case 0: + return impl.registerSample(controller, (com.orbekk.stats.Experiments.SimpleTiming)request); + default: + throw new java.lang.AssertionError("Can't get here."); + } + } + + public final com.google.protobuf.Message + getRequestPrototype( + com.google.protobuf.Descriptors.MethodDescriptor method) { + if (method.getService() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "Service.getRequestPrototype() given method " + + "descriptor for wrong service type."); + } + switch(method.getIndex()) { + case 0: + return com.orbekk.stats.Experiments.SimpleTiming.getDefaultInstance(); + default: + throw new java.lang.AssertionError("Can't get here."); + } + } + + public final com.google.protobuf.Message + getResponsePrototype( + com.google.protobuf.Descriptors.MethodDescriptor method) { + if (method.getService() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "Service.getResponsePrototype() given method " + + "descriptor for wrong service type."); + } + switch(method.getIndex()) { + case 0: + return com.orbekk.stats.Experiments.Empty.getDefaultInstance(); + default: + throw new java.lang.AssertionError("Can't get here."); + } + } + + }; + } + + public abstract void registerSample( + com.google.protobuf.RpcController controller, + com.orbekk.stats.Experiments.SimpleTiming request, + com.google.protobuf.RpcCallback done); + + public static final + com.google.protobuf.Descriptors.ServiceDescriptor + getDescriptor() { + return com.orbekk.stats.Experiments.getDescriptor().getServices().get(1); + } + public final com.google.protobuf.Descriptors.ServiceDescriptor + getDescriptorForType() { + return getDescriptor(); + } + + public final void callMethod( + com.google.protobuf.Descriptors.MethodDescriptor method, + com.google.protobuf.RpcController controller, + com.google.protobuf.Message request, + com.google.protobuf.RpcCallback< + com.google.protobuf.Message> done) { + if (method.getService() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "Service.callMethod() given method descriptor for wrong " + + "service type."); + } + switch(method.getIndex()) { + case 0: + this.registerSample(controller, (com.orbekk.stats.Experiments.SimpleTiming)request, + com.google.protobuf.RpcUtil.specializeCallback( + done)); + return; + default: + throw new java.lang.AssertionError("Can't get here."); + } + } + + public final com.google.protobuf.Message + getRequestPrototype( + com.google.protobuf.Descriptors.MethodDescriptor method) { + if (method.getService() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "Service.getRequestPrototype() given method " + + "descriptor for wrong service type."); + } + switch(method.getIndex()) { + case 0: + return com.orbekk.stats.Experiments.SimpleTiming.getDefaultInstance(); + default: + throw new java.lang.AssertionError("Can't get here."); + } + } + + public final com.google.protobuf.Message + getResponsePrototype( + com.google.protobuf.Descriptors.MethodDescriptor method) { + if (method.getService() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "Service.getResponsePrototype() given method " + + "descriptor for wrong service type."); + } + switch(method.getIndex()) { + case 0: + return com.orbekk.stats.Experiments.Empty.getDefaultInstance(); + default: + throw new java.lang.AssertionError("Can't get here."); + } + } + + public static Stub newStub( + com.google.protobuf.RpcChannel channel) { + return new Stub(channel); + } + + public static final class Stub extends com.orbekk.stats.Experiments.Experiment2 implements Interface { + private Stub(com.google.protobuf.RpcChannel channel) { + this.channel = channel; + } + + private final com.google.protobuf.RpcChannel channel; + + public com.google.protobuf.RpcChannel getChannel() { + return channel; + } + + public void registerSample( + com.google.protobuf.RpcController controller, + com.orbekk.stats.Experiments.SimpleTiming request, + com.google.protobuf.RpcCallback done) { + channel.callMethod( + getDescriptor().getMethods().get(0), + controller, + request, + com.orbekk.stats.Experiments.Empty.getDefaultInstance(), + com.google.protobuf.RpcUtil.generalizeCallback( + done, + com.orbekk.stats.Experiments.Empty.class, + com.orbekk.stats.Experiments.Empty.getDefaultInstance())); + } + } + + public static BlockingInterface newBlockingStub( + com.google.protobuf.BlockingRpcChannel channel) { + return new BlockingStub(channel); + } + + public interface BlockingInterface { + public com.orbekk.stats.Experiments.Empty registerSample( + com.google.protobuf.RpcController controller, + com.orbekk.stats.Experiments.SimpleTiming request) + throws com.google.protobuf.ServiceException; + } + + private static final class BlockingStub implements BlockingInterface { + private BlockingStub(com.google.protobuf.BlockingRpcChannel channel) { + this.channel = channel; + } + + private final com.google.protobuf.BlockingRpcChannel channel; + + public com.orbekk.stats.Experiments.Empty registerSample( + com.google.protobuf.RpcController controller, + com.orbekk.stats.Experiments.SimpleTiming request) + throws com.google.protobuf.ServiceException { + return (com.orbekk.stats.Experiments.Empty) channel.callBlockingMethod( + getDescriptor().getMethods().get(0), + controller, + request, + com.orbekk.stats.Experiments.Empty.getDefaultInstance()); + } + + } + } + private static com.google.protobuf.Descriptors.Descriptor internal_static_com_orbekk_stats_Empty_descriptor; private static @@ -924,7 +1145,9 @@ public final class Experiments { "\014SimpleTiming\022\016\n\006timing\030\001 \001(\001\022\022\n\nnumDevi" + "ces\030\002 \001(\0052X\n\013Experiment1\022I\n\016RegisterSamp" + "le\022\036.com.orbekk.stats.SimpleTiming\032\027.com" + - ".orbekk.stats.EmptyB\003\210\001\001" + ".orbekk.stats.Empty2X\n\013Experiment2\022I\n\016Re" + + "gisterSample\022\036.com.orbekk.stats.SimpleTi" + + "ming\032\027.com.orbekk.stats.EmptyB\003\210\001\001" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { diff --git a/same/src/main/java/com/orbekk/stats/experiments.proto b/same/src/main/java/com/orbekk/stats/experiments.proto index 93f1e18..db773a4 100644 --- a/same/src/main/java/com/orbekk/stats/experiments.proto +++ b/same/src/main/java/com/orbekk/stats/experiments.proto @@ -13,3 +13,7 @@ message SimpleTiming { service Experiment1 { rpc RegisterSample (SimpleTiming) returns (Empty); } + +service Experiment2 { + rpc RegisterSample (SimpleTiming) returns (Empty); +} diff --git a/statserver/src/main/java/com/orbekk/stats/Server.java b/statserver/src/main/java/com/orbekk/stats/Server.java index 2655ca5..2f4cd4f 100644 --- a/statserver/src/main/java/com/orbekk/stats/Server.java +++ b/statserver/src/main/java/com/orbekk/stats/Server.java @@ -4,7 +4,8 @@ import com.orbekk.protobuf.SimpleProtobufServer; public class Server { private final Experiment1Impl exp1 = new Experiment1Impl(); - + private final Experiment2Impl exp2 = new Experiment2Impl(); + public static void main(String[] args) { new Server().run(); } @@ -14,6 +15,7 @@ public class Server { SimpleProtobufServer server = SimpleProtobufServer.create( Common.PORT); server.registerService(exp1); + server.registerService(exp2); System.out.println("Waiting for samples..."); server.start(); } @@ -22,6 +24,7 @@ public class Server { class ShutdownTask implements Runnable { @Override public void run() { exp1.writeSamples("experiment1.data"); + exp2.writeSamples("experiment2.data"); } } Runtime.getRuntime().addShutdownHook(new Thread(new ShutdownTask())); -- cgit v1.2.3