[snee] r1361 committed - fixed channel model to not get extents mixed up,...

0 views
Skip to first unread message

sn...@googlecode.com

unread,
Feb 15, 2013, 1:31:30 PM2/15/13
to snee-...@googlegroups.com
Revision: 1361
Author: alan.bar...@gmail.com
Date: Fri Feb 15 10:30:48 2013
Log: fixed channel model to not get extents mixed up,
fixed channel model so that acquires tuples are not doubly counted.
fixed channel cardinality model for a join to take into account that tuples
have already been buffered
added test code to calculate the overall lifetime of the edge failure QEPs
given noise model
added code to successor relation section to allow an reactive approach to
unpredictable node failure given energy depletion.
Fixed condor generating script to generate complete script with the
assumption of the jre.tar already being present.
fixed condor client to handle different distance levels.
Added code to adjust original topolgoies to stop logical overlay
constructor to searching for ages
added many different constructors for the global framework so that
successor can build them using specific arguments

http://code.google.com/p/snee/source/detail?r=1361

Added:

/branches/alan_2012_07_19_unreliableChannels/clients/successorClient/src/main/java/uk/ac/manchester/snee/client/CondorSuccessorClient.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/successorrelation/FailedNodeData.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/successorrelation/SuccessorLifetimeEnum.java
Modified:

/branches/alan_2012_07_19_unreliableChannels/clients/reliable-channel-client/src/main/java/uk/ac/manchester/snee/client/CondorReliableChannelClient.java

/branches/alan_2012_07_19_unreliableChannels/clients/reliable-channel-client/src/main/java/uk/ac/manchester/snee/client/RelibaleChannelClient.java

/branches/alan_2012_07_19_unreliableChannels/clients/reliable-channel-client/src/main/java/uk/ac/manchester/snee/client/utils/CondorScriptGenerator.java

/branches/alan_2012_07_19_unreliableChannels/clients/successorClient/src/main/java/uk/ac/manchester/snee/client/SuccessorClient.java

/branches/alan_2012_07_19_unreliableChannels/clients/successorClient/src/main/resources/testsNatural/snee3.properties

/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/common/SNEEProperties.java

/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/common/SNEEPropertyNames.java

/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/compiler/costmodels/CostModel.java

/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/compiler/costmodels/cardinalitymodel/CardinalityEstimatedCostModel.java

/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/compiler/iot/InstanceOperator.java

/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/manager/AutonomicManager.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/SNEEController.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/evaluator/Dispatcher.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/AutonomicManagerImpl.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/anayliser/Anaylsiser.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/executer/Executer.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/failednodestrategies/completerecompilationstrategy/CompleteReCompilationStrategy.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/failednodestrategies/logicaloverlaynetwork/LogicalOverlayStrategy.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/failednodestrategies/logicaloverlaynetwork/logicaloverlaynetworkgenerator/LogicalOverlayGenerator.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/Planner.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/costbenifitmodel/model/channel/CPMModel.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/costbenifitmodel/model/channel/ChannelModel.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/costbenifitmodel/model/channel/ChannelModelSite.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/successorrelation/SuccessorRelationManager.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/successorrelation/TimeTwiddler.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/successorrelation/successor/SuccessorPath.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/successorrelation/tabu/TabuSearch.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/unreliablechannels/LogicalOverlayNetworkHierarchy.java

/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/unreliablechannels/RobustSensorNetworkQueryPlan.java

=======================================
--- /dev/null
+++
/branches/alan_2012_07_19_unreliableChannels/clients/successorClient/src/main/java/uk/ac/manchester/snee/client/CondorSuccessorClient.java
Fri Feb 15 10:30:48 2013
@@ -0,0 +1,142 @@
+package uk.ac.manchester.snee.client;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+
+import uk.ac.manchester.cs.snee.EvaluatorException;
+import uk.ac.manchester.cs.snee.MetadataException;
+import uk.ac.manchester.cs.snee.SNEECompilerException;
+import uk.ac.manchester.cs.snee.SNEEController;
+import uk.ac.manchester.cs.snee.SNEEDataSourceException;
+import uk.ac.manchester.cs.snee.SNEEException;
+import uk.ac.manchester.cs.snee.client.SNEEClient;
+import uk.ac.manchester.cs.snee.common.SNEEConfigurationException;
+import uk.ac.manchester.cs.snee.common.SNEEProperties;
+import uk.ac.manchester.cs.snee.common.SNEEPropertyNames;
+import uk.ac.manchester.cs.snee.compiler.AgendaException;
+import uk.ac.manchester.cs.snee.compiler.AgendaLengthException;
+import uk.ac.manchester.cs.snee.compiler.OptimizationException;
+import uk.ac.manchester.cs.snee.compiler.WhenSchedulerException;
+import uk.ac.manchester.cs.snee.metadata.CostParametersException;
+import uk.ac.manchester.cs.snee.metadata.schema.SchemaMetadataException;
+import uk.ac.manchester.cs.snee.metadata.schema.TypeMappingException;
+import
uk.ac.manchester.cs.snee.metadata.schema.UnsupportedAttributeTypeException;
+import uk.ac.manchester.cs.snee.metadata.source.SourceMetadataException;
+import
uk.ac.manchester.cs.snee.metadata.source.sensornet.TopologyReaderException;
+import uk.ac.manchester.cs.snee.sncb.CodeGenerationException;
+import uk.ac.manchester.cs.snee.sncb.SNCBException;
+
+public class CondorSuccessorClient extends SNEEClient
+{
+
+ private static int queryid = 1;
+ protected static int testNo = 1;
+ @SuppressWarnings("unused")
+ private static boolean inRecoveryMode = false;
+
+ //private static
uk.ac.manchester.cs.snee.data.generator.ConstantRatePushStreamGenerator
_myDataSource;
+
+ public CondorSuccessorClient(String query,
+ double duration, String queryParams, String csvFile, String
sneeProps)
+ throws SNEEException, IOException, SNEEConfigurationException
+ {
+ super(query, duration, queryParams, csvFile, sneeProps);
+ }
+
+ /**
+ * The main entry point for the condor client.
+ * All input files are given by the args and the snee.properities handed
to args.
+ * @param args
+ * @throws IOException
+ * @throws InterruptedException
+ */
+ public static void main(String[] args)
+ {
+ try
+ {
+
+ Long duration = Long.valueOf("120");
+ String queryParams = "query-parameters.xml";
+
+ String query = args[0];
+ query = query.replace("_", " ");
+ String propertiesPath = args[1];
+ queryid = Integer.parseInt(args[2]);
+ long seed = Long.parseLong(args[3]);
+ double distanceConverter = Double.parseDouble(args[4]);
+ //File output = new File("output");
+ //output.mkdir();
+ //File result = new File(output.toString() + "/" + "ran" + query +
queryid);
+ //result.mkdir();
+ // System.out.println("made folder output and " + output.toString()
+ "/" + "ran" + query + queryid);
+ recursiveRun(query, duration, queryParams, true, propertiesPath,
seed, distanceConverter) ;
+ }
+ catch (Exception e)
+ {
+ System.out.println("Execution failed. See logs for detail.");
+ System.out.println("error message was " + e.getMessage());
+ logger.fatal(e);
+ e.printStackTrace();
+ }
+ }
+
+ private static void recursiveRun(String currentQuery,
+ Long duration, String queryParams,
+ boolean allowDeathOfAcquires, String
propertiesPath,
+ Long seed, double distanceConverter)
+ throws IOException
+ {
+ System.out.println("Running Tests on query " + (queryid));
+ try
+ {
+ System.out.println("initisling client");
+ CondorSuccessorClient client =
+ new CondorSuccessorClient(currentQuery, duration, queryParams,
null, propertiesPath);
+ //set queryid to correct id
+ System.out.println("getting controller");
+ SNEEController contol = (SNEEController) client.getController();
+ System.out.println("setting queryid");
+ contol.setQueryID(queryid);
+ System.out.println("running compilation");
+ client.runCompilelation(seed, distanceConverter);
+ System.out.println("Ran all tests on query " + queryid);
+ queryid ++;
+ }
+ catch(Exception e)
+ {
+ System.out.println("something major failed on query "+ queryid);
+ e.printStackTrace();
+ System.out.println(e.getMessage());
+ System.exit(0);
+ }
+ }
+
+ private void runCompilelation(Long seed, double distanceConverter)
+ throws
+ SNEECompilerException, MalformedURLException,
+ EvaluatorException, SNEEException, MetadataException,
+ SNEEConfigurationException, OptimizationException,
+ SchemaMetadataException, TypeMappingException, AgendaException,
+ UnsupportedAttributeTypeException, SourceMetadataException,
+ TopologyReaderException, SNEEDataSourceException,
+ CostParametersException, SNCBException, IOException,
+ CodeGenerationException, NumberFormatException, WhenSchedulerException,
+ AgendaLengthException
+ {
+ if (logger.isDebugEnabled())
+ logger.debug("ENTER");
+ System.out.println("Query: " + _query);
+ SNEEController control = (SNEEController) getController();
+
SNEEProperties.setSetting(SNEEPropertyNames.WSN_MANAGER_SUCCESSOR, "FALSE");
+
SNEEProperties.setSetting(SNEEPropertyNames.RUN_SIM_FAILED_NODES, "FALSE");
+
SNEEProperties.setSetting(SNEEPropertyNames.RUN_AVRORA_SIMULATOR, "FALSE");
+
SNEEProperties.setSetting(SNEEPropertyNames.RUN_AVRORA_SIMULATOR, "FALSE");
+
SNEEProperties.setSetting(SNEEPropertyNames.WSN_MANAGER_INITILISE_FRAMEWORKS, "FALSE");
+
+ control.addQuery(_query, _queryParams, seed, distanceConverter);
+ getController().close();
+ if (logger.isDebugEnabled())
+ logger.debug("RETURN");
+ }
+}
=======================================
--- /dev/null
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/successorrelation/FailedNodeData.java
Fri Feb 15 10:30:48 2013
@@ -0,0 +1,46 @@
+package uk.ac.manchester.cs.snee.manager.planner.successorrelation;
+
+import uk.ac.manchester.cs.snee.metadata.source.sensornet.Site;
+
+public class FailedNodeData
+{
+ private Site node;
+ private Double lifetime;
+ private String successorID = null;
+
+ public FailedNodeData(Site node, Double lifetime)
+ {
+ this.setNode(node);
+ this.setLifetime(lifetime);
+ }
+
+ public void setNode(Site node)
+ {
+ this.node = node;
+ }
+
+ public Site getNode()
+ {
+ return node;
+ }
+
+ public void setLifetime(Double lifetime)
+ {
+ this.lifetime = lifetime;
+ }
+
+ public Double getLifetime()
+ {
+ return lifetime;
+ }
+
+ public void setSuccessorID(String successorID)
+ {
+ this.successorID = successorID;
+ }
+
+ public String getSuccessorID()
+ {
+ return successorID;
+ }
+}
=======================================
--- /dev/null
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/successorrelation/SuccessorLifetimeEnum.java
Fri Feb 15 10:30:48 2013
@@ -0,0 +1,6 @@
+package uk.ac.manchester.cs.snee.manager.planner.successorrelation;
+
+public enum SuccessorLifetimeEnum
+{
+ CLEARED, NODEFAILEDBYENERGY, STRATEGYFAILED
+}
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/clients/reliable-channel-client/src/main/java/uk/ac/manchester/snee/client/CondorReliableChannelClient.java
Mon Jan 14 06:51:39 2013
+++
/branches/alan_2012_07_19_unreliableChannels/clients/reliable-channel-client/src/main/java/uk/ac/manchester/snee/client/CondorReliableChannelClient.java
Fri Feb 15 10:30:48 2013
@@ -64,12 +64,13 @@
String propertiesPath = args[1];
queryid = Integer.parseInt(args[2]);
long seed = Long.parseLong(args[3]);
+ double distanceConverter = Double.parseDouble(args[4]);
//File output = new File("output");
//output.mkdir();
//File result = new File(output.toString() + "/" + "ran" + query +
queryid);
//result.mkdir();
// System.out.println("made folder output and " + output.toString()
+ "/" + "ran" + query + queryid);
- recursiveRun(query, duration, queryParams, true, propertiesPath,
seed) ;
+ recursiveRun(query, duration, queryParams, true, propertiesPath,
seed, distanceConverter) ;
}
catch (Exception e)
{
@@ -83,7 +84,7 @@
private static void recursiveRun(String currentQuery,
Long duration, String queryParams,
boolean allowDeathOfAcquires, String
propertiesPath,
- Long seed)
+ Long seed, double distanceConverter)
throws IOException
{
System.out.println("Running Tests on query " + (queryid));
@@ -98,7 +99,7 @@
System.out.println("setting queryid");
contol.setQueryID(queryid);
System.out.println("running compilation");
- client.runCompilelation(seed);
+ client.runCompilelation(seed, distanceConverter);
System.out.println("Ran all tests on query " + queryid);
queryid ++;
}
@@ -111,7 +112,7 @@
}
}

- private void runCompilelation(Long seed)
+ private void runCompilelation(Long seed, double distanceConverter)
throws
SNEECompilerException, MalformedURLException,
EvaluatorException, SNEEException, MetadataException,
@@ -133,7 +134,7 @@

SNEEProperties.setSetting(SNEEPropertyNames.RUN_AVRORA_SIMULATOR, "FALSE");

SNEEProperties.setSetting(SNEEPropertyNames.WSN_MANAGER_INITILISE_FRAMEWORKS, "FALSE");

- control.addQuery(_query, _queryParams, seed);
+ control.addQuery(_query, _queryParams, seed, distanceConverter);
getController().close();
if (logger.isDebugEnabled())
logger.debug("RETURN");
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/clients/reliable-channel-client/src/main/java/uk/ac/manchester/snee/client/RelibaleChannelClient.java
Mon Jan 28 04:05:12 2013
+++
/branches/alan_2012_07_19_unreliableChannels/clients/reliable-channel-client/src/main/java/uk/ac/manchester/snee/client/RelibaleChannelClient.java
Fri Feb 15 10:30:48 2013
@@ -40,7 +40,7 @@
{

private static String sep = System.getProperty("file.separator");
- private static int queryid =2;
+ private static int queryid =1;
protected static int testNo = 1;
protected static int kResil = 2;
private static int max = 90;
@@ -218,7 +218,7 @@
// String currentQuery = queryIterator.next();
// String currentQuery = "SELECT RSTREAM AVG(anow.x) as qx FROM
A[NOW] anow ;";
String currentQuery = "SELECT RSTREAM anow.x as qx FROM A[NOW] anow ;";
- // String currentQuery = "SELECT RSTREAM anow.x as qx FROM A[NOW]
anow,(SELECT bnow.x as sq1x FROM B[NOW] bnow, C[NOW] cnow WHERE
bnow.x=cnow.x) sq1 WHERE anow.x=sq1.sq1x;";
+ // String currentQuery = "SELECT RSTREAM anow.x as qx FROM A[NOW]
anow,(SELECT bnow.x as sq1x FROM B[NOW] bnow, C[NOW] cnow WHERE
bnow.x=cnow.x) sq1 WHERE anow.x=sq1.sq1x;";
// String currentQuery = "SELECT RSTREAM sq1.sq1x as qx FROM (SELECT
anow.x as sq1x FROM A[NOW] anow, B[NOW] bnow WHERE anow.x=bnow.x) sq1,
(SELECT cnow.x as sq2x FROM C[NOW] cnow, D[NOW] dnow WHERE cnow.x=dnow.x)
sq2 WHERE sq1.sq1x=sq2.sq2x;";

