/* * Licensed to CRATE Technology GmbH ("Crate") under one or more contributor * license agreements. See the NOTICE file distributed with this work for * additional information regarding copyright ownership. Crate 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. * * However, if you have executed another commercial license agreement * with Crate these terms will supersede the license and you may use the * software solely pursuant to the terms of the relevant commercial agreement. */ package io.crate.operation.reference.partitioned; import io.crate.analyze.TableParameterInfo; import io.crate.metadata.PartitionInfo; import io.crate.metadata.RowContextCollectorExpression; import org.apache.lucene.util.BytesRef; import org.elasticsearch.common.lucene.BytesRefs; public class PartitionsSettingsExpression extends AbstractPartitionsSettingsExpression { public PartitionsSettingsExpression() { addChildImplementations(); } private void addChildImplementations() { childImplementations.put(PartitionsSettingsBlocksExpression.NAME, new PartitionsSettingsBlocksExpression()); childImplementations.put(PartitionsSettingsRoutingExpression.NAME, new PartitionsSettingsRoutingExpression()); childImplementations.put(PartitionsSettingsRecoveryExpression.NAME, new PartitionsSettingsRecoveryExpression()); childImplementations.put(PartitionsSettingsWarmerExpression.NAME, new PartitionsSettingsWarmerExpression()); childImplementations.put(PartitionsSettingsTranslogExpression.NAME, new PartitionsSettingsTranslogExpression()); childImplementations.put(PartitionsSettingsUnassignedExpression.NAME, new PartitionsSettingsUnassignedExpression()); } static class PartitionTableParameterExpression extends RowContextCollectorExpression<PartitionInfo, Object> { private final String paramName; public PartitionTableParameterExpression(String paramName) { this.paramName = paramName; } @Override public Object value() { return row.tableParameters().get(paramName); } } static class BytesRefPartitionTableParameterExpression extends RowContextCollectorExpression<PartitionInfo, BytesRef> { private final String paramName; public BytesRefPartitionTableParameterExpression(String paramName) { this.paramName = paramName; } @Override public BytesRef value() { return BytesRefs.toBytesRef(row.tableParameters().get(paramName)); } } static class PartitionsSettingsBlocksExpression extends AbstractPartitionsSettingsExpression { public static final String NAME = "blocks"; public PartitionsSettingsBlocksExpression() { addChildImplementations(); } public static final String READ_ONLY = "read_only"; public static final String READ = "read"; public static final String WRITE = "write"; public static final String METADATA = "metadata"; private void addChildImplementations() { childImplementations.put(READ_ONLY, new PartitionTableParameterExpression(TableParameterInfo.READ_ONLY)); childImplementations.put(READ, new PartitionTableParameterExpression(TableParameterInfo.BLOCKS_READ)); childImplementations.put(WRITE, new PartitionTableParameterExpression(TableParameterInfo.BLOCKS_WRITE)); childImplementations.put(METADATA, new PartitionTableParameterExpression(TableParameterInfo.BLOCKS_METADATA)); } } static class PartitionsSettingsRoutingExpression extends AbstractPartitionsSettingsExpression { public static final String NAME = "routing"; public PartitionsSettingsRoutingExpression() { addChildImplementations(); } private void addChildImplementations() { childImplementations.put(PartitionsSettingsRoutingAllocationExpression.NAME, new PartitionsSettingsRoutingAllocationExpression()); } } static class PartitionsSettingsRoutingAllocationExpression extends AbstractPartitionsSettingsExpression { public static final String NAME = "allocation"; public PartitionsSettingsRoutingAllocationExpression() { addChildImplementations(); } public static final String ENABLE = "enable"; public static final String TOTAL_SHARDS_PER_NODE = "total_shards_per_node"; private void addChildImplementations() { childImplementations.put(ENABLE, new BytesRefPartitionTableParameterExpression(TableParameterInfo.ROUTING_ALLOCATION_ENABLE)); childImplementations.put(TOTAL_SHARDS_PER_NODE, new PartitionTableParameterExpression(TableParameterInfo.TOTAL_SHARDS_PER_NODE)); } } static class PartitionsSettingsRecoveryExpression extends AbstractPartitionsSettingsExpression { public static final String NAME = "recovery"; public PartitionsSettingsRecoveryExpression() { addChildImplementations(); } public static final String INITIAL_SHARDS = "initial_shards"; private void addChildImplementations() { childImplementations.put(INITIAL_SHARDS, new PartitionTableParameterExpression(TableParameterInfo.RECOVERY_INITIAL_SHARDS)); } } static class PartitionsSettingsWarmerExpression extends AbstractPartitionsSettingsExpression { public static final String NAME = "warmer"; public PartitionsSettingsWarmerExpression() { addChildImplementations(); } public static final String ENABLED = "enabled"; private void addChildImplementations() { childImplementations.put(ENABLED, new PartitionTableParameterExpression(TableParameterInfo.WARMER_ENABLED)); } } static class PartitionsSettingsTranslogExpression extends AbstractPartitionsSettingsExpression { public static final String NAME = "translog"; public PartitionsSettingsTranslogExpression() { addChildImplementations(); } public static final String FLUSH_THRESHOLD_SIZE = "flush_threshold_size"; public static final String SYNC_INTERVAL = "sync_interval"; private void addChildImplementations() { childImplementations.put(FLUSH_THRESHOLD_SIZE, new PartitionTableParameterExpression(TableParameterInfo.FLUSH_THRESHOLD_SIZE)); childImplementations.put(SYNC_INTERVAL, new PartitionTableParameterExpression(TableParameterInfo.TRANSLOG_SYNC_INTERVAL)); } } static class PartitionsSettingsUnassignedExpression extends AbstractPartitionsSettingsExpression { public static final String NAME = "unassigned"; public PartitionsSettingsUnassignedExpression() { addChildImplementations(); } private void addChildImplementations() { childImplementations.put(PartitionsSettingsNodeLeftExpression.NAME, new PartitionsSettingsNodeLeftExpression()); } } static class PartitionsSettingsNodeLeftExpression extends AbstractPartitionsSettingsExpression { public static final String NAME = "node_left"; public PartitionsSettingsNodeLeftExpression() { addChildImplementations(); } public static final String DELAYED_TIMEOUT = "delayed_timeout"; private void addChildImplementations() { childImplementations.put(DELAYED_TIMEOUT, new PartitionTableParameterExpression(TableParameterInfo.UNASSIGNED_NODE_LEFT_DELAYED_TIMEOUT)); } } }