This is an automated email from the ASF dual-hosted git repository.
zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new f26eace939c Mark @HighFrequencyInvocation on ShardingSphereAlgorithms
(#36299)
f26eace939c is described below
commit f26eace939c0f5f30c68f1ddc151d309f0652379
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Aug 14 12:18:25 2025 +0800
Mark @HighFrequencyInvocation on ShardingSphereAlgorithms (#36299)
---
.../algorithm/cryptographic/aes/AESCryptographicAlgorithm.java | 6 ++++++
.../algorithm/keygen/snowflake/SnowflakeKeyGenerateAlgorithm.java | 5 +++++
.../algorithm/loadbalancer/random/RandomLoadBalanceAlgorithm.java | 2 ++
.../loadbalancer/round/robin/RoundRobinLoadBalanceAlgorithm.java | 2 ++
.../algorithm/loadbalancer/weight/WeightLoadBalanceAlgorithm.java | 7 +++++++
.../algorithm/messagedigest/md5/MD5MessageDigestAlgorithm.java | 2 ++
6 files changed, 24 insertions(+)
diff --git
a/infra/algorithm/type/cryptographic/type/aes/src/main/java/org/apache/shardingsphere/infra/algorithm/cryptographic/aes/AESCryptographicAlgorithm.java
b/infra/algorithm/type/cryptographic/type/aes/src/main/java/org/apache/shardingsphere/infra/algorithm/cryptographic/aes/AESCryptographicAlgorithm.java
index 1eaa73cea69..489d892f0a4 100644
---
a/infra/algorithm/type/cryptographic/type/aes/src/main/java/org/apache/shardingsphere/infra/algorithm/cryptographic/aes/AESCryptographicAlgorithm.java
+++
b/infra/algorithm/type/cryptographic/type/aes/src/main/java/org/apache/shardingsphere/infra/algorithm/cryptographic/aes/AESCryptographicAlgorithm.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.infra.algorithm.cryptographic.aes;
import lombok.SneakyThrows;
import
org.apache.shardingsphere.infra.algorithm.cryptographic.spi.CryptographicAlgorithm;
import
org.apache.shardingsphere.infra.algorithm.cryptographic.spi.CryptographicPropertiesProvider;
+import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import javax.crypto.Cipher;
@@ -41,6 +42,7 @@ public final class AESCryptographicAlgorithm implements
CryptographicAlgorithm {
propsProvider =
TypedSPILoader.getService(CryptographicPropertiesProvider.class, "DEFAULT",
props);
}
+ @HighFrequencyInvocation
@SneakyThrows(GeneralSecurityException.class)
@Override
public String encrypt(final Object plainValue) {
@@ -51,10 +53,12 @@ public final class AESCryptographicAlgorithm implements
CryptographicAlgorithm {
return encode(result);
}
+ @HighFrequencyInvocation
private String encode(final byte[] value) {
return Base64.getEncoder().encodeToString(value);
}
+ @HighFrequencyInvocation
@SneakyThrows(GeneralSecurityException.class)
@Override
public Object decrypt(final Object cipherValue) {
@@ -65,10 +69,12 @@ public final class AESCryptographicAlgorithm implements
CryptographicAlgorithm {
return new String(result, StandardCharsets.UTF_8);
}
+ @HighFrequencyInvocation
private byte[] decode(final String value) {
return Base64.getDecoder().decode(value);
}
+ @HighFrequencyInvocation
private Cipher getCipher(final int decryptMode) throws
GeneralSecurityException {
Cipher result = Cipher.getInstance(getType());
result.init(decryptMode, new
SecretKeySpec(propsProvider.getSecretKey(), getType()));
diff --git
a/infra/algorithm/type/key-generator/type/snowflake/src/main/java/org/apache/shardingsphere/infra/algorithm/keygen/snowflake/SnowflakeKeyGenerateAlgorithm.java
b/infra/algorithm/type/key-generator/type/snowflake/src/main/java/org/apache/shardingsphere/infra/algorithm/keygen/snowflake/SnowflakeKeyGenerateAlgorithm.java
index 643e83959fb..c99ecd67ddf 100644
---
a/infra/algorithm/type/key-generator/type/snowflake/src/main/java/org/apache/shardingsphere/infra/algorithm/keygen/snowflake/SnowflakeKeyGenerateAlgorithm.java
+++
b/infra/algorithm/type/key-generator/type/snowflake/src/main/java/org/apache/shardingsphere/infra/algorithm/keygen/snowflake/SnowflakeKeyGenerateAlgorithm.java
@@ -23,6 +23,7 @@ import
org.apache.shardingsphere.infra.algorithm.core.context.AlgorithmSQLContex
import
org.apache.shardingsphere.infra.algorithm.core.exception.AlgorithmExecuteException;
import
org.apache.shardingsphere.infra.algorithm.core.exception.AlgorithmInitializationException;
import
org.apache.shardingsphere.infra.algorithm.keygen.spi.KeyGenerateAlgorithm;
+import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
import
org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContextAware;
@@ -120,6 +121,7 @@ public final class SnowflakeKeyGenerateAlgorithm implements
KeyGenerateAlgorithm
}
}
+ @HighFrequencyInvocation
@Override
public Collection<Long> generateKeys(final AlgorithmSQLContext context,
final int keyGenerateCount) {
Collection<Long> result = new LinkedList<>();
@@ -129,6 +131,7 @@ public final class SnowflakeKeyGenerateAlgorithm implements
KeyGenerateAlgorithm
return result;
}
+ @HighFrequencyInvocation
private synchronized Long generateKey() {
long currentMillis = timeService.getCurrentMillis();
if (waitTolerateTimeDifferenceIfNeed(currentMillis)) {
@@ -167,12 +170,14 @@ public final class SnowflakeKeyGenerateAlgorithm
implements KeyGenerateAlgorithm
return result;
}
+ @HighFrequencyInvocation
private void vibrateSequenceOffset() {
if (!sequenceOffset.compareAndSet(maxVibrationOffset, 0)) {
sequenceOffset.incrementAndGet();
}
}
+ @HighFrequencyInvocation
private int getWorkerId() {
return null == computeNodeInstanceContext.get() ? DEFAULT_WORKER_ID :
computeNodeInstanceContext.get().getWorkerId();
}
diff --git
a/infra/algorithm/type/load-balancer/type/random/src/main/java/org/apache/shardingsphere/infra/algorithm/loadbalancer/random/RandomLoadBalanceAlgorithm.java
b/infra/algorithm/type/load-balancer/type/random/src/main/java/org/apache/shardingsphere/infra/algorithm/loadbalancer/random/RandomLoadBalanceAlgorithm.java
index 7d8787b3958..152010fdcc0 100644
---
a/infra/algorithm/type/load-balancer/type/random/src/main/java/org/apache/shardingsphere/infra/algorithm/loadbalancer/random/RandomLoadBalanceAlgorithm.java
+++
b/infra/algorithm/type/load-balancer/type/random/src/main/java/org/apache/shardingsphere/infra/algorithm/loadbalancer/random/RandomLoadBalanceAlgorithm.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.infra.algorithm.loadbalancer.random;
import
org.apache.shardingsphere.infra.algorithm.loadbalancer.spi.LoadBalanceAlgorithm;
+import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
@@ -27,6 +28,7 @@ import java.util.concurrent.ThreadLocalRandom;
*/
public final class RandomLoadBalanceAlgorithm implements LoadBalanceAlgorithm {
+ @HighFrequencyInvocation
@Override
public String getTargetName(final String groupName, final List<String>
availableTargetNames) {
return
availableTargetNames.get(ThreadLocalRandom.current().nextInt(availableTargetNames.size()));
diff --git
a/infra/algorithm/type/load-balancer/type/round-robin/src/main/java/org/apache/shardingsphere/infra/algorithm/loadbalancer/round/robin/RoundRobinLoadBalanceAlgorithm.java
b/infra/algorithm/type/load-balancer/type/round-robin/src/main/java/org/apache/shardingsphere/infra/algorithm/loadbalancer/round/robin/RoundRobinLoadBalanceAlgorithm.java
index 4df251d37b2..6511e110bdb 100644
---
a/infra/algorithm/type/load-balancer/type/round-robin/src/main/java/org/apache/shardingsphere/infra/algorithm/loadbalancer/round/robin/RoundRobinLoadBalanceAlgorithm.java
+++
b/infra/algorithm/type/load-balancer/type/round-robin/src/main/java/org/apache/shardingsphere/infra/algorithm/loadbalancer/round/robin/RoundRobinLoadBalanceAlgorithm.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.infra.algorithm.loadbalancer.round.robin;
import
org.apache.shardingsphere.infra.algorithm.loadbalancer.spi.LoadBalanceAlgorithm;
+import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
@@ -29,6 +30,7 @@ public final class RoundRobinLoadBalanceAlgorithm implements
LoadBalanceAlgorith
private final AtomicInteger count = new AtomicInteger(0);
+ @HighFrequencyInvocation
@Override
public String getTargetName(final String groupName, final List<String>
availableTargetNames) {
return availableTargetNames.get(Math.abs(count.getAndIncrement()) %
availableTargetNames.size());
diff --git
a/infra/algorithm/type/load-balancer/type/weight/src/main/java/org/apache/shardingsphere/infra/algorithm/loadbalancer/weight/WeightLoadBalanceAlgorithm.java
b/infra/algorithm/type/load-balancer/type/weight/src/main/java/org/apache/shardingsphere/infra/algorithm/loadbalancer/weight/WeightLoadBalanceAlgorithm.java
index 247ddb8dfe9..feb23fb7a87 100644
---
a/infra/algorithm/type/load-balancer/type/weight/src/main/java/org/apache/shardingsphere/infra/algorithm/loadbalancer/weight/WeightLoadBalanceAlgorithm.java
+++
b/infra/algorithm/type/load-balancer/type/weight/src/main/java/org/apache/shardingsphere/infra/algorithm/loadbalancer/weight/WeightLoadBalanceAlgorithm.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.infra.algorithm.loadbalancer.weight;
import com.google.common.base.Preconditions;
import
org.apache.shardingsphere.infra.algorithm.core.exception.AlgorithmInitializationException;
import
org.apache.shardingsphere.infra.algorithm.loadbalancer.spi.LoadBalanceAlgorithm;
+import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import java.util.Arrays;
@@ -63,6 +64,7 @@ public final class WeightLoadBalanceAlgorithm implements
LoadBalanceAlgorithm {
() -> new AlgorithmInitializationException(this, "Target `%s`
is required in database `%s`.", each, databaseName)));
}
+ @HighFrequencyInvocation
@Override
public String getTargetName(final String groupName, final List<String>
availableTargetNames) {
double[] weight = weightMap.containsKey(groupName) &&
weightMap.get(groupName).length == availableTargetNames.size() ?
weightMap.get(groupName) : initWeight(availableTargetNames);
@@ -70,6 +72,7 @@ public final class WeightLoadBalanceAlgorithm implements
LoadBalanceAlgorithm {
return getAvailableTargetName(availableTargetNames, weight);
}
+ @HighFrequencyInvocation
private String getAvailableTargetName(final List<String>
availableTargetNames, final double[] weight) {
double randomWeight = ThreadLocalRandom.current().nextDouble(0D, 1D);
int index = Arrays.binarySearch(weight, randomWeight);
@@ -80,6 +83,7 @@ public final class WeightLoadBalanceAlgorithm implements
LoadBalanceAlgorithm {
return availableTargetNames.get(index);
}
+ @HighFrequencyInvocation
private double[] initWeight(final List<String> availableTargetNames) {
double[] result = getWeights(availableTargetNames);
Preconditions.checkState(!(0 != result.length &&
Math.abs(result[result.length - 1] - 1.0D) >= ACCURACY_THRESHOLD),
@@ -87,6 +91,7 @@ public final class WeightLoadBalanceAlgorithm implements
LoadBalanceAlgorithm {
return result;
}
+ @HighFrequencyInvocation
private double[] getWeights(final List<String> availableTargetNames) {
double[] exactWeights = new double[availableTargetNames.size()];
int index = 0;
@@ -105,6 +110,7 @@ public final class WeightLoadBalanceAlgorithm implements
LoadBalanceAlgorithm {
return calculateWeight(exactWeights);
}
+ @HighFrequencyInvocation
private double[] calculateWeight(final double[] exactWeights) {
double[] result = new double[exactWeights.length];
double randomRange = 0D;
@@ -115,6 +121,7 @@ public final class WeightLoadBalanceAlgorithm implements
LoadBalanceAlgorithm {
return result;
}
+ @HighFrequencyInvocation
private double getWeightValue(final String readDataSourceName) {
double result = weightConfigMap.get(readDataSourceName);
if (Double.isInfinite(result)) {
diff --git
a/infra/algorithm/type/message-digest/type/md5/src/main/java/org/apache/shardingsphere/infra/algorithm/messagedigest/md5/MD5MessageDigestAlgorithm.java
b/infra/algorithm/type/message-digest/type/md5/src/main/java/org/apache/shardingsphere/infra/algorithm/messagedigest/md5/MD5MessageDigestAlgorithm.java
index def58df0959..845f56c9bb8 100644
---
a/infra/algorithm/type/message-digest/type/md5/src/main/java/org/apache/shardingsphere/infra/algorithm/messagedigest/md5/MD5MessageDigestAlgorithm.java
+++
b/infra/algorithm/type/message-digest/type/md5/src/main/java/org/apache/shardingsphere/infra/algorithm/messagedigest/md5/MD5MessageDigestAlgorithm.java
@@ -19,6 +19,7 @@ package
org.apache.shardingsphere.infra.algorithm.messagedigest.md5;
import org.apache.commons.codec.digest.DigestUtils;
import
org.apache.shardingsphere.infra.algorithm.messagedigest.spi.MessageDigestAlgorithm;
+import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import java.util.Properties;
@@ -36,6 +37,7 @@ public final class MD5MessageDigestAlgorithm implements
MessageDigestAlgorithm {
salt = props.getProperty(SALT_KEY, "");
}
+ @HighFrequencyInvocation
@Override
public String digest(final Object plainValue) {
return null == plainValue ? null : DigestUtils.md5Hex(plainValue +
salt);