String propertiesPath = sneetestFolder.toString() + sep +"snee" +
queryid + "." + kResil +".properties";
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/clients/reliable-channel-client/src/main/java/uk/ac/manchester/snee/client/utils/CondorScriptGenerator.java
Mon Jan 14 06:51:39 2013
+++
/branches/alan_2012_07_19_unreliableChannels/clients/reliable-channel-client/src/main/java/uk/ac/manchester/snee/client/utils/CondorScriptGenerator.java
Fri Feb 15 10:30:48 2013
@@ -6,6 +6,7 @@
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
+import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
@@ -50,12 +51,13 @@
out = new BufferedWriter(new FileWriter(new
File(condorFile.toString() + sep + "submit.txt")));
BufferedReader queryReader = new BufferedReader(new
FileReader(queriesFile.getAbsolutePath()));
readInQueries(queries, queryReader);
+ DecimalFormat df = new DecimalFormat("#.#");
//normal blurb
out.write("universe = vanilla\nexecutable = start.sh
\nwhen_to_transfer_output = ON_EXIT \n" +
"Should_Transfer_Files = YES\ntransfer_input_files
= ../SNEE.jar \n" +
"rank = JavaFlops \nRequirements = (JavaVersion>=\"1.6\"
&& OpSys == "+
- "\"LINUX\" && Arch == \"X86_64\") \nRequest_Disk =
10000000 \n"+
- "request_memory = 1000 \n#Output = output$(Process).txt
\n" +
+ "\"LINUX\") \nRequest_Disk = 5000000 \n"+
+ "request_memory = 2500 \n#Output = output$(Process).txt
\n" +
"#Error = error$(Process).txt \nlog = log.txt \nOutput =
out.txt \n"+
"Error = err.txt \nnotification = error \n \n");
Iterator<Long> seedIterator = seeds.iterator();
@@ -71,13 +73,16 @@
{
for(int index = startKCounter; index <= endKCoutner; index++)
{
- out.write("Arguments = " + query + " " + "snee" + queryID
+ "." + index + ".properties" +
- " " + queryID + " " + seed + "\ninitialdir =
query" + queryID + "." + index +
- "." + seed + "\nqueue \n \n");
- //make folder for the output to be stored in.
- File outputFolder = new File(condorFile.toString() + sep
+ "query" + queryID + "." +
- index + "." + seed);
- outputFolder.mkdir();
+ for(double distance = 1; distance > 0.2; distance -=0.2 )
+ {
+ out.write("Arguments = " + query + " " + "snee" + queryID
+ "." + index + ".properties" +
+ " " + queryID + " " + seed + " " +
df.format(distance) + "\ninitialdir = query" + queryID + "." + index +
+ "." + seed + "." + df.format(distance) + "\nqueue
\n \n");
+ //make folder for the output to be stored in.
+ File outputFolder = new File(condorFile.toString() + sep
+ "query" + queryID + "." +
+ index + "." + seed + "." +
df.format(distance));
+ outputFolder.mkdir();
+ }
}
queryID++;
}
@@ -87,13 +92,16 @@
{
for(int index = startKCounter; index <= endKCoutner; index++)
{
- out.write("Arguments = " + query + " " + "snee" + queryID
+ "." + index + ".properties" +
- " " + queryID + " " + seed + "\ninitialdir =
query" + queryID + "." + index +
- "." + seed + "\nqueue \n \n");
- //make folder for the output to be stored in.
- File outputFolder = new File(condorFile.toString() + sep
+ "query" + queryID + "." +
- index + "." + seed);
- outputFolder.mkdir();
+ for(double distance = 1; distance > 0.2; distance -=0.2 )
+ {
+ out.write("Arguments = " + query + " " + "snee" + queryID
+ "." + index + ".properties" +
+ " " + queryID + " " + seed + " " +
df.format(distance) + " \ninitialdir = query" + queryID + "." + index +
+ "." + seed + "." + df.format(distance) + "\nqueue
\n \n");
+ //make folder for the output to be stored in.
+ File outputFolder = new File(condorFile.toString() + sep
+ "query" + queryID + "." +
+ index + "." + seed + "." +
df.format(distance));
+ outputFolder.mkdir();
+ }
}
}
queryID++;
@@ -107,10 +115,11 @@
out = new BufferedWriter(new FileWriter(new
File(condorFile.toString() + sep + "start.sh")));
out.write("#!/bin/bash \necho $1 \necho $2 \n" +
"echo $3 \necho $4 \nunzip SNEE.jar -d extracted"+
+ "\n rm -f SNEE.jar" +
"\ncd extracted \n" +
"java uk/ac/manchester/snee/client/CondorReliableChannelClient
$1 $2 $3 $4 \n" +
"for d in *; do if test -d \"$d\"; then tar czf \"$d\".tgz
\"$d\"; fi; done" +
- "\nmv *.tgz .. \n exit 0");
+ "\nmv output.tgz .. \n exit 0");
out.flush();
out.close();

=======================================
---
/branches/alan_2012_07_19_unreliableChannels/clients/successorClient/src/main/java/uk/ac/manchester/snee/client/SuccessorClient.java
Wed Dec 5 07:03:43 2012
+++
/branches/alan_2012_07_19_unreliableChannels/clients/successorClient/src/main/java/uk/ac/manchester/snee/client/SuccessorClient.java
Fri Feb 15 10:30:48 2013
@@ -43,8 +43,8 @@
private static int queryid = 3;
protected static int testNo = 3;
private static int max = 120;
- private static File testFolder = new
File("src/main/resources/testsSize30");
- private static File sneetestFolder = new File("testsSize30");
+ private static File testFolder = new
File("src/main/resources/testsNatural");
+ private static File sneetestFolder = new File("testsNatural");
@SuppressWarnings("unused")
private static boolean inRecoveryMode = false;

@@ -254,11 +254,6 @@
logger.debug("ENTER");
System.out.println("Query: " + _query);
SNEEController control = (SNEEController) getController();
-
SNEEProperties.setSetting(SNEEPropertyNames.WSN_MANAGER_SUCCESSOR, "FALSE");
-
SNEEProperties.setSetting(SNEEPropertyNames.RUN_SIM_FAILED_NODES, "FALSE");
-
SNEEProperties.setSetting(SNEEPropertyNames.RUN_AVRORA_SIMULATOR, "FALSE");
-
SNEEProperties.setSetting(SNEEPropertyNames.RUN_AVRORA_SIMULATOR, "FALSE");
-
SNEEProperties.setSetting(SNEEPropertyNames.WSN_MANAGER_INITILISE_FRAMEWORKS, "FALSE");

control.addQuery(_query, _queryParams);
getController().close();
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/clients/successorClient/src/main/resources/testsNatural/snee3.properties
Mon Mar 12 10:36:39 2012
+++
/branches/alan_2012_07_19_unreliableChannels/clients/successorClient/src/main/resources/testsNatural/snee3.properties
Fri Feb 15 10:30:48 2013
@@ -82,9 +82,15 @@
# Only compatible with Tmote Sky TinyOS2 code generation target
sncb.include_command_server = true

+wsn_manager.setup_strategies = false
+
+wsn_manager.successor = true
+
+wsn_manager.unreliable.channels = false
+
#Specifies which stragety levels to run.
# Currently FL, FP, FG, ALL
-wsn_manager.strategies = All
+wsn_manager.strategies = FG

#specifies how much k resilience to expect local to generate (minumal)
wsn_manager.k_resilence_level = 1
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/common/SNEEProperties.java
Mon Jan 28 04:05:12 2013
+++
/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/common/SNEEProperties.java
Fri Feb 15 10:30:48 2013
@@ -359,6 +359,21 @@
setSetting(propName, "false");
return getSetting(propName);
}
+ else if(propName.equals("wsn_manager.executor.edge.tuples"))
+ {
+ setSetting(propName, "false");
+ return getSetting(propName);
+ }
+ else if(propName.equals("wsn_manager.executor.edge.lifetime"))
+ {
+ setSetting(propName, "true");
+ return getSetting(propName);
+ }
+ else if(propName.equals("wsn_manager.setup_strategies"))
+ {
+ setSetting(propName, "true");
+ return getSetting(propName);
+ }
else return null;
}

=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/common/SNEEPropertyNames.java
Mon Dec 10 06:43:35 2012
+++
/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/common/SNEEPropertyNames.java
Fri Feb 15 10:30:48 2013
@@ -317,6 +317,17 @@
*/
public static final String WSN_MANAGER_K_RESILENCE_DEFAULTALTS
= "wsn_manager.bypass.default.alts";

+ /**
+ * used by the anayliser to see if there should be strateies inititlised
+ */
+ public static final String WSN_MANAGER_INITILISE_STRATEGIES
= "wsn_manager.setup_strategies";
+
+
+ /**
+ * used by executor to decide if they need to run for tuples or lifetime
+ */
+ public static final String WSN_MANAGER_EXECUTOR_EDGE_TUPLES
= "wsn_manager.executor.edge.tuples";
+ public static final String WSN_MANAGER_EXECUTOR_EDGE_LIFE
= "wsn_manager.executor.edge.lifetime";

}

=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/compiler/costmodels/CostModel.java
Mon Nov 26 08:59:46 2012
+++
/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/compiler/costmodels/CostModel.java
Fri Feb 15 10:30:48 2013
@@ -1,6 +1,7 @@
package uk.ac.manchester.cs.snee.compiler.costmodels;

import java.util.ArrayList;
+import java.util.HashMap;

import uk.ac.manchester.cs.snee.compiler.OptimizationException;
import
uk.ac.manchester.cs.snee.compiler.costmodels.cardinalitymodel.CardinalityDataStructure;
@@ -104,7 +105,8 @@
protected abstract CostModelDataStructure acquireCard(InstanceOperator
operator)
throws OptimizationException;

- public CostModelDataStructure model(InstanceOperator operator,
ArrayList<Integer> inputs)
+ public CostModelDataStructure model(InstanceOperator operator,
ArrayList<Integer> inputs,
+ HashMap<String, Integer> tuples, Long beta)
throws OptimizationException
{
//System.out.println("within operator " + operator.getID());
@@ -134,12 +136,12 @@
}
else if(operator.getSensornetOperator() instanceof
SensornetNestedLoopJoinOperator)
{
- return joinCard(operator, inputs);
+ return joinCard(operator, inputs, tuples, beta);
}
else if(operator.getSensornetOperator() instanceof
SensornetProjectOperator)
{
InstanceOperator op =
(InstanceOperator)(operator.getInstanceInput(0));
- return model(op, inputs);
+ return model(op, inputs, tuples, beta);
}
else if(operator.getSensornetOperator() instanceof
SensornetRStreamOperator)
{
@@ -175,7 +177,8 @@
throws OptimizationException;
protected abstract CostModelDataStructure RStreamCard(InstanceOperator
operator, ArrayList<Integer> inputs)
throws OptimizationException;
- protected abstract CostModelDataStructure joinCard(InstanceOperator
operator, ArrayList<Integer> inputs)
+ protected abstract CostModelDataStructure joinCard(InstanceOperator
operator, ArrayList<Integer> inputs,
+ HashMap<String,
Integer> tuples, long beta)
throws OptimizationException;
protected abstract CostModelDataStructure aggerateCard(InstanceOperator
operator, ArrayList<Integer> inputs)
throws OptimizationException;
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/compiler/costmodels/cardinalitymodel/CardinalityEstimatedCostModel.java
Mon Jan 28 04:05:12 2013
+++
/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/compiler/costmodels/cardinalitymodel/CardinalityEstimatedCostModel.java
Fri Feb 15 10:30:48 2013
@@ -1,6 +1,7 @@
package uk.ac.manchester.cs.snee.compiler.costmodels.cardinalitymodel;

import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

@@ -237,9 +238,16 @@
}
else
{
-
- windowStreamCard = inputL.getCardOfStream();
- windowCard = inputL.getWindowCard() * inputR.getWindowCard() *
inputOperator.selectivity();
+ if(inputR.isStream())
+ {
+ windowStreamCard = 1;
+ windowCard = inputL.getWindowCard() * inputR.getCardOfStream() *
inputOperator.selectivity();
+ }
+ else
+ {
+ windowStreamCard = inputL.getCardOfStream();
+ windowCard = inputL.getWindowCard() * inputR.getWindowCard() *
inputOperator.selectivity();
+ }
//System.out.println(inputOperator.getID() + " inputCardL= " +
inputL.getCardOfStream() + " inputs each with "+ inputL.getWindowCard());
//System.out.println(inputOperator.getID() + " inputCardR= " +
inputR.getCardOfStream() + " inputs each with "+ inputR.getWindowCard());
}
@@ -401,41 +409,6 @@
//System.out.println(inputOperator.getID() + " outputCard= " + output);
return output;
}
-
- @Override
- protected CostModelDataStructure joinCard(InstanceOperator operator,
- ArrayList<Integer> inputs)
- throws OptimizationException
- {
- if(operator.isNodeDead())
- return new CardinalityDataStructure(0);
-
- //System.out.println("join newInput size is " + reducedInputs.size());
- CardinalityDataStructure inputR = new
CardinalityDataStructure(inputs.get(0));
- CardinalityDataStructure inputL = new
CardinalityDataStructure(inputs.get(1));
-
- float windowStreamCard;
- float windowCard;
-
- if(inputL.isStream())
- {
- windowStreamCard = 1;
- windowCard = inputL.getCardOfStream() * inputR.getCardOfStream() *
operator.selectivity();
- //System.out.println(inputOperator.getID() + " inputCardL= " + 1 + "
Stream with Card "+ inputL.getCardOfStream());
- //System.out.println(inputOperator.getID() + " inputCardR= " + 1 + "
Stream with Card "+ inputL.getCardOfStream());
- }
- else
- {
-
- windowStreamCard = inputL.getCardOfStream();
- windowCard = inputL.getWindowCard() * inputR.getWindowCard() *
operator.selectivity();
- //System.out.println(inputOperator.getID() + " inputCardL= " +
inputL.getCardOfStream() + " inputs each with "+ inputL.getWindowCard());
- //System.out.println(inputOperator.getID() + " inputCardR= " +
inputR.getCardOfStream() + " inputs each with "+ inputR.getWindowCard());
- }
- CardinalityDataStructure output = new
CardinalityDataStructure(windowStreamCard, windowCard);
- //System.out.println(inputOperator.getID() + " outputCard= " + output);
- return output;
- }

@Override
protected CostModelDataStructure aggerateCard(InstanceOperator operator,
@@ -495,4 +468,48 @@
out.setExtentName(attributes.get(1).toString());
return out;
}
+
+ @Override
+ protected CostModelDataStructure joinCard(InstanceOperator operator,
+ ArrayList<Integer> inputs,
+ HashMap<String, Integer>
tuples, long beta)
+ throws OptimizationException
+ {
+
+ List<Node> inputOperators = operator.getInputsList();
+ ArrayList<String> extents = new ArrayList<String>();
+
+ Iterator<Node> inputIterator = inputOperators.iterator();
+ while(inputIterator.hasNext())
+ {
+ InstanceOperator op = (InstanceOperator) inputIterator.next();
+ if(op.getSensornetOperator() instanceof SensornetExchangeOperator)
+ {
+ InstanceExchangePart ex = (InstanceExchangePart) op;
+ String extent = ex.getExtent();
+ if(extent == null || extent.equals(""))
+ extent = ex.getSourceFrag().getRootOperator().getExtent();
+ if(!extents.contains(extent))
+ extents.add(extent);
+ }
+ }
+
+ Iterator<String> inputExtents = extents.iterator();
+ ArrayList<Integer> inputTuples = new ArrayList<Integer>();
+ while(inputExtents.hasNext())
+ {
+ inputTuples.add(tuples.get(inputExtents.next()));
+ }
+
+ CardinalityDataStructure inputR = new
CardinalityDataStructure(inputTuples.get(0));
+ CardinalityDataStructure inputL = new
CardinalityDataStructure(inputTuples.get(1));
+ float windowCard;
+
+ windowCard = (inputL.getCardOfStream() * inputR.getCardOfStream() *
operator.selectivity()) / beta;
+
+
+ CardinalityDataStructure output = new
CardinalityDataStructure(windowCard, 1);
+ //System.out.println(inputOperator.getID() + " outputCard= " + output);
+ return output;
+ }
}
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/compiler/iot/InstanceOperator.java
Mon Nov 26 08:59:46 2012
+++
/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/compiler/iot/InstanceOperator.java
Fri Feb 15 10:30:48 2013
@@ -29,7 +29,8 @@
/**
* used to determine number of tuples from packets
*/
- private Integer lastPacketTupleCount = 0;
+ private Integer lastPacketTupleCount = null;
+ private String extent = null;

public InstanceOperator()
{
@@ -217,5 +218,15 @@
{
return this.id;
}
+
+ public void setExtent(String extent)
+ {
+ this.extent = extent;
+ }
+
+ public String getExtent()
+ {
+ return extent;
+ }

}
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/manager/AutonomicManager.java
Mon Jan 14 06:51:39 2013
+++
/branches/alan_2012_07_19_unreliableChannels/snee-core/src/main/java/uk/ac/manchester/cs/snee/manager/AutonomicManager.java
Fri Feb 15 10:30:48 2013
@@ -117,7 +117,7 @@
IOException, SNEEConfigurationException, CodeGenerationException;

public abstract void initilise(SourceMetadataAbstract metadata,
QueryExecutionPlan queryPlan,
- ResultStore resultSet, int queryId, Long
seed)
+ ResultStore resultSet, int queryId, Long
seed, double distanceConverter)
throws SNEEException, SNEEConfigurationException,
SchemaMetadataException, TypeMappingException,
OptimizationException, IOException, CodeGenerationException,
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/SNEEController.java
Mon Jan 14 06:51:39 2013
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/SNEEController.java
Fri Feb 15 10:30:48 2013
@@ -747,7 +747,7 @@

}

- public int addQuery(String _query, String _queryParams, Long seed)
+ public int addQuery(String _query, String _queryParams, Long seed,
double distanceConverter)
throws SNEECompilerException, NumberFormatException, SNEEException,
MetadataException, EvaluatorException, SNEEConfigurationException,
SchemaMetadataException, TypeMappingException, OptimizationException,
@@ -782,7 +782,7 @@
compileQuery(queryId, _query, queryParams);
if (logger.isInfoEnabled())
logger.info("Successfully compiled query " + queryId);
- dispatchQuery(queryId, _query, queryParams, true, seed);
+ dispatchQuery(queryId, _query, queryParams, true, seed,
distanceConverter);
if (logger.isInfoEnabled())
logger.info("Successfully started evaluation of query " + queryId);

@@ -794,7 +794,7 @@
}

