use of alluxio.wire.ConfigCheckReport in project alluxio by Alluxio.
the class ServerConfigurationChecker method regenerateReport.
/**
* Checks the server-side configurations and records the check results.
*/
public synchronized void regenerateReport() {
// Generate the configuration map from master and worker configuration records
Map<PropertyKey, Map<Optional<String>, List<String>>> confMap = generateConfMap();
// Update the errors and warnings configuration
Map<Scope, List<InconsistentProperty>> confErrors = new HashMap<>();
Map<Scope, List<InconsistentProperty>> confWarns = new HashMap<>();
for (Map.Entry<PropertyKey, Map<Optional<String>, List<String>>> entry : confMap.entrySet()) {
if (entry.getValue().size() >= 2) {
PropertyKey key = entry.getKey();
InconsistentProperty inconsistentProperty = new InconsistentProperty().setName(key.getName()).setValues(entry.getValue());
Scope scope = key.getScope().equals(Scope.ALL) ? Scope.SERVER : key.getScope();
if (entry.getKey().getConsistencyLevel().equals(ConsistencyCheckLevel.ENFORCE)) {
confErrors.putIfAbsent(scope, new ArrayList<>());
confErrors.get(scope).add(inconsistentProperty);
} else {
confWarns.putIfAbsent(scope, new ArrayList<>());
confWarns.get(scope).add(inconsistentProperty);
}
}
}
// Update configuration status
ConfigStatus status = confErrors.values().stream().anyMatch(a -> a.size() > 0) ? ConfigStatus.FAILED : confWarns.values().stream().anyMatch(a -> a.size() > 0) ? ConfigStatus.WARN : ConfigStatus.PASSED;
if (!status.equals(mConfigCheckReport.getConfigStatus())) {
logConfigReport();
}
mConfigCheckReport = new ConfigCheckReport(confErrors, confWarns, status);
}
use of alluxio.wire.ConfigCheckReport in project alluxio by Alluxio.
the class ConfigurationCommand method run.
/**
* Runs doctor configuration command.
*
* @return 0 on success, 1 otherwise
*/
public int run() throws IOException {
ConfigCheckReport report = mMetaMasterClient.getConfigReport();
ConfigStatus configStatus = report.getConfigStatus();
if (configStatus == ConfigStatus.PASSED) {
// No errors or warnings to show
mPrintStream.println("No server-side configuration errors or warnings.");
return 0;
}
Map<Scope, List<InconsistentProperty>> errors = report.getConfigErrors();
if (errors.size() != 0) {
mPrintStream.println("Server-side configuration errors " + "(those properties are required to be identical): ");
printInconsistentProperties(errors);
}
Map<Scope, List<InconsistentProperty>> warnings = report.getConfigWarns();
if (warnings.size() != 0) {
mPrintStream.println("\nServer-side configuration warnings " + "(those properties are recommended to be identical): ");
printInconsistentProperties(warnings);
}
return 0;
}
use of alluxio.wire.ConfigCheckReport in project alluxio by Alluxio.
the class ConfigCheckerIntegrationTest method unsetVsSet.
@Test
public void unsetVsSet() throws Exception {
Map<Integer, Map<PropertyKey, String>> masterProperties = ImmutableMap.of(1, ImmutableMap.of(PropertyKey.MASTER_MOUNT_TABLE_ROOT_OPTION, "option"));
mCluster = MultiProcessCluster.newBuilder(PortCoordination.CONFIG_CHECKER_UNSET_VS_SET).setClusterName("ConfigCheckerUnsetVsSet").setNumMasters(2).setNumWorkers(0).setMasterProperties(masterProperties).build();
mCluster.start();
ConfigCheckReport report = getReport();
Map<Scope, List<InconsistentProperty>> errors = report.getConfigErrors();
assertTrue(errors.containsKey(Scope.MASTER));
if (mCluster.getDeployMode().equals(DeployMode.ZOOKEEPER_HA)) {
assertEquals(1, errors.get(Scope.MASTER).size());
InconsistentProperty property = errors.get(Scope.MASTER).get(0);
assertEquals(PropertyKey.MASTER_MOUNT_TABLE_ROOT_OPTION.getName(), property.getName());
assertTrue(property.getValues().containsKey(Optional.of("option")));
assertTrue(property.getValues().containsKey(Optional.empty()));
} else {
// When using embedded journal, the journal paths are different
assertEquals(2, errors.get(Scope.MASTER).size());
assertThat(report.getConfigErrors().toString(), CoreMatchers.containsString(PropertyKey.MASTER_MOUNT_TABLE_ROOT_OPTION.getName()));
}
mCluster.notifySuccess();
}
use of alluxio.wire.ConfigCheckReport in project alluxio by Alluxio.
the class ConfigCheckerIntegrationTest method multiMastersEmbeddedHA.
@Test
public void multiMastersEmbeddedHA() throws Exception {
PropertyKey key = PropertyKey.MASTER_JOURNAL_FLUSH_TIMEOUT_MS;
Map<Integer, Map<PropertyKey, String>> masterProperties = generatePropertyWithDifferentValues(TEST_NUM_MASTERS, key);
mCluster = MultiProcessCluster.newBuilder(PortCoordination.CONFIG_CHECKER_MULTI_MASTERS_EMBEDDED_HA).setClusterName("ConfigCheckerMultiMastersEmbeddedHATest").setNumMasters(TEST_NUM_MASTERS).setNumWorkers(0).addProperty(PropertyKey.MASTER_JOURNAL_TYPE, JournalType.EMBEDDED.toString()).setMasterProperties(masterProperties).build();
mCluster.start();
ConfigCheckReport report = getReport();
// The master values of {@link PropertyKey#ALLUXIO_MASTER_JOURNAL_FOLDER} are different
// when using embedded HA
assertEquals(ConfigStatus.FAILED, report.getConfigStatus());
assertThat(report.getConfigWarns().toString(), CoreMatchers.containsString(key.getName()));
mCluster.notifySuccess();
}
Aggregations