This is an automated email from the ASF dual-hosted git repository.
mboehm7 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/systemds.git
The following commit(s) were added to refs/heads/master by this push:
new b685db6 [SYSTEMDS-2668] Modified Privacy Monitor for Fine-Grained
Constraints
b685db6 is described below
commit b685db68f6ff590f5a90bc8f82cd9a028fa7f02f
Author: sebwrede <[email protected]>
AuthorDate: Sun Dec 20 19:29:13 2020 +0100
[SYSTEMDS-2668] Modified Privacy Monitor for Fine-Grained Constraints
Closes #1120.
---
.../sysds/runtime/privacy/PrivacyMonitor.java | 92 +++++++++-------------
1 file changed, 37 insertions(+), 55 deletions(-)
diff --git a/src/main/java/org/apache/sysds/runtime/privacy/PrivacyMonitor.java
b/src/main/java/org/apache/sysds/runtime/privacy/PrivacyMonitor.java
index 97ac22b..56445e4 100644
--- a/src/main/java/org/apache/sysds/runtime/privacy/PrivacyMonitor.java
+++ b/src/main/java/org/apache/sysds/runtime/privacy/PrivacyMonitor.java
@@ -25,10 +25,12 @@ import java.util.concurrent.atomic.LongAdder;
import org.apache.sysds.runtime.instructions.cp.Data;
import org.apache.sysds.runtime.privacy.PrivacyConstraint.PrivacyLevel;
-public class PrivacyMonitor
-{
+public class PrivacyMonitor
+{
private static EnumMap<PrivacyLevel,LongAdder> checkedConstraints;
+ private static boolean checkPrivacy = false;
+
static {
checkedConstraints = new EnumMap<>(PrivacyLevel.class);
for ( PrivacyLevel level : PrivacyLevel.values() ){
@@ -36,19 +38,37 @@ public class PrivacyMonitor
}
}
- private static boolean checkPrivacy = false;
-
- public static EnumMap<PrivacyLevel,LongAdder> getCheckedConstraints(){
+ public static EnumMap<PrivacyLevel,LongAdder> getCheckedConstraints() {
return checkedConstraints;
}
- private static void incrementCheckedConstraints(PrivacyLevel
privacyLevel){
+ private static void incrementCheckedConstraints(PrivacyLevel
privacyLevel) {
+ if ( privacyLevel == null )
+ throw new NullPointerException("Cannot increment
checked constraints log: Privacy level is null.");
+ checkedConstraints.get(privacyLevel).increment();
+ }
+
+ /**
+ * Update checked constraints log if checkPrivacy is activated.
+ * The checked constraints log is updated with both the general
+ * privacy constraint and the fine-grained constraints.
+ *
+ * @param privacyConstraint used for updating log
+ */
+ private static void updateCheckedConstraintsLog(PrivacyConstraint
privacyConstraint) {
if ( checkPrivacy ){
- if ( privacyLevel == null )
- throw new NullPointerException("Cannot
increment checked constraints log: Privacy level is null.");
- checkedConstraints.get(privacyLevel).increment();
+ if ( privacyConstraint.privacyLevel !=
PrivacyLevel.None){
+
incrementCheckedConstraints(privacyConstraint.privacyLevel);
+ }
+ if (
PrivacyUtils.privacyConstraintFineGrainedActivated(privacyConstraint) ){
+ int privateNum =
privacyConstraint.getFineGrainedPrivacy()
+
.getDataRangesOfPrivacyLevel(PrivacyLevel.Private).length;
+ int aggregateNum =
privacyConstraint.getFineGrainedPrivacy()
+
.getDataRangesOfPrivacyLevel(PrivacyLevel.PrivateAggregation).length;
+
checkedConstraints.get(PrivacyLevel.Private).add(privateNum);
+
checkedConstraints.get(PrivacyLevel.PrivateAggregation).add(aggregateNum);
+ }
}
-
}
public static void clearCheckedConstraints(){
@@ -61,58 +81,20 @@ public class PrivacyMonitor
/**
* Throws DMLPrivacyException if privacy constraint is set to private
or private aggregation.
+ * The checked constraints log will be updated before throwing an
exception.
* @param dataObject input data object
- * @return data object or data object with privacy constraint removed
in case the privacy level was none.
+ * @return data object or data object with privacy constraint removed
in case the privacy level was none.
*/
public static Data handlePrivacy(Data dataObject){
if(dataObject == null)
return null;
PrivacyConstraint privacyConstraint =
dataObject.getPrivacyConstraint();
- if (privacyConstraint != null){
- PrivacyLevel privacyLevel =
privacyConstraint.getPrivacyLevel();
- incrementCheckedConstraints(privacyLevel);
- switch(privacyLevel){
- case None:
- dataObject.setPrivacyConstraints(null);
- break;
- case Private:
- case PrivateAggregation:
- throw new DMLPrivacyException("Cannot
share variable, since the privacy constraint "
- + "of the requested variable is
set to " + privacyLevel.name());
- default: {
- throw new DMLPrivacyException("Privacy
level "
- + privacyLevel.name() + " of
variable not recognized");
- }
- }
- }
- return dataObject;
- }
- /**
- * Throws DMLPrivacyException if privacy constraint of data object has
level privacy.
- * @param dataObject input matrix object
- * @return data object or data object with privacy constraint removed
in case the privacy level was none.
- */
- public static Data handlePrivacyAllowAggregation(Data dataObject){
- PrivacyConstraint privacyConstraint =
dataObject.getPrivacyConstraint();
- if (privacyConstraint != null){
- PrivacyLevel privacyLevel =
privacyConstraint.getPrivacyLevel();
- incrementCheckedConstraints(privacyLevel);
- switch(privacyLevel){
- case None:
- dataObject.setPrivacyConstraints(null);
- break;
- case Private:
- throw new DMLPrivacyException("Cannot
share variable, since the privacy constraint "
- + "of the requested variable is
set to " + privacyLevel.name());
- case PrivateAggregation:
- break;
- default: {
- throw new DMLPrivacyException("Privacy
level "
- + privacyLevel.name() + " of
variable not recognized");
- }
- }
- }
+ if ( PrivacyUtils.someConstraintSetUnary(privacyConstraint) ){
+ updateCheckedConstraintsLog(privacyConstraint);
+ throw new DMLPrivacyException("Cannot share variable,
since the privacy constraint "
+ + "of the requested variable is activated");
+ } else dataObject.setPrivacyConstraints(null);
return dataObject;
}
}