Search in sources :

Example 31 with Settings

use of org.elasticsearch.common.settings.Settings in project crate by crate.

the class RestoreSnapshotAnalyzer method analyze.

public RestoreSnapshotAnalyzedStatement analyze(RestoreSnapshot node, Analysis analysis) {
    List<String> nameParts = node.name().getParts();
    Preconditions.checkArgument(nameParts.size() == 2, "Snapshot name not supported, only <repository>.<snapshot> works.");
    String repositoryName = nameParts.get(0);
    repositoryService.failIfRepositoryDoesNotExist(repositoryName);
    // validate and extract settings
    Settings settings = GenericPropertiesConverter.settingsFromProperties(node.properties(), analysis.parameterContext(), SETTINGS).build();
    if (node.tableList().isPresent()) {
        List<Table> tableList = node.tableList().get();
        Set<RestoreSnapshotAnalyzedStatement.RestoreTableInfo> restoreTables = new HashSet<>(tableList.size());
        for (Table table : tableList) {
            TableIdent tableIdent = TableIdent.of(table, analysis.sessionContext().defaultSchema());
            boolean tableExists = schemas.tableExists(tableIdent);
            if (tableExists) {
                if (table.partitionProperties().isEmpty()) {
                    throw new TableAlreadyExistsException(tableIdent);
                }
                TableInfo tableInfo = schemas.getTableInfo(tableIdent);
                if (!(tableInfo instanceof DocTableInfo)) {
                    throw new IllegalArgumentException(String.format(Locale.ENGLISH, "Cannot restore snapshot of tables in schema '%s'", tableInfo.ident().schema()));
                }
                DocTableInfo docTableInfo = ((DocTableInfo) tableInfo);
                PartitionName partitionName = PartitionPropertiesAnalyzer.toPartitionName(tableIdent, docTableInfo, table.partitionProperties(), analysis.parameterContext().parameters());
                if (docTableInfo.partitions().contains(partitionName)) {
                    throw new PartitionAlreadyExistsException(partitionName);
                }
                restoreTables.add(new RestoreSnapshotAnalyzedStatement.RestoreTableInfo(tableIdent, partitionName));
            } else {
                if (table.partitionProperties().isEmpty()) {
                    restoreTables.add(new RestoreSnapshotAnalyzedStatement.RestoreTableInfo(tableIdent, null));
                } else {
                    PartitionName partitionName = PartitionPropertiesAnalyzer.toPartitionName(tableIdent, null, table.partitionProperties(), analysis.parameterContext().parameters());
                    restoreTables.add(new RestoreSnapshotAnalyzedStatement.RestoreTableInfo(tableIdent, partitionName));
                }
            }
        }
        return RestoreSnapshotAnalyzedStatement.forTables(nameParts.get(1), repositoryName, settings, ImmutableList.copyOf(restoreTables));
    } else {
        return RestoreSnapshotAnalyzedStatement.all(nameParts.get(1), repositoryName, settings);
    }
}
Also used : TableAlreadyExistsException(io.crate.exceptions.TableAlreadyExistsException) DocTableInfo(io.crate.metadata.doc.DocTableInfo) Table(io.crate.sql.tree.Table) TableIdent(io.crate.metadata.TableIdent) PartitionName(io.crate.metadata.PartitionName) DocTableInfo(io.crate.metadata.doc.DocTableInfo) TableInfo(io.crate.metadata.table.TableInfo) Settings(org.elasticsearch.common.settings.Settings) PartitionAlreadyExistsException(io.crate.exceptions.PartitionAlreadyExistsException) HashSet(java.util.HashSet)

Example 32 with Settings

use of org.elasticsearch.common.settings.Settings in project crate by crate.

the class CopyAnalyzer method settingsFromProperties.

