Repository: ranger
Updated Branches:
  refs/heads/master e2c52d62b -> c7260c3ee


Revert "RANGER-1827 microbenchmark for RangerPolicyEngine"

This reverts commit c806d17779144df3d0c60402a03cb167e69c1582.


Project: http://git-wip-us.apache.org/repos/asf/ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/ranger/commit/c7260c3e
Tree: http://git-wip-us.apache.org/repos/asf/ranger/tree/c7260c3e
Diff: http://git-wip-us.apache.org/repos/asf/ranger/diff/c7260c3e

Branch: refs/heads/master
Commit: c7260c3eeee0b9f33f01a166b1be5ee6540a10d7
Parents: e2c52d6
Author: Velmurugan Periasamy <v...@apache.org>
Authored: Thu Dec 7 11:07:40 2017 -0500
Committer: Velmurugan Periasamy <v...@apache.org>
Committed: Thu Dec 7 11:07:40 2017 -0500

----------------------------------------------------------------------
 .../ranger/plugin/util/PerfDataRecorder.java    |  43 +---
 ranger-tools/pom.xml                            |  21 --
 .../ranger/policyengine/PerfTestClient.java     |  32 ++-
 .../RangerAccessRequestDeserializer.java        |  52 ----
 .../RangerResourceDeserializer.java             |  50 ----
 .../perftest/v2/RangerPolicyFactory.java        | 256 -------------------
 .../RangerPolicyEnginePerformanceTest.java      | 224 ----------------
 .../src/test/resources/log4j.properties         |   2 -
 .../testdata/performance-chart.template         |  44 ----
 .../testdata/single-policy-template.json        |  83 ------
 .../testdata/single-request-template.json       |  16 --
 11 files changed, 35 insertions(+), 788 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ranger/blob/c7260c3e/agents-common/src/main/java/org/apache/ranger/plugin/util/PerfDataRecorder.java
----------------------------------------------------------------------
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/PerfDataRecorder.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/PerfDataRecorder.java
index 2816369..25f5334 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/PerfDataRecorder.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/PerfDataRecorder.java
@@ -23,8 +23,6 @@ import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import com.google.common.collect.ImmutableMap;
-
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -82,15 +80,15 @@ public class PerfDataRecorder {
                        long averageTimeSpent = 0L;
 
                        if (perfStatistic.numberOfInvocations.get() != 0L) {
-                               averageTimeSpent = 
perfStatistic.microSecondsSpent.get()/perfStatistic.numberOfInvocations.get();
+                               averageTimeSpent = 
perfStatistic.millisecondsSpent.get()/perfStatistic.numberOfInvocations.get();
                        }
 
                        String logMsg = "[" + tag + "]" +
-                             " execCount: " + 
perfStatistic.numberOfInvocations.get() +
-                             ", totalTimeTaken: " + 
perfStatistic.microSecondsSpent.get() + " μs" +
-                             ", maxTimeTaken: " + 
perfStatistic.maxTimeSpent.get() + " μs" +
-                             ", minTimeTaken: " + 
perfStatistic.minTimeSpent.get() + " μs" +
-                             ", avgTimeTaken: " + averageTimeSpent + " μs";
+                             " execCount:" + 
perfStatistic.numberOfInvocations.get() +
+                             ", totalTimeTaken:" + 
perfStatistic.millisecondsSpent.get() +
+                             ", maxTimeTaken:" + 
perfStatistic.maxTimeSpent.get() +
+                             ", minTimeTaken:" + 
perfStatistic.minTimeSpent.get() +
+                             ", avgTimeTaken:" + averageTimeSpent;
 
                        LOG.info(logMsg);
                        PERF.debug(logMsg);
@@ -127,22 +125,15 @@ public class PerfDataRecorder {
                }
        }
 
