Add the base interface and entity for ability control.
This commit is contained in:
parent
0ac96e1602
commit
a15ef8eb3a
@ -0,0 +1,111 @@
|
||||
/*
|
||||
* Copyright 1999-2022 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed 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.
|
||||
*/
|
||||
|
||||
package com.alibaba.nacos.api.ability.constant;
|
||||
|
||||
import com.alibaba.nacos.api.utils.AbilityTableUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**.
|
||||
* @author Daydreamer
|
||||
* @description Ability table key. It can be a replacement of {@link com.alibaba.nacos.api.ability.ServerAbilities}
|
||||
* and {@link com.alibaba.nacos.api.ability.ClientAbilities}.
|
||||
* @date 2022/7/12 19:23
|
||||
**/
|
||||
@SuppressWarnings("unchecked")
|
||||
public class AbilityKey {
|
||||
|
||||
private static final HashMap<String, Boolean> CURRENT_SERVER_SUPPORT_ABILITY = new HashMap<>();
|
||||
|
||||
private static final HashMap<String, Integer> CURRENT_SERVER_ABILITY_OFFSET = new HashMap<>();
|
||||
|
||||
private static final byte[] ABILITY_BIT_FLAGS;
|
||||
|
||||
private AbilityKey() {
|
||||
}
|
||||
|
||||
static {
|
||||
/*
|
||||
* example:
|
||||
* There is a function named "compression".
|
||||
* The key is "compression", the value is the offset of the flag bit of this ability in the ability table. The value should be unique.
|
||||
*
|
||||
* You can add a new public static field like:
|
||||
* <code>public static final String COMPRESSION = "compression";</code>
|
||||
* This field can be used outside.
|
||||
*
|
||||
* And then you need to declare the offset of the flag bit of this ability in the ability table, you can:
|
||||
* <code>CURRENT_NODE_ABILITY_TABLE.put("compression", 1);</code> means that is the first bit from left to right in the table.
|
||||
*
|
||||
*/
|
||||
|
||||
// put ability here, which you want current server supports
|
||||
|
||||
}
|
||||
|
||||
/**.
|
||||
* Return ability table of current node
|
||||
* But this ability is static which means that this ability table is all function this node supports if no one to ask it to close some functions.
|
||||
* If you want to get what function current node is supporting, you should call AbilityControlManager#getCurrentAbility
|
||||
* By the way, AbilityControlManager is singleton, you can get it by static method
|
||||
*
|
||||
* @return ability table
|
||||
*/
|
||||
public static Map<String, Boolean> getCurrentNodeSupportAbility() {
|
||||
return Collections.unmodifiableMap(CURRENT_SERVER_SUPPORT_ABILITY);
|
||||
}
|
||||
|
||||
/**.
|
||||
* Return the static ability bit table
|
||||
*
|
||||
* @return ability bit table
|
||||
*/
|
||||
public static byte[] getAbilityBitFlags() {
|
||||
return ABILITY_BIT_FLAGS.clone();
|
||||
}
|
||||
|
||||
/**.
|
||||
* Is it a legal key
|
||||
*
|
||||
* @param key input
|
||||
* @return whether a legal key
|
||||
*/
|
||||
public static boolean isLegal(String key) {
|
||||
return CURRENT_SERVER_SUPPORT_ABILITY.containsKey(key);
|
||||
}
|
||||
|
||||
static {
|
||||
// init the bits table
|
||||
ABILITY_BIT_FLAGS = AbilityTableUtils.getAbilityBitBy(CURRENT_SERVER_ABILITY_OFFSET.values());
|
||||
// init the ability table, default all true
|
||||
CURRENT_SERVER_ABILITY_OFFSET.forEach((k, v) -> {
|
||||
CURRENT_SERVER_SUPPORT_ABILITY.put(k, Boolean.TRUE);
|
||||
});
|
||||
}
|
||||
|
||||
/**.
|
||||
* Return the ability bit offsets
|
||||
*
|
||||
* @return bit offset
|
||||
*/
|
||||
public static Map<String, Integer> offset() {
|
||||
return CURRENT_SERVER_ABILITY_OFFSET;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright 1999-2022 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed 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.
|
||||
*/
|
||||
|
||||
package com.alibaba.nacos.api.ability.constant;
|
||||
|
||||
/**.
|
||||
* @author Daydreamer
|
||||
* @description This enum is used to track the status of the ability table.
|
||||
* @date 2022/7/13 14:11
|
||||
**/
|
||||
public enum AbilityStatus {
|
||||
|
||||
/**
|
||||
* It means that the ability table does not exist in the current node.
|
||||
*/
|
||||
NOT_EXIST,
|
||||
|
||||
/**
|
||||
* It means that current node has received the ability table and the table is initializing by AbilityPostProcessor.
|
||||
*/
|
||||
INITIALIZING,
|
||||
|
||||
/**
|
||||
* It means that the ability table is ready.
|
||||
*/
|
||||
READY,
|
||||
|
||||
/**
|
||||
* It means that the ability table will be removed soon.
|
||||
*/
|
||||
EXPIRED
|
||||
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Copyright 1999-2022 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed 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.
|
||||
*/
|
||||
|
||||
package com.alibaba.nacos.api.ability.entity;
|
||||
|
||||
import com.alibaba.nacos.api.ability.constant.AbilityKey;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**.
|
||||
* @author Daydreamer
|
||||
* @description This table is linked to a server node or client node.
|
||||
* @date 2022/7/12 19:25
|
||||
**/
|
||||
public class AbilityTable implements Cloneable {
|
||||
|
||||
/**.
|
||||
* id in connection instance
|
||||
*/
|
||||
private String connectionId;
|
||||
|
||||
/**.
|
||||
* ability table
|
||||
* key: name from {@link AbilityKey}
|
||||
* value: whether to turn on
|
||||
*/
|
||||
private Map<String, Boolean> ability;
|
||||
|
||||
/**.
|
||||
* whether it from a server node
|
||||
*/
|
||||
private boolean isServer;
|
||||
|
||||
/**.
|
||||
* version of the client corresponding to the connection
|
||||
*/
|
||||
private String version;
|
||||
|
||||
public AbilityTable() {
|
||||
}
|
||||
|
||||
public boolean isServer() {
|
||||
return isServer;
|
||||
}
|
||||
|
||||
public AbilityTable setServer(boolean server) {
|
||||
isServer = server;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public AbilityTable setVersion(String version) {
|
||||
this.version = version;
|
||||
return this;
|
||||
}
|
||||
|
||||
public AbilityTable(String connectionId, Map<String, Boolean> ability, boolean isServer, String version) {
|
||||
this.connectionId = connectionId;
|
||||
this.ability = ability;
|
||||
this.isServer = isServer;
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public String getConnectionId() {
|
||||
return connectionId;
|
||||
}
|
||||
|
||||
public AbilityTable setConnectionId(String connectionId) {
|
||||
this.connectionId = connectionId;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Map<String, Boolean> getAbility() {
|
||||
return ability;
|
||||
}
|
||||
|
||||
public AbilityTable setAbility(Map<String, Boolean> ability) {
|
||||
this.ability = ability;
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,100 @@
|
||||
/*
|
||||
* Copyright 1999-2022 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed 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.
|
||||
*/
|
||||
|
||||
package com.alibaba.nacos.api.utils;
|
||||
|
||||
import com.alibaba.nacos.api.ability.constant.AbilityKey;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**.
|
||||
* @author Daydreamer
|
||||
* @description It is used to operate ability table.
|
||||
* @date 2022/7/12 19:23
|
||||
**/
|
||||
public class AbilityTableUtils {
|
||||
|
||||
private static final int BASE = 128;
|
||||
|
||||
private AbilityTableUtils() {
|
||||
}
|
||||
|
||||
/**.
|
||||
* get ability bit table from Collection
|
||||
*
|
||||
* @param bitCollection bit offset
|
||||
* @return bit table
|
||||
*/
|
||||
public static byte[] getAbilityBitBy(Collection<Integer> bitCollection) {
|
||||
if (bitCollection.size() == 0) {
|
||||
return new byte[1];
|
||||
}
|
||||
Integer max = Collections.max(bitCollection);
|
||||
// calculate byte[]
|
||||
int mark = max % 8;
|
||||
int length = max / 8 + (mark == 0 ? 0 : 1);
|
||||
byte[] res = new byte[length];
|
||||
bitCollection.forEach(offset -> {
|
||||
int index = offset / 8 + (offset % 8 == 0 ? -1 : 0);
|
||||
int flag = offset % 8;
|
||||
if (flag == 0) {
|
||||
flag = 8;
|
||||
}
|
||||
byte x = (byte) (BASE >>> (flag - 1));
|
||||
res[index] = (byte) (res[index] | x);
|
||||
});
|
||||
return res;
|
||||
}
|
||||
|
||||
/**.
|
||||
* get ability table by bits
|
||||
*
|
||||
* @param bits bit flag
|
||||
* @param offsetMap offset from {@link AbilityKey}
|
||||
* @return Return the Map containing AbilityTableKey and isRunning.
|
||||
*/
|
||||
public static Map<String, Boolean> getAbilityTableBy(byte[] bits, Map<String, Integer> offsetMap) {
|
||||
if (bits == null || offsetMap.size() == 0) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
int length = bits.length;
|
||||
Set<Map.Entry<String, Integer>> entries = offsetMap.entrySet();
|
||||
Map<String, Boolean> res = new HashMap<>(offsetMap.size());
|
||||
for (Map.Entry<String, Integer> entry : entries) {
|
||||
String abilityKey = entry.getKey();
|
||||
Integer offset = entry.getValue();
|
||||
// if not exists
|
||||
int index = offset / 8 + (offset % 8 == 0 ? -1 : 0);
|
||||
if (index + 1 > length) {
|
||||
res.put(abilityKey, Boolean.FALSE);
|
||||
continue;
|
||||
}
|
||||
// find
|
||||
int flag = offset % 8;
|
||||
if (flag == 0) {
|
||||
flag = 8;
|
||||
}
|
||||
byte x = (byte) (BASE >>> (flag - 1));
|
||||
byte tmp = (byte) (x & bits[index]);
|
||||
res.put(abilityKey, x == tmp);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 1999-2022 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed 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.
|
||||
*/
|
||||
|
||||
package com.alibaba.nacos.common.ability.handler;
|
||||
|
||||
import com.alibaba.nacos.api.ability.entity.AbilityTable;
|
||||
|
||||
/**.
|
||||
* @author Daydreamer
|
||||
* @description This handler will should be invoked before ability table joining current node.
|
||||
* @date 2022/7/12 19:24
|
||||
**/
|
||||
public interface AbilityHandlePreProcessor {
|
||||
|
||||
/**
|
||||
* Handling before joining current node.
|
||||
*
|
||||
* @param source source ability handler
|
||||
* @return result table
|
||||
*/
|
||||
AbilityTable handle(AbilityTable source);
|
||||
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright 1999-2022 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed 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.
|
||||
*/
|
||||
|
||||
package com.alibaba.nacos.common.ability.handler;
|
||||
|
||||
/**.
|
||||
* @author Daydreamer
|
||||
* @description This component will be invoked if the ability of current node is turned on/off.
|
||||
* @date 2022/7/12 19:21
|
||||
**/
|
||||
public interface HandlerMapping {
|
||||
|
||||
/**.
|
||||
* It will be invoked in order to enable this component after update the
|
||||
* ability table key to true
|
||||
*/
|
||||
default void enable() {
|
||||
// Nothing to do!
|
||||
}
|
||||
|
||||
/**.
|
||||
* It will be invoked in order to disable this component after update the
|
||||
* ability table key to false
|
||||
*/
|
||||
default void disable() {
|
||||
// Nothing to do!
|
||||
}
|
||||
}
|
@ -0,0 +1,95 @@
|
||||
/*
|
||||
* Copyright 1999-2022 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed 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.
|
||||
*/
|
||||
|
||||
package com.alibaba.nacos.common.ability.inter;
|
||||
|
||||
import com.alibaba.nacos.api.ability.constant.AbilityKey;
|
||||
import com.alibaba.nacos.api.ability.entity.AbilityTable;
|
||||
import com.alibaba.nacos.common.ability.handler.AbilityHandlePreProcessor;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**.
|
||||
* @author Daydreamer
|
||||
* @description This is a base interface to manage ability table
|
||||
* @date 2022/8/10 23:18
|
||||
**/
|
||||
public interface AbilityControlManager {
|
||||
|
||||
/**
|
||||
* Whether the ability is supported for Connection. If the ability of current node is closed, it will return false.
|
||||
*
|
||||
* @param connectionId the connection range of ability table.
|
||||
* @param abilityKey key name which comes from {@link AbilityKey}.
|
||||
* @return whether the ability is supported in certain connection.
|
||||
*/
|
||||
boolean isSupport(String connectionId, String abilityKey);
|
||||
|
||||
/**
|
||||
* Whether the ability current node supporting is running. Return false if current node doesn't support.
|
||||
*
|
||||
* @param abilityKey ability key
|
||||
* @return is running
|
||||
*/
|
||||
boolean isCurrentNodeAbilityRunning(String abilityKey);
|
||||
|
||||
/**
|
||||
* Register a new ability table.
|
||||
*
|
||||
* @param table the ability table.
|
||||
*/
|
||||
void addNewTable(AbilityTable table);
|
||||
|
||||
/**.
|
||||
* Remove a ability table
|
||||
*
|
||||
* @param connectionId the ability table which is removing.
|
||||
*/
|
||||
void removeTable(String connectionId);
|
||||
|
||||
/**.
|
||||
* whether contains this ability table
|
||||
*
|
||||
* @param connectionId connection id
|
||||
* @return whether contains
|
||||
*/
|
||||
boolean contains(String connectionId);
|
||||
|
||||
/**.
|
||||
* Return ability table of current node
|
||||
*
|
||||
* @return ability table
|
||||
*/
|
||||
Map<String, Boolean> getCurrentRunningAbility();
|
||||
|
||||
/**.
|
||||
* They will be invoked before updating ability table, but the order in which
|
||||
* they are called cannot be guaranteed
|
||||
*
|
||||
* @param postProcessor PostProcessor instance
|
||||
*/
|
||||
void addPostProcessor(AbilityHandlePreProcessor postProcessor);
|
||||
|
||||
/**.
|
||||
* Initialize the manager
|
||||
*/
|
||||
void init();
|
||||
|
||||
/**.
|
||||
* It should be invoked before destroy
|
||||
*/
|
||||
void destroy();
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright 1999-2022 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed 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.
|
||||
*/
|
||||
|
||||
package com.alibaba.nacos.common.ability.inter;
|
||||
|
||||
import com.alibaba.nacos.common.ability.AbstractAbilityControlManager;
|
||||
import com.alibaba.nacos.common.ability.handler.HandlerMapping;
|
||||
|
||||
/**.
|
||||
* @author Daydreamer
|
||||
* @description It provides the capability to notify components which interested in one ability for the {@link AbilityControlManager}
|
||||
* @date 2022/8/10 23:43
|
||||
**/
|
||||
public interface AbilityHandlerRegistry {
|
||||
|
||||
/**.
|
||||
* Turn on the ability whose key is <p>abilityKey</p>
|
||||
*
|
||||
* @param abilityKey ability key
|
||||
* @return if turn success
|
||||
*/
|
||||
boolean enableCurrentNodeAbility(String abilityKey);
|
||||
|
||||
/**.
|
||||
* Turn off the ability whose key is <p>abilityKey</p>
|
||||
*
|
||||
* @param abilityKey ability key
|
||||
* @return if turn success
|
||||
*/
|
||||
boolean disableCurrentNodeAbility(String abilityKey);
|
||||
|
||||
/**.
|
||||
* Register the component which is managed by {@link AbstractAbilityControlManager}.
|
||||
* if you are hoping that a component will be invoked when turn on/off the ability whose key is <p>abilityKey</p>.
|
||||
*
|
||||
* @param abilityKey component key from {@link com.alibaba.nacos.api.ability.constant.AbilityKey}
|
||||
* @param priority a positive number, the higher the priority is, the faster it will be called. `1` is the lowest priority.
|
||||
* @param handlerMapping component instance.
|
||||
*/
|
||||
void registerComponent(String abilityKey, HandlerMapping handlerMapping, int priority);
|
||||
|
||||
/**.
|
||||
* Default method to register component with the lowest priority.
|
||||
*
|
||||
* @param abilityKey component key from {@link com.alibaba.nacos.api.ability.constant.AbilityKey}
|
||||
* @param handlerMapping component instance.
|
||||
*/
|
||||
default void registerComponent(String abilityKey, HandlerMapping handlerMapping) {
|
||||
registerComponent(abilityKey, handlerMapping, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the component instance of <p>handlerMappingClazz</p>.
|
||||
*
|
||||
* @param abilityKey ability key from {@link com.alibaba.nacos.api.ability.constant.AbilityKey}
|
||||
* @param handlerMappingClazz implement of {@link HandlerMapping}
|
||||
* @return the count of components have removed
|
||||
*/
|
||||
int removeComponent(String abilityKey, Class<? extends HandlerMapping> handlerMappingClazz);
|
||||
|
||||
/**
|
||||
* Remove all {@link HandlerMapping} interested in the special ability.
|
||||
* @param abilityKey abnility key from {@link com.alibaba.nacos.api.ability.constant.AbilityKey}
|
||||
* @return the count of components have removed
|
||||
*/
|
||||
int removeAll(String abilityKey);
|
||||
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright 1999-2022 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed 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.
|
||||
*/
|
||||
|
||||
package com.alibaba.nacos.common.ability.inter;
|
||||
|
||||
import com.alibaba.nacos.api.ability.constant.AbilityStatus;
|
||||
|
||||
/**.
|
||||
* @author Daydreamer
|
||||
* @description It provides the capability to trace the state of AbilityTable for the {@link AbilityControlManager}
|
||||
* @date 2022/8/10 23:30
|
||||
**/
|
||||
public interface TraceableAbilityControlManager extends AbilityControlManager {
|
||||
|
||||
/**
|
||||
* Get the status of the ability table.
|
||||
*
|
||||
* @param connectionId connection id
|
||||
* @return status of ability table {@link AbilityStatus}
|
||||
*/
|
||||
AbilityStatus trace(String connectionId);
|
||||
|
||||
/**.
|
||||
* Trace the status of connection if {@link AbilityStatus#INITIALIZING}, wake up if {@link AbilityStatus#READY}
|
||||
* It will return if status is {@link AbilityStatus#EXPIRED} or {@link AbilityStatus#NOT_EXIST}
|
||||
*
|
||||
* @param connectionId connection id
|
||||
* @return if success to {@link AbilityStatus#READY}
|
||||
*/
|
||||
boolean traceReadySyn(String connectionId);
|
||||
}
|
Loading…
Reference in New Issue
Block a user