private Settings settingsFromProperties(Map<String, Expression> properties, ExpressionAnalyzer expressionAnalyzer, ExpressionAnalysisContext expressionAnalysisContext) {
    Settings.Builder builder = Settings.builder();
    for (Map.Entry<String, Expression> entry : properties.entrySet()) {
        String key = entry.getKey();
        Expression expression = entry.getValue();
        if (expression instanceof ArrayLiteral) {
            throw new IllegalArgumentException("Invalid argument(s) passed to parameter");
        }
        if (expression instanceof QualifiedNameReference) {
            throw new IllegalArgumentException(String.format(Locale.ENGLISH, "Can't use column reference in property assignment \"%s = %s\". Use literals instead.", key, ((QualifiedNameReference) expression).getName().toString()));
        }
        Symbol v = expressionAnalyzer.convert(expression, expressionAnalysisContext);
        if (!v.symbolType().isValueSymbol()) {
            throw new UnsupportedFeatureException("Only literals are allowed as parameter values");
        }
        builder.put(key, ValueSymbolVisitor.STRING.process(v));
    }
    return builder.build();
}
Also used : UnsupportedFeatureException(io.crate.exceptions.UnsupportedFeatureException) Symbol(io.crate.analyze.symbol.Symbol) ImmutableMap(com.google.common.collect.ImmutableMap) Settings(org.elasticsearch.common.settings.Settings)

Example 33 with Settings

use of org.elasticsearch.common.settings.Settings in project elasticsearch by elastic.

the class InternalSettingsPreparer method prepareEnvironment.

/**
     * Prepares the settings by gathering all elasticsearch system properties, optionally loading the configuration settings,
     * and then replacing all property placeholders. If a {@link Terminal} is provided and configuration settings are loaded,
     * settings with a value of <code>${prompt.text}</code> or <code>${prompt.secret}</code> will result in a prompt for
     * the setting to the user.
     * @param input The custom settings to use. These are not overwritten by settings in the configuration file.
     * @param terminal the Terminal to use for input/output
     * @param properties Map of properties key/value pairs (usually from the command-line)
     * @return the {@link Settings} and {@link Environment} as a {@link Tuple}
     */
public static Environment prepareEnvironment(Settings input, Terminal terminal, Map<String, String> properties) {
    // just create enough settings to build the environment, to get the config dir
    Settings.Builder output = Settings.builder();
    initializeSettings(output, input, properties);
    Environment environment = new Environment(output.build());
    // start with a fresh output
    output = Settings.builder();
    boolean settingsFileFound = false;
    Set<String> foundSuffixes = new HashSet<>();
    for (String allowedSuffix : ALLOWED_SUFFIXES) {
        Path path = environment.configFile().resolve("elasticsearch" + allowedSuffix);
        if (Files.exists(path)) {
            if (!settingsFileFound) {
                try {
                    output.loadFromPath(path);
                } catch (IOException e) {
                    throw new SettingsException("Failed to load settings from " + path.toString(), e);
                }
            }
            settingsFileFound = true;
            foundSuffixes.add(allowedSuffix);
        }
    }
    if (foundSuffixes.size() > 1) {
        throw new SettingsException("multiple settings files found with suffixes: " + Strings.collectionToDelimitedString(foundSuffixes, ","));
    }
    // re-initialize settings now that the config file has been loaded
    initializeSettings(output, input, properties);
    finalizeSettings(output, terminal);
    environment = new Environment(output.build());
    // we put back the path.logs so we can use it in the logging configuration file
    output.put(Environment.PATH_LOGS_SETTING.getKey(), cleanPath(environment.logsFile().toAbsolutePath().toString()));
    return new Environment(output.build());
}
Also used : Path(java.nio.file.Path) Strings.cleanPath(org.elasticsearch.common.Strings.cleanPath) Environment(org.elasticsearch.env.Environment) IOException(java.io.IOException) SettingsException(org.elasticsearch.common.settings.SettingsException) Settings(org.elasticsearch.common.settings.Settings) HashSet(java.util.HashSet)

Example 34 with Settings

use of org.elasticsearch.common.settings.Settings in project elasticsearch by elastic.

the class PluginsService method updatedSettings.

