1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.apache.shardingsphere.infra.rule.attribute.datanode;
19
20 import org.apache.shardingsphere.infra.datanode.DataNode;
21 import org.apache.shardingsphere.infra.rule.attribute.RuleAttribute;
22
23 import java.util.Collection;
24 import java.util.Map;
25 import java.util.Optional;
26
27 /**
28 * Data node rule attribute.
29 */
30 public interface DataNodeRuleAttribute extends RuleAttribute {
31
32 /**
33 * Get all data nodes.
34 *
35 * @return all data nodes map, key is logic table name, values are data node collection belong to the key
36 */
37 Map<String, Collection<DataNode>> getAllDataNodes();
38
39 /**
40 * Get data nodes by table name.
41 *
42 * @param tableName table name
43 * @return data nodes
44 */
45 Collection<DataNode> getDataNodesByTableName(String tableName);
46
47 /**
48 * Find first actual table name.
49 *
50 * @param logicTable logic table name
51 * @return the first actual table name
52 */
53 Optional<String> findFirstActualTable(String logicTable);
54
55 /**
56 * Is need accumulate.
57 *
58 * @param tables table names
59 * @return need accumulate
60 */
61 boolean isNeedAccumulate(Collection<String> tables);
62
63 /**
64 * Find logic table name via actual table name.
65 *
66 * @param actualTable actual table name
67 * @return logic table name
68 */
69 Optional<String> findLogicTableByActualTable(String actualTable);
70
71 /**
72 * Find actual table name via catalog.
73 *
74 * @param catalog catalog
75 * @param logicTable logic table name
76 * @return actual table name
77 */
78 Optional<String> findActualTableByCatalog(String catalog, String logicTable);
79
80 /**
81 * Whether replica based distribution.
82 *
83 * @return is replica based distribution or not
84 */
85 boolean isReplicaBasedDistribution();
86 }