private int dispatchQuery(int queryId, String _query,
- QueryParameters queryParams, boolean b, Long seed)
+ QueryParameters queryParams, boolean b, Long seed, double
distanceConverter)
throws SNEEException, MetadataException, EvaluatorException,
SNEEConfigurationException, SchemaMetadataException,
TypeMappingException, OptimizationException, IOException,
@@ -808,7 +808,7 @@
QueryExecutionPlan queryPlan = _queryPlans.get(queryId);
ResultStore resultSet = createStreamResultSet(_query, queryPlan);
Model.setCompiledAlready(false);
- _dispatcher.initiliseAutonomicManager(queryId, resultSet, queryPlan,
seed);
+ _dispatcher.initiliseAutonomicManager(queryId, resultSet, queryPlan,
seed, distanceConverter);
_dispatcher.giveAutonomicManagerQuery(_query);
_dispatcher.giveAutonomicManagerQueryParams(queryParams);
if(starting)
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/evaluator/Dispatcher.java
Mon Jan 14 06:51:39 2013
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/evaluator/Dispatcher.java
Fri Feb 15 10:30:48 2013
@@ -363,7 +363,7 @@
}

public void initiliseAutonomicManager(int queryId, ResultStore resultSet,
- QueryExecutionPlan queryPlan, Long seed)
+ QueryExecutionPlan queryPlan, Long seed, double distanceConverter)
throws SNEEException, MetadataException,
EvaluatorException, SNEEConfigurationException,
SchemaMetadataException, TypeMappingException,
@@ -374,7 +374,7 @@
SensorNetworkQueryPlan snQueryPlan = (SensorNetworkQueryPlan)queryPlan;
sncb = snQueryPlan.getSNCB();
SourceMetadataAbstract metadata =
_metadata.getSource(snQueryPlan.getMetaData().getOutputAttributes().get(1).getExtentName());
- _autonomicManager.initilise(metadata, queryPlan, resultSet, queryId,
seed);
+ _autonomicManager.initilise(metadata, queryPlan, resultSet, queryId,
seed, distanceConverter);

}

=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/AutonomicManagerImpl.java
Mon Jan 14 06:51:39 2013
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/AutonomicManagerImpl.java
Fri Feb 15 10:30:48 2013
@@ -74,6 +74,7 @@
//data structures needed for manager
private QueryExecutionPlan currentQEP;
private MetadataManager _metadataManager;
+
private SourceMetadataAbstract _metadata;
private QoSExpectations queryQoS;

@@ -565,11 +566,12 @@

@Override
public void initilise(SourceMetadataAbstract metadata,
- QueryExecutionPlan qep, ResultStore resultSet, int queryid,
- Long seed) throws SNEEException, SNEEConfigurationException,
- SchemaMetadataException, TypeMappingException, OptimizationException,
- IOException, CodeGenerationException, NumberFormatException,
- WhenSchedulerException, AgendaException, AgendaLengthException
+ QueryExecutionPlan qep, ResultStore resultSet, int
queryid,
+ Long seed, double distanceConverter)
+ throws SNEEException,SNEEConfigurationException, SchemaMetadataException,
+ TypeMappingException, OptimizationException, IOException,
+ CodeGenerationException, NumberFormatException,
WhenSchedulerException,
+ AgendaException, AgendaLengthException
{
this.currentQEP = qep;
queryName = "query" + queryid;
@@ -598,16 +600,44 @@
if(unreliableChannels)
{
planner.updateStorageLocation(outputFolder);
- planner.startUnreliableChannelStrategy((SensorNetworkQueryPlan) qep,
seed);
+ planner.startUnreliableChannelStrategy((SensorNetworkQueryPlan) qep,
seed, distanceConverter);
}

}
+
+ public MetadataManager get_metadataManager()
+ {
+ return _metadataManager;
+ }

public void simulateRunOfRQEP(RobustSensorNetworkQueryPlan rQEP,
- SensorNetworkQueryPlan qep, Long seed)
+ SensorNetworkQueryPlan qep, Long seed, Double distanceConverter)
throws NumberFormatException, SNEEConfigurationException,
OptimizationException,
SchemaMetadataException, TypeMappingException, IOException
{
- this.executer.simulateRunOfQEPs(rQEP, qep, seed);
+ this.executer.simulateRunOfQEPs(rQEP, qep, seed, distanceConverter);
+ }
+
+ /**
+ *
+ * @param rQEP
+ * @param qep
+ * @param seed
+ * @param distanceConverter
+ * @throws IOException
+ * @throws TypeMappingException
+ * @throws SchemaMetadataException
+ * @throws OptimizationException
+ * @throws SNEEConfigurationException
+ * @throws NumberFormatException
+ * @throws CodeGenerationException
+ */
+ public void
calculateLifetimeDifferenceFromDeployments(RobustSensorNetworkQueryPlan
rQEP,
+
SensorNetworkQueryPlan qep, Long seed,
+ Double
distanceConverter)
+ throws NumberFormatException, SNEEConfigurationException,
OptimizationException,
+ SchemaMetadataException, TypeMappingException, IOException,
CodeGenerationException
+ {
+ this.executer.calculateLifetimeDifferenceFromDeployments(rQEP, qep,
seed, distanceConverter);
}
}
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/anayliser/Anaylsiser.java
Fri Aug 17 09:48:15 2012
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/anayliser/Anaylsiser.java
Fri Feb 15 10:30:48 2013
@@ -76,48 +76,52 @@
private void SetupFailedNodeFrameWorks(MetadataManager _metadataManager)
throws SNEEConfigurationException
{
- String prop =
SNEEProperties.getSetting(SNEEPropertyNames.WSN_MANAGER_STRATEGIES);
- if(prop.equals(FailedNodeStrategyEnum.FailedNodeLocal.toString()))
+ boolean createStratgies =
SNEEProperties.getBoolSetting(SNEEPropertyNames.WSN_MANAGER_INITILISE_STRATEGIES);
+ if(createStratgies)
{
- CompleteReCompilationStrategy failedNodeFrameworkGlobal =
- new CompleteReCompilationStrategy(manager, _metadata,
_metadataManager);
- LogicalOverlayStrategy failedNodeFrameworkLocal =
- new LogicalOverlayStrategy(manager, _metadata, _metadataManager);
- frameworks.add(failedNodeFrameworkGlobal);
- frameworks.add(failedNodeFrameworkLocal);
-
- }
- if(prop.equals(FailedNodeStrategyEnum.FailedNodePartial.toString()))
- {
- CompleteReCompilationStrategy failedNodeFrameworkGlobal =
- new CompleteReCompilationStrategy(manager, _metadata,
_metadataManager);
- LocalRepairStrategy failedNodeFrameworkSpaceAndTimePinned =
- new LocalRepairStrategy(manager, _metadata, true, true);
- //FailedNodeStrategyPartial failedNodeFrameworkSpacePinned =
- // new FailedNodeStrategyPartial(manager, _metadata, true, false);
- frameworks.add(failedNodeFrameworkGlobal);
- frameworks.add(failedNodeFrameworkSpaceAndTimePinned);
- }
- if(prop.equals(FailedNodeStrategyEnum.FailedNodeGlobal.toString()))
- {
- CompleteReCompilationStrategy failedNodeFrameworkGlobal =
- new CompleteReCompilationStrategy(manager, _metadata,
_metadataManager);
- frameworks.add(failedNodeFrameworkGlobal);
- }
- if(prop.equals(FailedNodeStrategyEnum.All.toString()))
- {
- LocalRepairStrategy failedNodeFrameworkSpaceAndTimePinned =
- new LocalRepairStrategy(manager, _metadata, true, true);
- //FailedNodeStrategyPartial failedNodeFrameworkSpacePinned =
- // new FailedNodeStrategyPartial(manager, _metadata, true, false);
- LogicalOverlayStrategy failedNodeFrameworkLocal =
- new LogicalOverlayStrategy(manager, _metadata, _metadataManager);
- CompleteReCompilationStrategy failedNodeFrameworkGlobal =
- new CompleteReCompilationStrategy(manager, _metadata,
_metadataManager);
- frameworks.add(failedNodeFrameworkLocal);
- frameworks.add(failedNodeFrameworkSpaceAndTimePinned);
- //frameworks.add(failedNodeFrameworkSpacePinned);
- frameworks.add(failedNodeFrameworkGlobal);
+ String prop =
SNEEProperties.getSetting(SNEEPropertyNames.WSN_MANAGER_STRATEGIES);
+ if(prop.equals(FailedNodeStrategyEnum.FailedNodeLocal.toString()))
+ {
+ CompleteReCompilationStrategy failedNodeFrameworkGlobal =
+ new CompleteReCompilationStrategy(manager, _metadata,
_metadataManager);
+ LogicalOverlayStrategy failedNodeFrameworkLocal =
+ new LogicalOverlayStrategy(manager, _metadata, _metadataManager);
+ frameworks.add(failedNodeFrameworkGlobal);
+ frameworks.add(failedNodeFrameworkLocal);
+
+ }
+ if(prop.equals(FailedNodeStrategyEnum.FailedNodePartial.toString()))
+ {
+ CompleteReCompilationStrategy failedNodeFrameworkGlobal =
+ new CompleteReCompilationStrategy(manager, _metadata,
_metadataManager);
+ LocalRepairStrategy failedNodeFrameworkSpaceAndTimePinned =
+ new LocalRepairStrategy(manager, _metadata, true, true);
+ //FailedNodeStrategyPartial failedNodeFrameworkSpacePinned =
+ // new FailedNodeStrategyPartial(manager, _metadata, true, false);
+ frameworks.add(failedNodeFrameworkGlobal);
+ frameworks.add(failedNodeFrameworkSpaceAndTimePinned);
+ }
+ if(prop.equals(FailedNodeStrategyEnum.FailedNodeGlobal.toString()))
+ {
+ CompleteReCompilationStrategy failedNodeFrameworkGlobal =
+ new CompleteReCompilationStrategy(manager, _metadata,
_metadataManager);
+ frameworks.add(failedNodeFrameworkGlobal);
+ }
+ if(prop.equals(FailedNodeStrategyEnum.All.toString()))
+ {
+ LocalRepairStrategy failedNodeFrameworkSpaceAndTimePinned =
+ new LocalRepairStrategy(manager, _metadata, true, true);
+ //FailedNodeStrategyPartial failedNodeFrameworkSpacePinned =
+ // new FailedNodeStrategyPartial(manager, _metadata, true, false);
+ LogicalOverlayStrategy failedNodeFrameworkLocal =
+ new LogicalOverlayStrategy(manager, _metadata, _metadataManager);
+ CompleteReCompilationStrategy failedNodeFrameworkGlobal =
+ new CompleteReCompilationStrategy(manager, _metadata,
_metadataManager);
+ frameworks.add(failedNodeFrameworkLocal);
+ frameworks.add(failedNodeFrameworkSpaceAndTimePinned);
+ //frameworks.add(failedNodeFrameworkSpacePinned);
+ frameworks.add(failedNodeFrameworkGlobal);
+ }
}

}
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/executer/Executer.java
Mon Jan 14 06:51:39 2013
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/executer/Executer.java
Fri Feb 15 10:30:48 2013
@@ -4,25 +4,34 @@
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
+import java.text.DecimalFormat;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;

import uk.ac.manchester.cs.snee.common.SNEEConfigurationException;
import uk.ac.manchester.cs.snee.common.SNEEProperties;
import uk.ac.manchester.cs.snee.common.SNEEPropertyNames;
+import uk.ac.manchester.cs.snee.common.graph.Node;
import uk.ac.manchester.cs.snee.compiler.OptimizationException;
import uk.ac.manchester.cs.snee.compiler.costmodels.HashMapList;
import
uk.ac.manchester.cs.snee.compiler.costmodels.cardinalitymodel.CardinalityEstimatedCostModel;
+import uk.ac.manchester.cs.snee.compiler.queryplan.Agenda;
import uk.ac.manchester.cs.snee.compiler.queryplan.SensorNetworkQueryPlan;
import uk.ac.manchester.cs.snee.manager.AutonomicManagerImpl;
import uk.ac.manchester.cs.snee.manager.common.Adaptation;
import uk.ac.manchester.cs.snee.manager.common.AutonomicManagerComponent;
+import uk.ac.manchester.cs.snee.manager.common.RunTimeSite;
+import
uk.ac.manchester.cs.snee.manager.failednodestrategies.logicaloverlaynetwork.LogicalOverlayStrategy;
import
uk.ac.manchester.cs.snee.manager.planner.costbenifitmodel.model.channel.ChannelModel;
import
uk.ac.manchester.cs.snee.manager.planner.unreliablechannels.LogicalOverlayNetworkHierarchy;
import
uk.ac.manchester.cs.snee.manager.planner.unreliablechannels.RobustSensorNetworkQueryPlan;
import uk.ac.manchester.cs.snee.metadata.schema.SchemaMetadataException;
import uk.ac.manchester.cs.snee.metadata.schema.TypeMappingException;
import uk.ac.manchester.cs.snee.metadata.source.sensornet.Site;
+import uk.ac.manchester.cs.snee.metadata.source.sensornet.Topology;
+import uk.ac.manchester.cs.snee.sncb.CodeGenerationException;

