diff options
author | Martin <marcin.j.chrzanowski@gmail.com> | 2020-01-27 22:25:41 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-27 22:25:41 +0100 |
commit | 1583288396fe8971d830c7bbe49231a127e0c0bb (patch) | |
tree | 0142b81524da3d88a2ccf53178229ff8f195c731 /src/main/java/pl/edu | |
parent | 6ed68039f45bf4f1b7dc3031db66aac5cbcb6c04 (diff) | |
parent | 1383166dd80b8cec4d7b20e81725eaa219717d5d (diff) |
Merge pull request #131 from m-chrzan/filter-self
Filter self
Diffstat (limited to 'src/main/java/pl/edu')
-rw-r--r-- | src/main/java/pl/edu/mimuw/cloudatlas/agent/HierarchyConfig.java | 37 | ||||
-rw-r--r-- | src/main/java/pl/edu/mimuw/cloudatlas/fetcher/Fetcher.java | 5 |
2 files changed, 39 insertions, 3 deletions
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 4d8842f..1087b8a 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/agent/HierarchyConfig.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/agent/HierarchyConfig.java @@ -14,11 +14,13 @@ public class HierarchyConfig { private GossipGirlStrategies gossipGirlStrategies; private GossipGirlStrategies.ZoneSelectionStrategy zoneSelectionStrategy; private Random random = new Random(); + private PathName ourPath; private EventBus eventBus; HierarchyConfig(EventBus eventBus, String zonePath, String zoneStrategy) { zoneSelectionStrategy = parseStrategy(zoneStrategy); - gossipGirlStrategies = new GossipGirlStrategies(new PathName(zonePath)); + ourPath = new PathName(zonePath); + gossipGirlStrategies = new GossipGirlStrategies(ourPath); this.eventBus = eventBus; } @@ -81,9 +83,25 @@ public class HierarchyConfig { ZMI zmi = selectZMI(siblings); ValueSet contactsValue = (ValueSet) zmi.getAttributes().getOrNull("contacts"); Set<Value> valueSet = contactsValue.getValue(); + filterOurContact(valueSet); return selectContactFromSet(valueSet); } + private void filterOurContact(Set<Value> contacts) { + Iterator it = contacts.iterator(); + while (it.hasNext()) { + Value value = (Value) it.next(); + if (value.getType().getPrimaryType() == Type.PrimaryType.CONTACT) { + ValueContact contact = (ValueContact) value; + if (!contact.getName().equals(ourPath)) { + it.remove(); + } + } else { + System.out.println("WARN: non contact value passed to filterOurContact"); + } + } + } + private StateMessage getState() throws Exception { CompletableFuture<ResponseMessage> responseFuture = new CompletableFuture(); this.eventBus.addMessage(new RequestStateMessage("", 0, responseFuture)); @@ -143,12 +161,27 @@ public class HierarchyConfig { while (iterator.hasNext()) { ZMI zmi = iterator.next(); ValueSet contacts = (ValueSet) zmi.getAttributes().getOrNull("contacts"); - if (contacts == null || contacts.isNull() || contacts.isEmpty()) { + if (contacts == null || contacts.isNull() || contacts.isEmpty() || onlyContactIsUs(contacts)) { iterator.remove(); } } } + private boolean onlyContactIsUs(ValueSet contacts) { + for (Value value : contacts) { + if (value.getType().getPrimaryType() == Type.PrimaryType.CONTACT) { + ValueContact contact = (ValueContact) value; + if (!contact.getName().equals(ourPath)) { + return true; + } + } else { + System.out.println("WARN: non contact value passed to onlyContactIsUs"); + } + } + + return false; + } + public void startQueries(long queriesPeriod) { Supplier<TimerScheduledTask> taskSupplier = () -> new TimerScheduledTask() { diff --git a/src/main/java/pl/edu/mimuw/cloudatlas/fetcher/Fetcher.java b/src/main/java/pl/edu/mimuw/cloudatlas/fetcher/Fetcher.java index 096e4e3..8916b13 100644 --- a/src/main/java/pl/edu/mimuw/cloudatlas/fetcher/Fetcher.java +++ b/src/main/java/pl/edu/mimuw/cloudatlas/fetcher/Fetcher.java @@ -114,9 +114,12 @@ public class Fetcher { api.setFallbackContacts(ClientController.parseContactsString(fallbackContactsString)); ValueContact initialContact = new ValueContact(new PathName(zonePath), InetAddress.getByName(ownAddr)); - api.setAttributeValue(zonePath, "contacts", initialContact); + Set<Value> initialContacts = new HashSet(); + initialContacts.add(initialContact); + ValueSet initialContactsValue = new ValueSet(initialContacts, TypePrimitive.CONTACT); while((jsonAttribs = bufferRead.readLine()) != null) { + api.setAttributeValue(zonePath, "contacts", initialContactsValue); System.out.println(jsonAttribs); System.out.flush(); deserializedAttribs = deserializeAttribs(jsonAttribs); |