kumaab commented on code in PR #442: URL: https://github.com/apache/ranger/pull/442#discussion_r1880798421
########## agents-common/src/main/java/org/apache/ranger/plugin/client/HadoopConfigHolder.java: ########## @@ -27,450 +32,428 @@ import java.util.Properties; import java.util.Set; -import org.apache.commons.lang.StringUtils; -import org.apache.hadoop.security.SecureClientLogin; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +public class HadoopConfigHolder { + private static final Logger LOG = LoggerFactory.getLogger(HadoopConfigHolder.class); + + public static final String GLOBAL_LOGIN_PARAM_PROP_FILE = "hadoop-login.properties"; + public static final String DEFAULT_DATASOURCE_PARAM_PROP_FILE = "datasource.properties"; + public static final String RESOURCEMAP_PROP_FILE = "resourcenamemap.properties"; + public static final String DEFAULT_RESOURCE_NAME = "core-site.xml"; + public static final String RANGER_SECTION_NAME = "xalogin.xml"; + public static final String RANGER_LOGIN_USER_NAME_PROP = "username"; + public static final String RANGER_LOGIN_KEYTAB_FILE_PROP = "keytabfile"; + public static final String RANGER_LOGIN_PASSWORD = "password"; + public static final String RANGER_LOOKUP_PRINCIPAL = "lookupprincipal"; + public static final String RANGER_LOOKUP_KEYTAB = "lookupkeytab"; + public static final String RANGER_PRINCIPAL = "rangerprincipal"; + public static final String RANGER_KEYTAB = "rangerkeytab"; + public static final String RANGER_NAME_RULES = "namerules"; + public static final String RANGER_AUTH_TYPE = "authtype"; + public static final String HADOOP_SECURITY_AUTHENTICATION = "hadoop.security.authentication"; + public static final String HADOOP_NAME_RULES = "hadoop.security.auth_to_local"; + public static final String HADOOP_SECURITY_AUTHENTICATION_METHOD = "kerberos"; + public static final String HADOOP_RPC_PROTECTION = "hadoop.rpc.protection"; + public static final String ENABLE_HIVE_METASTORE_LOOKUP = "enable.hive.metastore.lookup"; + public static final String HIVE_SITE_FILE_PATH = "hive.site.file.path"; + + private static boolean initialized; + private static final Map<String, HashMap<String, Properties>> dataSource2ResourceListMap = new HashMap<>(); + private static final Map<String, HadoopConfigHolder> dataSource2HadoopConfigHolder = new HashMap<>(); + private static Properties globalLoginProp = new Properties(); + private static Properties resourcemapProperties; + private static final Set<String> rangerInternalPropertyKeys = new HashSet<>(); + + private final String datasourceName; + private String defaultConfigFile; + private String userName; + private String keyTabFile; + private String password; + private String lookupPrincipal; + private String lookupKeytab; + private String nameRules; + private String authType; + private String hiveSiteFilePath; + private boolean isKerberosAuth; + private boolean enableHiveMetastoreLookup; + private Map<String, String> connectionProperties; + + private HadoopConfigHolder(String aDatasourceName) { + datasourceName = aDatasourceName; + + if (!initialized) { + init(); + } + + initLoginInfo(); + } + + private HadoopConfigHolder(String aDatasourceName, Map<String, String> connectionProperties) { + this(aDatasourceName, connectionProperties, null); + } + + private HadoopConfigHolder(String aDatasourceName, Map<String, String> connectionProperties, String defaultConfigFile) { + this.datasourceName = aDatasourceName; + this.connectionProperties = connectionProperties; + this.defaultConfigFile = defaultConfigFile; + + initConnectionProp(); + initLoginInfo(); + } + + public static HadoopConfigHolder getInstance(String aDatasourceName) { + HadoopConfigHolder ret = dataSource2HadoopConfigHolder.get(aDatasourceName); + + if (ret == null) { + synchronized (HadoopConfigHolder.class) { + ret = dataSource2HadoopConfigHolder.get(aDatasourceName); + + if (ret == null) { + ret = new HadoopConfigHolder(aDatasourceName); + + dataSource2HadoopConfigHolder.put(aDatasourceName, ret); + } + } + } + + return ret; + } + + public static HadoopConfigHolder getInstance(String aDatasourceName, Map<String, String> connectionProperties, String defaultConfigFile) { + HadoopConfigHolder ret = dataSource2HadoopConfigHolder.get(aDatasourceName); + + if (ret == null) { + synchronized (HadoopConfigHolder.class) { + ret = dataSource2HadoopConfigHolder.get(aDatasourceName); + + if (ret == null) { + ret = new HadoopConfigHolder(aDatasourceName, connectionProperties, defaultConfigFile); + + dataSource2HadoopConfigHolder.put(aDatasourceName, ret); + } + } + } else { + if (connectionProperties != null && !connectionProperties.equals(ret.connectionProperties)) { + ret = new HadoopConfigHolder(aDatasourceName, connectionProperties); + + dataSource2HadoopConfigHolder.remove(aDatasourceName); + dataSource2HadoopConfigHolder.put(aDatasourceName, ret); + } + } + + return ret; + } + + public Properties getRangerSection() { + Properties prop = this.getProperties(RANGER_SECTION_NAME); + + if (prop == null) { + prop = globalLoginProp; + } + + return prop; + } + + public String getDatasourceName() { + return datasourceName; + } + + public boolean hasResourceExists(String aResourceName) { // dilli Review Comment: nit: comment can be removed. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: dev-unsubscr...@ranger.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org