public class Executer extends AutonomicManagerComponent
{
@@ -35,7 +44,8 @@
new HashMapList<Executer.type, Integer>();
private File executerOutputFolder = null;
private enum type{MAX, RQEP, QEP};
-
+ private HashMap<String, RunTimeSite> runningSites;
+ private Topology network;

public Executer(AutonomicManagerImpl autonomicManager)
{
@@ -46,6 +56,8 @@
{
manager.setCurrentQEP(finalChoice.getNewQep());
manager.updateStrategies(finalChoice);
+ runningSites = manager.getCopyOfRunningSites();
+ this.network = manager.getWsnTopology();
}

/**
@@ -98,7 +110,7 @@
* @throws SchemaMetadataException
* @throws OptimizationException
*/
- public void simulateRunOfRQEP(RobustSensorNetworkQueryPlan rQEP,
+ public ArrayList<RunTimeSite>
simulateRunOfRQEP(RobustSensorNetworkQueryPlan rQEP,
ChannelModel channelModel)
throws NumberFormatException, SNEEConfigurationException,
OptimizationException, SchemaMetadataException, TypeMappingException
@@ -110,16 +122,44 @@
model.runModel();
// fixed iterations
numberOfIterations = 50;
+ HashMapList<String, RunTimeSite> sitesEnergyValues = new
HashMapList<String, RunTimeSite>();
//cycle though iterations
for(int iteration = 0; iteration < numberOfIterations; iteration ++)
{
- channelModel.runModel(new ArrayList<String>(), rQEP.getIOT());
+ HashMapList<String, RunTimeSite> iterationSitesEnergyValues =
+ channelModel.runModel(new ArrayList<String>(), rQEP.getIOT());
+ Iterator<String> keyIterator =
iterationSitesEnergyValues.keySet().iterator();
+ while(keyIterator.hasNext())
+ {
+ String key = keyIterator.next();
+ sitesEnergyValues.addAll(key, iterationSitesEnergyValues.get(key));
+ }
Integer tuplesReturned = determineTupleDeliveryRate(channelModel,
rQEP);
Integer maxTuplesReturnable = (int)
model.returnAgendaExecutionResult();
tuplesReturnedFromEachTypeOfQEP.addWithDuplicates(type.RQEP,
tuplesReturned);
tuplesReturnedFromEachTypeOfQEP.addWithDuplicates(type.MAX,
maxTuplesReturnable);
channelModel.clearModel();
+ rQEP.getLogicalOverlayNetwork().removeClonedData();
}
+
+ ArrayList<RunTimeSite> siteAverageEnergyDepletion = new
ArrayList<RunTimeSite>();
+ Iterator<String> keyIterator = sitesEnergyValues.keySet().iterator();
+ while(keyIterator.hasNext())
+ {
+ String key = keyIterator.next();
+ Iterator<RunTimeSite> siteQEPCostIterator =
sitesEnergyValues.get(key).iterator();
+ double qepCostTotaller = 0.0;
+ while(siteQEPCostIterator.hasNext())
+ {
+ RunTimeSite siteValue = siteQEPCostIterator.next();
+ qepCostTotaller+= siteValue.getQepExecutionCost();
+ }
+ qepCostTotaller = qepCostTotaller / numberOfIterations;
+ RunTimeSite average = new RunTimeSite(0.0, key, qepCostTotaller);
+ siteAverageEnergyDepletion.add(average);
+ }
+
+ return siteAverageEnergyDepletion;
}

/**
@@ -129,13 +169,14 @@
* for a Sensor network query plan
* @param rQEP
* @param channelModel
+ * @return
* @throws NumberFormatException
* @throws SNEEConfigurationException
* @throws TypeMappingException
* @throws SchemaMetadataException
* @throws OptimizationException
*/
- public void simulateRunOfQEP(SensorNetworkQueryPlan QEP,
+ public ArrayList<RunTimeSite> simulateRunOfQEP(SensorNetworkQueryPlan
QEP,
ChannelModel channelModel)
throws NumberFormatException, SNEEConfigurationException,
OptimizationException, SchemaMetadataException, TypeMappingException
@@ -143,14 +184,40 @@
Integer numberOfIterations =
Integer.parseInt(SNEEProperties.getSetting(

SNEEPropertyNames.WSN_MANAGER_UNRELIABLE_CHANNELS_SIMULATION_ITERATIONS));
numberOfIterations = 50;
- channelModel.setPacketModel(false);
+ channelModel.setPacketModel(false);
+ HashMapList<String, RunTimeSite> sitesEnergyValues = new
HashMapList<String, RunTimeSite>();
for(int iteration = 0; iteration < numberOfIterations; iteration ++)
{
- channelModel.runModel(new ArrayList<String>(), QEP.getIOT());
+ HashMapList<String, RunTimeSite> iterationSitesEnergyValues =
+ channelModel.runModel(new ArrayList<String>(), QEP.getIOT());
+ Iterator<String> keyIterator =
iterationSitesEnergyValues.keySet().iterator();
+ while(keyIterator.hasNext())
+ {
+ String key = keyIterator.next();
+ sitesEnergyValues.addAll(key, iterationSitesEnergyValues.get(key));
+ }
Integer tuplesReturned = determineTupleDeliveryRate(channelModel,
QEP);
tuplesReturnedFromEachTypeOfQEP.addWithDuplicates(type.QEP,
tuplesReturned);
channelModel.clearModel();
}
+
+ ArrayList<RunTimeSite> siteAverageEnergyDepletion = new
ArrayList<RunTimeSite>();
+ Iterator<String> keyIterator = sitesEnergyValues.keySet().iterator();
+ while(keyIterator.hasNext())
+ {
+ String key = keyIterator.next();
+ Iterator<RunTimeSite> siteQEPCostIterator =
sitesEnergyValues.get(key).iterator();
+ double qepCostTotaller = 0.0;
+ while(siteQEPCostIterator.hasNext())
+ {
+ RunTimeSite siteValue = siteQEPCostIterator.next();
+ qepCostTotaller+= siteValue.getQepExecutionCost();
+ }
+ qepCostTotaller = qepCostTotaller / numberOfIterations;
+ RunTimeSite average = new RunTimeSite(0.0, key, qepCostTotaller);
+ siteAverageEnergyDepletion.add(average);
+ }
+ return siteAverageEnergyDepletion;
}


@@ -258,12 +325,10 @@
}

public void simulateRunOfQEPs(RobustSensorNetworkQueryPlan rQEP,
- SensorNetworkQueryPlan qep, Long seed)
+ SensorNetworkQueryPlan qep, Long seed,
Double distanceFactor)
throws NumberFormatException, SNEEConfigurationException,
OptimizationException,
SchemaMetadataException, TypeMappingException, IOException
{
- for(double distanceFactor = 0.2; distanceFactor <= 1; distanceFactor
+=0.2)
- {
SNEEProperties.setSetting("distanceFactor", new
Double(distanceFactor).toString());
File distanceFactorFolder =
new File(this.executerOutputFolder.toString() + sep +
distanceFactor);
@@ -287,32 +352,238 @@
simulateRunOfQEP(qep, channelModel);
writeResultsToFile(distanceFactorFolder);
cleardataStores();
- }
-
- //one last time for 0.1 format.
- double distanceFactor = 0.1;
- SNEEProperties.setSetting("distanceFactor", new
Double(distanceFactor).toString());
+ }
+
+ public void
calculateLifetimeDifferenceFromDeployments(RobustSensorNetworkQueryPlan
rQEP,
+
SensorNetworkQueryPlan qep, Long seed,
+ Double
distanceConverter)
+ throws NumberFormatException, SNEEConfigurationException,
OptimizationException,
+ SchemaMetadataException, TypeMappingException, IOException,
CodeGenerationException
+ {
+ SNEEProperties.setSetting("distanceFactor", new
Double(distanceConverter).toString());
File distanceFactorFolder =
- new File(this.executerOutputFolder.toString() + sep +
distanceFactor);
+ new File(this.executerOutputFolder.toString() + sep +
distanceConverter);
distanceFactorFolder.mkdir();
- File robustFolder = new File(distanceFactorFolder.toString() + sep
+ "robust");
+ File robustFolder = new File(distanceFactorFolder.toString() + sep
+ "lifetimeEstimate");
robustFolder.mkdir();
- ChannelModel channelModel =
- new ChannelModel(rQEP.getLogicalOverlayNetwork(),
rQEP.getUnreliableAgenda(),
- manager.getWsnTopology().getMaxNodeID(),
manager.getWsnTopology(),
- manager.getCostsParamters(), robustFolder);
- simulateRunOfRQEP(rQEP, channelModel);
- LogicalOverlayNetworkHierarchy skelOverlay =
- new LogicalOverlayNetworkHierarchy(rQEP.getLogicalOverlayNetwork(),
- qep, manager.getWsnTopology());
- File staticFolder = new File(distanceFactorFolder.toString() + sep
+ "static");
- staticFolder.mkdir();
- channelModel =
- new ChannelModel(skelOverlay, qep.getAgendaIOT(),
- manager.getWsnTopology().getMaxNodeID(),
manager.getWsnTopology(),
- manager.getCostsParamters(), staticFolder);
- simulateRunOfQEP(qep, channelModel);
- writeResultsToFile(distanceFactorFolder);
- cleardataStores();
+
+ double overallRQEPShortestLifetime =
calculateOverallRQEPShortestLifetime(rQEP, robustFolder, seed);
+ this.runningSites = manager.getCopyOfRunningSites();
+ double overallQEPShortestLifetime =
calculateOverallQEPShortestLifetime(qep, robustFolder, seed, rQEP);
+
+ String queryid = manager.getQueryID();
+ DecimalFormat format = new DecimalFormat("#.##");
+ BufferedWriter out = new BufferedWriter(new FileWriter(new
File(robustFolder.toString() + sep + "lifetimes")));
+ out.write(queryid + " " + format.format(overallQEPShortestLifetime)
+ " " + format.format(overallRQEPShortestLifetime));
+ out.flush();
+ out.close();
+ }
+
+
+ /**
+ * calculates the lifetime of the basic overlay network
+ * @param QEP
+ * @param robustFolder
+ * @param seed
+ * @param rQEP
+ * @return
+ * @throws OptimizationException
+ * @throws CodeGenerationException
+ * @throws SNEEConfigurationException
+ * @throws IOException
+ * @throws TypeMappingException
+ * @throws SchemaMetadataException
+ */
+ private double
calculateOverallQEPShortestLifetime(SensorNetworkQueryPlan QEP,
+ File robustFolder,
Long seed,
+
RobustSensorNetworkQueryPlan rQEP)
+ throws OptimizationException, SchemaMetadataException,
TypeMappingException,
+ IOException, SNEEConfigurationException, CodeGenerationException
+ {
+ boolean alive = true;
+ ArrayList<String> globalFailedNodes = new ArrayList<String>();
+ double overallQEPShortestLifetime = 0;
+ LogicalOverlayStrategy logicalOverlayGenerator = new
LogicalOverlayStrategy(this.manager, this._metadata,
+
this.manager.get_metadataManager());
+ logicalOverlayGenerator.initilise(QEP, 1);
+
+ while(alive)
+ {
+ LogicalOverlayNetworkHierarchy skelOverlay =
+ new
LogicalOverlayNetworkHierarchy(logicalOverlayGenerator.getLogicalOverlay(),
+ qep, manager.getWsnTopology());
+ ChannelModel channelModel =
+ new ChannelModel(skelOverlay, qep.getAgendaIOT(),
+ manager.getWsnTopology().getMaxNodeID(),
manager.getWsnTopology(),
+ manager.getCostsParamters(), robustFolder, seed);
+ ArrayList<RunTimeSite> qepCostAveragesQeps = simulateRunOfQEP(QEP,
channelModel);
+ Iterator<RunTimeSite> newQEPCostIterator =
qepCostAveragesQeps.iterator();
+ while(newQEPCostIterator.hasNext())
+ {
+ RunTimeSite newQEPCostContainer = newQEPCostIterator.next();
+ RunTimeSite oldQEPCostContainer =
this.runningSites.get(newQEPCostContainer.toString());
+
oldQEPCostContainer.setQepExecutionCost(newQEPCostContainer.getQepExecutionCost());
+ }
+ double agendaLength =
Agenda.bmsToMs(rQEP.getAgendaIOT().getLength_bms(false))/new Double(1000);
// ms to s
+
+ //locate weakest node
+ Iterator<Node> siteIter = this.network.siteIterator();
+ String failedSite = null;
+ double shortestLifetime = Double.MAX_VALUE;
+ while (siteIter.hasNext())
+ {
+ Node site = siteIter.next();
+ RunTimeSite rSite = runningSites.get(site.getID());
+ double currentEnergySupply = rSite.getCurrentEnergy() -
rSite.getCurrentAdaptationEnergyCost();
+ double siteLifetime = (currentEnergySupply /
runningSites.get(site.getID()).getQepExecutionCost());
+ boolean useAcquires =
SNEEProperties.getBoolSetting(SNEEPropertyNames.WSN_MANAGER_K_RESILENCE_SENSE);
+ //uncomment out sections to not take the root site into account
+ if (!site.getID().equals(rQEP.getIOT().getRT().getRoot().getID())
&&
+ ((useAcquires) || (!useAcquires && !((Site) site).isSource()))
&&
+ !globalFailedNodes.contains(site.getID()))
+ {
+ if(shortestLifetime > siteLifetime)
+ {
+ if(!((Site) site).isDeadInSimulation())
+ {
+ shortestLifetime = siteLifetime;
+ failedSite = site.getID();
+ }
+ }
+ }
+ }
+
+ //update runtimeSites energy levels
+ updateSitesEnergyLevels(shortestLifetime, globalFailedNodes);
+ overallQEPShortestLifetime += (shortestLifetime * agendaLength);
+ globalFailedNodes.add(failedSite);
+
+
+ if(logicalOverlayGenerator.canAdapt(failedSite,
logicalOverlayGenerator.getLogicalOverlay()))
+ {
+ ArrayList<String> failedNodeIDs = new ArrayList<String>();
+ failedNodeIDs.add(failedSite);
+ System.out.println("node " + failedSite);
+ List<Adaptation> result =
logicalOverlayGenerator.adapt(failedNodeIDs,
logicalOverlayGenerator.getLogicalOverlay());
+ if(result.size() == 0)
+ alive = false;
+ QEP = result.get(0).getNewQep();
+ shortestLifetime = Double.MAX_VALUE;
+ }
+ else
+ {
+ alive = false;
+ }
+ }
+ return overallQEPShortestLifetime;
+ }
+
+ /**
+ * calculates the lifetime of the robust qEP
+ * @param rQEP
+ * @param robustFolder
+ * @param seed
+ * @return
+ * @throws SNEEConfigurationException
+ * @throws IOException
+ * @throws TypeMappingException
+ * @throws SchemaMetadataException
+ * @throws OptimizationException
+ * @throws NumberFormatException
+ */
+ private double
calculateOverallRQEPShortestLifetime(RobustSensorNetworkQueryPlan rQEP,
File robustFolder,
+ Long seed)
+ throws SNEEConfigurationException, IOException, NumberFormatException,
+ OptimizationException, SchemaMetadataException, TypeMappingException
+ {
+ boolean alive = true;
+ ArrayList<String> globalFailedNodes = new ArrayList<String>();
+ double overallRQEPShortestLifetime = 0;
+ while(alive)
+ {
+ ChannelModel channelModel =
+ new ChannelModel(rQEP.getLogicalOverlayNetwork(),
rQEP.getUnreliableAgenda(),
+ manager.getWsnTopology().getMaxNodeID(),
manager.getWsnTopology(),
+ manager.getCostsParamters(), robustFolder, seed);
+ ArrayList<RunTimeSite> qepCostAveragesResilentQeps =
simulateRunOfRQEP(rQEP, channelModel);
+ //correct energy model values
+ Iterator<RunTimeSite> newQEPCostIterator =
qepCostAveragesResilentQeps.iterator();
+ while(newQEPCostIterator.hasNext())
+ {
+ RunTimeSite newQEPCostContainer = newQEPCostIterator.next();
+ RunTimeSite oldQEPCostContainer =
this.runningSites.get(newQEPCostContainer.toString());
+
oldQEPCostContainer.setQepExecutionCost(newQEPCostContainer.getQepExecutionCost());
+ }
+
+
+ double agendaLength =
Agenda.bmsToMs(rQEP.getAgendaIOT().getLength_bms(false))/new Double(1000);
// ms to s
+
+ //locate weakest node
+ Iterator<Node> siteIter = this.network.siteIterator();
+ String failedSite = null;
+ double shortestLifetime = Double.MAX_VALUE;
+ while (siteIter.hasNext())
+ {
+ Node site = siteIter.next();
+ RunTimeSite rSite = runningSites.get(site.getID());
+ double currentEnergySupply = rSite.getCurrentEnergy() -
rSite.getCurrentAdaptationEnergyCost();
+ double siteLifetime = (currentEnergySupply /
runningSites.get(site.getID()).getQepExecutionCost());
+ boolean useAcquires =
SNEEProperties.getBoolSetting(SNEEPropertyNames.WSN_MANAGER_K_RESILENCE_SENSE);
+ //uncomment out sections to not take the root site into account
+ if (!site.getID().equals(rQEP.getIOT().getRT().getRoot().getID())
&&
+ ((useAcquires) || (!useAcquires && !((Site) site).isSource()))
&&
+ !globalFailedNodes.contains(site.getID()))
+ {
+ if(shortestLifetime > siteLifetime)
+ {
+ if(!((Site) site).isDeadInSimulation())
+ {
+ shortestLifetime = siteLifetime;
+ failedSite = site.getID();
+ }
+ }
+ }
+ }
+
+ //update runtimeSites energy levels
+ updateSitesEnergyLevels(shortestLifetime, globalFailedNodes);
+ overallRQEPShortestLifetime += (shortestLifetime * agendaLength);
+ globalFailedNodes.add(failedSite);
+ if(rQEP.getLogicalOverlayNetwork().canAdapt(failedSite, rQEP))
+ {
+ System.out.println("node " + failedSite);
+ ArrayList<String> failedNodeIDs = new ArrayList<String>();
+ failedNodeIDs.add(failedSite);
+ LogicalOverlayStrategy logicalOverlayGenerator =
+ new LogicalOverlayStrategy(this.manager, this._metadata,
this.manager.get_metadataManager());
+ List<Adaptation> result =
+
logicalOverlayGenerator.executeHierarchyAdaptation(failedNodeIDs,
rQEP.getLogicalOverlayNetwork());
+ if(result.size() == 0)
+ alive = false;
+ rQEP = (RobustSensorNetworkQueryPlan) result.get(0).getNewQep();
+ shortestLifetime = Double.MAX_VALUE;
+ }
+ else
+ {
+ alive = false;
+ }
+ }
+ return overallRQEPShortestLifetime;
+ }
+
+ private void updateSitesEnergyLevels(double shortestLifetime,
+ ArrayList<String> globalFailedNodes)
+ {
+ Iterator<Node> siteIter = this.network.siteIterator();
+ shortestLifetime = Math.floor(shortestLifetime);
+ while (siteIter.hasNext())
+ {
+ Node site = siteIter.next();
+ if(!globalFailedNodes.contains(site.getID()) ||
globalFailedNodes.get(globalFailedNodes.size() -1).equals(site.getID()))
+ {
+ RunTimeSite rSite = runningSites.get(site.getID());
+ rSite.removeDefinedCost(rSite.getQepExecutionCost() *
shortestLifetime);
+ }
+ }
}
}
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/failednodestrategies/completerecompilationstrategy/CompleteReCompilationStrategy.java
Tue Jul 31 02:50:48 2012
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/failednodestrategies/completerecompilationstrategy/CompleteReCompilationStrategy.java
Fri Feb 15 10:30:48 2013
@@ -3,6 +3,7 @@
import java.io.File;
import java.net.MalformedURLException;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;