-       public static Map<String, PerfStatistic> exposeStatistics() {
-               if (instance != null) {
-                       return ImmutableMap.copyOf(instance.perfStatistics);
-               }
-               return ImmutableMap.of();
-       }
-
-       public static class PerfStatistic {
+       private static class PerfStatistic {
                private AtomicLong numberOfInvocations = new AtomicLong(0L);
-               private AtomicLong microSecondsSpent = new AtomicLong(0L);
+               private AtomicLong millisecondsSpent = new AtomicLong(0L);
                private AtomicLong minTimeSpent = new 
AtomicLong(Long.MAX_VALUE);
                private AtomicLong maxTimeSpent = new 
AtomicLong(Long.MIN_VALUE);
 
                void addPerfDataItem(final long timeTaken) {
                        numberOfInvocations.getAndIncrement();
-                       microSecondsSpent.getAndAdd(timeTaken);
+                       millisecondsSpent.getAndAdd(timeTaken);
 
                        long min = minTimeSpent.get();
                        if(timeTaken < min) {
@@ -154,21 +145,5 @@ public class PerfDataRecorder {
                                maxTimeSpent.compareAndSet(max, timeTaken);
                        }
                }
-
-               public long getNumberOfInvocations() {
-                       return numberOfInvocations.get();
-               }
-
-               public long getMicroSecondsSpent() {
-                       return microSecondsSpent.get();
-               }
-
-               public long getMinTimeSpent() {
-                       return minTimeSpent.get();
-               }
-
-               public long getMaxTimeSpent() {
-                       return maxTimeSpent.get();
-               }
        }
 }

http://git-wip-us.apache.org/repos/asf/ranger/blob/c7260c3e/ranger-tools/pom.xml
----------------------------------------------------------------------
diff --git a/ranger-tools/pom.xml b/ranger-tools/pom.xml
index c6db1f2..ff37fb3 100644
--- a/ranger-tools/pom.xml
+++ b/ranger-tools/pom.xml
@@ -58,26 +58,5 @@
             <artifactId>ranger-plugins-common</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <dependency>
-                       <groupId>be.ceau</groupId>
-                       <artifactId>chart</artifactId>
-                       <version>2.2.0</version>
-               </dependency>        
     </dependencies>
-    <build>
-        <pluginManagement>
-            <plugins>
-            <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-surefire-plugin</artifactId>
-                    <version>2.20</version>
-                    <configuration>
-                    <excludes>
-                        
<exclude>**/RangerPolicyEnginePerformanceTest*</exclude>
-                    </excludes>
-                    </configuration>
-            </plugin>
-            </plugins>
-        </pluginManagement>
-        </build>
 </project>

http://git-wip-us.apache.org/repos/asf/ranger/blob/c7260c3e/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestClient.java
----------------------------------------------------------------------
diff --git 
a/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestClient.java 
b/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestClient.java
index 5bdb783..e6095cb 100644
--- 
a/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestClient.java
+++ 
b/ranger-tools/src/main/java/org/apache/ranger/policyengine/PerfTestClient.java
@@ -42,14 +42,14 @@ public class PerfTestClient extends Thread {
        final int maxCycles;
 
        List<RequestData> requests = null;
-       private static Gson gson  = null;
+       static Gson gsonBuilder  = null;
 
        static {
-               GsonBuilder builder = new 
GsonBuilder().setDateFormat("yyyyMMdd-HH:mm:ss.SSS-Z");
-               gson = builder
+
+               gsonBuilder = new 
GsonBuilder().setDateFormat("yyyyMMdd-HH:mm:ss.SSS-Z")
                                .setPrettyPrinting()
-                               .registerTypeAdapter(RangerAccessRequest.class, 
new RangerAccessRequestDeserializer(builder))
-                               
.registerTypeAdapter(RangerAccessResource.class, new 
RangerResourceDeserializer(builder))
+                               .registerTypeAdapter(RangerAccessRequest.class, 
new RangerAccessRequestDeserializer())
+                               
.registerTypeAdapter(RangerAccessResource.class, new 
RangerResourceDeserializer())
                                .create();
        }
 
@@ -89,7 +89,7 @@ public class PerfTestClient extends Thread {
                        Type listType = new TypeToken<List<RequestData>>() {
                        }.getType();
 
-                       requests = gson.fromJson(reader, listType);
+                       requests = gsonBuilder.fromJson(reader, listType);
 
                        ret = true;
                }
@@ -156,4 +156,24 @@ public class PerfTestClient extends Thread {
                public void setRequest(RangerAccessRequest request) { 
this.request = request;}
                public void setResult(RangerAccessResult result) { this.result 
= result;}
        }
+
+       static class RangerAccessRequestDeserializer implements 
JsonDeserializer<RangerAccessRequest> {
+               @Override
+               public RangerAccessRequest deserialize(JsonElement jsonObj, 
Type type,
+                                                                               
           JsonDeserializationContext context) throws JsonParseException {
+                       RangerAccessRequestImpl ret = 
gsonBuilder.fromJson(jsonObj, RangerAccessRequestImpl.class);
+
+                       ret.setAccessType(ret.getAccessType()); // to force 
computation of isAccessTypeAny and isAccessTypeDelegatedAdmin
+
+                       return ret;
+               }
+       }
+
+       static class RangerResourceDeserializer implements 
JsonDeserializer<RangerAccessResource> {
+               @Override
+               public RangerAccessResource deserialize(JsonElement jsonObj, 
Type type,
+                                                                               
                JsonDeserializationContext context) throws JsonParseException {
+                       return gsonBuilder.fromJson(jsonObj, 
RangerAccessResourceImpl.class);
+               }
+       }
 }

http://git-wip-us.apache.org/repos/asf/ranger/blob/c7260c3e/ranger-tools/src/main/java/org/apache/ranger/policyengine/RangerAccessRequestDeserializer.java
----------------------------------------------------------------------
diff --git 
a/ranger-tools/src/main/java/org/apache/ranger/policyengine/RangerAccessRequestDeserializer.java
 
b/ranger-tools/src/main/java/org/apache/ranger/policyengine/RangerAccessRequestDeserializer.java
deleted file mode 100644
index fd7762d..0000000
--- 
a/ranger-tools/src/main/java/org/apache/ranger/policyengine/RangerAccessRequestDeserializer.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ranger.policyengine;
-
-import java.lang.reflect.Type;
-
-import org.apache.ranger.plugin.policyengine.RangerAccessRequest;
-import org.apache.ranger.plugin.policyengine.RangerAccessRequestImpl;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-
-/**
- * {@link JsonDeserializer} to assist {@link Gson} with selecting proper type
- * when encountering RangerAccessRequest interface in the source json.
- */
-public class RangerAccessRequestDeserializer implements 
JsonDeserializer<RangerAccessRequest> {
-
-       private GsonBuilder gsonBuilder;
-
-       public RangerAccessRequestDeserializer(final GsonBuilder builder) {
-               this.gsonBuilder = builder;
-       }
-
-       @Override
-       public RangerAccessRequest deserialize(JsonElement jsonObj, Type type, 
JsonDeserializationContext context) throws JsonParseException {
-               RangerAccessRequestImpl ret = 
gsonBuilder.create().fromJson(jsonObj, RangerAccessRequestImpl.class);
-               ret.setAccessType(ret.getAccessType()); // to force computation 
of isAccessTypeAny and isAccessTypeDelegatedAdmin
-               return ret;
-       }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ranger/blob/c7260c3e/ranger-tools/src/main/java/org/apache/ranger/policyengine/RangerResourceDeserializer.java
----------------------------------------------------------------------
diff --git 
a/ranger-tools/src/main/java/org/apache/ranger/policyengine/RangerResourceDeserializer.java
 
b/ranger-tools/src/main/java/org/apache/ranger/policyengine/RangerResourceDeserializer.java
deleted file mode 100644
index da549f1..0000000
--- 
a/ranger-tools/src/main/java/org/apache/ranger/policyengine/RangerResourceDeserializer.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ranger.policyengine;
-
-import java.lang.reflect.Type;
-
-import org.apache.ranger.plugin.policyengine.RangerAccessResource;
-import org.apache.ranger.plugin.policyengine.RangerAccessResourceImpl;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-
-/**
- * {@link JsonDeserializer} to assist {@link Gson} with selecting proper type
- * when encountering RangerAccessResource interface in the source json.
- */
-public class RangerResourceDeserializer implements 
JsonDeserializer<RangerAccessResource> {
-
-       private GsonBuilder gsonBuilder;
-
-       public RangerResourceDeserializer(final GsonBuilder builder) {
-               this.gsonBuilder = builder;
-       }
-
-       @Override
-       public RangerAccessResource deserialize(JsonElement jsonObj, Type type, 
JsonDeserializationContext context) throws JsonParseException {
-               return gsonBuilder.create().fromJson(jsonObj, 
RangerAccessResourceImpl.class);
-       }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ranger/blob/c7260c3e/ranger-tools/src/main/java/org/apache/ranger/policyengine/perftest/v2/RangerPolicyFactory.java
----------------------------------------------------------------------
diff --git 
a/ranger-tools/src/main/java/org/apache/ranger/policyengine/perftest/v2/RangerPolicyFactory.java
 
b/ranger-tools/src/main/java/org/apache/ranger/policyengine/perftest/v2/RangerPolicyFactory.java
deleted file mode 100644
index 29b57d0..0000000
--- 
a/ranger-tools/src/main/java/org/apache/ranger/policyengine/perftest/v2/RangerPolicyFactory.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ranger.policyengine.perftest.v2;
-
-import static com.google.common.base.Preconditions.checkState;
-
-import java.io.File;
-import java.lang.reflect.Type;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.apache.ranger.plugin.model.RangerPolicy;
-import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyItem;
-import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyItemAccess;
-import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource;
-import org.apache.ranger.plugin.policyengine.RangerAccessRequest;
-import org.apache.ranger.plugin.policyengine.RangerAccessRequestImpl;
-import org.apache.ranger.plugin.policyengine.RangerAccessResource;
-import org.apache.ranger.plugin.policyengine.RangerAccessResourceImpl;
-import org.apache.ranger.plugin.policyengine.RangerPolicyEngineOptions;
-import org.apache.ranger.plugin.policyevaluator.RangerPolicyEvaluator;
-import org.apache.ranger.plugin.util.ServicePolicies;
-import org.apache.ranger.policyengine.RangerAccessRequestDeserializer;
-import org.apache.ranger.policyengine.RangerResourceDeserializer;
-
-import com.google.common.base.Charsets;
-import com.google.common.base.Function;
-import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.io.Files;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
-
-/**
- * Factory for creating and wiring the object graph of {@link ServicePolicies} 
and {@link RangerAccessRequest}.
- */
-public class RangerPolicyFactory {
-
-       private static final double SUCCESSFUL_ACCESS_RATE = 0.7d;
-
-       private static final Random RANDOM = new Random();
-
-       private static final List<String> KNOWN_DATABASES = 
createList("database", 10);
-
-       private static final List<String> KNOWN_TABLES = createList("tables", 
100);
-
-       private static final List<String> KNOWN_COLUMNS = createList("column", 
1000);
-
-       private static final List<String> KNOWN_USERS = createList("user", 
1000);
-
-       private static final List<String> RANDOM_VALUES = createList("random", 
100);
-
-       private static final List<String> ALWAYS_ALLOWED_ACCESS_TYPES = 
Arrays.asList("create", "select", "drop");
-
-       /**
-        * Returns a {@link ServicePolicies service policy} instance with 
containing the specified number of generated policies.
-        * @param numberOfPolicies
-        * @return
-        */
-       public static ServicePolicies createServicePolicy(int numberOfPolicies) 
{
-               ServicePolicies servicePolicies = 
loadTemplate("/testdata/test_servicepolicies_hive.json", new 
TypeToken<ServicePolicies>(){}.getType());
-               mutate(servicePolicies, numberOfPolicies);
-               return servicePolicies;
-       }
-
-       private static void mutate(ServicePolicies servicePolicies, int 
numberOfPolicies) {
-               servicePolicies.getPolicies().clear(); // reset
-               servicePolicies.setPolicies(createPolicies(numberOfPolicies));
-       }
-
-       private static List<RangerPolicy> createPolicies(int numberOfPolicies) {
-               List<RangerPolicy> policies = Lists.newArrayList();
-               String template = 
readResourceFile("/testdata/single-policy-template.json");
-               for (int i = 0; i < numberOfPolicies; i++) {
-                       policies.add(createPolicyFromTemplate(template, i, 
isAllowed()));
-               }
-               return policies;
-       }
-
-       private static RangerPolicy createPolicyFromTemplate(String template, 
long policyId, boolean isAllowed) {
-               RangerPolicy rangerPolicy = buildGson().fromJson(template, 
RangerPolicy.class);
-               rangerPolicy.setId(policyId);
-               rangerPolicy.setName(String.format("generated policyname #%s", 
policyId));
-               
rangerPolicy.setResources(createRangerPolicyResourceMap(isAllowed));
-               rangerPolicy.setPolicyItems(createPolicyItems(isAllowed));
-               return rangerPolicy;
-       }
-
-       private static Map<String, RangerPolicyResource> 
createRangerPolicyResourceMap(boolean isAllowed) {
-               RangerPolicyResource db = new RangerPolicyResource(isAllowed ? 
pickFewRandomly(KNOWN_DATABASES): RANDOM_VALUES, false, false);
-               RangerPolicyResource table = new RangerPolicyResource(isAllowed 
? pickFewRandomly(KNOWN_TABLES) : RANDOM_VALUES, false, false);
-               RangerPolicyResource column = new 
RangerPolicyResource(isAllowed ? pickFewRandomly(KNOWN_COLUMNS) : 
RANDOM_VALUES, false, false);
-               return ImmutableMap.of("database", db, "table", table, 
"column", column);
-       }
-
-
-       private static List<RangerPolicyItem> createPolicyItems(boolean 
isAllowed) {
-               List<RangerPolicyItem> policyItems = Lists.newArrayList();
-               for (int i = 0; i < 15; i++) {
-                       policyItems.add(createPolicyItem(isAllowed));
-               }
-               return policyItems;
-       }
-
-       private static RangerPolicyItem createPolicyItem(boolean isAllowed) {
-               RangerPolicyItem rangerPolicyItem = new RangerPolicyItem();
-               rangerPolicyItem.setDelegateAdmin(false);
-               rangerPolicyItem.setUsers(isAllowed ? KNOWN_USERS : 
RANDOM_VALUES);
-               rangerPolicyItem.setAccesses(createAccesses(isAllowed));
-               return rangerPolicyItem;
-       }
-
-       private static List<RangerPolicyItemAccess> createAccesses(boolean 
isAllowed) {
-               List<RangerPolicyItemAccess> results = Lists.newArrayList();
-               results.addAll(Lists.transform(isAllowed ? 
ALWAYS_ALLOWED_ACCESS_TYPES : RANDOM_VALUES, new Function<String, 
RangerPolicyItemAccess>() {
-                       @Override
-                       public RangerPolicyItemAccess apply(String input) {
-                               return new RangerPolicyItemAccess(input, true);
-                       }
-               }));
-               return results;
-       }
-
-       /**
-        * Generates and returns a list of {@link RangerAccessRequest requests}
-        * @param nubmerOfRequests the number of requests to generate.
-        * @return
-        */
-       public static List<RangerAccessRequest> createAccessRequests(int 
nubmerOfRequests) {
-               List<RangerAccessRequest> result = Lists.newArrayList();
-               Gson gson = buildGson();
-               String template = 
readResourceFile("/testdata/single-request-template.json");
-               for (int i = 0; i < nubmerOfRequests; i++) {
-                       RangerAccessRequestImpl accessRequest = 
gson.fromJson(template, RangerAccessRequestImpl.class);
-                       result.add(mutate(accessRequest, isAllowed()));
-               }
-               return result;
-       }
-
-       /**
-        * @return 10% of the time returns <code>true</code>, in which case the 
generated request policy should evaluate to true.
-        */
-       private static boolean isAllowed() {
-               return RANDOM.nextDouble() < SUCCESSFUL_ACCESS_RATE;
-       }
-
-       private static RangerAccessRequest mutate(RangerAccessRequest template, 
boolean shouldEvaluateToTrue) {
-               RangerAccessRequestImpl accessRequest = 
(RangerAccessRequestImpl) template;
-               accessRequest.setResource(new 
RangerAccessResourceImpl(createResourceElements(shouldEvaluateToTrue)));
-               
accessRequest.setAccessType(pickOneRandomly(ALWAYS_ALLOWED_ACCESS_TYPES ));
-               accessRequest.setRequestData(null);
-               accessRequest.setUser(pickOneRandomly(KNOWN_USERS));
-               return accessRequest;
-       }
-
-       private static ImmutableMap<String, String> 
createResourceElements(boolean shouldEvaluateToTrue) {
-               String database = String.format("db_%s", System.nanoTime());
-               String table = String.format("table_%s", System.nanoTime());
-               String column = String.format("column_%s", System.nanoTime());
-
-               if (shouldEvaluateToTrue) {
-                       database = pickOneRandomly(KNOWN_DATABASES);
-                       table = pickOneRandomly(KNOWN_TABLES);
-                       column = pickOneRandomly(KNOWN_COLUMNS);
-               }
-               return ImmutableMap.of("database", database, "table", table, 
"column", column);
-       }
-
-       private static List<String> createList(String name, int n) {
-               List<String> results = Lists.newArrayList();
-               for (int i = 0; i < n; i++) {
-                       results.add(String.format("%s_%s",name, i));
-               }
-               return results;
-       }
-
-       private static String pickOneRandomly(Collection<String> list) {
-               return Iterables.get(list, RANDOM.nextInt(list.size()));
-       }
-       
-       private static List<String> pickFewRandomly(final List<String> list) {
-               int resultSize = RANDOM.nextInt(list.size());
-               
-               Set<String> results = RANDOM.ints(resultSize, 0, 
list.size()).boxed().map(new java.util.function.Function<Integer, String>() {
-                       @Override
-                       public String apply(Integer index) {
-                               return list.get(index);
-                       }
-               }).collect(Collectors.<String>toSet());
-               
-               return ImmutableList.copyOf(results);
-               
-       }
-
-       private static <T> T loadTemplate(String file, Type targetType) {
-               try {
-                       T model = buildGson().fromJson(readResourceFile(file), 
targetType);
-                       return model;
-               } catch (Exception e) {
-                       throw Throwables.propagate(e);
-               }
-       }
-
-       private static Gson buildGson() {
-               GsonBuilder gsonBuilder = new 
GsonBuilder().setDateFormat("yyyyMMdd-HH:mm:ss.SSS-Z");
-               return gsonBuilder
-                               .registerTypeAdapter(RangerAccessRequest.class, 
new RangerAccessRequestDeserializer(gsonBuilder))
-                               
.registerTypeAdapter(RangerAccessResource.class, new 
RangerResourceDeserializer(gsonBuilder))
-                               .setPrettyPrinting().create();
-       }
-
-       public static String readResourceFile(String fileName) {
-               try {
-                       File f = new 
File(RangerPolicyFactory.class.getResource(fileName).toURI());
-                       checkState(f.exists() && f.isFile() && f.canRead());
-                       return Files.toString(f, Charsets.UTF_8);
-               } catch (Exception e) {
-                       throw Throwables.propagate(e);
-               }
-       }
-
-       public static RangerPolicyEngineOptions createPolicyEngineOption() {
-               RangerPolicyEngineOptions policyEngineOptions = new 
RangerPolicyEngineOptions();
-               policyEngineOptions.disableTagPolicyEvaluation = false;
-               policyEngineOptions.evaluatorType = 
RangerPolicyEvaluator.EVALUATOR_TYPE_OPTIMIZED;
-               policyEngineOptions.cacheAuditResults = false;
-               policyEngineOptions.disableTrieLookupPrefilter = true;
-               return policyEngineOptions;
-       }
-}

http://git-wip-us.apache.org/repos/asf/ranger/blob/c7260c3e/ranger-tools/src/test/java/org/apache/ranger/policyengine/RangerPolicyEnginePerformanceTest.java
----------------------------------------------------------------------
diff --git 
a/ranger-tools/src/test/java/org/apache/ranger/policyengine/RangerPolicyEnginePerformanceTest.java
 
b/ranger-tools/src/test/java/org/apache/ranger/policyengine/RangerPolicyEnginePerformanceTest.java
deleted file mode 100644
index 82f5c1f..0000000
--- 
a/ranger-tools/src/test/java/org/apache/ranger/policyengine/RangerPolicyEnginePerformanceTest.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ranger.policyengine;
-
-import static com.google.common.collect.Iterables.get;
-
-import java.io.File;
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.concurrent.CountDownLatch;
-import java.util.stream.Collectors;
-
-import org.apache.commons.lang.text.StrSubstitutor;
-import org.apache.ranger.plugin.policyengine.RangerAccessRequest;
-import org.apache.ranger.plugin.policyengine.RangerPolicyEngineImpl;
-import org.apache.ranger.plugin.util.PerfDataRecorder;
-import org.apache.ranger.plugin.util.PerfDataRecorder.PerfStatistic;
-import org.apache.ranger.plugin.util.ServicePolicies;
-import org.apache.ranger.policyengine.perftest.v2.RangerPolicyFactory;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameter;
-import org.junit.runners.Parameterized.Parameters;
-
-import com.google.common.base.Charsets;
-import com.google.common.base.Function;
-import com.google.common.base.Splitter;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.CacheLoader;
-import com.google.common.cache.LoadingCache;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import com.google.common.collect.Table;
-import com.google.common.collect.TreeBasedTable;
-import com.google.common.io.Files;
-
-import be.ceau.chart.LineChart;
-import be.ceau.chart.color.Color;
-import be.ceau.chart.data.LineData;
-import be.ceau.chart.dataset.LineDataset;
-
-/**
- * A parameterized JUnit test that tests the performance of 
RangerPolicyEngine, under increasing load of number of policies and concurrent 
calls.
- * A cross product of the input parameters are generated and fed into the test 
method.
- * This microbenchmark includes a warm-up phase so that any of the JIT 
performance optimizations happen before the measurement of the policy engine's 
performance.
- */
-@RunWith(Parameterized.class)
-public class RangerPolicyEnginePerformanceTest {
-
-       private static final String STATISTICS_KEY__ACCESS_ALLOWED = 
"RangerPolicyEngine.isAccessAllowed";
-
-       /* pre-warming unit-under-test's method with this many call iterations, 
so all possible JIT optimization happen before measuring performance */
-       private static final int WARM_UP__ITERATIONS = 30_000;
-
-       private static LoadingCache<Integer, List<RangerAccessRequest>> 
requestsCache = 
CacheBuilder.newBuilder().build(createAccessRequestsCacheLoader());
-
-       private static LoadingCache<Integer, ServicePolicies> 
servicePoliciesCache = 
CacheBuilder.newBuilder().build(createServicePoliciesCacheLoader());
-
-       @Parameter(0)
-       public Integer numberOfPolicies;
-
-       @Parameter(1)
-       public Integer concurrency;
-
-       /**
-        * Generates a cross product of number-of-policies X concurrency 
parameter sets.
-        * @returns a collection of "tuples" (Object[]) of numberOfPolicies and 
concurrency for the given test run
-        */
-       @Parameters(name = "{index}: isAccessAllowed(policies: {0}, concurrent 
calls: {1})")
-       public static Iterable<Object[]> data() {
-               // tree set for maintaining natural ordering
-               Set<Integer> policies = Sets.newTreeSet(Lists.newArrayList(5, 
50, 100, 250, 500, 1_000, 2_000, 3_000, 4_000, 5_000));
-               Set<Integer> concurrency = 
Sets.newTreeSet(Lists.newArrayList(1, 5, 10, 20, 30, 40, 50, 100));
-
-               return Iterables.transform(Sets.cartesianProduct(policies, 
concurrency), new Function<List<Integer>, Object[]>() {
-                       @Override
-                       public Object[] apply(List<Integer> input) {
-                               return input.toArray();
-                       }
-               });
-       }
-
-       @BeforeClass
-       public static void init() throws IOException {
-               PerfDataRecorder.initialize(Arrays.asList("")); // dummy value 
initializes PerfDataRecorder
-               
Files.write("policies;concurrency;average;min;max;total-time-spent;\n", 
outputFile(), Charsets.UTF_8);
-       }
-
-       @AfterClass
-       public static void chartResults() throws IOException {
-               // row: policies
-               // column: concurrency
-               // value: average
-               LineChart chart = buildChart(parsePerformanceTable());
-               String chartMarkup = 
StrSubstitutor.replace(RangerPolicyFactory.readResourceFile("/testdata/performance-chart.template"),
 ImmutableMap.of("data", chart.toJson()));
-               Files.write(chartMarkup, new File("target", 
"performance-chart.html"), Charsets.UTF_8);
-       }
-
-       @Before
-       public void before() throws Exception {
-               PerfDataRecorder.clearStatistics();
-       }
-
-       @After
-       public void after() throws IOException {
-               Map<String, PerfStatistic> exposeStatistics = 
PerfDataRecorder.exposeStatistics();
-               PerfStatistic stat = 
exposeStatistics.get(STATISTICS_KEY__ACCESS_ALLOWED);
-               long average = stat.getNumberOfInvocations() > 0 ? 
(stat.getMicroSecondsSpent() / stat.getNumberOfInvocations()) : 0;
-               Files.append(String.format("%s;%s;%s;%s;%s;%s;\n", 
numberOfPolicies, concurrency, average, stat.getMinTimeSpent(), 
stat.getMaxTimeSpent(), stat.getMicroSecondsSpent()), outputFile(), 
Charsets.UTF_8);
-               PerfDataRecorder.printStatistics();
-               PerfDataRecorder.clearStatistics();
-       }
-
-       @Test
-       public void policyEngineTest() throws InterruptedException {
-               List<RangerAccessRequest> requests = 
requestsCache.getUnchecked(concurrency);
-               ServicePolicies servicePolicies = 
servicePoliciesCache.getUnchecked(numberOfPolicies);
-
-               final RangerPolicyEngineImpl rangerPolicyEngine = new 
RangerPolicyEngineImpl("perf-test", servicePolicies, 
RangerPolicyFactory.createPolicyEngineOption());
-               rangerPolicyEngine.preProcess(requests);
-
-               for (int iterations = 0; iterations < WARM_UP__ITERATIONS; 
iterations++) {
-                       // using return value of 'isAccessAllowed' with a cheap 
operation: System#identityHashCode so JIT wont remove it as dead code
-                       
System.identityHashCode(rangerPolicyEngine.isAccessAllowed(requests.get(iterations
 % concurrency), null)); 
-                       PerfDataRecorder.clearStatistics();
-               }
-
-               final CountDownLatch latch = new CountDownLatch(concurrency);
-               for (int i = 0; i < concurrency; i++) {
-                       final RangerAccessRequest rangerAccessRequest = 
requests.get(i);
-                       new Thread(new Runnable() {
-                               @Override
-                               public void run() {
-                                       
System.identityHashCode(rangerPolicyEngine.isAccessAllowed(rangerAccessRequest, 
null));
-                                       latch.countDown();
-                               }
-                       }, String.format("Client #%s", i)).start();
-               }
-               latch.await();
-       }
-
-       private static File outputFile() {
-               return new File("target", 
"ranger-policy-engine-performance.csv");
-       }
-
-       private static CacheLoader<Integer, List<RangerAccessRequest>> 
createAccessRequestsCacheLoader() {
-               return new CacheLoader<Integer, List<RangerAccessRequest>> () {
-                       @Override
-                       public List<RangerAccessRequest> load(Integer 
numberOfRequests) throws Exception {
-                               return 
RangerPolicyFactory.createAccessRequests(numberOfRequests);
-                       }
-               };
-       }
-
-       private static CacheLoader<Integer, ServicePolicies> 
createServicePoliciesCacheLoader() {
-               return new CacheLoader<Integer, ServicePolicies>() {
-                       @Override
-                       public ServicePolicies load(Integer numberOfPolicies) 
throws Exception {
-                               return 
RangerPolicyFactory.createServicePolicy(numberOfPolicies);
-                       }
-               };
-       }
-       
-       private static LineChart buildChart(Table<Long, Long, BigDecimal> 
policyConcurrencyValueTable) {
-               LineData lineData = new LineData();
-               LineChart chart = new LineChart(lineData);
-               for (Entry<Long, Map<Long, BigDecimal>> concurrencyKeyedEntry : 
policyConcurrencyValueTable.columnMap().entrySet()) {
-                       LineDataset dataset = new LineDataset()
-                                       .setBackgroundColor(Color.TRANSPARENT)
-                                       .setBorderColor(Color.random())
-                                       .setLabel(String.format("%s client(s)", 
concurrencyKeyedEntry.getKey()))
-                                       
.setData(concurrencyKeyedEntry.getValue().values());
-                       lineData.addDataset(dataset);
-               }
-               
-               for (Long policies : policyConcurrencyValueTable.rowKeySet()) {
-                       lineData.addLabels(String.format("Policies %s", 
policies));
-               }
-               return chart;
-       }
-
-       private static Table<Long, Long, BigDecimal> parsePerformanceTable() 
throws IOException {
-               Table<Long, Long, BigDecimal> policyConcurrencyValueTable = 
TreeBasedTable.create();
-               List<String> lines = Files.readLines(outputFile(), 
Charsets.UTF_8).stream().skip(1).collect(Collectors.<String>toList());
-               Splitter splitter = Splitter.on(";");
-               for (String line : lines) {
-                       Iterable<String> values = splitter.split(line);
-                       Long policies = Long.valueOf(get(values, 0));
-                       Long concurrency = Long.valueOf(get(values, 1));
-                       BigDecimal averageValue = new BigDecimal(get(values, 
2));
-                       policyConcurrencyValueTable.put(policies, concurrency, 
averageValue);
-               }
-               return policyConcurrencyValueTable;
-       }
-}

http://git-wip-us.apache.org/repos/asf/ranger/blob/c7260c3e/ranger-tools/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/ranger-tools/src/test/resources/log4j.properties 
b/ranger-tools/src/test/resources/log4j.properties
index 0bc879a..4ea9d85 100644
--- a/ranger-tools/src/test/resources/log4j.properties
+++ b/ranger-tools/src/test/resources/log4j.properties
@@ -42,8 +42,6 @@ ranger.perf.log.file=${java.io.tmpdir}/ranger-perf-test.log
 
 log4j.logger.org.apache.ranger.perf=${ranger.perf.logger}
 log4j.additivity.org.apache.ranger.perf=false
-log4j.logger.org.apache.ranger.plugin.policyengine.RangerPolicyEngineImpl=OFF
-log4j.additivity.org.apache.ranger.plugin.policyengine.RangerPolicyEngineImpl=false
 
 log4j.appender.PERF=org.apache.log4j.DailyRollingFileAppender
 log4j.appender.PERF.File=${ranger.perf.log.file}

http://git-wip-us.apache.org/repos/asf/ranger/blob/c7260c3e/ranger-tools/src/test/resources/testdata/performance-chart.template
----------------------------------------------------------------------
diff --git 
a/ranger-tools/src/test/resources/testdata/performance-chart.template 
b/ranger-tools/src/test/resources/testdata/performance-chart.template
deleted file mode 100644
index 0366fb6..0000000
--- a/ranger-tools/src/test/resources/testdata/performance-chart.template
+++ /dev/null
@@ -1,44 +0,0 @@
-{{!-- 
-  Licensed to the Apache Software Foundation (ASF) under one or more
-  contributor license agreements.  See the NOTICE file distributed with
-  this work for additional information regarding copyright ownership.
-  The ASF licenses this file to You under the Apache License, Version 2.0
-  (the "License"); you may not use this file except in compliance with
-  the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
---}}
-<!doctype html>
-<html>
-<head>
-    <title>Performance Chart</title>
-    <script 
src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.min.js";></script>
-    <style>
-    canvas{
-        -moz-user-select: none;
-        -webkit-user-select: none;
-        -ms-user-select: none;
-    }
-    </style>
-</head>
-
-<body>
-    <div style="width:90%;">
-        <canvas id="canvas"></canvas>
-    </div>
-    <script>
-               var config = ${data};
-
-        window.onload = function() {
-            var ctx = document.getElementById("canvas").getContext("2d");
-            window.myLine = new Chart(ctx, config);
-        };
-    </script>
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ranger/blob/c7260c3e/ranger-tools/src/test/resources/testdata/single-policy-template.json
----------------------------------------------------------------------
diff --git 
a/ranger-tools/src/test/resources/testdata/single-policy-template.json 
b/ranger-tools/src/test/resources/testdata/single-policy-template.json
deleted file mode 100644
index c030803..0000000
--- a/ranger-tools/src/test/resources/testdata/single-policy-template.json
+++ /dev/null
@@ -1,83 +0,0 @@
-{
-       "service": "cl1_hive",
-       "name": "cl1_hive-1-20151212014502",
-       "isAuditEnabled": false,
-       "resources": {
-               "database": {
-                       "values": [
-                               "*"
-                       ],
-                       "isExcludes": false,
-                       "isRecursive": false
-               },
-               "column": {
-                       "values": [
-                               "*"
-                       ],
-                       "isExcludes": false,
-                       "isRecursive": false
-               },
-               "table": {
-                       "values": [
-                               "*"
-                       ],
-                       "isExcludes": false,
-                       "isRecursive": false
-               }
-       },
-       "policyItems": [
-               {
-                       "accesses": [
-                               {
-                                       "type": "select",
-                                       "isAllowed": true
-                               },
-                               {
-                                       "type": "update",
-                                       "isAllowed": true
-                               },
-                               {
-                                       "type": "create",
-                                       "isAllowed": true
-                               },
-                               {
-                                       "type": "drop",
-                                       "isAllowed": true
-                               },
-                               {
-                                       "type": "alter",
-                                       "isAllowed": true
-                               },
-                               {
-                                       "type": "index",
-                                       "isAllowed": true
-                               },
-                               {
-                                       "type": "lock",
-                                       "isAllowed": true
-                               },
-                               {
-                                       "type": "all",
-                                       "isAllowed": true
-                               }
-                       ],
-                       "users": [
-                               "ambari-qa"
-                       ],
-                       "groups": [
-                       ],
-                       "conditions": [
-                       ],
-                       "delegateAdmin": true,
-                       "isEnabled": true
-               }
-       ],
-       "denyPolicyItems": [
-       ],
-       "allowExceptions": [
-       ],
-       "denyExceptions": [
-       ],
-       "id": 2,
-       "isEnabled": true
-}

http://git-wip-us.apache.org/repos/asf/ranger/blob/c7260c3e/ranger-tools/src/test/resources/testdata/single-request-template.json
----------------------------------------------------------------------
diff --git 
a/ranger-tools/src/test/resources/testdata/single-request-template.json 
b/ranger-tools/src/test/resources/testdata/single-request-template.json
deleted file mode 100644
index 1bc409d..0000000
--- a/ranger-tools/src/test/resources/testdata/single-request-template.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-       "request": {
-               "resource": {
-                       "elements": {
-                               "database": "default",
-                               "table": "tbl-0",
-                               "column": "col-2"
-                       }
-               },
-               "accessType": "select",
-               "user": "hrt_1",
-               "userGroups": [
-               ],
-               "requestData": "use default"
-       }
-}

Reply via email to