[tranche] r292 committed - Added support for configuration keys that disable server startup threa...

9 views
Skip to first unread message

tra...@googlecode.com

unread,
Apr 22, 2012, 7:55:19 PM4/22/12
to tranche-d...@googlegroups.com
Revision: 292
Author: bryan...@gmail.com
Date: Sun Apr 22 16:55:03 2012
Log: Added support for configuration keys that disable server startup
thread and propagation of get data/meta data requests, with unit tests. In
response to Professor X running out of file handles when communicating with
other servers due to buggy socket management.

Also cut number of required reps to 1 for unit tests since this reflects
how Tranche is being used.
http://code.google.com/p/tranche/source/detail?r=292

Modified:
/src/org/tranche/configuration/ConfigKeys.java
/src/org/tranche/default.conf
/src/org/tranche/server/GetDataItem.java
/src/org/tranche/server/GetMetaDataItem.java
/src/org/tranche/server/Server.java
/src/org/tranche/server/ServerStartupThread.java
/test/org/tranche/configuration/ConfigKeysTest.java
/test/org/tranche/server/ServerStartupThreadTest.java

=======================================
--- /src/org/tranche/configuration/ConfigKeys.java Tue Jun 7 17:30:36 2011
+++ /src/org/tranche/configuration/ConfigKeys.java Sun Apr 22 16:55:03 2012
@@ -49,6 +49,10 @@
*/
public static final boolean DEFAULT_SHOULD_HEALING_THREAD_RUN = true;
/**
+ *
+ */
+ public static final boolean DEFAULT_SHOULD_SERVER_STARTUP_THREAD_RUN =
true;
+ /**
* <p>The default value for config option to allow healing thread to
delete
* chunks with sufficient total replications and sufficient
replications
* in appropriate hash spans.</p>
@@ -116,6 +120,11 @@
*/
public static final boolean DEFAULT_LOG_DATA_CHUNK_DELETIONS = true;
/**
+ *
+ */
+ public static final boolean DEFAULT_PROPAGATE_ALLOW_GET_DATA = true;
+ public static final boolean DEFAULT_PROPAGATE_ALLOW_GET_META_DATA =
true;
+ /**
* ***************** ---> KEYS <--- *****************
*/
/**
@@ -503,10 +512,20 @@
public static final String REQUESTS_COUNT_GET_PROJECT_HASHES
= "requestCount: GetProjectHashes";
public static final String REQUESTS_COUNT_GET_KNOWN_SERVERS
= "requestCount: GetKnownServers";
/**
+ * <p>Turn off propagation of certain requests server side.</p>
+ * <p>Be careful! The client-side logic for propagation is tricky, so
make sure whatever you turn off won't break the client logic. (E.g., turn
off propagation for setting a data chunk, will the AddFileTool still work
correctly?)</p>
+ */
+ public static final String PROPAGATE_ALLOW_GET_DATA = "propagate:
AllowGetData";
+ public static final String PROPAGATE_ALLOW_GET_META_DATA = "propagate:
AllowGetMetaData";
+ /**
* ServerStartupThread variables
*/
public static final String SERVER_STARTUP_THREAD_STATUS
= "serverStartupThread: status";
/**
+ * <p>Prevent the startup thread from doing anything.</p>
+ */
+ public static final String SERVER_STARTUP_THREAD_ALLOW_RUN
= "serverStartupThread: AllowRun";
+ /**
* RoutingTrancheServer variables
*/
public static final String ROUTING_DATA_SERVERS_HOST_LIST
= "routingTrancheServer: serversHostNameList";
@@ -679,7 +698,13 @@
* <!--- ServerStartupThread variables -->

**********************************************************************/
permissions.put(SERVER_STARTUP_THREAD_STATUS, CAN_READ);
-
+ permissions.put(SERVER_STARTUP_THREAD_ALLOW_RUN, CAN_READ_EDIT);
+
+
/***********************************************************************
+ * <!--- Propagation variables -->
+
**********************************************************************/
+ permissions.put(PROPAGATE_ALLOW_GET_DATA, CAN_READ_EDIT);
+ permissions.put(PROPAGATE_ALLOW_GET_META_DATA, CAN_READ_EDIT);

