You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@bookkeeper.apache.org by GitBox <gi...@apache.org> on 2018/02/28 11:35:12 UTC

[GitHub] sijie commented on a change in pull request #1217: Shade bookkeeper in distributedlog-core-shaded and allow using shaded bookkeeper client to resolve ledger manager factory class

sijie commented on a change in pull request #1217:  Shade bookkeeper in distributedlog-core-shaded and allow using shaded bookkeeper client to resolve ledger manager factory class
URL: https://github.com/apache/bookkeeper/pull/1217#discussion_r171217354
 
 

 ##########
 File path: bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/AbstractZkLedgerManagerFactory.java
 ##########
 @@ -194,15 +200,78 @@ public static LedgerManagerFactory newLedgerManagerFactory(
                 }
                 factoryClass = theCls.asSubclass(LedgerManagerFactory.class);
             } catch (ClassNotFoundException cnfe) {
-                throw new IOException("Failed to instantiate ledger manager factory "
-                        + layout.getManagerFactoryClass());
+                factoryClass = attemptToResolveShadedLedgerManagerFactory(
+                    conf,
+                    layout.getManagerFactoryClass(),
+                    cnfe);
             }
         }
         // instantiate a factory
         lmFactory = ReflectionUtils.newInstance(factoryClass);
         return lmFactory.initialize(conf, layoutManager, layout.getManagerVersion());
     }
 
+    private static String normalizedLedgerManagerFactoryClassName(String factoryClass,
+                                                                  String shadedClassPrefix,
+                                                                  boolean isShadedClassAllowed) {
+        if (isShadedClassAllowed) {
+            if (null == factoryClass || null == shadedClassPrefix) {
+                return factoryClass;
+            } else {
+                return factoryClass.replace(shadedClassPrefix, "");
+            }
+        } else {
+            return factoryClass;
+        }
+    }
+
+    private static boolean isSameLedgerManagerFactory(
+            AbstractConfiguration<?> conf, String leftFactoryClass, String rightFactoryClass) {
+        leftFactoryClass = normalizedLedgerManagerFactoryClassName(
 
 Review comment:
   you can't do simply do that, because left or right can be null and it needs to take the flag into account.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services