[
https://issues.apache.org/jira/browse/FLINK-6606?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16016578#comment-16016578
]
ASF GitHub Bot commented on FLINK-6606:
---------------------------------------
Github user EronWright commented on a diff in the pull request:
https://github.com/apache/flink/pull/3933#discussion_r117370390
--- Diff:
flink-runtime/src/main/java/org/apache/flink/runtime/checkpoint/hooks/MasterHooks.java
---
@@ -267,6 +269,112 @@ else if (!allowUnmatchedState) {
}
//
------------------------------------------------------------------------
+ // hook management
+ //
------------------------------------------------------------------------
+
+ /**
+ * Wraps a hook such that the user-code classloader is applied when the
hook is invoked.
+ * @param hook the hook to wrap
+ * @param userClassLoader the classloader to use
+ */
+ public static <T> MasterTriggerRestoreHook<T>
wrapHook(MasterTriggerRestoreHook<T> hook, ClassLoader userClassLoader) {
+ return new WrappedMasterHook<T>(hook, userClassLoader);
+ }
+
+ @VisibleForTesting
+ static class WrappedMasterHook<T> implements
MasterTriggerRestoreHook<T> {
+
+ private final MasterTriggerRestoreHook<T> hook;
+ private final ClassLoader userClassLoader;
+
+ WrappedMasterHook(MasterTriggerRestoreHook<T> hook, ClassLoader
userClassLoader) {
+ this.hook = hook;
+ this.userClassLoader = userClassLoader;
+ }
+
+ @Override
+ public String getIdentifier() {
+ Thread thread = Thread.currentThread();
+ ClassLoader originalClassLoader =
thread.getContextClassLoader();
+ thread.setContextClassLoader(userClassLoader);
--- End diff --
I disagee with that approach due to lack of symmetry. The try..finally
idiom is typically written as:
> Create checkpoint hook with user classloader
> --------------------------------------------
>
> Key: FLINK-6606
> URL: https://issues.apache.org/jira/browse/FLINK-6606
> Project: Flink
> Issue Type: Bug
> Components: State Backends, Checkpointing
> Reporter: Eron Wright
> Assignee: Eron Wright
> Priority: Blocker
> Fix For: 1.3.0
>
>
> Flink should set the thread's classloader when calling the checkpoint hook
> factory's `create` method. Without that, the hook is likely to fail during
> initialization (e.g. using ServiceLoader).
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)