Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public static synchronized UserGroupInformation loginSimple(final Configuration
* @return true if kerberos is enabled on the given configuration, false otherwise
*
*/
public static synchronized boolean isSecurityEnabled(final Configuration config) {
public static boolean isSecurityEnabled(final Configuration config) {
Validate.notNull(config);
return "kerberos".equalsIgnoreCase(config.get("hadoop.security.authentication"));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,9 @@ public String toString() {
// Hadoop Configuration, Filesystem, and UserGroupInformation (optional)
private final AtomicReference<HdfsResources> hdfsResources = new AtomicReference<>();

// Holder of cached Configuration information so validation does not reload the same config over and over
private final AtomicReference<ValidationResources> validationResourceHolder = new AtomicReference<>();

@Override
protected void init(ProcessorInitializationContext context) {
hdfsResources.set(new HdfsResources(null, null, null));
Expand Down Expand Up @@ -147,12 +150,21 @@ protected Collection<ValidationResult> customValidate(ValidationContext validati
final List<ValidationResult> results = new ArrayList<>();

if (!StringUtils.isBlank(configResources)) {
Configuration conf = null;
try {
conf = getConfigurationFromResources(configResources);
ValidationResources resources = validationResourceHolder.get();

// if no resources in the holder, or if the holder has different resources loaded,
// then load the Configuration and set the new resources in the holder
if (resources == null || !configResources.equals(resources.getConfigResources())) {
getLogger().debug("Reloading validation resources");
resources = new ValidationResources(configResources, getConfigurationFromResources(configResources));
validationResourceHolder.set(resources);
}

final Configuration conf = resources.getConfiguration();
results.addAll(KerberosProperties.validatePrincipalAndKeytab(
this.getClass().getSimpleName(), conf, principal, keytab, getLogger()));

} catch (IOException e) {
results.add(new ValidationResult.Builder()
.valid(false)
Expand Down Expand Up @@ -452,4 +464,23 @@ public UserGroupInformation getUserGroupInformation() {
return userGroupInformation;
}
}

static protected class ValidationResources {
private final String configResources;
private final Configuration configuration;

public ValidationResources(String configResources, Configuration configuration) {
this.configResources = configResources;
this.configuration = configuration;
}

public String getConfigResources() {
return configResources;
}

public Configuration getConfiguration() {
return configuration;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;

@Tags({ "hbase", "client"})
@CapabilityDescription("Implementation of HBaseClientService for HBase 1.1.2. This service can be configured by providing " +
Expand All @@ -90,6 +91,9 @@ public class HBase_1_1_2_ClientService extends AbstractControllerService impleme
private List<PropertyDescriptor> properties;
private KerberosProperties kerberosProperties;

// Holder of cached Configuration information so validation does not reload the same config over and over
private final AtomicReference<ValidationResources> validationResourceHolder = new AtomicReference<>();

@Override
protected void init(ControllerServiceInitializationContext config) throws InitializationException {
this.kerberosProperties = getKerberosProperties();
Expand Down Expand Up @@ -145,7 +149,17 @@ protected Collection<ValidationResult> customValidate(ValidationContext validati

if (confFileProvided) {
final String configFiles = validationContext.getProperty(HADOOP_CONF_FILES).getValue();
final Configuration hbaseConfig = getConfigurationFromFiles(configFiles);
ValidationResources resources = validationResourceHolder.get();

// if no resources in the holder, or if the holder has different resources loaded,
// then load the Configuration and set the new resources in the holder
if (resources == null || !configFiles.equals(resources.getConfigResources())) {
getLogger().debug("Reloading validation resources");
resources = new ValidationResources(configFiles, getConfigurationFromFiles(configFiles));
validationResourceHolder.set(resources);
}

final Configuration hbaseConfig = resources.getConfiguration();
final String principal = validationContext.getProperty(kerberosProperties.getKerberosPrincipal()).getValue();
final String keytab = validationContext.getProperty(kerberosProperties.getKerberosKeytab()).getValue();

Expand Down Expand Up @@ -372,4 +386,23 @@ protected ResultScanner getResults(final Table table, final Collection<Column> c

return table.getScanner(scan);
}

static protected class ValidationResources {
private final String configResources;
private final Configuration configuration;

public ValidationResources(String configResources, Configuration configuration) {
this.configResources = configResources;
this.configuration = configuration;
}

public String getConfigResources() {
return configResources;
}

public Configuration getConfiguration() {
return configuration;
}
}

}