Commit 1518003a authored by terrymanu's avatar terrymanu
Browse files

fix executor service leak of metadata loading for sharding-proxy

parent ad0f81b7
Loading
Loading
Loading
Loading
+15 −11
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@

package io.shardingsphere.proxy.config;

import com.google.common.base.Preconditions;
import com.google.common.eventbus.Subscribe;
import com.google.common.util.concurrent.MoreExecutors;
import io.shardingsphere.core.api.config.ShardingRuleConfiguration;
@@ -44,7 +43,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;

/**
 * Sharding rule registry.
@@ -71,10 +70,6 @@ public final class RuleRegistry {
    
    private Map<String, DataSourceParameter> dataSourceConfigurationMap;
    
    private ProxyAuthority proxyAuthority;
    
    private ShardingMetaData shardingMetaData;
    
    private boolean showSQL;
    
    private ProxyMode proxyMode;
@@ -83,8 +78,12 @@ public final class RuleRegistry {
    
    private int maxWorkingThreads;
    
    private ProxyAuthority proxyAuthority;
    
    private ShardingDataSourceMetaData shardingDataSourceMetaData;
    
    private ShardingMetaData shardingMetaData;
    
    /**
     * Get instance of sharding rule registry.
     *
@@ -118,15 +117,20 @@ public final class RuleRegistry {
                dataSourceConfigurationMap.put(entry.getKey(), entry.getValue());
            }
        }
        proxyAuthority = config.getProxyAuthority();
        shardingDataSourceMetaData = new ShardingDataSourceMetaData(dataSourceMap, shardingRule, DatabaseType.MySQL);
        // TODO metadata only as pojo, executor service should out of metadata
        // TODO executor service leak here, should shutdown original executor service
        shardingMetaData = new ProxyShardingMetaData(MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(maxWorkingThreads)), dataSourceMap);
    }
    
    /**
     * Initialize rule registry.
     *
     * @param executorService executor service
     */
    public void initShardingMetaData(final ExecutorService executorService) {
        shardingMetaData = new ProxyShardingMetaData(MoreExecutors.listeningDecorator(executorService), dataSourceMap);
        if (!isMasterSlaveOnly()) {
            shardingMetaData.init(shardingRule);
        }
        proxyAuthority = config.getProxyAuthority();
        Preconditions.checkNotNull(proxyAuthority.getUsername(), "Invalid configuration for proxy authority.");
    }
    
    /**
+4 −0
Original line number Diff line number Diff line
@@ -54,6 +54,10 @@ public final class ShardingProxy {
    
    private EventLoopGroup workerGroup;
    
    public ShardingProxy() {
        ruleRegistry.initShardingMetaData(executorContext.getUserGroup());
    }
    
    /**
     * Start Sharding-Proxy.
     *