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;
        }
 }

Reply via email to