From c9a84787cd8d3ebb142b11096c5693ca44cfcff2 Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Mon, 30 Dec 2019 14:24:22 +0100 Subject: Implement ZMI removals in Stanik --- .../edu/mimuw/cloudatlas/agent/modules/Stanik.java | 35 +++++++++++++++++----- 1 file changed, 28 insertions(+), 7 deletions(-) (limited to 'src/main/java/pl/edu/mimuw/cloudatlas/agent/modules') 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 4694219..ea893d9 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 @@ -6,6 +6,7 @@ import java.util.Map.Entry; import pl.edu.mimuw.cloudatlas.agent.messages.AgentMessage; import pl.edu.mimuw.cloudatlas.agent.messages.GetStateMessage; +import pl.edu.mimuw.cloudatlas.agent.messages.RemoveZMIMessage; import pl.edu.mimuw.cloudatlas.agent.messages.StateMessage; import pl.edu.mimuw.cloudatlas.agent.messages.StanikMessage; import pl.edu.mimuw.cloudatlas.agent.messages.UpdateAttributesMessage; @@ -21,6 +22,7 @@ import pl.edu.mimuw.cloudatlas.model.ValueBoolean; import pl.edu.mimuw.cloudatlas.model.ValueQuery; import pl.edu.mimuw.cloudatlas.model.ValueString; import pl.edu.mimuw.cloudatlas.model.ValueTime; +import pl.edu.mimuw.cloudatlas.model.ValueUtils; import pl.edu.mimuw.cloudatlas.model.ZMI; public class Stanik extends Module { @@ -45,6 +47,9 @@ public class Stanik extends Module { case GET_STATE: handleGetState((GetStateMessage) message); break; + case REMOVE_ZMI: + handleRemoveZMI((RemoveZMIMessage) message); + break; case UPDATE_ATTRIBUTES: handleUpdateAttributes((UpdateAttributesMessage) message); break; @@ -57,17 +62,37 @@ public class Stanik extends Module { } public void handleGetState(GetStateMessage message) throws InterruptedException { - StateMessage response = new StateMessage("", message.getRequestingModule(), 0, message.getRequestId(), hierarchy.clone(), (HashMap>) queries.clone()); + StateMessage response = new StateMessage( + "", + message.getRequestingModule(), + 0, + message.getRequestId(), + hierarchy.clone(), + (HashMap>) queries.clone() + ); sendMessage(response); } + public void handleRemoveZMI(RemoveZMIMessage message) { + try { + ZMI zmi = hierarchy.findDescendant(new PathName(message.getPathName())); + if (ValueUtils.valueLower(zmi.getAttributes().getOrNull("timestamp"), message.getRemovalTimestamp())) { + zmi.getFather().removeSon(zmi); + } else { + System.out.println("DEBUG: not removing zone with fresher timestamp than removal"); + } + } catch (ZMI.NoSuchZoneException e) { + System.out.println("DEBUG: trying to remove zone that doesn't exist"); + } + } + public void handleUpdateAttributes(UpdateAttributesMessage message) { try { validateUpdateAttributesMessage(message); addMissingZones(new PathName(message.getPathName())); ZMI zone = hierarchy.findDescendant(message.getPathName()); AttributesMap attributes = zone.getAttributes(); - if (valueLower(attributes.get("timestamp"), message.getAttributes().get("timestamp"))) { + if (ValueUtils.valueLower(attributes.get("timestamp"), message.getAttributes().get("timestamp"))) { AttributesUtil.transferAttributes(message.getAttributes(), attributes); } else { System.out.println("DEBUG: not applying update with older attributes"); @@ -84,16 +109,12 @@ public class Stanik extends Module { Attribute attribute = entry.getKey(); ValueTime timestamp = entry.getValue().getValue(); Entry currentTimestampedQuery = queries.get(attribute); - if (currentTimestampedQuery == null || valueLower(currentTimestampedQuery.getValue(), timestamp)) { + if (currentTimestampedQuery == null || ValueUtils.valueLower(currentTimestampedQuery.getValue(), timestamp)) { queries.put(entry.getKey(), entry.getValue()); } } } - private boolean valueLower(Value a, Value b) { - return ((ValueBoolean) a.isLowerThan(b)).getValue(); - } - private void validateUpdateAttributesMessage(UpdateAttributesMessage message) throws InvalidUpdateAttributesMessage { validateZoneName(message); validateHasTimeStamp(message); -- cgit v1.2.3