summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-05-22 14:55:11 +0200
committerKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-05-22 14:55:11 +0200
commit757fdedcb0256929bab8fc1c45a3f3c47cee0750 (patch)
treebfd239421833b5924b5677de10ad9df94320b69c
parent2a751ab6932c96cbe5960fe3607955a8a1fc44c3 (diff)
Add Experiment 2: Master recovery time.
-rw-r--r--same-android/AndroidManifest.xml1
-rw-r--r--same-android/src/main/java/com/orbekk/same/android/MainActivity.java2
-rw-r--r--same-android/src/main/java/com/orbekk/same/android/SameService.java8
-rw-r--r--same-android/src/main/java/com/orbekk/same/android/benchmark/Experiment1Activity.java2
-rw-r--r--same/src/main/java/com/orbekk/paxos/PaxosServiceImpl.java16
-rw-r--r--same/src/main/java/com/orbekk/same/SameController.java5
-rw-r--r--same/src/main/java/com/orbekk/stats/Experiments.java225
-rw-r--r--same/src/main/java/com/orbekk/stats/experiments.proto4
-rw-r--r--statserver/src/main/java/com/orbekk/stats/Server.java5
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 @@
<activity android:name=".GraphicsActivity"/>
<activity android:name="com.orbekk.same.android.benchmark.RepeatedSetVariableActivity"/>
<activity android:name="com.orbekk.same.android.benchmark.Experiment1Activity"/>
+ <activity android:name="com.orbekk.same.android.benchmark.Experiment2Activity"/>
<activity android:name="com.orbekk.same.android.benchmark.ExampleProtobufServerActivity"/>
<activity android:name="com.orbekk.same.android.benchmark.ExampleHttpServerActivity"/>
<service android:name=".SameService" android:process="com.orbekk.same.android.SameService"/>
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<String> 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<PaxosResponse> 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<PaxosResponse> 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<com.orbekk.stats.Experiments.Empty> 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<com.orbekk.stats.Experiments.Empty> 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<com.orbekk.stats.Experiments.Empty> 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.<com.orbekk.stats.Experiments.Empty>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<com.orbekk.stats.Experiments.Empty> 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()));