/***********************************************************************
* <!--- RoutingTrancheServer variables -->

**********************************************************************/
=======================================
--- /src/org/tranche/default.conf Mon May 10 20:55:34 2010
+++ /src/org/tranche/default.conf Sun Apr 22 16:55:03 2012
@@ -17,7 +17,7 @@
project.cache.url =
project.publish.url =
project.url =
-replications = 3
+replications = 1
signup.url =
status.defunct.threshold = 604800000
status.update.client.frequency = 300000
=======================================
--- /src/org/tranche/server/GetDataItem.java Tue Apr 27 10:26:55 2010
+++ /src/org/tranche/server/GetDataItem.java Sun Apr 22 16:55:03 2012
@@ -20,6 +20,7 @@
import java.util.HashSet;
import java.util.Set;
import org.tranche.TrancheServer;
+import org.tranche.configuration.ConfigKeys;
import org.tranche.exceptions.TrancheProtocolException;
import org.tranche.flatfile.FlatFileTrancheServer;
import org.tranche.hash.BigHash;
@@ -77,7 +78,7 @@
PropagationReturnWrapper thisServerWrapper =
server.getTrancheServer().getData(hashes, propagateRequest);
dataBytes = (byte[][])
thisServerWrapper.getReturnValueObject();
exceptionSet.addAll(thisServerWrapper.getErrors());
- if (propagateRequest && !(server.getTrancheServer() instanceof
RoutingTrancheServer)) {
+ if (propagateRequest && isAllowToPropagate()
&& !(server.getTrancheServer() instanceof RoutingTrancheServer)) {
for (int i = 0; i < hashes.length; i++) {
// got the chunk locally
if (dataBytes[i] != null) {
@@ -178,4 +179,16 @@
RemoteUtil.writeBigHashArray(hashes, out);
RemoteUtil.writeBoolean(propagateRequest, out);
}
-}
+
+ /**
+ *
+ * @return
+ */
+ private boolean isAllowToPropagate() {
+ boolean allow = ConfigKeys.DEFAULT_PROPAGATE_ALLOW_GET_DATA;
+ try {
+ allow =
Boolean.valueOf(this.server.getConfiguration().getValue(ConfigKeys.PROPAGATE_ALLOW_GET_DATA));
+ } catch (Exception e) { /* nothing */ }
+ return allow;
+ }
+}
=======================================
--- /src/org/tranche/server/GetMetaDataItem.java Tue Apr 27 10:26:55 2010
+++ /src/org/tranche/server/GetMetaDataItem.java Sun Apr 22 16:55:03 2012
@@ -21,6 +21,7 @@
import java.util.HashSet;
import java.util.Set;
import org.tranche.TrancheServer;
+import org.tranche.configuration.ConfigKeys;
import org.tranche.exceptions.TrancheProtocolException;
import org.tranche.flatfile.FlatFileTrancheServer;
import org.tranche.hash.BigHash;
@@ -80,7 +81,7 @@
metaDataBytes = (byte[][])
thisServerWrapper.getReturnValueObject();
exceptionSet.addAll(thisServerWrapper.getErrors());
// propagate?
- if (propagateRequest && !(server.getTrancheServer() instanceof
RoutingTrancheServer)) {
+ if (propagateRequest && isAllowToPropagate()
&& !(server.getTrancheServer() instanceof RoutingTrancheServer)) {
for (int i = 0; i < hashes.length; i++) {
// got the chunk locally
if (metaDataBytes[i] != null) {
@@ -191,4 +192,16 @@
RemoteUtil.writeBigHashArray(hashes, out);
RemoteUtil.writeBoolean(propagateRequest, out);
}
-}
+
+ /**
+ *
+ * @return
+ */
+ private boolean isAllowToPropagate() {
+ boolean allow = ConfigKeys.DEFAULT_PROPAGATE_ALLOW_GET_META_DATA;
+ try {
+ allow =
Boolean.valueOf(this.server.getConfiguration().getValue(ConfigKeys.PROPAGATE_ALLOW_GET_META_DATA));
+ } catch (Exception e) { /* nothing */ }
+ return allow;
+ }
+}
=======================================
--- /src/org/tranche/server/Server.java Tue Apr 27 10:26:55 2010
+++ /src/org/tranche/server/Server.java Sun Apr 22 16:55:03 2012
@@ -35,6 +35,7 @@
import org.tranche.configuration.ConfigKeys;
import org.tranche.configuration.ServerModeFlag;
import org.tranche.commons.DebuggableThread;
+import org.tranche.configuration.Configuration;
import org.tranche.exceptions.RejectedRequestException;
import org.tranche.flatfile.FlatFileTrancheServer;
import org.tranche.flatfile.NonceMap;
@@ -171,6 +172,13 @@
serverStartupThread = null;
}
}
+
+ /**
+ * <p>Get configuration for underlying server.</p>
+ */
+ protected Configuration getConfiguration() throws Exception {
+ return this.ts.getConfiguration();
+ }