import uk.ac.manchester.cs.snee.MetadataException;
@@ -164,6 +165,100 @@
adaptation.add(adapt);
return adaptation;
}
+
+
+
+ /**
+ * removes failed nodes from the network and then calls upon distributed
section of compiler.
+ * @throws SNEECompilerException
+ * @throws RouterException
+ */
+ public List<Adaptation> adapt(ArrayList<String> failedNodes, Topology
deployment,
+ SensorNetworkQueryPlan QEP)
+ throws
+ OptimizationException, UnsupportedAttributeTypeException,
+ SchemaMetadataException,SourceMetadataException,
+ TypeMappingException,AgendaException,
+ SNEEException,SNEEConfigurationException,
+ MalformedURLException,TopologyReaderException,
+ MetadataException, SNEEDataSourceException,
+ CostParametersException, SNCBException, NumberFormatException,
SNEECompilerException
+
+ {
+ this.currentQEP = QEP;
+ System.out.println("Running Failed Node FrameWork Global");
+ globalFile = new File(outputFolder.toString() + sep + "global
Stragety");
+ globalFile.mkdir();
+ List<Adaptation> adaptation = new ArrayList<Adaptation>();
+ Adaptation adapt = new Adaptation(currentQEP,
StrategyIDEnum.FailedNodeGlobal, 1);
+ SensorNetworkSourceMetadata sm = (SensorNetworkSourceMetadata)
_metadata;
+ network = deployment;
+
+ //remove node from deployment
+ Iterator<String> failedNodeIterator = failedNodes.iterator();
+ while(failedNodeIterator.hasNext())
+ {
+ String failedNode = failedNodeIterator.next();
+ deployment.removeNodeAndAssociatedEdges(failedNode);
+ }
+
+ makeNetworkFile();
+ //remove exchanges from PAF
+ PAF paf = cloner.deepClone(currentQEP.getIOT().getPAF());
+ paf.updateMetadataConnection(sm);
+ paf = this.removeExchangesFromPAF(paf);
+ //shove though distributed section of compiler
+ //routing
+ Router router = new Router();
+ RT routingTree;
+ //if no route generated, then return empty adapatation.
+ try
+ {
+ routingTree = router.doRouting(paf, currentQEP.getQueryName(),
network, _metadata);
+ }
+ catch (RouterException e1)
+ {
+ return adaptation;
+ }
+ //where
+ InstanceWhereSchedular instanceWhere =
+ new InstanceWhereSchedular(paf, routingTree,
currentQEP.getCostParameters(),
+ globalFile.toString());
+ IOT newIOT = instanceWhere.getIOT();
+ //when
+ boolean useNetworkController = SNEEProperties.getBoolSetting(
+ SNEEPropertyNames.SNCB_INCLUDE_COMMAND_SERVER);
+ boolean allowDiscontinuousSensing = SNEEProperties.getBoolSetting(
+ SNEEPropertyNames.ALLOW_DISCONTINUOUS_SENSING);
+
+ AgendaIOT newAgendaIOT;
+ Agenda newAgenda;
+ WhenScheduler whenSched = new WhenScheduler(allowDiscontinuousSensing,
+
_metadataManager.getCostParameters(),
+ useNetworkController);
+ try
+ {
+ newAgendaIOT = whenSched.doWhenScheduling(newIOT,
currentQEP.getQos(), currentQEP.getQueryName(),
currentQEP.getCostParameters());
+ newAgenda = whenSched.doWhenScheduling(newIOT.getDAF(),
currentQEP.getQos(), currentQEP.getQueryName());
+ new AgendaIOTUtils(newAgendaIOT, newIOT,
false).exportAsLatex(globalFile.toString() + sep + "newAgenda");
+ new AgendaIOTUtils(newAgendaIOT, newIOT,
false).generateImage(globalFile.toString());
+ }
+ catch (WhenSchedulerException e)
+ {
+ throw new SNEECompilerException(e);
+ }
+
+ boolean success = assessQEPsAgendas(this.currentQEP.getIOT(), newIOT,
this.currentQEP.getAgendaIOT(),
+ newAgendaIOT, newAgenda, false,
adapt, failedNodes, routingTree, true,
+ this.currentQEP.getDLAF(),
this.currentQEP.getID(), this.currentQEP.getCostParameters());
+ adapt.setFailedNodes(failedNodes);
+
+ if(success)
+ adaptation.add(adapt);
+ return adaptation;
+ }
+
+

private void makeNetworkFile()
throws SchemaMetadataException
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/failednodestrategies/logicaloverlaynetwork/LogicalOverlayStrategy.java
Wed Dec 5 07:03:43 2012
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/failednodestrategies/logicaloverlaynetwork/LogicalOverlayStrategy.java
Fri Feb 15 10:30:48 2013
@@ -547,7 +547,7 @@
return adapatation;
}

- private List<Adaptation> executeHierarchyAdaptation(ArrayList<String>
failedNodeIDs,
+ public List<Adaptation> executeHierarchyAdaptation(ArrayList<String>
failedNodeIDs,

LogicalOverlayNetworkHierarchy overlay)
throws FileNotFoundException, IOException, OptimizationException,
SchemaMetadataException
{
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/failednodestrategies/logicaloverlaynetwork/logicaloverlaynetworkgenerator/LogicalOverlayGenerator.java
Mon Jan 28 04:05:12 2013
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/failednodestrategies/logicaloverlaynetwork/logicaloverlaynetworkgenerator/LogicalOverlayGenerator.java
Fri Feb 15 10:30:48 2013
@@ -20,12 +20,14 @@
import uk.ac.manchester.cs.snee.compiler.queryplan.SensorNetworkQueryPlan;
import uk.ac.manchester.cs.snee.compiler.queryplan.TraversalOrder;
import uk.ac.manchester.cs.snee.manager.AutonomicManagerImpl;
+/*
import uk.ac.manchester.cs.snee.manager.common.Adaptation;
import uk.ac.manchester.cs.snee.manager.common.RunTimeSite;
import uk.ac.manchester.cs.snee.manager.common.StrategyIDEnum;
-import
uk.ac.manchester.cs.snee.manager.failednodestrategies.logicaloverlaynetwork.LogicalOverlayStrategy;
import uk.ac.manchester.cs.snee.manager.planner.Planner;
-import
uk.ac.manchester.cs.snee.manager.planner.costbenifitmodel.model.Model;
+*/
+import
uk.ac.manchester.cs.snee.manager.failednodestrategies.logicaloverlaynetwork.LogicalOverlayStrategy;
+//import
uk.ac.manchester.cs.snee.manager.planner.costbenifitmodel.model.Model;
import uk.ac.manchester.cs.snee.metadata.MetadataManager;
import uk.ac.manchester.cs.snee.metadata.schema.SchemaMetadataException;
import uk.ac.manchester.cs.snee.metadata.schema.TypeMappingException;
@@ -208,7 +210,7 @@
* @throws OptimizationException
* @throws IOException
* @throws SNEEConfigurationException
- */
+ *//*
private Double determineMinumalLifetime(LogicalOverlayNetwork
currentOverlay,
LogicalOverlayStrategy
failedNodeStrategyLocal)
throws IOException, OptimizationException, SchemaMetadataException,
@@ -230,7 +232,7 @@
Planner planner = new Planner(manager, _metadata, _metadataManager,
runningSites, outputFolder);
planner.assessOverlayCosts(outputFolder, overlayOTAProgramCost,
currentOverlay, failedNodeStrategyLocal);
return overlayOTAProgramCost.getLifetimeEstimate();
- }
+ }*/

/**
* checks the level of resilience in each cluster, returns false if any
one of them meets specified levels
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/Planner.java
Mon Jan 14 06:51:39 2013
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/Planner.java
Fri Feb 15 10:30:48 2013
@@ -32,7 +32,7 @@
//import
uk.ac.manchester.cs.snee.manager.planner.costbenifitmodel.RobustChoiceAssessor;
import
uk.ac.manchester.cs.snee.manager.planner.successorrelation.SuccessorRelationManager;
import
uk.ac.manchester.cs.snee.manager.planner.unreliablechannels.RobustSensorNetworkQueryPlan;
-import
uk.ac.manchester.cs.snee.manager.planner.unreliablechannels.UnreliableChannelAgendaUtils;
+//import
uk.ac.manchester.cs.snee.manager.planner.unreliablechannels.UnreliableChannelAgendaUtils;
import
uk.ac.manchester.cs.snee.manager.planner.unreliablechannels.UnreliableChannelManager;
import uk.ac.manchester.cs.snee.metadata.MetadataManager;
import uk.ac.manchester.cs.snee.metadata.schema.SchemaMetadataException;
@@ -451,7 +451,7 @@
}

public RobustSensorNetworkQueryPlan
startUnreliableChannelStrategy(SensorNetworkQueryPlan qep,
- Long
seed)
+ Long
seed, Double distanceConverter)
throws SchemaMetadataException, TypeMappingException,
OptimizationException,
IOException, SNEEConfigurationException, CodeGenerationException,
AgendaException, AgendaLengthException, SNEEException
@@ -473,10 +473,14 @@
// manager.getWsnTopology().getMaxNodeID(),
manager.getWsnTopology(),
// this._metadataManager.getCostParameters());

- manager.simulateRunOfRQEP(rQEP, qep, seed);
+ boolean runTupleSim =
SNEEProperties.getBoolSetting(SNEEPropertyNames.WSN_MANAGER_EXECUTOR_EDGE_TUPLES);
+ if(runTupleSim)
+ manager.simulateRunOfRQEP(rQEP, qep, seed, distanceConverter);
// assessor.assessOverlayChoice(storage, runningSites,
rQEP.getLogicalOverlayNetwork(),
// local, channelModel);
-
+ boolean runLifeSim =
SNEEProperties.getBoolSetting(SNEEPropertyNames.WSN_MANAGER_EXECUTOR_EDGE_LIFE);
+ if(runLifeSim)
+ manager.calculateLifetimeDifferenceFromDeployments(rQEP, qep, seed,
distanceConverter);
// System.out.println("new robust lifetime = " +
// (storage.getLifetimeEstimate() /
//
(rQEP.getUnreliableAgenda().getDeliveryTime_ms() / 1000)));
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/costbenifitmodel/model/channel/CPMModel.java
Mon Jan 28 04:05:12 2013
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/costbenifitmodel/model/channel/CPMModel.java
Fri Feb 15 10:30:48 2013
@@ -400,7 +400,15 @@
else
delta = new Long(startTime -
node.getLastTimeNoiseGenerated()).intValue();

- delta = delta / 1000;
+ //little bit of code to reduce processing time
+ // should be approx 1-2k
+ if(delta > 2000)
+ {
+ int temp = delta /1000;
+ int addedBit = delta % 1000;
+ delta = (delta / temp) + addedBit;
+ }
+
// if at the same time point, use same noise value
if(delta == 0)
noise = node.getLastNoiseVal();
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/costbenifitmodel/model/channel/ChannelModel.java
Mon Jan 14 06:51:39 2013
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/costbenifitmodel/model/channel/ChannelModel.java
Fri Feb 15 10:30:48 2013
@@ -5,16 +5,30 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
+import java.util.Set;

import uk.ac.manchester.cs.snee.common.SNEEConfigurationException;
import uk.ac.manchester.cs.snee.common.graph.Node;
import uk.ac.manchester.cs.snee.compiler.OptimizationException;
+import uk.ac.manchester.cs.snee.compiler.costmodels.HashMapList;
+import
uk.ac.manchester.cs.snee.compiler.costmodels.avroracosts.AlphaBetaExpression;
+import
uk.ac.manchester.cs.snee.compiler.costmodels.avroracosts.AvroraCostExpressions;
+import
uk.ac.manchester.cs.snee.compiler.costmodels.avroracosts.AvroraCostParameters;
import uk.ac.manchester.cs.snee.compiler.iot.AgendaIOT;
import uk.ac.manchester.cs.snee.compiler.iot.IOT;
+import uk.ac.manchester.cs.snee.compiler.iot.InstanceExchangePart;
+import uk.ac.manchester.cs.snee.compiler.iot.InstanceFragment;
+import uk.ac.manchester.cs.snee.compiler.iot.InstanceFragmentTask;
import uk.ac.manchester.cs.snee.compiler.iot.InstanceOperator;
import uk.ac.manchester.cs.snee.compiler.queryplan.CommunicationTask;
+import uk.ac.manchester.cs.snee.compiler.queryplan.Fragment;
+import uk.ac.manchester.cs.snee.compiler.queryplan.FragmentTask;
+import uk.ac.manchester.cs.snee.compiler.queryplan.RadioOnTask;
+import uk.ac.manchester.cs.snee.compiler.queryplan.SleepTask;
import uk.ac.manchester.cs.snee.compiler.queryplan.Task;
+import uk.ac.manchester.cs.snee.manager.common.RunTimeSite;
import
uk.ac.manchester.cs.snee.manager.planner.unreliablechannels.LogicalOverlayNetworkHierarchy;
import
uk.ac.manchester.cs.snee.manager.planner.unreliablechannels.UnreliableChannelAgenda;
import uk.ac.manchester.cs.snee.metadata.CostParameters;
@@ -22,6 +36,8 @@
import uk.ac.manchester.cs.snee.metadata.schema.TypeMappingException;
import uk.ac.manchester.cs.snee.metadata.source.sensornet.Site;
import uk.ac.manchester.cs.snee.metadata.source.sensornet.Topology;
+import
uk.ac.manchester.cs.snee.operators.sensornet.SensornetAcquireOperator;
+import
uk.ac.manchester.cs.snee.operators.sensornet.SensornetDeliverOperator;

public class ChannelModel implements Serializable
{
@@ -113,7 +129,7 @@
* @throws SNEEConfigurationException
* @throws NumberFormatException
*/
- public void runModel(ArrayList<String> failedNodes, IOT IOT)
+ public HashMapList<String, RunTimeSite> runModel(ArrayList<String>
failedNodes, IOT IOT)
throws OptimizationException, SchemaMetadataException,
TypeMappingException, NumberFormatException, SNEEConfigurationException
{
@@ -222,11 +238,168 @@
}
}
}
- ChannelModelUtils modelUtils = new ChannelModelUtils(channelModel,
logicaloverlayNetwork);
- modelUtils.plotPacketRates(iteration, executorFolder);
+ // ChannelModelUtils modelUtils = new ChannelModelUtils(channelModel,
logicaloverlayNetwork);
+ //modelUtils.plotPacketRates(iteration, executorFolder);
iteration++;
+ Set<Site> sites = IOT.getAllSites();
+ Iterator<Site> siteIterator = sites.iterator();
+ HashMapList<String, RunTimeSite> siteEnergyLevels = new
HashMapList<String, RunTimeSite>();
+ while(siteIterator.hasNext())
+ {
+ Site site = siteIterator.next();
+ double qepCost = this.calculateQepEnergyCost(site, IOT);
+ RunTimeSite rSite = new RunTimeSite(0.0, site.getID(), qepCost);
+ siteEnergyLevels.add(site.getID(), rSite);
+ }
+ return siteEnergyLevels;
}

