m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/pl/edu/mimuw/cloudatlas/agent/Agent.java2
-rw-r--r--src/main/java/pl/edu/mimuw/cloudatlas/agent/EventBus.java1
-rw-r--r--src/main/java/pl/edu/mimuw/cloudatlas/agent/HierarchyConfig.java14
-rw-r--r--src/main/java/pl/edu/mimuw/cloudatlas/agent/messages/StateMessage.java10
-rw-r--r--src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/Stanik.java6
-rw-r--r--src/test/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementationTests.java6
-rw-r--r--src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/GossipGirlTest.java3
-rw-r--r--src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/QurnikTest.java7
-rw-r--r--src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/RemikTest.java3
9 files changed, 35 insertions, 17 deletions
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/Agent.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/Agent.java
index a7d2d55..0cbda2d 100644
--- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/Agent.java
+++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/Agent.java
@@ -38,7 +38,7 @@ public class Agent {
agentConfig.runRegistry(eventBus);
agentConfig.startNonModuleThreads(eventBus);
- initZones(eventBus);
+ // initZones(eventBus);
// TODO: make query period confiurable with config file and from tests
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/EventBus.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/EventBus.java
index a9b25ed..0e972f4 100644
--- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/EventBus.java
+++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/EventBus.java
@@ -54,6 +54,7 @@ public class EventBus implements Runnable {
}
public void addMessage(AgentMessage msg) throws InterruptedException {
+ System.out.println("INFO: message added for " + msg.getDestinationModule().toString());
this.events.put(msg);
}
}
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/HierarchyConfig.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/HierarchyConfig.java
index 04b9b5b..dc5241d 100644
--- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/HierarchyConfig.java
+++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/HierarchyConfig.java
@@ -71,7 +71,7 @@ public class HierarchyConfig {
List<ZMI> siblings = getSiblings(root, path);
filterEmptyContacts(siblings);
if (siblings.isEmpty()) {
- return selectFallbackContact();
+ return selectFallbackContact(response.getContacts());
}
ZMI zmi = selectZMI(siblings);
ValueSet contactsValue = (ValueSet) zmi.getAttributes().getOrNull("contacts");
@@ -80,8 +80,12 @@ public class HierarchyConfig {
}
// TODO
- private ValueContact selectFallbackContact() throws Exception {
- return null;
+ private ValueContact selectFallbackContact(Set<ValueContact> contacts) throws Exception {
+ if (contacts.isEmpty()) {
+ return null;
+ } else {
+ return selectContactFromSet(contacts);
+ }
}
private ZMI selectZMI(List<ZMI> zmis) throws Exception {
@@ -96,9 +100,9 @@ public class HierarchyConfig {
throw new Exception("empty list passed to selectZMI");
}
- private ValueContact selectContactFromSet(Set<Value> contacts) throws Exception {
+ private <T> ValueContact selectContactFromSet(Set<T> contacts) throws Exception {
int i = random.nextInt(contacts.size());
- for (Value contact : contacts) {
+ for (T contact : contacts) {
if (i == 0) {
return (ValueContact) contact;
}
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/messages/StateMessage.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/messages/StateMessage.java
index 759723b..806d41f 100644
--- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/messages/StateMessage.java
+++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/messages/StateMessage.java
@@ -2,9 +2,11 @@ package pl.edu.mimuw.cloudatlas.agent.messages;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Set;
import pl.edu.mimuw.cloudatlas.agent.modules.ModuleType;
import pl.edu.mimuw.cloudatlas.model.Attribute;
+import pl.edu.mimuw.cloudatlas.model.ValueContact;
import pl.edu.mimuw.cloudatlas.model.ValueQuery;
import pl.edu.mimuw.cloudatlas.model.ValueTime;
import pl.edu.mimuw.cloudatlas.model.ZMI;
@@ -12,11 +14,13 @@ import pl.edu.mimuw.cloudatlas.model.ZMI;
public class StateMessage extends ResponseMessage {
private ZMI zmi;
private Map<Attribute, Entry<ValueQuery, ValueTime>> queries;
+ private Set<ValueContact> contacts;
- public StateMessage(String messageId, ModuleType destinationModule, long timestamp, long requestId, ZMI zmi, Map<Attribute, Entry<ValueQuery, ValueTime>> queries) {
+ public StateMessage(String messageId, ModuleType destinationModule, long timestamp, long requestId, ZMI zmi, Map<Attribute, Entry<ValueQuery, ValueTime>> queries, Set<ValueContact> contacts) {
super(messageId, destinationModule, timestamp, Type.STATE, requestId);
this.zmi = zmi;
this.queries = queries;
+ this.contacts = contacts;
}
public StateMessage() {}
@@ -28,4 +32,8 @@ public class StateMessage extends ResponseMessage {
public Map<Attribute, Entry<ValueQuery, ValueTime>> getQueries() {
return queries;
}
+
+ public Set<ValueContact> getContacts() {
+ return contacts;
+ }
}
diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/Stanik.java b/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/Stanik.java
index c713827..999c193 100644
--- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/Stanik.java
+++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/modules/Stanik.java
@@ -53,8 +53,9 @@ public class Stanik extends Module {
break;
case UPDATE_CONTACTS:
handleUpdateContacts((UpdateContactsMessage) message);
+ break;
default:
- throw new InvalidMessageType("This type of message cannot be handled by Stanik");
+ throw new InvalidMessageType("This type of message cannot be handled by Stanik" + message.getType().toString());
}
}
@@ -66,7 +67,8 @@ public class Stanik extends Module {
0,
message.getRequestId(),
hierarchy.clone(),
- (HashMap<Attribute, Entry<ValueQuery, ValueTime>>) queries.clone()
+ (HashMap<Attribute, Entry<ValueQuery, ValueTime>>) queries.clone(),
+ contacts
);
sendMessage(response);
}
diff --git a/src/test/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementationTests.java b/src/test/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementationTests.java
index 6330648..a5ecddd 100644
--- a/src/test/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementationTests.java
+++ b/src/test/java/pl/edu/mimuw/cloudatlas/agent/NewApiImplementationTests.java
@@ -58,7 +58,7 @@ public class NewApiImplementationTests {
RequestStateMessage requestMessage = (RequestStateMessage) message;
ZMI root = new ZMI();
- StateMessage responseMessage = new StateMessage("", ModuleType.RMI, 0, 0, root, null);
+ StateMessage responseMessage = new StateMessage("", ModuleType.RMI, 0, 0, root, null, null);
requestMessage.getFuture().complete(responseMessage);
apiThread.join(100);
@@ -88,7 +88,7 @@ public class NewApiImplementationTests {
ZMI zmi = new ZMI();
zmi.getAttributes().add("timestamp", new ValueTime(42l));
- StateMessage response = new StateMessage("", ModuleType.RMI, 0, 0, zmi, new HashMap());
+ StateMessage response = new StateMessage("", ModuleType.RMI, 0, 0, zmi, new HashMap(), null);
requestMessage.getFuture().complete(response);
apiThread.join(100);
@@ -122,7 +122,7 @@ public class NewApiImplementationTests {
zmi.addSon(son);
son.getAttributes().add("name", new ValueString("son"));
son.getAttributes().add("timestamp", new ValueTime(43l));
- StateMessage response = new StateMessage("", ModuleType.RMI, 0, 0, zmi, new HashMap());
+ StateMessage response = new StateMessage("", ModuleType.RMI, 0, 0, zmi, new HashMap(), null);
requestMessage.getFuture().complete(response);
apiThread.join(100);
diff --git a/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/GossipGirlTest.java b/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/GossipGirlTest.java
index a812e61..5fac535 100644
--- a/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/GossipGirlTest.java
+++ b/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/GossipGirlTest.java
@@ -8,6 +8,7 @@ import static org.hamcrest.CoreMatchers.hasItems;
import java.net.InetAddress;
import java.util.AbstractMap.SimpleImmutableEntry;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
@@ -77,7 +78,7 @@ public class GossipGirlTest {
testTime = ValueUtils.currentTime();
setupHierarchy();
setupQueries();
- stateMessage = new StateMessage("", ModuleType.GOSSIP, 0, 0, initiatorHierarchy, initiatorQueries);
+ stateMessage = new StateMessage("", ModuleType.GOSSIP, 0, 0, initiatorHierarchy, initiatorQueries, new HashSet());
Map<PathName, ValueTime> otherZoneTimestamps = makeOtherZoneTimestamps();
Map<Attribute, ValueTime> otherQueryTimestamps = makeOtherQueryTimestamps();
diff --git a/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/QurnikTest.java b/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/QurnikTest.java
index 1e4fbda..a8d0ecb 100644
--- a/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/QurnikTest.java
+++ b/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/QurnikTest.java
@@ -2,6 +2,7 @@ package pl.edu.mimuw.cloudatlas.agent.modules;
import java.util.AbstractMap.SimpleImmutableEntry;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
@@ -63,7 +64,7 @@ public class QurnikTest {
new ValueTime(0l)
)
);
- StateMessage message = new StateMessage("", ModuleType.QUERY, 0, 0, root, queries);
+ StateMessage message = new StateMessage("", ModuleType.QUERY, 0, 0, root, queries, new HashSet());
long timeBefore = System.currentTimeMillis();
qurnik.handleTyped(message);
long timeAfter = System.currentTimeMillis();
@@ -168,7 +169,7 @@ public class QurnikTest {
ZMI root = setupSampleHierarchy();
Map<Attribute, Entry<ValueQuery, ValueTime>> queries = setupSampleQueries();
- StateMessage message = new StateMessage("", ModuleType.QUERY, 0, 0, root, queries);
+ StateMessage message = new StateMessage("", ModuleType.QUERY, 0, 0, root, queries, new HashSet());
long timeBefore = System.currentTimeMillis();
qurnik.handleTyped(message);
long timeAfter = System.currentTimeMillis();
@@ -224,7 +225,7 @@ public class QurnikTest {
new ValueTime(44l)
)
);
- StateMessage message = new StateMessage("", ModuleType.QUERY, 0, 0, root, queries);
+ StateMessage message = new StateMessage("", ModuleType.QUERY, 0, 0, root, queries, new HashSet());
long timeBefore = System.currentTimeMillis();
qurnik.handleTyped(message);
long timeAfter = System.currentTimeMillis();
diff --git a/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/RemikTest.java b/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/RemikTest.java
index 8ac8bed..8dec10b 100644
--- a/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/RemikTest.java
+++ b/src/test/java/pl/edu/mimuw/cloudatlas/agent/modules/RemikTest.java
@@ -3,6 +3,7 @@ package pl.edu.mimuw.cloudatlas.agent.modules;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.HashMap;
+import java.util.HashSet;
import pl.edu.mimuw.cloudatlas.agent.messages.AgentMessage;
import pl.edu.mimuw.cloudatlas.agent.messages.GetStateMessage;
@@ -49,7 +50,7 @@ public class RemikTest {
ZMI zmi = new ZMI();
zmi.getAttributes().add("timestamp", new ValueTime(42l));
- StateMessage response = new StateMessage("", ModuleType.RMI, 0, 0, zmi, new HashMap());
+ StateMessage response = new StateMessage("", ModuleType.RMI, 0, 0, zmi, new HashMap(), new HashSet());
remik.handleTyped(response);
ResponseMessage passedResponse = future.get(100, TimeUnit.MILLISECONDS);