/**
*
@@ -488,6 +496,7 @@
@Override
protected void finalize() throws Throwable {
setRun(false);
+ super.finalize();
}

/**
=======================================
--- /src/org/tranche/server/ServerStartupThread.java Tue Apr 27 10:26:55
2010
+++ /src/org/tranche/server/ServerStartupThread.java Sun Apr 22 16:55:03
2012
@@ -27,6 +27,7 @@
import org.tranche.commons.DebuggableThread;
import org.tranche.commons.TextUtil;
import org.tranche.configuration.ConfigKeys;
+import org.tranche.configuration.Configuration;
import org.tranche.exceptions.AssertionFailedException;
import org.tranche.flatfile.FlatFileTrancheServer;
import org.tranche.hash.BigHash;
@@ -110,6 +111,15 @@
}

debugOut("Starting for data server");
+
+ final FlatFileTrancheServer ffts = (FlatFileTrancheServer)
wrappedServer;
+
+ // Check whether allowed to run between each step
+ if (!isAllowedToRun(ffts.getConfiguration())) {
+
ffts.getConfiguration().setValue(ConfigKeys.SERVER_STARTUP_THREAD_STATUS,
String.valueOf("ServerStartupThread disabled, nothing ran: " +
String.valueOf(TimeUtil.getTrancheTimestamp() - start) + ")"));
+ return;
+ }
+
/**
* GET SERVERS TO USE: When our new network functionality is
finished, this will likely
* need to change.
@@ -146,7 +156,7 @@
debugOut("Using server: " + host);
}

- final FlatFileTrancheServer ffts = (FlatFileTrancheServer)
wrappedServer;
+
final long lastRecordedActivityTimestamp =
ffts.getActivityLog().getLastRecordedTimestamp();

final long startWriteOnlyTimestamp =
TimeUtil.getTrancheTimestamp();
@@ -165,6 +175,12 @@

// Record time took to complete step
step1Time = TimeUtil.getTrancheTimestamp() - step1Start;
+
+ // Check whether allowed to run between each step
+ if (!isAllowedToRun(ffts.getConfiguration())) {
+
ffts.getConfiguration().setValue(ConfigKeys.SERVER_STARTUP_THREAD_STATUS,
String.valueOf("ServerStartupThread disabled, stopped after step #1: " +
String.valueOf(TimeUtil.getTrancheTimestamp() - start) + ")"));
+ return;
+ }

//
----------------------------------------------------------------------------------------------
// STEP 2: Check other servers for logs, and see if anything
should be deleted.
@@ -186,6 +202,12 @@
if (!wasChecked) {
serversToCheckForDeletes.add(host);
}
+
+ // Check whether allowed to run between each step
+ if (!isAllowedToRun(ffts.getConfiguration())) {
+
ffts.getConfiguration().setValue(ConfigKeys.SERVER_STARTUP_THREAD_STATUS,
String.valueOf("ServerStartupThread disabled, stopped during step #2: " +
String.valueOf(TimeUtil.getTrancheTimestamp() - start) + ")"));
+ return;
+ }
} // For each server, look for deletes to perform

// Record time took to complete step
@@ -207,6 +229,12 @@
if (!wasChecked) {
serversToCheckForReplacedMetaData.add(host);
}
+
+ // Check whether allowed to run between each step
+ if (!isAllowedToRun(ffts.getConfiguration())) {
+
ffts.getConfiguration().setValue(ConfigKeys.SERVER_STARTUP_THREAD_STATUS,
String.valueOf("ServerStartupThread disabled, stopped during step #3: " +
String.valueOf(TimeUtil.getTrancheTimestamp() - start) + ")"));
+ return;
+ }
} // For each server, look for deletes to perform

step3Time = TimeUtil.getTrancheTimestamp() - step3Start;
@@ -227,6 +255,12 @@
if (!wasChecked) {
serversToCheckForAdds.add(host);
}
+
+ // Check whether allowed to run between each step
+ if (!isAllowedToRun(ffts.getConfiguration())) {
+
ffts.getConfiguration().setValue(ConfigKeys.SERVER_STARTUP_THREAD_STATUS,
String.valueOf("ServerStartupThread disabled, stopped during step #4: " +
String.valueOf(TimeUtil.getTrancheTimestamp() - start) + ")"));
+ return;
+ }
} // For each server, look for new chunks to add

// Record time took to complete step
@@ -250,6 +284,12 @@
if (wasChecked) {
serversToCheckForDeletesIt.remove();
}
+
+ // Check whether allowed to run between each step
+ if (!isAllowedToRun(ffts.getConfiguration())) {
+
ffts.getConfiguration().setValue(ConfigKeys.SERVER_STARTUP_THREAD_STATUS,
String.valueOf("ServerStartupThread disabled, stopped during step #5: " +
String.valueOf(TimeUtil.getTrancheTimestamp() - start) + ")"));
+ return;
+ }
}

// Perform: replace
@@ -260,6 +300,11 @@
if (wasChecked) {
serversToCheckForReplacedMetaDataIt.remove();
}
+ // Check whether allowed to run between each step
+ if (!isAllowedToRun(ffts.getConfiguration())) {
+
ffts.getConfiguration().setValue(ConfigKeys.SERVER_STARTUP_THREAD_STATUS,
String.valueOf("ServerStartupThread disabled, stopped during step #5: " +
String.valueOf(TimeUtil.getTrancheTimestamp() - start) + ")"));
+ return;
+ }
}

// Perform: adds
@@ -270,6 +315,11 @@
if (wasChecked) {
serversToCheckForAddsIt.remove();
}
+ // Check whether allowed to run between each step
+ if (!isAllowedToRun(ffts.getConfiguration())) {
+
ffts.getConfiguration().setValue(ConfigKeys.SERVER_STARTUP_THREAD_STATUS,
String.valueOf("ServerStartupThread disabled, stopped during step #5: " +
String.valueOf(TimeUtil.getTrancheTimestamp() - start) + ")"));
+ return;
+ }
}

// Sleep a bit to wait for things to come online
@@ -294,6 +344,26 @@

debugOut("---------------------------------------------------------------------------------------------------------------------------");
}
}
+ private boolean lastAllowedToRun =
ConfigKeys.DEFAULT_SHOULD_SERVER_STARTUP_THREAD_RUN;
+
+ /**
+ *
+ */
+ public boolean isAllowedToRun(Configuration conf) {
+
+ boolean isRun =
ConfigKeys.DEFAULT_SHOULD_SERVER_STARTUP_THREAD_RUN;
+
+ try {
+ isRun =
Boolean.valueOf(conf.getValue(ConfigKeys.SERVER_STARTUP_THREAD_ALLOW_RUN));
+ } catch (Exception nope) { /* Skip -- either none or parse error,
fallback on default */ }
+
+ if (isRun != lastAllowedToRun) {
+ debugOut("Changing allowed to run from " + lastAllowedToRun
+ " to " + isRun);
+ lastAllowedToRun = isRun;
+ }
+
+ return isRun;
+ }