+ /**
+ * method that allows to determine QEPCost of a site given the edge
failure model and
+ * therefore what tasks were acutally ran
+ * @param site
+ * @param iOT
+ * @param agendaIOT2
+ * @param agenda2
+ * @return
+ */
+ private double calculateQepEnergyCost(Site site, IOT iOT)
+ throws OptimizationException, SchemaMetadataException,
+ TypeMappingException, SNEEConfigurationException
+ {
+ double sumEnergy = 0;
+ long cpuActiveTimeBms = 0;
+ double sensorEnergy = 0;
+ ArrayList<Task> siteTasks = null;
+ if(this.agenda != null)
+ {
+ site = this.agenda.getSiteByID(site.getID());
+ siteTasks = this.agenda.getTasks().get(site);
+ }
+ else
+ {
+ site = this.agendaIOT.getSiteByID(site.getID());
+ siteTasks = this.agendaIOT.getTasks().get(site);
+ }
+
+ //not within the QEP. so no cost
+ if(siteTasks == null)
+ {
+ return 0;
+ }
+ for (int i=0; i<siteTasks.size(); i++)
+ {
+ Task t = siteTasks.get(i);
+ if (t instanceof SleepTask)
+ {
+ continue;
+ }
+
+ cpuActiveTimeBms += t.getDuration();
+ if (t instanceof FragmentTask) {
+ FragmentTask ft = (FragmentTask)t;
+ Fragment f = ft.getFragment();
+ if (f.containsOperatorType(SensornetAcquireOperator.class)) {
+ sensorEnergy += AvroraCostParameters.getSensorEnergyCost();
+ }
+ sumEnergy += sensorEnergy;
+ }
+ else if(t instanceof InstanceFragmentTask)
+ {
+ InstanceFragmentTask ft = (InstanceFragmentTask)t;
+ InstanceFragment f = ft.getFragment();
+ if (f.containsOperatorType(SensornetAcquireOperator.class)) {
+ sensorEnergy += AvroraCostParameters.getSensorEnergyCost();
+ }
+ sumEnergy += sensorEnergy;
+ }
+ else if (t instanceof CommunicationTask && t.isRan()) {
+ CommunicationTask ct = (CommunicationTask)t;
+ sumEnergy += getRadioEnergy(ct);
+
+ } else if (t instanceof RadioOnTask && t.isRan()) {
+ double taskDuration = AgendaIOT.bmsToMs(t.getDuration())/1000.0;
+ double radioRXAmp = AvroraCostParameters.getRadioReceiveAmpere();
+ double voltage = AvroraCostParameters.VOLTAGE;
+ double taskEnergy = taskDuration * radioRXAmp * voltage;
+ sumEnergy += taskEnergy;
+ }
+ }
+ sumEnergy += getCPUEnergy(cpuActiveTimeBms);
+ return sumEnergy;
+ }
+
+ private double getRadioEnergy(CommunicationTask ct)
+ throws OptimizationException, SchemaMetadataException,
+ TypeMappingException
+ {
+ double taskDuration = AgendaIOT.bmsToMs(ct.getDuration())/1000.0;
+ double voltage = AvroraCostParameters.VOLTAGE;
+
+ double radioRXAmp = AvroraCostParameters.getRadioReceiveAmpere();
+ if (ct.getMode()==CommunicationTask.RECEIVE) {
+
+ double taskEnergy = taskDuration*radioRXAmp*voltage;
+ return taskEnergy;
+ }
+ Site sender = ct.getSourceNode();
+ Site receiver = (Site)sender.getOutput(0);
+ int txPower = 0;
+ if(agenda != null)
+ txPower = (int)agenda.getIOT().getRT().getRadioLink(sender,
receiver).getEnergyCost();
+ else
+ txPower = (int)agendaIOT.getIOT().getRT().getRadioLink(sender,
receiver).getEnergyCost();
+ double radioTXAmp = AvroraCostParameters.getTXAmpere(txPower);
+
+ Integer noPackets = 0;
+ if(agenda != null)
+ noPackets =
+
this.channelModel.get(Integer.parseInt(ct.getSite().getID())).transmittablePackets(agenda.getIOT()).size();
+ else
+ noPackets =
+
this.channelModel.get(Integer.parseInt(ct.getSite().getID())).transmittablePackets(agendaIOT.getIOT()).size();
+
+ AlphaBetaExpression txTimeExpr =
+ AlphaBetaExpression.multiplyBy( new AlphaBetaExpression(noPackets),
+ AvroraCostParameters.PACKETTRANSMIT);
+ double txTime = 0;
+ if(agenda != null)
+ txTime = (txTimeExpr.evaluate(agenda.getAcquisitionInterval_bms(),
+ agenda.getBufferingFactor()))/1000.0;
+ else
+ txTime = (txTimeExpr.evaluate(agendaIOT.getAcquisitionInterval_bms(),
+ agendaIOT.getBufferingFactor()))/1000.0;
+ double rxTime = taskDuration-txTime;
+ assert(rxTime>=0);
+
+ double txEnergy = txTime*radioTXAmp*voltage;
+ double rxEnergy = rxTime*radioRXAmp*voltage;
+ return (txEnergy+rxEnergy);
+ }
+ /**
+ * calcualtes the cpu energy cost.
+ * @param cpuActiveTimeBms
+ * @return
+ */
+ private double getCPUEnergy(long cpuActiveTimeBms)
+ {
+ double agendaLength = 0;
+ if(agenda != null)
+ agendaLength =
AgendaIOT.bmsToMs(agenda.getLength_bms(false))/1000.0; //bms to ms to s
+ else
+ agendaLength =
AgendaIOT.bmsToMs(agendaIOT.getLength_bms(false))/1000.0; //bms to ms to s
+ double cpuActiveTime = AgendaIOT.bmsToMs(cpuActiveTimeBms)/1000.0;
//bms to ms to s
+ double cpuSleepTime = agendaLength - cpuActiveTime; // s
+ double voltage = AvroraCostParameters.VOLTAGE;
+ double activeCurrent = AvroraCostParameters.CPUACTIVEAMPERE;
+ double sleepCurrent = AvroraCostParameters.CPUPOWERSAVEAMPERE;
+ //double sleepCurrent = AvroraCostParameters.CPUIDLEAMPERE;
+
+ double cpuActiveEnergy = cpuActiveTime * activeCurrent * voltage; //J
+ double cpuSleepEnergy = cpuSleepTime * sleepCurrent * voltage; //J
+ //return cpuActiveEnergy;
+ return cpuActiveEnergy + cpuSleepEnergy;
+ }
/**
* checks if a the transmission task thats linked to this recieve task
(CTask) has ran
* @param cTask
@@ -492,8 +665,17 @@
throws SchemaMetadataException, TypeMappingException
{
Site iotSite =
logicaloverlayNetwork.getQep().getIOT().getSiteFromID(rootSite.getID());
- InstanceOperator rootOp =
logicaloverlayNetwork.getQep().getIOT().getRootOperatorOfSite(iotSite);
- return ChannelModelSite.packetToTupleConversion(packets, rootOp,
rootOp);
+ ArrayList<InstanceOperator> operators =
logicaloverlayNetwork.getQep().getIOT().getOpInstances(iotSite);
+ Iterator<InstanceOperator> opIterator = operators.iterator();
+ InstanceOperator rootOp = null;
+ while(opIterator.hasNext())
+ {
+ InstanceOperator opToCheck = opIterator.next();
+ if(opToCheck.getSensornetOperator() instanceof
SensornetDeliverOperator)
+ rootOp = opToCheck;
+ }
+ InstanceOperator preOp = (InstanceOperator) rootOp.getInput(0);
+ return ChannelModelSite.packetToTupleConversion(packets, rootOp,
preOp);
}

public void clearModel()
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/costbenifitmodel/model/channel/ChannelModelSite.java
Mon Dec 10 06:59:38 2012
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/costbenifitmodel/model/channel/ChannelModelSite.java
Fri Feb 15 10:30:48 2013
@@ -8,6 +8,7 @@
import java.util.List;
import java.util.Set;

+import uk.ac.manchester.cs.snee.common.graph.Node;
import uk.ac.manchester.cs.snee.compiler.OptimizationException;
import uk.ac.manchester.cs.snee.compiler.costmodels.CostModelDataStructure;
import uk.ac.manchester.cs.snee.compiler.costmodels.HashMapList;
@@ -28,6 +29,8 @@
import uk.ac.manchester.cs.snee.metadata.source.sensornet.Site;
import
uk.ac.manchester.cs.snee.operators.sensornet.SensornetAcquireOperator;
import
uk.ac.manchester.cs.snee.operators.sensornet.SensornetDeliverOperator;
+import
uk.ac.manchester.cs.snee.operators.sensornet.SensornetExchangeOperator;
+import
uk.ac.manchester.cs.snee.operators.sensornet.SensornetNestedLoopJoinOperator;

public class ChannelModelSite implements Serializable
{
@@ -350,7 +353,7 @@
!exOp.getNext().getSite().getID().equals(exOp.getSite().getID()))
{
int maxTransmittablePacketCount =
exOp.getmaxPackets(IOT.getDAF(), beta, costs);
- int transmittablePacketsCount =
tupleToPacketConversion(previousOpOutput, previousOp);
+ int transmittablePacketsCount =
tupleToPacketConversion(previousOpOutput, previousOp, exOp);
Integer cPacketCount =
currentPacketCount.get(exOp.getSite().getID());
if(cPacketCount == null)
{
@@ -407,8 +410,9 @@

currentUsedRecievedPacketCount.put(this.overlayNetwork.getClusterHeadFor(preExOp.getSite().getID()),
rPacketCount + maxTransmittablePacketCount);
currentPacketCount.remove(exOp.getSite().getID());

currentPacketCount.put(this.overlayNetwork.getClusterHeadFor(exOp.getSite().getID()),
cPacketCount + maxTransmittablePacketCount);
- exOp.setTupleValueForExtent(
-
ChannelModelSite.packetToTupleConversion(transmittablePacketsCount, exOp,
preExOp));
+ int noOfTuples =
ChannelModelSite.packetToTupleConversion(transmittablePacketsCount, exOp,
preExOp);
+ exOp.setTupleValueForExtent(noOfTuples);
+ this.tupleToPacketConversion(noOfTuples,preExOp, exOp);
}
if(exOp.getComponentType().equals(ExchangePartType.CONSUMER) &&
previousOp == null )
@@ -430,6 +434,9 @@

maxTransmittablePacketCount,

exOp.getPrevious().getSite().getID());
int tuplesRecieved =
ChannelModelSite.packetToTupleConversion(transmittablePacketsCount, exOp,
exOp.getPrevious());
+ this.tupleToPacketConversion(tuplesRecieved,
exOp.getPrevious(), exOp);
+ if(exOp.getExtent() == null)
+ exOp.setExtent(exOp.getPrevious().getExtent());
tuples.remove(exOp.getExtent());
tuples.put(exOp.getExtent(), tuplesRecieved +
packetsOfSameExtent);
currentUsedRecievedPacketCount.remove(preExOp.getSite().getID());
@@ -464,26 +471,60 @@
ArrayList<Integer> opTuples = new ArrayList<Integer>();
if(previousOp == null)
{
- HashMap<String, Integer> extentTuples =
packetToTupleConversion(tuples, op, op.getInstanceInput(0));
- Iterator<String> packetIterator =
extentTuples.keySet().iterator();
+ Iterator<String> packetIterator = tuples.keySet().iterator();
while(packetIterator.hasNext())
{
String key = packetIterator.next();
- opTuples.add(extentTuples.get(key));
+ opTuples.add(tuples.get(key));
}
}
else
{
opTuples.add(previousOpOutput);
}
- CostModelDataStructure outputs = cardModel.model(op, opTuples);
+ CostModelDataStructure outputs = cardModel.model(op, opTuples,
tuples, beta);
CardinalityDataStructure outputCard = (CardinalityDataStructure)
outputs;
previousOpOutput = (int) outputCard.getCard();
previousOp = op;
+ InstanceOperator preOp = (InstanceOperator) op.getInput(0);
+ if(preOp.getSensornetOperator() instanceof
SensornetExchangeOperator)
+ {
+ InstanceExchangePart exOp = (InstanceExchangePart) preOp;
+ preivousOutputExtent = exOp.getExtent();
+ }
+
+ if(op.getSensornetOperator() instanceof
SensornetNestedLoopJoinOperator)
+ {
+ String extent = "";
+ ArrayList<String> doneExtents = new ArrayList<String>();
+ Iterator<Node> inputIterator = op.getInputsList().iterator();
+ while(inputIterator.hasNext())
+ {
+ InstanceOperator cOp = (InstanceOperator)
inputIterator.next();
+ String currentExtent = null;
+ if(cOp instanceof InstanceExchangePart)
+ {
+ InstanceExchangePart cOpex = (InstanceExchangePart) cOp;
+ currentExtent = cOpex.getExtent();
+ }
+ else
+ currentExtent = cOp.getExtent();
+ if(!doneExtents.contains(currentExtent))
+ {
+ extent = extent.concat(currentExtent);
+ doneExtents.add(currentExtent);
+ tuples.remove(currentExtent);
+ }
+ }
+ op.setExtent(extent);
+ }
+ else
+ op.setExtent(preOp.getExtent());
+ tuples.remove(preivousOutputExtent);
tuples.put(preivousOutputExtent, previousOpOutput);
- preivousOutputExtent = tuples.toString();
- }
+ this.tupleToPacketConversion(previousOpOutput, preOp, op);
//if delviery oeprator calc pacvkets transmitted for system to
determine tuples.
+ }
if(op.getSensornetOperator() instanceof SensornetDeliverOperator)
{
ArrayList<Integer> opTuples = new ArrayList<Integer>();
@@ -491,12 +532,12 @@
while(packetIterator.hasNext())
{
String key = packetIterator.next();
- opTuples.add(tuples.get(key));
+ opTuples.add(tuples.get(key));
}
- CostModelDataStructure outputs = cardModel.model(op, opTuples);
+ CostModelDataStructure outputs = cardModel.model(op, opTuples,
tuples, beta);
CardinalityDataStructure outputCard = (CardinalityDataStructure)
outputs;
previousOpOutput = (int) outputCard.getCard();
- previousOpOutput =
this.tupleToPacketConversion(previousOpOutput, op);
+ previousOpOutput =
this.tupleToPacketConversion(previousOpOutput, op, op);
packetIds.clear();
for(int index = 0; index < previousOpOutput; index++)
packetIds.add(0);
@@ -552,11 +593,12 @@
* converts a number of tuples into packets
* @param noTuples
* @param op
+ * @param exOp2
* @return
* @throws SchemaMetadataException
* @throws TypeMappingException
*/
- private int tupleToPacketConversion(int noTuples, InstanceOperator op)
+ private int tupleToPacketConversion(int noTuples, InstanceOperator op,
InstanceOperator mainOp)
throws SchemaMetadataException, TypeMappingException
{
if(ChannelModelSite.reliableChannelQEP)
@@ -575,9 +617,15 @@
int pacekts = noTuples / numTuplesPerMessage;

if(noTuples % numTuplesPerMessage == 0)
+ {
op.setLastPacketTupleCount(numTuplesPerMessage);
+ mainOp.setLastPacketTupleCount(numTuplesPerMessage);
+ }
else
+ {
op.setLastPacketTupleCount(noTuples % numTuplesPerMessage);
+ mainOp.setLastPacketTupleCount(noTuples % numTuplesPerMessage);
+ }
return pacekts;
}
else
@@ -597,9 +645,15 @@
Double packetsD = Math.ceil(frac);
int pacekts = packetsD.intValue();
if(noTuples % numTuplesPerMessage == 0)
+ {
op.setLastPacketTupleCount(numTuplesPerMessage);
+ mainOp.setLastPacketTupleCount(numTuplesPerMessage);
+ }
else
+ {
op.setLastPacketTupleCount(noTuples % numTuplesPerMessage);
+ mainOp.setLastPacketTupleCount(noTuples % numTuplesPerMessage);
+ }
return pacekts;
}
}
@@ -698,10 +752,25 @@
int payloadOverhead = costs.getPayloadOverhead() + 8;
int numTuplesPerMessage =
(int) Math.floor(maxMessagePayloadSize - payloadOverhead) /
(tupleSize);
- int tuplesForExchange = (noPackets -1) * numTuplesPerMessage;
- int lastPacketTupleCount = preOp.getLastPacketTupleCount();
- tuplesForExchange += lastPacketTupleCount;
- return tuplesForExchange;
+ if(noPackets == 0)
+ {
+ return 0;
+ }
+ else
+ {
+ if(preOp.getLastPacketTupleCount() == 0)
+ {
+ int tuplesForExchange = (noPackets) * numTuplesPerMessage;
+ return tuplesForExchange;
+ }
+ else
+ {
+ int tuplesForExchange = (noPackets -1) * numTuplesPerMessage;
+ int lastPacketTupleCount = preOp.getLastPacketTupleCount();
+ tuplesForExchange += lastPacketTupleCount;
+ return tuplesForExchange;
+ }
+ }
}
else
{
@@ -716,12 +785,36 @@
tupleSize = op.getSensornetOperator().getPhysicalTupleSize();
int maxMessagePayloadSize = costs.getMaxMessagePayloadSize();
int payloadOverhead = costs.getPayloadOverhead();
+ System.out.println(tupleSize);
+ System.out.println(maxMessagePayloadSize);
+ System.out.println(payloadOverhead);
+ System.out.println(op.toString());
+ System.out.println(preOp.toString());
int numTuplesPerMessage =
(int) Math.floor(maxMessagePayloadSize - payloadOverhead) /
(tupleSize);
- int tuplesForExchange = (noPackets) * numTuplesPerMessage;
- int lastPacketTupleCount = preOp.getLastPacketTupleCount();
- tuplesForExchange -= lastPacketTupleCount;
- return tuplesForExchange;
+ if(noPackets == 0)
+ {
+ return 0;
+ }
+ else
+ {
+ Integer lastPacketTupleCount = null;
+ if(preOp == null || preOp.getLastPacketTupleCount() == null)
+ lastPacketTupleCount = op.getLastPacketTupleCount();
+ else
+ lastPacketTupleCount = preOp.getLastPacketTupleCount();
+ if(lastPacketTupleCount == 0)
+ {
+ int tuplesForExchange = (noPackets) * numTuplesPerMessage;
+ return tuplesForExchange;
+ }
+ else
+ {
+ int tuplesForExchange = (noPackets -1) * numTuplesPerMessage;
+ tuplesForExchange += lastPacketTupleCount;
+ return tuplesForExchange;
+ }
+ }
}
}

@@ -901,6 +994,8 @@
ArrayList<Integer> packetIDs = new ArrayList<Integer>();
String key = this.overlayNetwork.getClusterHeadFor(siteID);
ArrayList<Boolean> packets = arrivedPackets.get(key);
+ if(packets == null)
+ System.out.println();
Iterator<Boolean> packetIterator = packets.iterator();
int counter = 0;
while(packetIterator.hasNext())
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/successorrelation/SuccessorRelationManager.java
Wed Dec 5 07:03:43 2012
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/successorrelation/SuccessorRelationManager.java
Fri Feb 15 10:30:48 2013
@@ -2,16 +2,51 @@


import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Random;
+import java.util.logging.Logger;

+import com.rits.cloning.Cloner;
+
+import uk.ac.manchester.cs.snee.MetadataException;
+import uk.ac.manchester.cs.snee.SNEECompilerException;
+import uk.ac.manchester.cs.snee.SNEEDataSourceException;
+import uk.ac.manchester.cs.snee.SNEEException;
+import uk.ac.manchester.cs.snee.common.SNEEConfigurationException;
+import uk.ac.manchester.cs.snee.common.graph.Node;
+import uk.ac.manchester.cs.snee.compiler.AgendaException;
+import uk.ac.manchester.cs.snee.compiler.OptimizationException;
+import uk.ac.manchester.cs.snee.compiler.WhenSchedulerException;
+import uk.ac.manchester.cs.snee.compiler.iot.InstanceOperator;
+import uk.ac.manchester.cs.snee.compiler.queryplan.Agenda;
import uk.ac.manchester.cs.snee.compiler.queryplan.SensorNetworkQueryPlan;
import uk.ac.manchester.cs.snee.manager.AutonomicManagerImpl;
+import uk.ac.manchester.cs.snee.manager.common.Adaptation;
import uk.ac.manchester.cs.snee.manager.common.AutonomicManagerComponent;
import uk.ac.manchester.cs.snee.manager.common.RunTimeSite;
+import
uk.ac.manchester.cs.snee.manager.failednodestrategies.completerecompilationstrategy.CompleteReCompilationStrategy;
+import
uk.ac.manchester.cs.snee.manager.planner.costbenifitmodel.model.energy.SiteEnergyModel;
+import
uk.ac.manchester.cs.snee.manager.planner.successorrelation.successor.Successor;
import
uk.ac.manchester.cs.snee.manager.planner.successorrelation.successor.SuccessorPath;
import
uk.ac.manchester.cs.snee.manager.planner.successorrelation.tabu.TabuSearch;
+import uk.ac.manchester.cs.snee.metadata.CostParametersException;
import uk.ac.manchester.cs.snee.metadata.MetadataManager;
+import uk.ac.manchester.cs.snee.metadata.schema.SchemaMetadataException;
+import uk.ac.manchester.cs.snee.metadata.schema.TypeMappingException;
+import
uk.ac.manchester.cs.snee.metadata.schema.UnsupportedAttributeTypeException;
import uk.ac.manchester.cs.snee.metadata.source.SourceMetadataAbstract;
+import uk.ac.manchester.cs.snee.metadata.source.SourceMetadataException;
+import uk.ac.manchester.cs.snee.metadata.source.sensornet.Site;
+import uk.ac.manchester.cs.snee.metadata.source.sensornet.Topology;
+import
uk.ac.manchester.cs.snee.metadata.source.sensornet.TopologyReaderException;
+import
uk.ac.manchester.cs.snee.operators.sensornet.SensornetAcquireOperator;
+import uk.ac.manchester.cs.snee.sncb.CodeGenerationException;
+import uk.ac.manchester.cs.snee.sncb.SNCBException;

