use of org.apache.flink.core.classloading.SubmoduleClassLoader in project flink by apache.
the class AkkaRpcSystemLoader method loadRpcSystem.
@Override
public RpcSystem loadRpcSystem(Configuration config) {
try {
final ClassLoader flinkClassLoader = RpcSystem.class.getClassLoader();
final Path tmpDirectory = Paths.get(ConfigurationUtils.parseTempDirectories(config)[0]);
Files.createDirectories(tmpDirectory);
final Path tempFile = Files.createFile(tmpDirectory.resolve("flink-rpc-akka_" + UUID.randomUUID() + ".jar"));
final InputStream resourceStream = flinkClassLoader.getResourceAsStream(FLINK_RPC_AKKA_FAT_JAR);
if (resourceStream == null) {
throw new RpcLoaderException(String.format("Akka RPC system could not be found. If this happened while running a test in the IDE, " + "run '%s' on the command-line, " + "or add a test dependency on the flink-rpc-akka-loader test-jar.", HINT_USAGE));
}
IOUtils.copyBytes(resourceStream, Files.newOutputStream(tempFile));
final SubmoduleClassLoader submoduleClassLoader = new SubmoduleClassLoader(new URL[] { tempFile.toUri().toURL() }, flinkClassLoader);
return new CleanupOnCloseRpcSystem(ServiceLoader.load(RpcSystem.class, submoduleClassLoader).iterator().next(), submoduleClassLoader, tempFile);
} catch (IOException e) {
throw new RuntimeException("Could not initialize RPC system.", e);
}
}
use of org.apache.flink.core.classloading.SubmoduleClassLoader in project flink by apache.
the class FallbackAkkaRpcSystemLoader method loadRpcSystem.
@Override
public RpcSystem loadRpcSystem(Configuration config) {
try {
LOG.debug("Using Fallback AkkaRpcSystemLoader; this loader will invoke maven to retrieve the dependencies of flink-rpc-akka.");
final ClassLoader flinkClassLoader = RpcSystem.class.getClassLoader();
// flink-rpc/flink-rpc-akka
final Path akkaRpcModuleDirectory = findAkkaRpcModuleDirectory(getCurrentWorkingDirectory());
// flink-rpc/flink-rpc-akka/target/classes
final Path akkaRpcModuleClassesDirectory = akkaRpcModuleDirectory.resolve(Paths.get("target", "classes"));
// flink-rpc/flink-rpc-akka/target/dependencies
final Path akkaRpcModuleDependenciesDirectory = akkaRpcModuleDirectory.resolve(Paths.get("target", "dependencies"));
if (!Files.exists(akkaRpcModuleDependenciesDirectory)) {
int exitCode = downloadDependencies(akkaRpcModuleDirectory, akkaRpcModuleDependenciesDirectory);
if (exitCode != 0) {
throw new RpcLoaderException("Could not download dependencies of flink-rpc-akka, please see the log output for details.");
}
} else {
LOG.debug("Re-using previously downloaded flink-rpc-akka dependencies. If you are experiencing strange issues, try clearing '{}'.", akkaRpcModuleDependenciesDirectory);
}
// assemble URL collection containing target/classes and each jar
final List<URL> urls = new ArrayList<>();
urls.add(akkaRpcModuleClassesDirectory.toUri().toURL());
try (final Stream<Path> files = Files.list(akkaRpcModuleDependenciesDirectory)) {
final List<Path> collect = files.filter(path -> path.getFileName().toString().endsWith(".jar")).collect(Collectors.toList());
for (Path path : collect) {
urls.add(path.toUri().toURL());
}
}
final SubmoduleClassLoader submoduleClassLoader = new SubmoduleClassLoader(urls.toArray(new URL[0]), flinkClassLoader);
return new CleanupOnCloseRpcSystem(ServiceLoader.load(RpcSystem.class, submoduleClassLoader).iterator().next(), submoduleClassLoader, null);
} catch (Exception e) {
throw new RpcLoaderException(String.format("Could not initialize RPC system. Run '%s' on the command-line instead.", AkkaRpcSystemLoader.HINT_USAGE), e);
}
}
Aggregations