Author: reschke
Date: Mon Oct 21 07:07:52 2019
New Revision: 1868678
URL: http://svn.apache.org/viewvc?rev=1868678&view=rev
Log:
OAK-8702: deprecate Guava based APIs in o.a.j.o.cache
Modified:
jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java
jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/GuavaDeprecation.java
Modified:
jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java?rev=1868678&r1=1868677&r2=1868678&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java
(original)
+++
jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/cache/CacheLIRS.java
Mon Oct 21 07:07:52 2019
@@ -17,7 +17,9 @@
package org.apache.jackrabbit.oak.cache;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -38,6 +40,8 @@ import com.google.common.cache.Weigher;
import com.google.common.collect.ImmutableMap;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.UncheckedExecutionException;
+
+import org.apache.jackrabbit.oak.spi.GuavaDeprecation;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
@@ -78,7 +82,13 @@ public class CacheLIRS<K, V> implements
static final ThreadLocal<Integer> CURRENTLY_LOADING = new
ThreadLocal<Integer>();
private static final AtomicInteger NEXT_CACHE_ID = new AtomicInteger();
private static final boolean PUT_HOT =
Boolean.parseBoolean(System.getProperty("oak.cacheLIRS.putHot", "true"));
-
+
+ // see OAK-8702
+ private static final List<String> ALLOWED_USERS = Collections
+ .unmodifiableList(Arrays
+ .asList(new String[] {
"org.apache.jackrabbit.oak.plugins.blob.",
"org.apache.jackrabbit.oak.plugins.document.",
+ "org.apache.jackrabbit.oak.segment." }));
+
/**
* Listener for items that are evicted from the cache. The listener
* is called for both, resident and non-resident items. In the
@@ -167,6 +177,7 @@ public class CacheLIRS<K, V> implements
CacheLIRS(Weigher<K, V> weigher, long maxMemory, int averageMemory,
int segmentCount, int stackMoveDistance, final CacheLoader<K, V>
loader,
EvictionCallback<K, V> evicted, String module) {
+ GuavaDeprecation.handleCall("OAK-8702", CacheLIRS.class.getName(),
ALLOWED_USERS);
LOG.debug("Init #{}, module={}, maxMemory={}, segmentCount={},
stackMoveDistance={}",
cacheId, module, maxMemory, segmentCount, segmentCount);
this.weigher = weigher;
Modified:
jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/GuavaDeprecation.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/GuavaDeprecation.java?rev=1868678&r1=1868677&r2=1868678&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/GuavaDeprecation.java
(original)
+++
jackrabbit/oak/trunk/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/GuavaDeprecation.java
Mon Oct 21 07:07:52 2019
@@ -16,6 +16,8 @@
*/
package org.apache.jackrabbit.oak.spi;
+import java.util.Collections;
+import java.util.List;
import java.util.Locale;
import org.slf4j.Logger;
@@ -53,29 +55,73 @@ public class GuavaDeprecation {
}
public static void handleCall(String ticket) throws
UnsupportedOperationException {
+ handleCall(ticket, null, Collections.emptyList());
+ }
+
+ public static void handleCall(String ticket, String className,
List<String> allowed) throws UnsupportedOperationException {
String message = "use of deprecated Guava-related API - this method is
going to be removed in future Oak releases - see %s for details";
switch (LOGLEVEL) {
case "error":
if (LOG.isErrorEnabled()) {
- LOG.error(String.format(message, ticket), new
Exception("call stack"));
+ Exception ex = new Exception("call stack");
+ if (deprecatedCaller(ex, className, allowed)) {
+ LOG.error(String.format(message, ticket), ex);
+ }
}
break;
case "warn":
if (LOG.isWarnEnabled()) {
- LOG.warn(String.format(message, ticket), new
Exception("call stack"));
+ Exception ex = new Exception("call stack");
+ if (deprecatedCaller(ex, className, allowed)) {
+ LOG.warn(String.format(message, ticket), ex);
+ }
}
break;
case "info":
if (LOG.isInfoEnabled()) {
- LOG.info(String.format(message, ticket), new
Exception("call stack"));
+ Exception ex = new Exception("call stack");
+ if (deprecatedCaller(ex, className, allowed)) {
+ LOG.info(String.format(message, ticket), ex);
+ }
}
break;
case "debug":
if (LOG.isDebugEnabled()) {
- LOG.debug(String.format(message, ticket), new
Exception("call stack"));
+ Exception ex = new Exception("call stack");
+ if (deprecatedCaller(ex, className, allowed)) {
+ LOG.debug(String.format(message, ticket), ex);
+ }
}
break;
}
}
+
+ public static boolean deprecatedCaller(Exception ex, String className,
List<String> allowed) {
+ if (allowed == null) {
+ return true;
+ } else {
+ boolean classFound = false;
+ for (StackTraceElement el : ex.getStackTrace()) {
+ String cn = el.getClassName();
+ if (!classFound) {
+ // still looking for the entry
+ classFound = cn.equals(className);
+ } else {
+ // still in class checked for?
+ if (cn.equals(className)) {
+ // go one
+ } else {
+ // check caller
+ for (String a : allowed) {
+ if (cn.startsWith(a)) {
+ return false;
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+ }
}