public class SuccessorRelationManager extends AutonomicManagerComponent
{
@@ -19,12 +54,17 @@
private File successorFolder = null;
private HashMap<String, RunTimeSite> runningSites;
private MetadataManager _metadataManager;
-
+ private Topology deployment;
+ private FailedNodeData failedNode = null;
+ private CompleteReCompilationStrategy globalAdaptationStrategy = null;
+ private Cloner cloner = new Cloner();
public SuccessorRelationManager(File plannerFolder, HashMap<String,
RunTimeSite> runningSites,
MetadataManager _metadataManager,
SourceMetadataAbstract _metadata, AutonomicManagerImpl manager)
{
this.manager = manager;
+ cloner.dontClone(Logger.class);
this._metadata = _metadata;
+ deployment = this.manager.getWsnTopology();
successorFolder = new File(plannerFolder.toString() + sep
+ "successorRelation");
if(successorFolder.exists())
{
@@ -60,6 +100,8 @@
SuccessorPath bestSuccessorRelation =
search.findSuccessorsPath(initialPoint);
new SuccessorRelationManagerUtils(this.manager,
successorFolder).writeSuccessorToFile(bestSuccessorRelation.getSuccessorList(), "finalSolution");

+ testAdaptiveLifetime(bestSuccessorRelation);
+
// writeSuccessorPathToFile(bestSuccessorRelation);
// SuccessorPath bestSuccessorRelation = readInSuccessor();
//new PlannerUtils(successorFolder,
this.manager).writeSuccessorToFile(bestSuccessorRelation.getSuccessorList(), "finalSolution");
@@ -81,6 +123,497 @@
return null;
}
}
+
+ /**
+ * method that evaluates the successor relation given a collection of
random node failures during its expected lifetime.
+ *Compares both global and successor relation. (needs to only work on
confulance nodes)
+ * @param bestSuccessorRelation
+ * @throws SNEEConfigurationException
+ * @throws TypeMappingException
+ * @throws SchemaMetadataException
+ * @throws OptimizationException
+ * @throws SNEECompilerException
+ * @throws SNCBException
+ * @throws CostParametersException
+ * @throws SNEEDataSourceException
+ * @throws MetadataException
+ * @throws TopologyReaderException
+ * @throws SNEEException
+ * @throws AgendaException
+ * @throws SourceMetadataException
+ * @throws UnsupportedAttributeTypeException
+ * @throws NumberFormatException
+ * @throws WhenSchedulerException
+ * @throws CodeGenerationException
+ * @throws IOException
+ */
+ private void testAdaptiveLifetime(SuccessorPath bestSuccessorRelation)
+ throws OptimizationException, SchemaMetadataException,
+ TypeMappingException, SNEEConfigurationException, NumberFormatException,
+ UnsupportedAttributeTypeException, SourceMetadataException,
+ AgendaException, SNEEException, TopologyReaderException,
MetadataException,
+ SNEEDataSourceException, CostParametersException, SNCBException,
SNEECompilerException,
+ IOException, CodeGenerationException, WhenSchedulerException
+ {
+ this.globalAdaptationStrategy =
+ new CompleteReCompilationStrategy(this.manager, this._metadata,
this._metadataManager);
+ int overallSuccessorPathLifetime =
bestSuccessorRelation.overallSuccessorPathLifetime();
+ int noNodefails = 1;
+ boolean globalFailed = false;
+ boolean successorFailed = false;
+ while(noNodefails <= 8 && !globalFailed)
+ {
+ //collects the global QEP;
+ SensorNetworkQueryPlan golbalQEP =
bestSuccessorRelation.getSuccessorList().get(0).getQep();
+ golbalQEP = cloner.deepClone(golbalQEP);
+ //determines the time period for the unpredictable node failure
+ double timeOfNodeFailure = overallSuccessorPathLifetime /
(noNodefails + 1);
+ ArrayList<String> globalFailedNodes = new ArrayList<String>();
+ HashMap<String, RunTimeSite> GlobalRunningSites =
manager.getCopyOfRunningSites();
+ //do globals node failure lifetime
+ boolean successful = doGlobalAdaptations(timeOfNodeFailure,
globalFailedNodes, GlobalRunningSites,
+ golbalQEP, noNodefails);
+ globalFailed = successful;
+ }
+ noNodefails = 1;
+ while(noNodefails <= 8 && !successorFailed)
+ {
+ SuccessorPath successorRelation =
cloner.deepClone(bestSuccessorRelation);
+ //determines the time period for the unpredictable node failure
+ double timeOfNodeFailure = overallSuccessorPathLifetime /
(noNodefails + 1);
+ ArrayList<String> globalFailedNodes = new ArrayList<String>();
+ HashMap<String, RunTimeSite> SuccessorRunningSites =
manager.getCopyOfRunningSites();
+ //do successor node failure lifetime
+ boolean successful = doSucessorAdaptations(timeOfNodeFailure,
globalFailedNodes, SuccessorRunningSites,
+ successorRelation,
noNodefails);
+ successorFailed = successful;
+ }
+
+ }
+
+
+
+ /**
+ * executes the successor relation for unpredictable node failure.
+ * @param timeOfNodeFailure
+ * @param globalFailedNodes
+ * @param successorRunningSites
+ * @param bestSuccessorRelation
+ * @param noNodefails
+ * @param currentAgendaCycle
+ * @return
+ * @throws OptimizationException
+ * @throws SchemaMetadataException
+ * @throws TypeMappingException
+ * @throws SNEEConfigurationException
+ * @throws NumberFormatException
+ * @throws UnsupportedAttributeTypeException
+ * @throws SourceMetadataException
+ * @throws AgendaException
+ * @throws SNEEException
+ * @throws TopologyReaderException
+ * @throws MetadataException
+ * @throws SNEEDataSourceException
+ * @throws CostParametersException
+ * @throws SNCBException
+ * @throws SNEECompilerException
+ * @throws IOException
+ * @throws CodeGenerationException
+ * @throws WhenSchedulerException
+ */
+ private boolean doSucessorAdaptations(double timeOfNodeFailure,
ArrayList<String> globalFailedNodes,
+ HashMap<String, RunTimeSite>
successorRunningSites,
+ SuccessorPath bestSuccessorRelation,
int noNodefails)
+ throws OptimizationException, SchemaMetadataException,
TypeMappingException,
+ SNEEConfigurationException, NumberFormatException,
UnsupportedAttributeTypeException,
+ SourceMetadataException, AgendaException,
+ SNEEException, TopologyReaderException, MetadataException,
SNEEDataSourceException,
+ CostParametersException, SNCBException, SNEECompilerException,
+ IOException, CodeGenerationException, WhenSchedulerException
+ {
+ int currentNodeFailure = 1;
+ int currentAgendaCycle = 0;
+ Topology currentRunDeployment = cloner.deepClone(this.deployment);
+ boolean failed = false;
+ while(currentNodeFailure <= noNodefails && !failed)
+ {
+ timeOfNodeFailure = (timeOfNodeFailure * currentNodeFailure) -
currentAgendaCycle;
+
+ SuccessorLifetimeEnum result =
updateSitesEnergyLevelsForSuccessor(timeOfNodeFailure,
+
globalFailedNodes,
+
bestSuccessorRelation,
+
currentAgendaCycle,
+
successorRunningSites);
+ if(result.equals(SuccessorLifetimeEnum.CLEARED))
+ {
+ ArrayList<Successor> activeSuccessors =
+ findCorrectSuccessorsForTimePeriod(bestSuccessorRelation,
timeOfNodeFailure, currentAgendaCycle);
+ String failedNode =
locateFailedNode(activeSuccessors.get(activeSuccessors.size() -1).getQep());
+ ArrayList<String> failedNodes = new ArrayList<String>();
+ failedNodes.add(failedNode);
+ List<Adaptation> adaptations =
+ this.globalAdaptationStrategy.adapt(failedNodes,
currentRunDeployment,
+
activeSuccessors.get(activeSuccessors.size() -1).getQep());
+ if(adaptations.size() == 0)
+ failed = true;
+ else
+ {
+ SensorNetworkQueryPlan seed = adaptations.get(0).getNewQep();
+ TabuSearch search= new TabuSearch(manager, runningSites,
_metadata, _metadataManager, successorFolder);
+ bestSuccessorRelation = search.findSuccessorsPath(seed);
+ }
+ currentNodeFailure++;
+ currentAgendaCycle += timeOfNodeFailure;
+ }
+ if(result.equals(SuccessorLifetimeEnum.NODEFAILEDBYENERGY))
+ {
+ String failedNode = this.failedNode.getNode().getID();
+ ArrayList<String> failedNodes = new ArrayList<String>();
+ failedNodes.add(failedNode);
+ List<Adaptation> adaptations =
+ this.globalAdaptationStrategy.adapt(failedNodes,
currentRunDeployment,
+
locateCorrectSuccessor(bestSuccessorRelation).getQep());
+ if(adaptations.size() == 0)
+ failed = true;
+ else
+ {
+ SensorNetworkQueryPlan seed = adaptations.get(0).getNewQep();
+ TabuSearch search= new TabuSearch(manager, runningSites,
_metadata, _metadataManager, successorFolder);
+ bestSuccessorRelation = search.findSuccessorsPath(seed);
+ }
+ currentAgendaCycle += this.failedNode.getLifetime();
+ }
+ }
+ return failed;
+ }
+
+ /**
+ * give a time period for a node fialure, lcoates which successor it
would be in
+ * @param bestSuccessorRelation
+ * @param lifetime
+ * @return
+ */
+ private Successor locateCorrectSuccessor(SuccessorPath
bestSuccessorRelation)
+ {
+ Iterator<Successor> successorIterator =
bestSuccessorRelation.getSuccessorList().iterator();
+ while(successorIterator.hasNext())
+ {
+ Successor curent = successorIterator.next();
+ if(curent.toString().equals(this.failedNode.getSuccessorID()))
+ return curent;
+ }
+ return null;
+ }
+
+ /**
+ * executes the globla adaptations
+ * @param timeOfNodeFailure
+ * @param globalFailedNodes
+ * @param globalRunningSites
+ * @param golbalQEP
+ * @param noNodefails
+ * @return
+ * @throws OptimizationException
+ * @throws SchemaMetadataException
+ * @throws TypeMappingException
+ * @throws SNEEConfigurationException
+ * @throws NumberFormatException
+ * @throws MalformedURLException
+ * @throws UnsupportedAttributeTypeException
+ * @throws SourceMetadataException
+ * @throws AgendaException
+ * @throws SNEEException
+ * @throws TopologyReaderException
+ * @throws MetadataException
+ * @throws SNEEDataSourceException
+ * @throws CostParametersException
+ * @throws SNCBException
+ * @throws SNEECompilerException
+ */
+ private boolean doGlobalAdaptations(double timeOfNodeFailure,
ArrayList<String> globalFailedNodes,
+ HashMap<String, RunTimeSite>
globalRunningSites,
+ SensorNetworkQueryPlan golbalQEP, int
noNodefails)
+ throws OptimizationException, SchemaMetadataException,
+ TypeMappingException, SNEEConfigurationException,
+ NumberFormatException, MalformedURLException,
+ UnsupportedAttributeTypeException, SourceMetadataException,
+ AgendaException, SNEEException, TopologyReaderException,
+ MetadataException, SNEEDataSourceException,
CostParametersException,
+ SNCBException, SNEECompilerException
+ {
+ int currentNodeFailure = 1;
+ Topology currentRunDeployment = cloner.deepClone(this.deployment);
+ boolean failed = false;
+ int currentAgendaCycle = 0;
+
+ while(currentNodeFailure <= noNodefails && !failed)
+ {
+ timeOfNodeFailure = (timeOfNodeFailure * currentNodeFailure) -
currentAgendaCycle;
+ SuccessorLifetimeEnum result =
updateSitesEnergyLevelsForGlobal(timeOfNodeFailure,
+
globalFailedNodes,
+
globalRunningSites, golbalQEP);
+ if(result.equals(SuccessorLifetimeEnum.CLEARED))
+ {
+ String failedNode = locateFailedNode(golbalQEP);
+ ArrayList<String> failedNodes = new ArrayList<String>();
+ failedNodes.add(failedNode);
+ List<Adaptation> adaptations =
this.globalAdaptationStrategy.adapt(failedNodes, currentRunDeployment,
golbalQEP);
+ if(adaptations.size() == 0)
+ failed = true;
+ else
+ golbalQEP = adaptations.get(0).getNewQep();
+ currentNodeFailure++;
+ currentAgendaCycle += timeOfNodeFailure;
+ }
+ if(result.equals(SuccessorLifetimeEnum.NODEFAILEDBYENERGY))
+ {
+ String failedNode = this.failedNode.getNode().getID();
+ ArrayList<String> failedNodes = new ArrayList<String>();
+ failedNodes.add(failedNode);
+ List<Adaptation> adaptations =
this.globalAdaptationStrategy.adapt(failedNodes, currentRunDeployment,
golbalQEP);
+ if(adaptations.size() == 0)
+ failed = true;
+ else
+ golbalQEP = adaptations.get(0).getNewQep();
+ currentAgendaCycle += this.failedNode.getLifetime();
+ }
+ }
+ return failed;
+ }
+
+ /**
+ * takes a QEP and randomly selects a non-acquire node for failure
+ * @param QEP
+ * @return
+ */
+ private String locateFailedNode(SensorNetworkQueryPlan QEP)
+ {
+ Random random = new Random(0);
+ ArrayList<String> collection = new ArrayList<String>();
+ Iterator<Integer> rtIterator = QEP.getRT().getSiteIDs().iterator();
+ while(rtIterator.hasNext())
+ {
+ Integer siteID = rtIterator.next();
+ ArrayList<InstanceOperator> opsOnSite =
+
QEP.getIOT().getOpInstances(QEP.getIOT().getSiteFromID(siteID.toString()));
+ Iterator<InstanceOperator> operatorIterator = opsOnSite.iterator();
+ boolean acquire = false;
+ while(operatorIterator.hasNext())
+ {
+ InstanceOperator operator = operatorIterator.next();
+ if(operator.getSensornetOperator() instanceof
SensornetAcquireOperator)
+ acquire = true;
+ }
+ if(!acquire)
+ collection.add(siteID.toString());
+ }
+ return collection.get(random.nextInt(collection.size() -1));
+ }
+
+ /**
+ * updates running sites for the period of QEP running for the global
version
+ * @param shortestLifetime
+ * @param globalFailedNodes
+ * @param currentAgendaCycle
+ * @throws SNEEConfigurationException
+ * @throws TypeMappingException
+ * @throws SchemaMetadataException
+ * @throws OptimizationException
+ */
+ protected SuccessorLifetimeEnum updateSitesEnergyLevelsForGlobal(Double
shortestLifetime,
+ ArrayList<String>
globalFailedNodes,
+ HashMap<String,
RunTimeSite> GlobalRunningSites,
+ SensorNetworkQueryPlan
golbalQEP)
+ throws OptimizationException, SchemaMetadataException,
TypeMappingException,
+ SNEEConfigurationException
+ {
+ FailedNodeData firstNodeToFail =
+ firstNodeToFailFromEnergyDepletion(golbalQEP, GlobalRunningSites);
+ if(firstNodeToFail.getLifetime() <= shortestLifetime)
+ {
+ this.failedNode = firstNodeToFail;
+ updateRunningSites(golbalQEP, GlobalRunningSites);
+ updateSitesEnergyLevels(firstNodeToFail.getLifetime(),
globalFailedNodes, GlobalRunningSites);
+ return SuccessorLifetimeEnum.NODEFAILEDBYENERGY;
+ }
+ else
+ {
+ updateRunningSites(golbalQEP, GlobalRunningSites);
+ updateSitesEnergyLevels(shortestLifetime, globalFailedNodes,
GlobalRunningSites);
+ }
+ return SuccessorLifetimeEnum.CLEARED;
+ }
+
+ /**
+ * updates running sites for the period of QEP running for the succesosr
version
+ * @param shortestLifetime
+ * @param globalFailedNodes
+ * @throws SNEEConfigurationException
+ * @throws TypeMappingException
+ * @throws SchemaMetadataException
+ * @throws OptimizationException
+ */
+ protected SuccessorLifetimeEnum
updateSitesEnergyLevelsForSuccessor(Double shortestLifetime,
+ ArrayList<String>
globalFailedNodes,
+ SuccessorPath
bestSuccessorRelation,
+ int
currentAgendaCycleCount,
+ HashMap<String,
RunTimeSite> SuccessorRunningSites)
+ throws OptimizationException, SchemaMetadataException,
TypeMappingException,
+ SNEEConfigurationException
+ {
+ ArrayList<Successor> successorList=
+ findCorrectSuccessorsForTimePeriod(bestSuccessorRelation,
shortestLifetime, currentAgendaCycleCount);
+ if(successorList.size() == 1)
+ {
+ updateRunningSites(successorList.get(0).getQep(),
SuccessorRunningSites);
+ FailedNodeData firstNodeToFail =
+ firstNodeToFailFromEnergyDepletion(successorList.get(0).getQep(),
SuccessorRunningSites);
+ if(firstNodeToFail.getLifetime() <= shortestLifetime)
+ {
+ this.failedNode = firstNodeToFail;
+ updateSitesEnergyLevels(firstNodeToFail.getLifetime(),
globalFailedNodes, SuccessorRunningSites);
+ return SuccessorLifetimeEnum.NODEFAILEDBYENERGY;
+ }
+ else
+ {
+ updateSitesEnergyLevels(firstNodeToFail.getLifetime(),
globalFailedNodes, SuccessorRunningSites);
+ }
+ }
+ else
+ {
+ Iterator<Successor> successors = successorList.iterator();
+ while(successors.hasNext())
+ {
+ Successor currentSuccessor = successors.next();
+ updateRunningSites(currentSuccessor.getQep(),
SuccessorRunningSites);
+ Integer timeInThisSuccessor = currentSuccessor.getAgendaCount();
+ Double timeActaullyRunningInSuccessor = (double)
(timeInThisSuccessor -
+ (currentAgendaCycleCount +
currentSuccessor.getPreviousAgendaCount()));
+ FailedNodeData firstNodeToFail =
+ firstNodeToFailFromEnergyDepletion(currentSuccessor.getQep(),
SuccessorRunningSites);
+ firstNodeToFail.setSuccessorID(currentSuccessor.toString());
+ if(firstNodeToFail.getLifetime() <= timeActaullyRunningInSuccessor)
+ {
+ updateSitesEnergyLevels(firstNodeToFail.getLifetime(),
globalFailedNodes,
+ SuccessorRunningSites);
+ this.failedNode = firstNodeToFail;
+ return SuccessorLifetimeEnum.NODEFAILEDBYENERGY;
+ }
+ else
+ {
+ updateSitesEnergyLevels(timeActaullyRunningInSuccessor,
globalFailedNodes,
+ SuccessorRunningSites);
+ }
+ }
+ }
+ return SuccessorLifetimeEnum.CLEARED;
+ }
+
+ /**
+ * removes a set of energy frome ach ndoe in the runningSites.
+ * @param lifetime
+ * @param globalFailedNodes
+ * @param RunningSites
+ */
+ private void updateSitesEnergyLevels(Double lifetime,
+ ArrayList<String> globalFailedNodes,
+ HashMap<String, RunTimeSite>
runningSites)
+ {
+ Iterator<Node> siteIter = this.deployment.siteIterator();
+ lifetime = Math.floor(lifetime);
+ while (siteIter.hasNext())
+ {
+ Node site = siteIter.next();
+ if(!globalFailedNodes.contains(site.getID()))
+ {
+ RunTimeSite rSite = runningSites.get(site.getID());
+ rSite.removeDefinedCost(rSite.getQepExecutionCost() * lifetime);
+ }
+ }
+ }
+
+ /**
+ * determines which node is to fail first, and when
+ * @param successorRunningSites
+ * @return
+ */
+ private FailedNodeData
firstNodeToFailFromEnergyDepletion(SensorNetworkQueryPlan QEP,
+ HashMap<String, RunTimeSite>
successorRunningSites)
+ {
+ double shortestLifetime = Double.MAX_VALUE; //s
+ Iterator<Node> siteIter = this.deployment.getNodes().iterator();
+ FailedNodeData data = null;
+ while (siteIter.hasNext())
+ {
+ Site site = (Site) siteIter.next();
+ RunTimeSite rSite = runningSites.get(site.getID());
+ double currentEnergySupply = rSite.getCurrentEnergy();
+ double siteEnergyCons =
runningSites.get(site.getID()).getQepExecutionCost();
+ double agendaLength =
Agenda.bmsToMs(QEP.getAgendaIOT().getLength_bms(false))/new Double(1000);
// ms to s
+ double siteLifetime = (currentEnergySupply / siteEnergyCons) *
agendaLength;
+ //uncomment out sections to not take the root site into account
+ if (site!=QEP.getIOT().getRT().getRoot())
+ {
+ if(shortestLifetime > siteLifetime)
+ {
+ if(!site.isDeadInSimulation())
+ {
+ shortestLifetime = siteLifetime;
+ data = new FailedNodeData(site, shortestLifetime);
+ }
+ }
+ }
+ }
+ return data;
+ }
+
+ /**
+ * updates the running sites with the energy cost of running the qep's
code.
+ * @param qep
+ * @throws SNEEConfigurationException
+ * @throws TypeMappingException
+ * @throws SchemaMetadataException
+ * @throws OptimizationException
+ */
+ private void updateRunningSites(SensorNetworkQueryPlan qep,
+ HashMap<String, RunTimeSite>
runningSites)
+ throws OptimizationException, SchemaMetadataException,
TypeMappingException,
+ SNEEConfigurationException
+ {
+ SiteEnergyModel siteModel = new SiteEnergyModel(qep.getAgendaIOT());
+ Iterator<Node> siteIter = this.deployment.siteIterator();
+ while (siteIter.hasNext())
+ {
+ Site site = (Site) siteIter.next();
+ double siteEnergyCons = siteModel.getSiteEnergyConsumption(site); //
J
+ runningSites.get(site.getID()).setQepExecutionCost(siteEnergyCons);
+ }
+ }
+
+
+
+ /**
+ * locates the successors that should be considered in the energy
depletion calculation
+ * @param bestSuccessorRelation
+ * @param shortestLifetime
+ * @param currentAgendaCycleCount
+ */
+ private ArrayList<Successor>
findCorrectSuccessorsForTimePeriod(SuccessorPath bestSuccessorRelation,
+ Double shortestLifetime,
+ int
currentAgendaCycleCount)
+ {
+ ArrayList<Successor> scopedSuccessors = new ArrayList<Successor>();
+ Iterator<Successor> successors =
bestSuccessorRelation.getSuccessorList().iterator();
+ while(successors.hasNext())
+ {
+ Successor currentSuccessor = successors.next();
+ if(currentSuccessor.getPreviousAgendaCount() +
currentAgendaCycleCount > shortestLifetime)
+ scopedSuccessors.add(currentSuccessor);
+ }
+ return scopedSuccessors;
+ }
+
+