/**
*
=======================================
--- /test/org/tranche/configuration/ConfigKeysTest.java Wed Jan 20 09:48:24
2010
+++ /test/org/tranche/configuration/ConfigKeysTest.java Sun Apr 22 16:55:03
2012
@@ -16,10 +16,23 @@
package org.tranche.configuration;

import java.io.File;
+import org.tranche.add.AddFileTool;
+import org.tranche.add.AddFileToolReport;
+import org.tranche.add.CommandLineAddFileToolListener;
+import org.tranche.commons.RandomUtil;
+import org.tranche.flatfile.DataBlockUtil;
import org.tranche.flatfile.FlatFileTrancheServer;
import org.tranche.flatfile.HashSpanFixingThread;
+import org.tranche.get.CommandLineGetFileToolListener;
+import org.tranche.get.GetFileTool;
+import org.tranche.get.GetFileToolReport;
+import org.tranche.hash.BigHash;
+import org.tranche.hash.span.HashSpan;
+import org.tranche.util.DevUtil;
import org.tranche.util.IOUtil;
import org.tranche.util.TempFileUtil;
+import org.tranche.util.TestNetwork;
+import org.tranche.util.TestServerConfiguration;
import org.tranche.util.TestUtil;
import org.tranche.util.TrancheTestCase;

@@ -46,6 +59,137 @@
protected void tearDown() throws Exception {
super.tearDown();
}
+
+ public void testBlockPropagationForDownloads() throws Exception {
+
TestUtil.printTitle("ConfigKeysTest:testBlockPropagationForDownloads()");
+
+ String HOST1 = "server1.com",
+ HOST2 = "server2.com",
+ HOST3 = "server3.com",
+ HOST4 = "server4.com",
+ HOST5 = "server5.com";
+
+ final String[] hosts = {
+ HOST1, HOST2, HOST3, HOST4, HOST5
+ };
+
+ TestNetwork testNetwork = new TestNetwork();
+
testNetwork.addTestServerConfiguration(TestServerConfiguration.generateForDataServer(443,
hosts[0], 1500, "127.0.0.1", true, true, false, HashSpan.FULL_SET,
DevUtil.DEV_USER_SET));
+
testNetwork.addTestServerConfiguration(TestServerConfiguration.generateForDataServer(443,
hosts[1], 1501, "127.0.0.1", true, true, false, HashSpan.FULL_SET,
DevUtil.DEV_USER_SET));
+
testNetwork.addTestServerConfiguration(TestServerConfiguration.generateForDataServer(443,
hosts[2], 1502, "127.0.0.1", true, true, false, HashSpan.FULL_SET,
DevUtil.DEV_USER_SET));
+
testNetwork.addTestServerConfiguration(TestServerConfiguration.generateForDataServer(443,
hosts[3], 1503, "127.0.0.1", true, true, false, HashSpan.FULL_SET,
DevUtil.DEV_USER_SET));
+
testNetwork.addTestServerConfiguration(TestServerConfiguration.generateForDataServer(443,
hosts[4], 1504, "127.0.0.1", true, true, false, HashSpan.FULL_SET,
DevUtil.DEV_USER_SET));
+
+ //create temp file
+ File project = null, downloadDir1 = null, downloadDir2 = null;
+
+ try {
+ testNetwork.start();
+
+
+ assertEquals(hosts.length,
testNetwork.getServerConfigs().size());
+
+ // No healing, no startup, and definitely no propagation
+
+ for (String host : hosts) {
+ FlatFileTrancheServer ffts =
testNetwork.getFlatFileTrancheServer(host);
+ assertNotNull(ffts);
+ Configuration c = ffts.getConfiguration();
+ c.setValue(ConfigKeys.PROPAGATE_ALLOW_GET_DATA,
String.valueOf(false));
+ c.setValue(ConfigKeys.PROPAGATE_ALLOW_GET_META_DATA,
String.valueOf(false));
+ c.setValue(ConfigKeys.SERVER_STARTUP_THREAD_ALLOW_RUN,
String.valueOf(false));
+
c.setValue(ConfigKeys.HASHSPANFIX_SHOULD_HEALING_THREAD_RUN,
String.valueOf(false));
+ ffts.setConfiguration(c);
+ }
+
+ // Prove that changes took place
+ for (String host : hosts) {
+ FlatFileTrancheServer ffts =
testNetwork.getFlatFileTrancheServer(host);
+ assertNotNull(ffts);
+ Configuration c = ffts.getConfiguration();
+ assertEquals(String.valueOf(false),
c.getValue(ConfigKeys.PROPAGATE_ALLOW_GET_DATA));
+ assertEquals(String.valueOf(false),
c.getValue(ConfigKeys.PROPAGATE_ALLOW_GET_META_DATA));
+ assertEquals(String.valueOf(false),
c.getValue(ConfigKeys.SERVER_STARTUP_THREAD_ALLOW_RUN));
+ assertEquals(String.valueOf(false),
c.getValue(ConfigKeys.HASHSPANFIX_SHOULD_HEALING_THREAD_RUN));
+ }
+
+ project = DevUtil.createTestProject(RandomUtil.getInt(10) + 2,
1, DataBlockUtil.getMaxChunkSize() * 2);
+
+ //Upload test file
+ AddFileTool aft = new AddFileTool();
+ aft.addListener(new CommandLineAddFileToolListener(aft,
System.out));
+ aft.setUserCertificate(DevUtil.getDevAuthority());
+ aft.setUserPrivateKey(DevUtil.getDevPrivateKey());
+ aft.addServerToUse(HOST3); // Pick middle server
+ aft.setUseUnspecifiedServers(false);
+ aft.setTitle(RandomUtil.getString(20));
+ aft.setDescription(RandomUtil.getString(20));
+ aft.setFile(project);
+
+ final AddFileToolReport aftReport = aft.execute();
+ assertNotNull(aftReport.getHash());
+ assertFalse(aftReport.isFailed());
+ assertTrue(aftReport.isFinished());
+
+ final BigHash _hash = aftReport.getHash();
+
+ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
+ // TEST #1: Make sure GFT still works with propagation off
+ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
+ downloadDir1 = TempFileUtil.createTemporaryDirectory();
+
+ GetFileTool gft = new GetFileTool();
+ gft.addServerToUse(HOST1);
+ gft.addServerToUse(HOST2);
+ gft.addServerToUse(HOST3);
+ gft.addServerToUse(HOST4);
+ gft.addServerToUse(HOST5);
+ gft.setUseUnspecifiedServers(false);
+ gft.setHash(_hash);
+ gft.setSaveFile(downloadDir1);
+ gft.addListener(new CommandLineGetFileToolListener(gft,
System.out));
+ GetFileToolReport gftReport = gft.getDirectory();
+
+ assertNotNull(gftReport);
+ assertFalse(gftReport.isFailed());
+
+ final File downloadedProject1 = new File(downloadDir1,
project.getName());
+
+ TestUtil.assertDirectoriesEquivalent(project,
downloadedProject1);
+
+ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
+ // TEST #2: Should fail if the server with data omitted
+ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
+ downloadDir2 = TempFileUtil.createTemporaryDirectory();
+
+ gft = new GetFileTool();
+ gft.addServerToUse(HOST1);
+ gft.addServerToUse(HOST2);
+ //gft.addServerToUse(HOST3); << SERVER WITH DATA
+ gft.addServerToUse(HOST4);
+ gft.addServerToUse(HOST5);
+ gft.setUseUnspecifiedServers(false);
+ gft.setHash(_hash);
+ gft.setSaveFile(downloadDir2);
+ gft.addListener(new CommandLineGetFileToolListener(gft,
System.out));
+ gftReport = gft.getDirectory();
+
+ assertNotNull(gftReport);
+ assertTrue(gftReport.isFailed());
+
+ } finally {
+ testNetwork.stop();
+ if (project != null) {
+ IOUtil.recursiveDeleteWithWarning(project);
+ }
+ if (downloadDir1 != null) {
+ IOUtil.recursiveDeleteWithWarning(downloadDir1);
+ }
+ if (downloadDir2 != null) {
+ IOUtil.recursiveDeleteWithWarning(downloadDir1);
+ }
+ }
+ }

/**
* <p>Tests the following using simple setter/getter methods:</p>
=======================================
--- /test/org/tranche/server/ServerStartupThreadTest.java Tue Apr 27
10:26:55 2010
+++ /test/org/tranche/server/ServerStartupThreadTest.java Sun Apr 22
16:55:03 2012
@@ -27,6 +27,8 @@
import org.tranche.util.DevUtil;
import org.tranche.util.IOUtil;
import org.tranche.commons.RandomUtil;
+import org.tranche.configuration.ConfigKeys;
+import org.tranche.configuration.Configuration;
import org.tranche.util.TestNetwork;
import org.tranche.util.TestServerConfiguration;
import org.tranche.util.TestUtil;
@@ -55,10 +57,35 @@
TestUtil.setTestingServerStartupThread(false);

TestUtil.setTestingHashSpanFixingThread(wasTestingHashSpanFixingThread);
}
-
final String HOST1 = "bryan.com";
final String HOST2 = "mark.gov";
final String HOST3 = "augie.org";
+
+ /**
+ *
+ */
+ public void testCanStop() throws Exception {
+ final TestNetwork testNetwork = new TestNetwork();
+
testNetwork.addTestServerConfiguration(TestServerConfiguration.generateForDataServer(443,
HOST1, 1500, "127.0.0.1", true, true, false));
+ try {
+ testNetwork.start();
+ final FlatFileTrancheServer ffts =
testNetwork.getFlatFileTrancheServer(HOST1);
+ assertNotNull(ffts);
+ assertTrue(TestUtil.isTestingServerStartupThread());
+ Configuration config = ffts.getConfiguration();
+ config.setValue(ConfigKeys.SERVER_STARTUP_THREAD_ALLOW_RUN,
String.valueOf(false));
+ ffts.setConfiguration(config);
+ Thread.sleep(500);
+ Server s = testNetwork.getServer(HOST1);
+ boolean isRun =
s.getServerStartupThread().isAllowedToRun(ffts.getConfiguration());
+ assertFalse(isRun);
+ assertFalse(s.getServerStartupThread().isAlive());
+
System.out.println(ffts.getConfiguration().getValue(ConfigKeys.SERVER_STARTUP_THREAD_STATUS));
+ } catch (Exception e) {
+ } finally {
+ testNetwork.stop();
+ }
+ }

