This is an automated email from the ASF dual-hosted git repository.
menghaoran 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 7319e02 Refactor PrivilegeBuilder (#9739)
7319e02 is described below
commit 7319e025054843419b8bdd871c06d66cc663272f
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Mar 19 07:11:42 2021 +0800
Refactor PrivilegeBuilder (#9739)
---
.../metadata/auth/builder/PrivilegeBuilder.java | 63 +++++++++++-----------
.../auth/builder/loader/PrivilegeLoader.java | 6 +--
.../auth/builder/loader/PrivilegeLoaderEngine.java | 4 +-
3 files changed, 36 insertions(+), 37 deletions(-)
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/PrivilegeBuilder.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/PrivilegeBuilder.java
index f467dc3..98c7a0e 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/PrivilegeBuilder.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/PrivilegeBuilder.java
@@ -53,70 +53,69 @@ public final class PrivilegeBuilder {
/**
* Build privileges.
*
- * @param metaDatas metadatas
+ * @param metaDataList meta data list
* @param users users
- * @param props props
+ * @param props configuration properties
* @return privileges
*/
- public static Map<ShardingSphereUser, ShardingSpherePrivilege> build(final
Collection<ShardingSphereMetaData> metaDatas,
+ public static Map<ShardingSphereUser, ShardingSpherePrivilege> build(final
Collection<ShardingSphereMetaData> metaDataList,
final
Collection<ShardingSphereUser> users, final ConfigurationProperties props) {
- if (metaDatas.isEmpty()) {
- return getDefaultShardingSpherePrivileges(users);
+ if (metaDataList.isEmpty()) {
+ return createDefaultPrivileges(users);
}
- Optional<PrivilegeLoader> loader =
PrivilegeLoaderEngine.getPrivilegeLoader(metaDatas.iterator().next().getResource().getDatabaseType());
- return loader.map(privilegeLoader -> build(metaDatas, users, props,
privilegeLoader)).orElseGet(() -> getDefaultShardingSpherePrivileges(users));
+ Optional<PrivilegeLoader> loader =
PrivilegeLoaderEngine.findPrivilegeLoader(metaDataList.iterator().next().getResource().getDatabaseType());
+ return loader.map(optional -> build(metaDataList, users, props,
optional)).orElseGet(() -> createDefaultPrivileges(users));
}
- private static Map<ShardingSphereUser, ShardingSpherePrivilege>
build(final Collection<ShardingSphereMetaData> metaDatas,
+ private static Map<ShardingSphereUser, ShardingSpherePrivilege>
build(final Collection<ShardingSphereMetaData> metaDataList,
final Collection<ShardingSphereUser> users, final ConfigurationProperties
props, final PrivilegeLoader loader) {
Map<ShardingSphereUser, ShardingSpherePrivilege> result = new
LinkedHashMap<>();
- for (ShardingSphereMetaData each : metaDatas) {
- result.putAll(build0(each, users, loader, props));
+ for (ShardingSphereMetaData each : metaDataList) {
+ result.putAll(build(each, users, props, loader));
}
return result;
}
- private static Map<ShardingSphereUser, ShardingSpherePrivilege>
getDefaultShardingSpherePrivileges(final Collection<ShardingSphereUser> users) {
- Map<ShardingSphereUser, ShardingSpherePrivilege> result = new
LinkedHashMap<>();
- ShardingSpherePrivilege privilege = new ShardingSpherePrivilege();
- privilege.setSuperPrivilege();
- users.forEach(each -> result.put(each, privilege));
- return result;
- }
-
- private static Map<ShardingSphereUser, ShardingSpherePrivilege>
build0(final ShardingSphereMetaData metaData, final
Collection<ShardingSphereUser> users,
-
final PrivilegeLoader loader, final ConfigurationProperties props) {
- Map<ShardingSphereUser, Collection<ShardingSpherePrivilege>> result =
- build0(metaData.getResource().getDataSources(), users, loader,
props.getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY));
+ private static Map<ShardingSphereUser, ShardingSpherePrivilege>
build(final ShardingSphereMetaData metaData, final
Collection<ShardingSphereUser> users,
+
final ConfigurationProperties props, final PrivilegeLoader loader) {
+ int maxConnectionsSizePerQuery =
props.getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
+ Map<ShardingSphereUser, Collection<ShardingSpherePrivilege>> result =
build(metaData.getResource().getDataSources().values(), users, loader,
maxConnectionsSizePerQuery);
return PrivilegeMerger.merge(result, metaData.getName(),
metaData.getRuleMetaData().getRules());
}
- private static Map<ShardingSphereUser,
Collection<ShardingSpherePrivilege>> build0(final Map<String, DataSource>
dataSources, final Collection<ShardingSphereUser> users,
- final
PrivilegeLoader loader, final int maxConnectionsSizePerQuery) {
- Map<ShardingSphereUser, Collection<ShardingSpherePrivilege>> result =
new LinkedHashMap<>();
+ private static Map<ShardingSphereUser,
Collection<ShardingSpherePrivilege>> build(final Collection<DataSource>
dataSources, final Collection<ShardingSphereUser> users,
+
final PrivilegeLoader loader, final int maxConnectionsSizePerQuery) {
+ Map<ShardingSphereUser, Collection<ShardingSpherePrivilege>> result =
new LinkedHashMap<>(users.size(), 1);
for (ShardingSphereUser each : users) {
- Collection<ShardingSpherePrivilege> privileges =
parallelLoadPrivileges(dataSources, each, loader, maxConnectionsSizePerQuery);
- result.put(each, privileges);
+ result.put(each, load(dataSources, each, loader,
maxConnectionsSizePerQuery));
}
return result;
}
- private static Collection<ShardingSpherePrivilege>
parallelLoadPrivileges(final Map<String, DataSource> dataSources,
- final
ShardingSphereUser user, final PrivilegeLoader loader, final int
maxConnectionsSizePerQuery) {
+ private static Collection<ShardingSpherePrivilege> load(final
Collection<DataSource> dataSources,
+ final
ShardingSphereUser user, final PrivilegeLoader loader, final int
maxConnectionsSizePerQuery) {
Collection<ShardingSpherePrivilege> result = new
LinkedHashSet<>(dataSources.size(), 1);
- Collection<Future<Optional<ShardingSpherePrivilege>>> futures = new
LinkedHashSet<>(dataSources.size(), 1);
ExecutorService executorService =
Executors.newFixedThreadPool(Math.min(CPU_CORES * 2, dataSources.size() *
maxConnectionsSizePerQuery));
- for (DataSource each : dataSources.values()) {
+ Collection<Future<Optional<ShardingSpherePrivilege>>> futures = new
LinkedHashSet<>(dataSources.size(), 1);
+ for (DataSource each : dataSources) {
futures.add(executorService.submit(() -> loader.load(user, each)));
}
futures.forEach(each -> {
try {
each.get(FUTURE_GET_TIME_OUT_SECOND,
TimeUnit.SECONDS).ifPresent(result::add);
} catch (final InterruptedException | ExecutionException |
TimeoutException ex) {
- throw new IllegalStateException(String.format("Error while
fetching privilege with %s", each), ex);
+ throw new IllegalStateException(String.format("Error while
loading privilege with %s", each), ex);
}
});
executorService.shutdownNow();
return result;
}
+
+ private static Map<ShardingSphereUser, ShardingSpherePrivilege>
createDefaultPrivileges(final Collection<ShardingSphereUser> users) {
+ Map<ShardingSphereUser, ShardingSpherePrivilege> result = new
LinkedHashMap<>(users.size(), 1);
+ ShardingSpherePrivilege privilege = new ShardingSpherePrivilege();
+ privilege.setSuperPrivilege();
+ users.forEach(each -> result.put(each, privilege));
+ return result;
+ }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoader.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoader.java
index 49015b3..63f4a77 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoader.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoader.java
@@ -30,12 +30,12 @@ import java.util.Optional;
public interface PrivilegeLoader {
/**
- * Load.
+ * Load privilege.
*
* @param user user
* @param dataSource data source
- * @return sharding sphere privilege
- * @throws SQLException sql exception
+ * @return ShardingSphere privilege
+ * @throws SQLException SQL exception
*/
Optional<ShardingSpherePrivilege> load(ShardingSphereUser user, DataSource
dataSource) throws SQLException;
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoaderEngine.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoaderEngine.java
index 2278af6..809e544 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoaderEngine.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/auth/builder/loader/PrivilegeLoaderEngine.java
@@ -35,12 +35,12 @@ public final class PrivilegeLoaderEngine {
}
/**
- * Get privilege loader.
+ * Find privilege loader.
*
* @param databaseType database type
* @return privilege loader
*/
- public static Optional<PrivilegeLoader> getPrivilegeLoader(final
DatabaseType databaseType) {
+ public static Optional<PrivilegeLoader> findPrivilegeLoader(final
DatabaseType databaseType) {
for (PrivilegeLoader each :
ShardingSphereServiceLoader.newServiceInstances(PrivilegeLoader.class)) {
if (each.getDatabaseType().equals(databaseType.getName())) {
return Optional.of(each);