From fa9ffb95cf8e0e447787483d26b2d0417d5e8a3f Mon Sep 17 00:00:00 2001
From: Albert Louis Rossi
Date: Mon, 7 Aug 2023 09:36:03 -0500
Subject: [PATCH] Revert "dcache-common: add QoS Json policy objects"
JUnit test is broken
This reverts commit ea285258528df54d3291a4d81d2258b960699348.
---
.../qos/DefaultQoSDiskSpecification.java | 139 ---------
.../qos/DefaultQoSPolicyJsonDeserializer.java | 148 ----------
.../qos/DefaultQoSTapeSpecification.java | 123 --------
.../org/dcache/qos/QoSDiskSpecification.java | 82 ------
.../org/dcache/qos/QoSHsmSpecification.java | 80 ------
.../main/java/org/dcache/qos/QoSPolicy.java | 119 --------
.../main/java/org/dcache/qos/QoSState.java | 128 ---------
.../java/org/dcache/qos/QoSStorageMedium.java | 64 -----
.../qos/QoSStorageMediumSpecification.java | 83 ------
.../java/org/dcache/qos/QoSPolicyTest.java | 270 ------------------
10 files changed, 1236 deletions(-)
delete mode 100644 modules/common/src/main/java/org/dcache/qos/DefaultQoSDiskSpecification.java
delete mode 100644 modules/common/src/main/java/org/dcache/qos/DefaultQoSPolicyJsonDeserializer.java
delete mode 100644 modules/common/src/main/java/org/dcache/qos/DefaultQoSTapeSpecification.java
delete mode 100644 modules/common/src/main/java/org/dcache/qos/QoSDiskSpecification.java
delete mode 100644 modules/common/src/main/java/org/dcache/qos/QoSHsmSpecification.java
delete mode 100644 modules/common/src/main/java/org/dcache/qos/QoSPolicy.java
delete mode 100644 modules/common/src/main/java/org/dcache/qos/QoSState.java
delete mode 100644 modules/common/src/main/java/org/dcache/qos/QoSStorageMedium.java
delete mode 100644 modules/common/src/main/java/org/dcache/qos/QoSStorageMediumSpecification.java
delete mode 100644 modules/common/src/test/java/org/dcache/qos/QoSPolicyTest.java
diff --git a/modules/common/src/main/java/org/dcache/qos/DefaultQoSDiskSpecification.java b/modules/common/src/main/java/org/dcache/qos/DefaultQoSDiskSpecification.java
deleted file mode 100644
index ab269496116..00000000000
--- a/modules/common/src/main/java/org/dcache/qos/DefaultQoSDiskSpecification.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
-COPYRIGHT STATUS:
-Dec 1st 2001, Fermi National Accelerator Laboratory (FNAL) documents and
-software are sponsored by the U.S. Department of Energy under Contract No.
-DE-AC02-76CH03000. Therefore, the U.S. Government retains a world-wide
-non-exclusive, royalty-free license to publish or reproduce these documents
-and software for U.S. Government purposes. All documents and software
-available from this server are protected under the U.S. and Foreign
-Copyright Laws, and FNAL reserves all rights.
-
-Distribution of the software available from this server is free of
-charge subject to the user following the terms of the Fermitools
-Software Legal Information.
-
-Redistribution and/or modification of the software shall be accompanied
-by the Fermitools Software Legal Information (including the copyright
-notice).
-
-The user is asked to feed back problems, benefits, and/or suggestions
-about the software to the Fermilab Software Providers.
-
-Neither the name of Fermilab, the URA, nor the names of the contributors
-may be used to endorse or promote products derived from this software
-without specific prior written permission.
-
-DISCLAIMER OF LIABILITY (BSD):
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FERMILAB,
-OR THE URA, OR THE U.S. DEPARTMENT of ENERGY, OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Liabilities of the Government:
-
-This software is provided by URA, independent from its Prime Contract
-with the U.S. Department of Energy. URA is acting independently from
-the Government and in its own private capacity and is not acting on
-behalf of the U.S. Government, nor as its contractor nor its agent.
-Correspondingly, it is understood and agreed that the U.S. Government
-has no connection to this software and in no manner whatsoever shall
-be liable for nor assume any responsibility or obligation for any claim,
-cost, or damages arising out of or resulting from the use of the software
-available from this server.
-
-Export Control:
-
-All documents and software available from this server are subject to U.S.
-export control laws. Anyone downloading information from this server is
-obligated to secure any necessary Government licenses before exporting
-documents or software obtained from this server.
- */
-package org.dcache.qos;
-
-import java.util.List;
-import java.util.Objects;
-
-/**
- * A simple disk specification. Type may or may not be supported by the QoS verifier.
- */
-public class DefaultQoSDiskSpecification extends QoSDiskSpecification {
-
- private static final long serialVersionUID = -4741659925401058789L;
-
- /**
- * e.g., "SSD", "Spinning"
- */
- private String type;
-
- /**
- * Total number of copies on this medium.
- */
- private Integer numberOfCopies;
-
- /**
- * How the copies should be partitioned across the media instances, if there
- * are more than one.
- */
- private List partitionKeys;
-
- @Override
- public String getType() {
- return type;
- }
-
- @Override
- public Integer getNumberOfCopies() {
- return numberOfCopies;
- }
-
- @Override
- public List getPartitionKeys() {
- return partitionKeys;
- }
-
- public void setType(String type) {
- this.type = type;
- }
-
- public void setNumberOfCopies(Integer numberOfCopies) {
- this.numberOfCopies = numberOfCopies;
- }
-
- public void setPartitionKeys(List partitionKeys) {
- this.partitionKeys = partitionKeys;
- }
-
- public boolean equals(Object obj) {
- if (!(obj instanceof DefaultQoSDiskSpecification)) {
- return false;
- }
-
- DefaultQoSDiskSpecification other = (DefaultQoSDiskSpecification) obj;
-
- if ((type == null && other.type != null) ||
- type != null && !type.equals(other.type)) {
- return false;
- }
-
- if ((numberOfCopies == null && other.numberOfCopies != null) ||
- (numberOfCopies != null && numberOfCopies != other.numberOfCopies)) {
- return false;
- }
-
- return (partitionKeys == null && other.partitionKeys == null) ||
- partitionKeys != null && partitionKeys.equals(other.partitionKeys);
- }
-
- public int hashCode() {
- return Objects.hash(type, numberOfCopies, partitionKeys);
- }
-}
diff --git a/modules/common/src/main/java/org/dcache/qos/DefaultQoSPolicyJsonDeserializer.java b/modules/common/src/main/java/org/dcache/qos/DefaultQoSPolicyJsonDeserializer.java
deleted file mode 100644
index 8becfe64137..00000000000
--- a/modules/common/src/main/java/org/dcache/qos/DefaultQoSPolicyJsonDeserializer.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
-COPYRIGHT STATUS:
-Dec 1st 2001, Fermi National Accelerator Laboratory (FNAL) documents and
-software are sponsored by the U.S. Department of Energy under Contract No.
-DE-AC02-76CH03000. Therefore, the U.S. Government retains a world-wide
-non-exclusive, royalty-free license to publish or reproduce these documents
-and software for U.S. Government purposes. All documents and software
-available from this server are protected under the U.S. and Foreign
-Copyright Laws, and FNAL reserves all rights.
-
-Distribution of the software available from this server is free of
-charge subject to the user following the terms of the Fermitools
-Software Legal Information.
-
-Redistribution and/or modification of the software shall be accompanied
-by the Fermitools Software Legal Information (including the copyright
-notice).
-
-The user is asked to feed back problems, benefits, and/or suggestions
-about the software to the Fermilab Software Providers.
-
-Neither the name of Fermilab, the URA, nor the names of the contributors
-may be used to endorse or promote products derived from this software
-without specific prior written permission.
-
-DISCLAIMER OF LIABILITY (BSD):
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FERMILAB,
-OR THE URA, OR THE U.S. DEPARTMENT of ENERGY, OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Liabilities of the Government:
-
-This software is provided by URA, independent from its Prime Contract
-with the U.S. Department of Energy. URA is acting independently from
-the Government and in its own private capacity and is not acting on
-behalf of the U.S. Government, nor as its contractor nor its agent.
-Correspondingly, it is understood and agreed that the U.S. Government
-has no connection to this software and in no manner whatsoever shall
-be liable for nor assume any responsibility or obligation for any claim,
-cost, or damages arising out of or resulting from the use of the software
-available from this server.
-
-Export Control:
-
-All documents and software available from this server are subject to U.S.
-export control laws. Anyone downloading information from this server is
-obligated to secure any necessary Government licenses before exporting
-documents or software obtained from this server.
- */
-package org.dcache.qos;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.json.JSONArray;
-import org.json.JSONObject;
-
-/**
- * Uses the default specification objects to populate the policy from its JSON representation.
- */
-public class DefaultQoSPolicyJsonDeserializer {
-
- private static final String NAME = "name";
- private static final String STATES = "states";
- private static final String DURATION = "duration";
- private static final String MEDIA = "media";
- private static final String STORAGE_ELEMENT = "storageElement";
- private static final String TYPE = "type";
- private static final String NUMBER_OF_COPIES = "numberOfCopies";
- private static final String PARTITION_KEYS = "partitionKeys";
- private static final String INSTANCE = "instance";
-
- public static QoSPolicy fromJsonString(String json) {
- return deserializePolicy(new JSONObject(json));
- }
-
- private static QoSPolicy deserializePolicy(JSONObject object) {
- QoSPolicy policy = new QoSPolicy();
- policy.setName(object.getString(NAME));
- JSONArray stateArray = object.getJSONArray(STATES);
- int len = stateArray.length();
- List states = new ArrayList<>();
- for (int i = 0; i < len; ++i) {
- states.add(deserializeState(stateArray.getJSONObject(i)));
- }
- policy.setStates(states);
- return policy;
- }
-
- private static QoSState deserializeState(JSONObject jsonState) {
- QoSState state = new QoSState();
- if (jsonState.has(DURATION)) {
- state.setDuration(jsonState.getString(DURATION));
- }
- List media = new ArrayList<>();
- JSONArray mediaArray = jsonState.getJSONArray(MEDIA);
- int len = mediaArray.length();
- for (int i = 0; i < len; ++i) {
- media.add(deserializeStorageElement(mediaArray.getJSONObject(i)));
- }
- state.setMedia(media);
- return state;
- }
-
- private static QoSStorageMediumSpecification deserializeStorageElement(JSONObject jsonMedia) {
- switch(jsonMedia.getEnum(QoSStorageMedium.class, STORAGE_ELEMENT)) {
- case DISK:
- DefaultQoSDiskSpecification diskSpec = new DefaultQoSDiskSpecification();
- if (jsonMedia.has(TYPE)) {
- diskSpec.setType(jsonMedia.getString(TYPE));
- }
- diskSpec.setNumberOfCopies(jsonMedia.getInt(NUMBER_OF_COPIES));
- if (jsonMedia.has(PARTITION_KEYS)) {
- List partitionKeys = new ArrayList<>();
- JSONArray keyArray = jsonMedia.getJSONArray(PARTITION_KEYS);
- int len = keyArray.length();
- for (int i = 0; i < len; ++i) {
- partitionKeys.add(keyArray.getString(i));
- }
- diskSpec.setPartitionKeys(partitionKeys);
- }
- return diskSpec;
- case HSM:
- default:
- DefaultQoSTapeSpecification tapeSpec = new DefaultQoSTapeSpecification();
- if (jsonMedia.has(TYPE)) {
- tapeSpec.setType(jsonMedia.getString(TYPE));
- }
- if (jsonMedia.has(INSTANCE)) {
- tapeSpec.setInstance(jsonMedia.getString(INSTANCE));
- }
- return tapeSpec;
- }
- }
-
- private DefaultQoSPolicyJsonDeserializer() {
- // static singleton
- }
-}
diff --git a/modules/common/src/main/java/org/dcache/qos/DefaultQoSTapeSpecification.java b/modules/common/src/main/java/org/dcache/qos/DefaultQoSTapeSpecification.java
deleted file mode 100644
index 1427ba6b84f..00000000000
--- a/modules/common/src/main/java/org/dcache/qos/DefaultQoSTapeSpecification.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
-COPYRIGHT STATUS:
-Dec 1st 2001, Fermi National Accelerator Laboratory (FNAL) documents and
-software are sponsored by the U.S. Department of Energy under Contract No.
-DE-AC02-76CH03000. Therefore, the U.S. Government retains a world-wide
-non-exclusive, royalty-free license to publish or reproduce these documents
-and software for U.S. Government purposes. All documents and software
-available from this server are protected under the U.S. and Foreign
-Copyright Laws, and FNAL reserves all rights.
-
-Distribution of the software available from this server is free of
-charge subject to the user following the terms of the Fermitools
-Software Legal Information.
-
-Redistribution and/or modification of the software shall be accompanied
-by the Fermitools Software Legal Information (including the copyright
-notice).
-
-The user is asked to feed back problems, benefits, and/or suggestions
-about the software to the Fermilab Software Providers.
-
-Neither the name of Fermilab, the URA, nor the names of the contributors
-may be used to endorse or promote products derived from this software
-without specific prior written permission.
-
-DISCLAIMER OF LIABILITY (BSD):
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FERMILAB,
-OR THE URA, OR THE U.S. DEPARTMENT of ENERGY, OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Liabilities of the Government:
-
-This software is provided by URA, independent from its Prime Contract
-with the U.S. Department of Energy. URA is acting independently from
-the Government and in its own private capacity and is not acting on
-behalf of the U.S. Government, nor as its contractor nor its agent.
-Correspondingly, it is understood and agreed that the U.S. Government
-has no connection to this software and in no manner whatsoever shall
-be liable for nor assume any responsibility or obligation for any claim,
-cost, or damages arising out of or resulting from the use of the software
-available from this server.
-
-Export Control:
-
-All documents and software available from this server are subject to U.S.
-export control laws. Anyone downloading information from this server is
-obligated to secure any necessary Government licenses before exporting
-documents or software obtained from this server.
- */
-package org.dcache.qos;
-
-import java.util.Objects;
-
-/**
- * A simple tape specification.
- */
-public class DefaultQoSTapeSpecification extends QoSHsmSpecification {
-
- private static final long serialVersionUID = -7122977962254426993L;
-
- private String instance;
-
- /**
- * E.g., "Enstore", "CTA", etc.
- */
- private String type;
-
- @Override
- public String getInstance() {
- return instance;
- }
-
- @Override
- public String getType() {
- return type;
- }
-
- /*
- * Currently, we only allow one copy per tape system instance.
- */
- @Override
- public Integer getNumberOfCopies() {
- return 1;
- }
-
- public void setInstance(String instance) {
- this.instance = instance;
- }
-
- public void setType(String type) {
- this.type = type;
- }
-
- public boolean equals(Object obj) {
- if (!(obj instanceof DefaultQoSTapeSpecification)) {
- return false;
- }
-
- DefaultQoSTapeSpecification other = (DefaultQoSTapeSpecification) obj;
-
- if ((type == null && other.type != null) ||
- type != null && !type.equals(other.type)) {
- return false;
- }
-
- return (instance == null && other.instance == null) ||
- instance != null && instance.equals(other.instance);
- }
-
- public int hashCode() {
- return Objects.hash(type, instance);
- }
-}
diff --git a/modules/common/src/main/java/org/dcache/qos/QoSDiskSpecification.java b/modules/common/src/main/java/org/dcache/qos/QoSDiskSpecification.java
deleted file mode 100644
index c2205a0b4ac..00000000000
--- a/modules/common/src/main/java/org/dcache/qos/QoSDiskSpecification.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-COPYRIGHT STATUS:
-Dec 1st 2001, Fermi National Accelerator Laboratory (FNAL) documents and
-software are sponsored by the U.S. Department of Energy under Contract No.
-DE-AC02-76CH03000. Therefore, the U.S. Government retains a world-wide
-non-exclusive, royalty-free license to publish or reproduce these documents
-and software for U.S. Government purposes. All documents and software
-available from this server are protected under the U.S. and Foreign
-Copyright Laws, and FNAL reserves all rights.
-
-Distribution of the software available from this server is free of
-charge subject to the user following the terms of the Fermitools
-Software Legal Information.
-
-Redistribution and/or modification of the software shall be accompanied
-by the Fermitools Software Legal Information (including the copyright
-notice).
-
-The user is asked to feed back problems, benefits, and/or suggestions
-about the software to the Fermilab Software Providers.
-
-Neither the name of Fermilab, the URA, nor the names of the contributors
-may be used to endorse or promote products derived from this software
-without specific prior written permission.
-
-DISCLAIMER OF LIABILITY (BSD):
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FERMILAB,
-OR THE URA, OR THE U.S. DEPARTMENT of ENERGY, OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Liabilities of the Government:
-
-This software is provided by URA, independent from its Prime Contract
-with the U.S. Department of Energy. URA is acting independently from
-the Government and in its own private capacity and is not acting on
-behalf of the U.S. Government, nor as its contractor nor its agent.
-Correspondingly, it is understood and agreed that the U.S. Government
-has no connection to this software and in no manner whatsoever shall
-be liable for nor assume any responsibility or obligation for any claim,
-cost, or damages arising out of or resulting from the use of the software
-available from this server.
-
-Export Control:
-
-All documents and software available from this server are subject to U.S.
-export control laws. Anyone downloading information from this server is
-obligated to secure any necessary Government licenses before exporting
-documents or software obtained from this server.
- */
-package org.dcache.qos;
-
-import static org.dcache.qos.QoSStorageMedium.DISK;
-
-import java.util.List;
-
-public abstract class QoSDiskSpecification implements QoSStorageMediumSpecification {
-
- /**
- * In order to get this to appear in the JSON object, there needs to be
- * an instance variable.
- */
- private final QoSStorageMedium storageMedium = DISK;
-
- /**
- * @return if more than one copy is to be kept on this medium, the keys used to distribute them.
- */
- public abstract List getPartitionKeys();
-
- public final QoSStorageMedium getStorageMedium() {
- return storageMedium;
- }
-}
diff --git a/modules/common/src/main/java/org/dcache/qos/QoSHsmSpecification.java b/modules/common/src/main/java/org/dcache/qos/QoSHsmSpecification.java
deleted file mode 100644
index c77a54fb12d..00000000000
--- a/modules/common/src/main/java/org/dcache/qos/QoSHsmSpecification.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-COPYRIGHT STATUS:
-Dec 1st 2001, Fermi National Accelerator Laboratory (FNAL) documents and
-software are sponsored by the U.S. Department of Energy under Contract No.
-DE-AC02-76CH03000. Therefore, the U.S. Government retains a world-wide
-non-exclusive, royalty-free license to publish or reproduce these documents
-and software for U.S. Government purposes. All documents and software
-available from this server are protected under the U.S. and Foreign
-Copyright Laws, and FNAL reserves all rights.
-
-Distribution of the software available from this server is free of
-charge subject to the user following the terms of the Fermitools
-Software Legal Information.
-
-Redistribution and/or modification of the software shall be accompanied
-by the Fermitools Software Legal Information (including the copyright
-notice).
-
-The user is asked to feed back problems, benefits, and/or suggestions
-about the software to the Fermilab Software Providers.
-
-Neither the name of Fermilab, the URA, nor the names of the contributors
-may be used to endorse or promote products derived from this software
-without specific prior written permission.
-
-DISCLAIMER OF LIABILITY (BSD):
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FERMILAB,
-OR THE URA, OR THE U.S. DEPARTMENT of ENERGY, OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Liabilities of the Government:
-
-This software is provided by URA, independent from its Prime Contract
-with the U.S. Department of Energy. URA is acting independently from
-the Government and in its own private capacity and is not acting on
-behalf of the U.S. Government, nor as its contractor nor its agent.
-Correspondingly, it is understood and agreed that the U.S. Government
-has no connection to this software and in no manner whatsoever shall
-be liable for nor assume any responsibility or obligation for any claim,
-cost, or damages arising out of or resulting from the use of the software
-available from this server.
-
-Export Control:
-
-All documents and software available from this server are subject to U.S.
-export control laws. Anyone downloading information from this server is
-obligated to secure any necessary Government licenses before exporting
-documents or software obtained from this server.
- */
-package org.dcache.qos;
-
-import static org.dcache.qos.QoSStorageMedium.HSM;
-
-public abstract class QoSHsmSpecification implements QoSStorageMediumSpecification {
-
- /**
- * In order to get this to appear in the JSON object, there needs to be
- * an instance variable.
- */
- private final QoSStorageMedium storageMedium = HSM;
-
- /**
- * @return an identifier (e.g., URI), distinguishing a particular instance of the HSM.
- */
- public abstract String getInstance();
-
- public final QoSStorageMedium getStorageMedium() {
- return storageMedium;
- }
-}
diff --git a/modules/common/src/main/java/org/dcache/qos/QoSPolicy.java b/modules/common/src/main/java/org/dcache/qos/QoSPolicy.java
deleted file mode 100644
index 48f04e959b5..00000000000
--- a/modules/common/src/main/java/org/dcache/qos/QoSPolicy.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-COPYRIGHT STATUS:
-Dec 1st 2001, Fermi National Accelerator Laboratory (FNAL) documents and
-software are sponsored by the U.S. Department of Energy under Contract No.
-DE-AC02-76CH03000. Therefore, the U.S. Government retains a world-wide
-non-exclusive, royalty-free license to publish or reproduce these documents
-and software for U.S. Government purposes. All documents and software
-available from this server are protected under the U.S. and Foreign
-Copyright Laws, and FNAL reserves all rights.
-
-Distribution of the software available from this server is free of
-charge subject to the user following the terms of the Fermitools
-Software Legal Information.
-
-Redistribution and/or modification of the software shall be accompanied
-by the Fermitools Software Legal Information (including the copyright
-notice).
-
-The user is asked to feed back problems, benefits, and/or suggestions
-about the software to the Fermilab Software Providers.
-
-Neither the name of Fermilab, the URA, nor the names of the contributors
-may be used to endorse or promote products derived from this software
-without specific prior written permission.
-
-DISCLAIMER OF LIABILITY (BSD):
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FERMILAB,
-OR THE URA, OR THE U.S. DEPARTMENT of ENERGY, OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Liabilities of the Government:
-
-This software is provided by URA, independent from its Prime Contract
-with the U.S. Department of Energy. URA is acting independently from
-the Government and in its own private capacity and is not acting on
-behalf of the U.S. Government, nor as its contractor nor its agent.
-Correspondingly, it is understood and agreed that the U.S. Government
-has no connection to this software and in no manner whatsoever shall
-be liable for nor assume any responsibility or obligation for any claim,
-cost, or damages arising out of or resulting from the use of the software
-available from this server.
-
-Export Control:
-
-All documents and software available from this server are subject to U.S.
-export control laws. Anyone downloading information from this server is
-obligated to secure any necessary Government licenses before exporting
-documents or software obtained from this server.
- */
-package org.dcache.qos;
-
-import java.io.Serializable;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * This is the template used to govern a file's QoS lifetime.
- */
-public class QoSPolicy implements Serializable {
-
- private static final long serialVersionUID = -3271665359959015633L;
-
- /**
- * Specifies a particular policy as established by the administrator.
- * A file can have only one policy at a time. The names must be
- * unique within the dCache instance.
- */
- private String name;
-
- /**
- * An ordered list of states determining the transitions from one set of media to another
- * that the file should undergo during its lifetime.
- */
- private List states;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public List getStates() {
- return states;
- }
-
- public void setStates(List states) {
- this.states = states;
- }
-
- public boolean equals(Object obj) {
- if (!(obj instanceof QoSPolicy)) {
- return false;
- }
-
- QoSPolicy other = (QoSPolicy) obj;
- if ((name == null && other.name != null) || !name.equals(other.name)) {
- return false;
- }
-
- return (states == null && other.states == null) ||
- states != null && states.equals(other.states);
- }
-
- public int hashCode() {
- return Objects.hash(name, states);
- }
-}
diff --git a/modules/common/src/main/java/org/dcache/qos/QoSState.java b/modules/common/src/main/java/org/dcache/qos/QoSState.java
deleted file mode 100644
index bb7e1116e16..00000000000
--- a/modules/common/src/main/java/org/dcache/qos/QoSState.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-COPYRIGHT STATUS:
-Dec 1st 2001, Fermi National Accelerator Laboratory (FNAL) documents and
-software are sponsored by the U.S. Department of Energy under Contract No.
-DE-AC02-76CH03000. Therefore, the U.S. Government retains a world-wide
-non-exclusive, royalty-free license to publish or reproduce these documents
-and software for U.S. Government purposes. All documents and software
-available from this server are protected under the U.S. and Foreign
-Copyright Laws, and FNAL reserves all rights.
-
-Distribution of the software available from this server is free of
-charge subject to the user following the terms of the Fermitools
-Software Legal Information.
-
-Redistribution and/or modification of the software shall be accompanied
-by the Fermitools Software Legal Information (including the copyright
-notice).
-
-The user is asked to feed back problems, benefits, and/or suggestions
-about the software to the Fermilab Software Providers.
-
-Neither the name of Fermilab, the URA, nor the names of the contributors
-may be used to endorse or promote products derived from this software
-without specific prior written permission.
-
-DISCLAIMER OF LIABILITY (BSD):
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FERMILAB,
-OR THE URA, OR THE U.S. DEPARTMENT of ENERGY, OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Liabilities of the Government:
-
-This software is provided by URA, independent from its Prime Contract
-with the U.S. Department of Energy. URA is acting independently from
-the Government and in its own private capacity and is not acting on
-behalf of the U.S. Government, nor as its contractor nor its agent.
-Correspondingly, it is understood and agreed that the U.S. Government
-has no connection to this software and in no manner whatsoever shall
-be liable for nor assume any responsibility or obligation for any claim,
-cost, or damages arising out of or resulting from the use of the software
-available from this server.
-
-Export Control:
-
-All documents and software available from this server are subject to U.S.
-export control laws. Anyone downloading information from this server is
-obligated to secure any necessary Government licenses before exporting
-documents or software obtained from this server.
- */
-package org.dcache.qos;
-
-import java.io.Serializable;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * Represents the QoS state of the file. This includes the length of time that this
- * state should last, and the set of media specifications for the file (disk, tape, how many
- * copies, etc.).
- */
-public class QoSState implements Serializable {
-
- /**
- * Amount of time until the transition to the next state.
- *
- * The value is one of null
, "INF", or an ISO 8601 formatted string
- * (https://en.wikipedia.org/wiki/ISO_8601).
- *
- * There is a difference between null
> and INF: the latter means
- * this file's state (presumably the last) should be continuously checked;
- * the former means that once the file has gone to this state, it
- * no longer need be verified.
- */
- private String duration;
-
- /**
- * The set of media involved in this state. For instance, a file may have two
- * specifications, one tape and one disk, with the latter specifying 2 copies,
- * and so forth.
- */
- private List media;
-
- public String getDuration() {
- return duration;
- }
-
- public void setDuration(String duration) {
- this.duration = duration;
- }
-
- public List getMedia() {
- return media;
- }
-
- public void setMedia(List media) {
- this.media = media;
- }
-
- public boolean equals(Object obj) {
- if (!(obj instanceof QoSState)) {
- return false;
- }
-
- QoSState other = (QoSState) obj;
-
- if ((duration == null && other.duration != null) ||
- duration != null && !duration.equals(other.duration)) {
- return false;
- }
-
- return (media == null && other.media == null) ||
- media != null && media.equals(other.media);
- }
-
- public int hashCode() {
- return Objects.hash(duration, media);
- }
-}
diff --git a/modules/common/src/main/java/org/dcache/qos/QoSStorageMedium.java b/modules/common/src/main/java/org/dcache/qos/QoSStorageMedium.java
deleted file mode 100644
index b9385a51076..00000000000
--- a/modules/common/src/main/java/org/dcache/qos/QoSStorageMedium.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-COPYRIGHT STATUS:
-Dec 1st 2001, Fermi National Accelerator Laboratory (FNAL) documents and
-software are sponsored by the U.S. Department of Energy under Contract No.
-DE-AC02-76CH03000. Therefore, the U.S. Government retains a world-wide
-non-exclusive, royalty-free license to publish or reproduce these documents
-and software for U.S. Government purposes. All documents and software
-available from this server are protected under the U.S. and Foreign
-Copyright Laws, and FNAL reserves all rights.
-
-Distribution of the software available from this server is free of
-charge subject to the user following the terms of the Fermitools
-Software Legal Information.
-
-Redistribution and/or modification of the software shall be accompanied
-by the Fermitools Software Legal Information (including the copyright
-notice).
-
-The user is asked to feed back problems, benefits, and/or suggestions
-about the software to the Fermilab Software Providers.
-
-Neither the name of Fermilab, the URA, nor the names of the contributors
-may be used to endorse or promote products derived from this software
-without specific prior written permission.
-
-DISCLAIMER OF LIABILITY (BSD):
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FERMILAB,
-OR THE URA, OR THE U.S. DEPARTMENT of ENERGY, OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Liabilities of the Government:
-
-This software is provided by URA, independent from its Prime Contract
-with the U.S. Department of Energy. URA is acting independently from
-the Government and in its own private capacity and is not acting on
-behalf of the U.S. Government, nor as its contractor nor its agent.
-Correspondingly, it is understood and agreed that the U.S. Government
-has no connection to this software and in no manner whatsoever shall
-be liable for nor assume any responsibility or obligation for any claim,
-cost, or damages arising out of or resulting from the use of the software
-available from this server.
-
-Export Control:
-
-All documents and software available from this server are subject to U.S.
-export control laws. Anyone downloading information from this server is
-obligated to secure any necessary Government licenses before exporting
-documents or software obtained from this server.
- */
-package org.dcache.qos;
-
-public enum QoSStorageMedium {
- DISK,HSM
-}
diff --git a/modules/common/src/main/java/org/dcache/qos/QoSStorageMediumSpecification.java b/modules/common/src/main/java/org/dcache/qos/QoSStorageMediumSpecification.java
deleted file mode 100644
index 18e2345d44d..00000000000
--- a/modules/common/src/main/java/org/dcache/qos/QoSStorageMediumSpecification.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-COPYRIGHT STATUS:
-Dec 1st 2001, Fermi National Accelerator Laboratory (FNAL) documents and
-software are sponsored by the U.S. Department of Energy under Contract No.
-DE-AC02-76CH03000. Therefore, the U.S. Government retains a world-wide
-non-exclusive, royalty-free license to publish or reproduce these documents
-and software for U.S. Government purposes. All documents and software
-available from this server are protected under the U.S. and Foreign
-Copyright Laws, and FNAL reserves all rights.
-
-Distribution of the software available from this server is free of
-charge subject to the user following the terms of the Fermitools
-Software Legal Information.
-
-Redistribution and/or modification of the software shall be accompanied
-by the Fermitools Software Legal Information (including the copyright
-notice).
-
-The user is asked to feed back problems, benefits, and/or suggestions
-about the software to the Fermilab Software Providers.
-
-Neither the name of Fermilab, the URA, nor the names of the contributors
-may be used to endorse or promote products derived from this software
-without specific prior written permission.
-
-DISCLAIMER OF LIABILITY (BSD):
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FERMILAB,
-OR THE URA, OR THE U.S. DEPARTMENT of ENERGY, OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Liabilities of the Government:
-
-This software is provided by URA, independent from its Prime Contract
-with the U.S. Department of Energy. URA is acting independently from
-the Government and in its own private capacity and is not acting on
-behalf of the U.S. Government, nor as its contractor nor its agent.
-Correspondingly, it is understood and agreed that the U.S. Government
-has no connection to this software and in no manner whatsoever shall
-be liable for nor assume any responsibility or obligation for any claim,
-cost, or damages arising out of or resulting from the use of the software
-available from this server.
-
-Export Control:
-
-All documents and software available from this server are subject to U.S.
-export control laws. Anyone downloading information from this server is
-obligated to secure any necessary Government licenses before exporting
-documents or software obtained from this server.
- */
-package org.dcache.qos;
-
-import java.io.Serializable;
-
-/**
- * Describes a possible storage medium type.
- */
-public interface QoSStorageMediumSpecification extends Serializable {
-
- /**
- * @return either DISK or HSM
- */
- QoSStorageMedium getStorageMedium();
-
- /**
- * @return a generic identifier for this medium (e.g., tape-system name, disk type, etc.)
- */
- String getType();
-
- /**
- * @return how many replicas of the file should be stored on this medium/
- */
- Integer getNumberOfCopies();
-}
diff --git a/modules/common/src/test/java/org/dcache/qos/QoSPolicyTest.java b/modules/common/src/test/java/org/dcache/qos/QoSPolicyTest.java
deleted file mode 100644
index 1da8b3264d5..00000000000
--- a/modules/common/src/test/java/org/dcache/qos/QoSPolicyTest.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
-COPYRIGHT STATUS:
-Dec 1st 2001, Fermi National Accelerator Laboratory (FNAL) documents and
-software are sponsored by the U.S. Department of Energy under Contract No.
-DE-AC02-76CH03000. Therefore, the U.S. Government retains a world-wide
-non-exclusive, royalty-free license to publish or reproduce these documents
-and software for U.S. Government purposes. All documents and software
-available from this server are protected under the U.S. and Foreign
-Copyright Laws, and FNAL reserves all rights.
-
-Distribution of the software available from this server is free of
-charge subject to the user following the terms of the Fermitools
-Software Legal Information.
-
-Redistribution and/or modification of the software shall be accompanied
-by the Fermitools Software Legal Information (including the copyright
-notice).
-
-The user is asked to feed back problems, benefits, and/or suggestions
-about the software to the Fermilab Software Providers.
-
-Neither the name of Fermilab, the URA, nor the names of the contributors
-may be used to endorse or promote products derived from this software
-without specific prior written permission.
-
-DISCLAIMER OF LIABILITY (BSD):
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FERMILAB,
-OR THE URA, OR THE U.S. DEPARTMENT of ENERGY, OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Liabilities of the Government:
-
-This software is provided by URA, independent from its Prime Contract
-with the U.S. Department of Energy. URA is acting independently from
-the Government and in its own private capacity and is not acting on
-behalf of the U.S. Government, nor as its contractor nor its agent.
-Correspondingly, it is understood and agreed that the U.S. Government
-has no connection to this software and in no manner whatsoever shall
-be liable for nor assume any responsibility or obligation for any claim,
-cost, or damages arising out of or resulting from the use of the software
-available from this server.
-
-Export Control:
-
-All documents and software available from this server are subject to U.S.
-export control laws. Anyone downloading information from this server is
-obligated to secure any necessary Government licenses before exporting
-documents or software obtained from this server.
- */
-package org.dcache.qos;
-
-import static org.dcache.qos.QoSPolicyTest.QoSPolicyBuilder.aQoSPolicy;
-import static org.dcache.qos.QoSPolicyTest.QoSStateBuilder.aQoSState;
-import static org.dcache.qos.QoSPolicyTest.SpecificationBuilder.aDiskSpecification;
-import static org.dcache.qos.QoSPolicyTest.SpecificationBuilder.aTapeSpecification;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.google.gson.GsonBuilder;
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-import org.json.JSONArray;
-import org.json.JSONObject;
-import org.junit.Test;
-
-public class QoSPolicyTest {
-
- static class QoSPolicyBuilder {
-
- QoSPolicy policy;
-
- static QoSPolicyBuilder aQoSPolicy(String name) {
- QoSPolicyBuilder builder = new QoSPolicyBuilder();
- builder.policy = new QoSPolicy();
- builder.policy.setName(name);
- return builder;
- }
-
- QoSPolicyBuilder withStates(QoSStateBuilder... builder) {
- policy.setStates(
- Arrays.stream(builder).map(QoSStateBuilder::build).collect(Collectors.toList()));
- return this;
- }
-
- QoSPolicy build() {
- return policy;
- }
- }
-
- static class QoSStateBuilder {
-
- QoSState state;
-
- static QoSStateBuilder aQoSState() {
- QoSStateBuilder builder = new QoSStateBuilder();
- builder.state = new QoSState();
- return builder;
- }
-
- QoSStateBuilder with(SpecificationBuilder... builder) {
- state.setMedia(Arrays.stream(builder).map(SpecificationBuilder::build)
- .collect(Collectors.toList()));
- return this;
- }
-
- QoSStateBuilder lasting(String duration) {
- state.setDuration(duration);
- return this;
- }
-
- QoSState build() {
- return state;
- }
- }
-
- static class SpecificationBuilder {
-
- QoSStorageMediumSpecification specification;
-
- static SpecificationBuilder aDiskSpecification(String type) {
- SpecificationBuilder builder = new SpecificationBuilder();
- builder.specification = new DefaultQoSDiskSpecification();
- ((DefaultQoSDiskSpecification) builder.specification).setType(type);
- return builder;
- }
-
- static SpecificationBuilder aTapeSpecification(String type) {
- SpecificationBuilder builder = new SpecificationBuilder();
- builder.specification = new DefaultQoSTapeSpecification();
- ((DefaultQoSTapeSpecification) builder.specification).setType(type);
- return builder;
- }
-
- SpecificationBuilder withCopies(int copies) {
- ((DefaultQoSDiskSpecification) specification).setNumberOfCopies(copies);
- return this;
- }
-
- SpecificationBuilder partitionedBy(String... keys) {
- ((DefaultQoSDiskSpecification) specification).setPartitionKeys(
- Arrays.stream(keys).collect(
- Collectors.toList()));
- return this;
- }
-
- SpecificationBuilder withInstance(String instance) {
- ((DefaultQoSTapeSpecification) specification).setInstance(instance);
- return this;
- }
-
- QoSStorageMediumSpecification build() {
- return specification;
- }
- }
-
- private QoSPolicy policy;
- private String jsonPolicy;
-
- @Test
- public void shouldParseQoSPolicyCorrectly() {
- givenAQoSPolicy();
- whenSerializedAsJson();
- verifyJsonEqualsJavaObject();
- }
-
- @Test
- public void shouldDeserializePolicyCorrectly() {
- givenAQoSPolicy();
- whenSerializedAsJson();
- assertEquals("JSON did not deserialize properly", policy, thePolicyDeserializedFromJson());
- }
-
- private void givenAQoSPolicy() {
- policy = aQoSPolicy("MyAnalysisData")
- .withStates(
- aQoSState().lasting("P1M")
- .with(aDiskSpecification("SSD").withCopies(2).partitionedBy("hostname"),
- aDiskSpecification("spinning").withCopies(1)),
- aQoSState().lasting("P3M")
- .with(aDiskSpecification("spinning").withCopies(2)
- .partitionedBy("hostname"),
- aTapeSpecification("CTA").withInstance("CTA::public")),
- aQoSState().with(aTapeSpecification("CTA").withInstance("CTA::public"))).build();
- }
-
- private QoSPolicy thePolicyDeserializedFromJson() {
- return DefaultQoSPolicyJsonDeserializer.fromJsonString(jsonPolicy);
- }
-
- private void verifyJsonEqualsJavaObject() {
- JSONObject object = new JSONObject(jsonPolicy);
- assertEquals("different policy name!", policy.getName(), object.getString("name"));
- List states = policy.getStates();
- JSONArray stateArray = object.getJSONArray("states");
- int len = policy.getStates().size();
- assertEquals("different number of states!", len, stateArray.length());
- for (int i = 0; i < len; ++i) {
- QoSState origState = states.get(i);
- JSONObject jsonState = stateArray.optJSONObject(i);
- String duration = origState.getDuration();
- if (duration == null) {
- assertFalse("duration should have been null!", jsonState.has("duration"));
- } else {
- assertTrue("duration should not be null!", jsonState.has("duration"));
- assertEquals("duration are different!", duration,
- jsonState.getString("duration"));
- }
-
- List media = origState.getMedia();
- JSONArray mediaArray = jsonState.getJSONArray("media");
- int mLen = media.size();
- assertEquals(mLen, mediaArray.length());
- for (int j = 0; j < mLen; ++j) {
- QoSStorageMediumSpecification origSpec = media.get(j);
- JSONObject jsonSpec = mediaArray.getJSONObject(j);
- assertEquals("storage element at " + j + " does not match!",
- origSpec.getStorageMedium().name(),
- jsonSpec.getString("storageElement"));
- assertEquals("storage element type does not match",
- origSpec.getType(), jsonSpec.getString("type"));
- switch (origSpec.getStorageMedium()) {
- case DISK:
- assertEquals("number of copies does not match",
- origSpec.getNumberOfCopies(),
- (Integer) jsonSpec.getInt("numberOfCopies"));
- QoSDiskSpecification disk = (QoSDiskSpecification) origSpec;
- List keys = disk.getPartitionKeys();
- if (keys == null) {
- assertFalse("partition keys should have been null!",
- jsonSpec.has("partitionKeys"));
- continue;
- }
- assertTrue("partition keys should not be null!",
- jsonSpec.has("partitionKeys"));
- int kLen = keys.size();
- JSONArray keyArray = jsonSpec.getJSONArray("partitionKeys");
- assertEquals(kLen, keyArray.length());
- for (int k = 0; k < kLen; ++k) {
- assertEquals("partition key does not match!", keys.get(k),
- keyArray.get(k));
- }
- break;
- case HSM:
- QoSHsmSpecification hsm = (QoSHsmSpecification) origSpec;
- assertEquals("hsm instance does not match!", hsm.getInstance(),
- jsonSpec.getString("instance"));
- break;
- }
- }
- }
- }
-
- private void whenSerializedAsJson() {
- jsonPolicy = new GsonBuilder().setPrettyPrinting()
- .disableHtmlEscaping()
- .create().toJson(policy);
- }
-}