/**
* code to read in a successor to bypass running search if best path is
already known
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/successorrelation/TimeTwiddler.java
Fri Aug 17 09:48:15 2012
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/successorrelation/TimeTwiddler.java
Fri Feb 15 10:30:48 2013
@@ -61,7 +61,7 @@
out = outWriter;
SuccessorPath usableCopy = cloner.deepClone(original);
int numberofAgendasToJumpBetween = 1000;
- int overallLifetime = original.overallAgendaLifetime();
+ int overallLifetime = original.overallSuccessorPathLifetime();
bestFoundLifetime = overallLifetime;
bestPath = original;
runningSites = originalRunningSites;
@@ -96,7 +96,7 @@
{
newSuccessorTimeSwitch = newSuccessorTimeSwitch -
numberofAgendasToJumpBetween;
usableCopy.adjustSuccessorSwitchTime(newSuccessorTimeSwitch,
successorIndex, runningSites);
- int newlifetime = usableCopy.overallAgendaLifetime();
+ int newlifetime = usableCopy.overallSuccessorPathLifetime();
if(newlifetime > bestFoundLifetime)
{
bestFoundLifetime = newlifetime;
@@ -107,7 +107,7 @@
if(WithRecompute && finalPlanLifetime > 0)
{
SuccessorPath path =
search.findSuccessorsPath(cloner.deepClone(usableCopy));
- newlifetime = path.overallAgendaLifetime();
+ newlifetime = path.overallSuccessorPathLifetime();
if(newlifetime > bestFoundLifetime)
{
bestFoundLifetime = newlifetime;
@@ -126,7 +126,7 @@
{
newSuccessorTimeSwitch = newSuccessorTimeSwitch +
numberofAgendasToJumpBetween;
usableCopy.adjustSuccessorSwitchTime(newSuccessorTimeSwitch,
successorIndex, runningSites);
- int newlifetime = usableCopy.overallAgendaLifetime();
+ int newlifetime = usableCopy.overallSuccessorPathLifetime();
if(newlifetime > bestFoundLifetime)
{
bestFoundLifetime = newlifetime;
@@ -137,7 +137,7 @@
if(WithRecompute && finalPlanLifetime > 0)
{
SuccessorPath path =
search.findSuccessorsPath(cloner.deepClone(usableCopy));
- newlifetime = path.overallAgendaLifetime();
+ newlifetime = path.overallSuccessorPathLifetime();
if(newlifetime > bestFoundLifetime)
{
bestFoundLifetime = newlifetime;
@@ -156,7 +156,7 @@
Iterator<Successor> successorIterator =
usableCopy.getSuccessorList().iterator();
String output = "";
int counter = 0;
- if(usableCopy.overallAgendaLifetime() > 0)
+ if(usableCopy.overallSuccessorPathLifetime() > 0)
{
while(successorIterator.hasNext())
{
@@ -164,7 +164,7 @@
output = output.concat("successor " + counter + " time " +
nextSuccessor.getAgendaCount());
counter ++;
}
- output = output.concat(" lifetime " +
usableCopy.overallAgendaLifetime());
+ output = output.concat(" lifetime " +
usableCopy.overallSuccessorPathLifetime());
out.write(output + "\n");
out.flush();
}
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/successorrelation/successor/SuccessorPath.java
Wed Sep 12 07:43:20 2012
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/successorrelation/successor/SuccessorPath.java
Fri Feb 15 10:30:48 2013
@@ -27,7 +27,7 @@
this.listOfSuccessors.addAll(listOfSuccessors);
}

- public int overallAgendaLifetime()
+ public int overallSuccessorPathLifetime()
{
Iterator<Successor> successorIterator = listOfSuccessors.iterator();
int agendaCount = 0;
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/successorrelation/tabu/TabuSearch.java
Wed Sep 12 07:43:20 2012
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/successorrelation/tabu/TabuSearch.java
Fri Feb 15 10:30:48 2013
@@ -226,7 +226,7 @@
Utils.writeNoSuccessor(iteration);
if(currentNumberOfIterationsWithoutImprovement >=
allowance(currentPath.successorLength()))
{
- if(currentPath.overallAgendaLifetime() >
bestPath.overallAgendaLifetime())
+ if(currentPath.overallSuccessorPathLifetime() >
bestPath.overallSuccessorPathLifetime())
{
bestPath.updateList(currentPath.getSuccessorList());
}
@@ -261,7 +261,7 @@
currentPath.add(bestNeighbourHoodSuccessor);
TABUList.addAllPathIntoTABUList(currentPath,
currentPath.successorLength() -1, this.InitialSuccessor);

- if(currentPath.overallAgendaLifetime() >
bestPath.overallAgendaLifetime())
+ if(currentPath.overallSuccessorPathLifetime() >
bestPath.overallSuccessorPathLifetime())
bestPath.updateList(currentPath.getSuccessorList());
currentNumberOfIterationsWithoutImprovement = 0;
}
@@ -272,7 +272,7 @@
currentNumberOfIterationsWithoutImprovement++;
if(currentNumberOfIterationsWithoutImprovement >=
allowance(currentPath.successorLength()))
{
- if(currentPath.overallAgendaLifetime() >
bestPath.overallAgendaLifetime())
+ if(currentPath.overallSuccessorPathLifetime() >
bestPath.overallSuccessorPathLifetime())
{
bestPath.updateList(currentPath.getSuccessorList());
}
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/unreliablechannels/LogicalOverlayNetworkHierarchy.java
Mon Dec 10 06:43:35 2012
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/unreliablechannels/LogicalOverlayNetworkHierarchy.java
Fri Feb 15 10:30:48 2013
@@ -9,13 +9,21 @@

import com.rits.cloning.Cloner;

+import uk.ac.manchester.cs.snee.SNEEException;
import uk.ac.manchester.cs.snee.common.SNEEConfigurationException;
import uk.ac.manchester.cs.snee.common.SNEEProperties;
import uk.ac.manchester.cs.snee.common.SNEEPropertyNames;
import uk.ac.manchester.cs.snee.common.graph.Node;
+import uk.ac.manchester.cs.snee.compiler.AgendaException;
+import uk.ac.manchester.cs.snee.compiler.AgendaLengthException;
+import uk.ac.manchester.cs.snee.compiler.OptimizationException;
import uk.ac.manchester.cs.snee.compiler.costmodels.HashMapList;
import uk.ac.manchester.cs.snee.compiler.queryplan.SensorNetworkQueryPlan;
+import uk.ac.manchester.cs.snee.manager.common.Adaptation;
+import
uk.ac.manchester.cs.snee.manager.failednodestrategies.logicaloverlaynetwork.LogicalOverlayStrategy;
import
uk.ac.manchester.cs.snee.manager.failednodestrategies.logicaloverlaynetwork.logicaloverlaynetworkgenerator.LogicalOverlayNetwork;
+import uk.ac.manchester.cs.snee.metadata.schema.SchemaMetadataException;
+import uk.ac.manchester.cs.snee.metadata.schema.TypeMappingException;
import uk.ac.manchester.cs.snee.metadata.source.sensornet.Site;
import uk.ac.manchester.cs.snee.metadata.source.sensornet.Topology;

@@ -161,6 +169,47 @@
this.activeClustersPriority.put(key, 1);
}
}
+
+ public LogicalOverlayNetworkHierarchy(LogicalOverlayNetwork
logicalOverlay,
+ SensorNetworkQueryPlan qep, Topology wsnTopology)
+ throws NumberFormatException, SNEEConfigurationException
+ {
+ this.qep = qep;
+ clusters = new HashMapList<String, String>();
+ activeClusters = new HashMapList<String, String>();
+ this.activeClustersPriority = new HashMap<String, Integer>();
+ this.deployment = wsnTopology;
+ Iterator<String> keys =
logicalOverlay.getClusters().keySet().iterator();
+ while(keys.hasNext())
+ {
+ String key = keys.next();
+ this.addClusterNode(key, key);
+ }
+ id = "HierarchyBasedOverlay";
+
+ //first discover the resilient level for the reliable channel.
+ resilientLevel = Integer.parseInt(
+
SNEEProperties.getSetting(SNEEPropertyNames.WSN_MANAGER_UNRELIABLE_CHANNELS_RESILIENTLEVEL));
+ k = Integer.parseInt(
+
SNEEProperties.getSetting(SNEEPropertyNames.WSN_MANAGER_K_RESILENCE_LEVEL));
+ //check if possible to create cluster.
+ if(k < resilientLevel)
+ throw new SNEEConfigurationException("cannot support a resilient level
above the minimal level defined as k");
+ if(resilientLevel <= 0)
+ resilientLevel = 1;
+ keys = logicalOverlay.getClusters().keySet().iterator();
+ while(keys.hasNext())
+ {
+ String key = keys.next();
+ this.activeClusters.add(key, key);
+ }
+ keys = logicalOverlay.getClusters().keySet().iterator();
+ while(keys.hasNext())
+ {
+ String key = keys.next();
+ this.activeClustersPriority.put(key, 1);
+ } // TODO Auto-generated constructor stub
+ }

private HashMap<String, Integer> getActiveClustersOriginalPriority()
{
@@ -768,6 +817,7 @@
this.clusters.remove(this.getClusterHeadFor(failedNodeID),
failedNodeID);
}
}
+ removeDuplicates();
}

private void removeDuplicates()
@@ -826,4 +876,47 @@
this.activeClustersPriority = new HashMap<String, Integer>();
this.activeClustersPriority.putAll(activeClustersOriginalPriority);
}
+
+ public void removeClonedData()
+ {
+ removeClones(this.activeClusters);
+ removeClones(this.clusters);
+ }
+
+ private void removeClones(HashMapList<String, String> clusterToClean)
+ {
+ HashMapList<String, String> newCluster = new HashMapList<String,
String>();
+ Iterator<String> keySet = clusterToClean.keySet().iterator();
+ while(keySet.hasNext())
+ {
+ String key = keySet.next();
+ Iterator<String> values = clusterToClean.get(key).iterator();
+ while(values.hasNext())
+ {
+ String value = values.next();
+
+ if(newCluster.get(key)!= null
& !newCluster.get(key).contains(value))
+ newCluster.add(key, value);
+ }
+ }
+ clusterToClean = newCluster;
+ }
+
+ public boolean canAdapt(String failedSite, RobustSensorNetworkQueryPlan
rQEP)
+ {
+ if(failedSite == null)
+ return false;
+ else
+ return isThereACluster(failedSite, rQEP.getLogicalOverlayNetwork());
+ }
+
+ private boolean isThereACluster(String failedSite,
+ LogicalOverlayNetworkHierarchy
logicalOverlayNetwork)
+ {
+ if(logicalOverlayNetwork.getEquivilentNodes(failedSite).size() != 0)
+ return true;
+ else
+ return false;
+ }
+
}
=======================================
---
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/unreliablechannels/RobustSensorNetworkQueryPlan.java
Mon Nov 26 08:59:46 2012
+++
/branches/alan_2012_07_19_unreliableChannels/snee-wsn-manager/src/main/java/uk/ac/manchester/cs/snee/manager/planner/unreliablechannels/RobustSensorNetworkQueryPlan.java
Fri Feb 15 10:30:48 2013
@@ -64,4 +64,13 @@
{
return this.overlayAgenda;
}
+
+ /**
+ * @return changes the unrelaibale failure agenda
+ */
+ public void setUnreliableAgenda(UnreliableChannelAgenda agenda)
+ {
+ this.overlayAgenda = agenda;
+ }
+
}
Reply all
Reply to author
Forward
0 new messages