/* * 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 gobblin.data.management.copy.replication; import java.net.URI; import java.net.URISyntaxException; import org.apache.hadoop.fs.Path; import com.google.common.base.Objects; import com.google.common.base.Preconditions; import com.typesafe.config.Config; import lombok.Getter; /** * Used to encapsulate all the configuration for a hadoop file system replica * @author mitu * */ public class HadoopFsReplicaConfig { public static final String HDFS_COLO_KEY = "cluster.colo"; public static final String HDFS_CLUSTERNAME_KEY = "cluster.name"; public static final String HDFS_FILESYSTEM_URI_KEY = "cluster.FsURI"; public static final String HDFS_PATH_KEY = "path"; @Getter private final String colo; @Getter private final String clustername; @Getter private final URI fsURI; @Getter private final Path path; public HadoopFsReplicaConfig(Config config) { Preconditions.checkArgument(config.hasPath(HDFS_COLO_KEY)); Preconditions.checkArgument(config.hasPath(HDFS_CLUSTERNAME_KEY)); Preconditions.checkArgument(config.hasPath(HDFS_PATH_KEY)); Preconditions.checkArgument(config.hasPath(HDFS_FILESYSTEM_URI_KEY)); this.colo = config.getString(HDFS_COLO_KEY); this.clustername = config.getString(HDFS_CLUSTERNAME_KEY); this.path = new Path(config.getString(HDFS_PATH_KEY)); try { this.fsURI = new URI(config.getString(HDFS_FILESYSTEM_URI_KEY)); } catch (URISyntaxException e) { throw new RuntimeException("can not build URI based on " + config.getString(HDFS_FILESYSTEM_URI_KEY)); } } @Override public String toString() { return Objects.toStringHelper(this.getClass()).add("colo", this.colo).add("name", this.clustername) .add("FilesystemURI", this.fsURI).add("rootPath", this.path).toString(); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((clustername == null) ? 0 : clustername.hashCode()); result = prime * result + ((colo == null) ? 0 : colo.hashCode()); result = prime * result + ((fsURI == null) ? 0 : fsURI.hashCode()); result = prime * result + ((path == null) ? 0 : path.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; HadoopFsReplicaConfig other = (HadoopFsReplicaConfig) obj; if (clustername == null) { if (other.clustername != null) return false; } else if (!clustername.equals(other.clustername)) return false; if (colo == null) { if (other.colo != null) return false; } else if (!colo.equals(other.colo)) return false; if (fsURI == null) { if (other.fsURI != null) return false; } else if (!fsURI.equals(other.fsURI)) return false; if (path == null) { if (other.path != null) return false; } else if (!path.equals(other.path)) return false; return true; } }