blob: 47fdede277e99e8c5a6bd0492941f897b78f0a18 [file] [log] [blame]
/*
* 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.ignite.mesos.resource;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.ignite.mesos.ClusterProperties;
import static org.apache.ignite.mesos.resource.ResourceHandler.CONFIG_PREFIX;
import static org.apache.ignite.mesos.resource.ResourceHandler.DEFAULT_CONFIG;
import static org.apache.ignite.mesos.resource.ResourceHandler.IGNITE_PREFIX;
import static org.apache.ignite.mesos.resource.ResourceHandler.LIBS_PREFIX;
/**
* Provides path to user's libs and config file.
*/
public class ResourceProvider {
/** */
private static final Logger log = Logger.getLogger(ResourceProvider.class.getSimpleName());
/** Ignite url. */
private String igniteUrl;
/** Resources. */
private Collection<String> libsUris;
/** Url config. */
private String cfgUrl;
/** Config name. */
private String cfgName;
/**
* @param props Cluster properties.
* @param provider Ignite provider.
* @param baseUrl Base url.
*/
public void init(ClusterProperties props, IgniteProvider provider, String baseUrl) throws IOException {
if (props.ignitePackageUrl() == null && props.ignitePackagePath() == null) {
// Downloading ignite.
try {
igniteUrl = baseUrl + IGNITE_PREFIX + provider.getIgnite(props.igniteVer());
}
catch (Exception e) {
log.log(Level.SEVERE, "Failed to download Ignite [err={0}, ver={1}].\n" +
"If application working behind NAT or Intranet and does not have access to external resources " +
"then you can use IGNITE_PACKAGE_URL or IGNITE_PACKAGE_PATH property that allow to use local " +
"resources.",
new Object[]{e, props.igniteVer()});
}
}
if (props.ignitePackagePath() != null) {
Path ignitePackPath = Paths.get(props.ignitePackagePath());
if (Files.exists(ignitePackPath) && !Files.isDirectory(ignitePackPath)) {
try {
String fileName = provider.copyToWorkDir(props.ignitePackagePath());
assert fileName != null;
igniteUrl = baseUrl + IGNITE_PREFIX + fileName;
}
catch (Exception e) {
log.log(Level.SEVERE, "Failed to copy Ignite to working directory [err={0}, path={1}].",
new Object[] {e, props.ignitePackagePath()});
throw e;
}
}
else
throw new IllegalArgumentException("Failed to find a ignite archive by path: "
+ props.ignitePackagePath());
}
// Find all jar files into user folder.
if (props.userLibs() != null && !props.userLibs().isEmpty()) {
File libsDir = new File(props.userLibs());
List<String> libs = new ArrayList<>();
if (libsDir.isDirectory()) {
File[] files = libsDir.listFiles();
if (files != null) {
for (File lib : files) {
if (lib.isFile() && lib.canRead() &&
(lib.getName().endsWith(".jar") || lib.getName().endsWith(".JAR")))
libs.add(baseUrl + LIBS_PREFIX + lib.getName());
}
}
}
libsUris = libs.isEmpty() ? null : libs;
}
// Set configuration url.
if (props.igniteCfg() != null) {
File cfg = new File(props.igniteCfg());
if (cfg.isFile() && cfg.canRead()) {
cfgUrl = baseUrl + CONFIG_PREFIX + cfg.getName();
cfgName = cfg.getName();
}
}
else {
cfgName = "ignite-default-config.xml";
cfgUrl = baseUrl + DEFAULT_CONFIG + cfgName;
}
}
/**
* @return Config name.
*/
public String configName() {
return cfgName;
}
/**
* @return Ignite url.
*/
public String igniteUrl() {
return igniteUrl;
}
/**
* @return Urls to user's libs.
*/
public Collection<String> resourceUrl() {
return libsUris;
}
/**
* @return Url to config file.
*/
public String igniteConfigUrl() {
return cfgUrl;
}
}