public Settings updatedSettings() {
    Map<String, String> foundSettings = new HashMap<>();
    final Settings.Builder builder = Settings.builder();
    for (Tuple<PluginInfo, Plugin> plugin : plugins) {
        Settings settings = plugin.v2().additionalSettings();
        for (String setting : settings.getAsMap().keySet()) {
            String oldPlugin = foundSettings.put(setting, plugin.v1().getName());
            if (oldPlugin != null) {
                throw new IllegalArgumentException("Cannot have additional setting [" + setting + "] " + "in plugin [" + plugin.v1().getName() + "], already added in plugin [" + oldPlugin + "]");
            }
        }
        builder.put(settings);
    }
    return builder.put(this.settings).build();
}
Also used : HashMap(java.util.HashMap) Settings(org.elasticsearch.common.settings.Settings)

Example 35 with Settings

use of org.elasticsearch.common.settings.Settings in project elasticsearch by elastic.

the class TransportTasksActionTests method testFailedTasksCount.

public void testFailedTasksCount() throws ExecutionException, InterruptedException, IOException {
    Settings settings = Settings.builder().put(MockTaskManager.USE_MOCK_TASK_MANAGER_SETTING.getKey(), true).build();
    setupTestNodes(settings);
    connectNodes(testNodes);
    TestNodesAction[] actions = new TestNodesAction[nodesCount];
    RecordingTaskManagerListener[] listeners = setupListeners(testNodes, "testAction*");
    for (int i = 0; i < testNodes.length; i++) {
        final int node = i;
        actions[i] = new TestNodesAction(CLUSTER_SETTINGS, "testAction", threadPool, testNodes[i].clusterService, testNodes[i].transportService) {

            @Override
            protected NodeResponse nodeOperation(NodeRequest request) {
                logger.info("Action on node {}", node);
                throw new RuntimeException("Test exception");
            }
        };
    }
    for (TestNode testNode : testNodes) {
        assertEquals(0, testNode.transportService.getTaskManager().getTasks().size());
    }
    NodesRequest request = new NodesRequest("Test Request");
    NodesResponse responses = actions[0].execute(request).get();
    assertEquals(nodesCount, responses.failureCount());
    // Make sure that actions are still registered in the task manager on all nodes
    // Twice on the coordinating node and once on all other nodes.
    assertEquals(4, listeners[0].getEvents().size());
    assertEquals(2, listeners[0].getRegistrationEvents().size());
    assertEquals(2, listeners[0].getUnregistrationEvents().size());
    for (int i = 1; i < listeners.length; i++) {
        assertEquals(2, listeners[i].getEvents().size());
        assertEquals(1, listeners[i].getRegistrationEvents().size());
        assertEquals(1, listeners[i].getUnregistrationEvents().size());
    }
}
Also used : BaseNodeRequest(org.elasticsearch.action.support.nodes.BaseNodeRequest) BaseNodesRequest(org.elasticsearch.action.support.nodes.BaseNodesRequest) Settings(org.elasticsearch.common.settings.Settings)

Aggregations

Settings (org.elasticsearch.common.settings.Settings)874 IndexSettings (org.elasticsearch.index.IndexSettings)112 Path (java.nio.file.Path)91 IOException (java.io.IOException)83 ClusterState (org.elasticsearch.cluster.ClusterState)76 IndexMetaData (org.elasticsearch.cluster.metadata.IndexMetaData)72 ClusterSettings (org.elasticsearch.common.settings.ClusterSettings)68 HashMap (java.util.HashMap)66 ArrayList (java.util.ArrayList)65 Version (org.elasticsearch.Version)63 Environment (org.elasticsearch.env.Environment)63 DiscoveryNode (org.elasticsearch.cluster.node.DiscoveryNode)61 Test (org.junit.Test)60 Map (java.util.Map)55 Index (org.elasticsearch.index.Index)55 Matchers.containsString (org.hamcrest.Matchers.containsString)54 List (java.util.List)45 ThreadPool (org.elasticsearch.threadpool.ThreadPool)41 XContentBuilder (org.elasticsearch.common.xcontent.XContentBuilder)37 MetaData (org.elasticsearch.cluster.metadata.MetaData)36