/**
* <p>This test starts three servers: server 1, server 2, and server
3. The following happens:</p>
@@ -72,18 +99,18 @@
* @throws java.lang.Exception
*/
public void testServerStartupThreadPerformsDeletesAndSets() throws
Exception {
-
+
final boolean wasTestingActivityLogs =
TestUtil.isTestingActivityLogs();
-
+
TestUtil.setTestingActivityLogs(true);
-
+
TestNetwork testNetwork = new TestNetwork();

testNetwork.addTestServerConfiguration(TestServerConfiguration.generateForDataServer(443,
HOST1, 1500, "127.0.0.1", true, true, false));

testNetwork.addTestServerConfiguration(TestServerConfiguration.generateForDataServer(443,
HOST2, 1501, "127.0.0.1", true, true, false));

testNetwork.addTestServerConfiguration(TestServerConfiguration.generateForDataServer(443,
HOST3, 1502, "127.0.0.1", true, true, false));
try {
testNetwork.start();
-
+
FlatFileTrancheServer ffts1 =
testNetwork.getFlatFileTrancheServer(HOST1);
ffts1.getConfiguration().getHashSpans().add(new
HashSpan(HashSpan.FIRST, HashSpan.LAST));
FlatFileTrancheServer ffts2 =
testNetwork.getFlatFileTrancheServer(HOST2);
@@ -136,13 +163,13 @@
dataChunksToCheckFor.add(hash);
}
}
-
+
for (BigHash hash : dataChunksToCheckFor) {
assertTrue("Should have.",
ffts1.getDataBlockUtil().hasData(hash));
assertTrue("Should have.",
ffts2.getDataBlockUtil().hasData(hash));
assertTrue("Should have.",
ffts3.getDataBlockUtil().hasData(hash));
}
-
+
for (BigHash hash : metaDataChunksToCheckFor) {
assertTrue("Should have.",
ffts1.getDataBlockUtil().hasMetaData(hash));
assertTrue("Should have.",
ffts2.getDataBlockUtil().hasMetaData(hash));
@@ -172,9 +199,10 @@
* STEP 2: Turn server 1 offline.
*
------------------------------------------------------------------------------------------------------------------------------
*/
- assertTrue("Should be online: "+HOST1,
NetworkUtil.getStatus().getRow(HOST1).isOnline());
+ assertTrue("Should be online: " + HOST1,
NetworkUtil.getStatus().getRow(HOST1).isOnline());
testNetwork.suspendServer(HOST1);
- assertFalse("Shouldn't be online: "+HOST1,
NetworkUtil.getStatus().getRow(HOST1).isOnline());
+ Thread.sleep(1000);
+ assertFalse("Shouldn't be online: " + HOST1,
NetworkUtil.getStatus().getRow(HOST1).isOnline());

/**
*
------------------------------------------------------------------------------------------------------------------------------
@@ -306,9 +334,9 @@
* STEP 5: Turn server 1 online, and make sure it has the
appropriate chunks after deletions and adds completed.
*
------------------------------------------------------------------------------------------------------------------------------
*/
- assertFalse("Shouldn't be online yet: "+HOST1,
NetworkUtil.getStatus().getRow(HOST1).isOnline());
+ assertFalse("Shouldn't be online yet: " + HOST1,
NetworkUtil.getStatus().getRow(HOST1).isOnline());
testNetwork.resumeServer(HOST1);
- assertTrue("Should be online again: "+HOST1,
NetworkUtil.getStatus().getRow(HOST1).isOnline());
+ assertTrue("Should be online again: " + HOST1,
NetworkUtil.getStatus().getRow(HOST1).isOnline());

ServerStartupThread sst =
testNetwork.getServer(HOST1).getServerStartupThread();
assertNotNull("Startup thread should not be null.", sst);
@@ -329,7 +357,7 @@
for (BigHash h : deletedDataChunks) {
boolean hasData = IOUtil.hasData(rserver1, h);
if (hasData) {
- byte[] bytes = (byte[])IOUtil.getData(rserver1, h,
false).getReturnValueObject();
+ byte[] bytes = (byte[]) IOUtil.getData(rserver1, h,
false).getReturnValueObject();
System.out.println("Found data chunk shouldn't have: "
+ (bytes == null ? "null" : bytes.length + " bytes"));
}
assertFalse("Should not have chunk: " + h, hasData);
@@ -338,7 +366,7 @@
for (BigHash h : deletedMetaDataChunks) {
boolean hasMetaData = IOUtil.hasMetaData(rserver1, h);
if (hasMetaData) {
- byte[] bytes = (byte[])IOUtil.getMetaData(rserver1, h,
false).getReturnValueObject();
+ byte[] bytes = (byte[]) IOUtil.getMetaData(rserver1,
h, false).getReturnValueObject();
System.out.println("Found meta data chunk shouldn't
have: " + (bytes == null ? "null" : bytes.length + " bytes"));
}
assertFalse("Should not have chunk: " + h, hasMetaData);

Reply all
Reply to author
Forward
0 new messages