mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	- 优化 连接池不可用、定时检查;
This commit is contained in:
		@@ -35,18 +35,8 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
			
		||||
        {
 | 
			
		||||
            if (exception != null && exception is OdbcException)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                if (exception is System.IO.IOException)
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    base.SetUnavailable(exception);
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                else if (obj.Value.Ping() == false)
 | 
			
		||||
                {
 | 
			
		||||
 | 
			
		||||
                    base.SetUnavailable(exception);
 | 
			
		||||
                }
 | 
			
		||||
                if (obj.Value.Ping() == false)
 | 
			
		||||
                    base.SetUnavailable(exception, obj.LastGetTimeCopy);
 | 
			
		||||
            }
 | 
			
		||||
            base.Return(obj, isRecreate);
 | 
			
		||||
        }
 | 
			
		||||
@@ -63,7 +53,7 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
			
		||||
        public int AsyncGetCapacity { get; set; } = 10000;
 | 
			
		||||
        public bool IsThrowGetTimeoutException { get; set; } = true;
 | 
			
		||||
        public bool IsAutoDisposeWithSystem { get; set; } = true;
 | 
			
		||||
        public int CheckAvailableInterval { get; set; } = 5;
 | 
			
		||||
        public int CheckAvailableInterval { get; set; } = 2;
 | 
			
		||||
        public int Weight { get; set; } = 1;
 | 
			
		||||
 | 
			
		||||
        static ConcurrentDictionary<string, int> dicConnStrIncr = new ConcurrentDictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
 | 
			
		||||
@@ -130,9 +120,8 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
			
		||||
            {
 | 
			
		||||
                if (obj.Value == null)
 | 
			
		||||
                {
 | 
			
		||||
                    if (_pool.SetUnavailable(new Exception("连接字符串错误")) == true)
 | 
			
		||||
                        throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
			
		||||
                    return;
 | 
			
		||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
			
		||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && obj.Value.Ping() == false)
 | 
			
		||||
@@ -144,8 +133,9 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
			
		||||
                    }
 | 
			
		||||
                    catch (Exception ex)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (_pool.SetUnavailable(ex) == true)
 | 
			
		||||
                        if (_pool.SetUnavailable(ex, obj.LastGetTimeCopy) == true)
 | 
			
		||||
                            throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
 | 
			
		||||
                        throw ex;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
@@ -160,9 +150,8 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
			
		||||
            {
 | 
			
		||||
                if (obj.Value == null)
 | 
			
		||||
                {
 | 
			
		||||
                    if (_pool.SetUnavailable(new Exception("连接字符串错误")) == true)
 | 
			
		||||
                        throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
			
		||||
                    return;
 | 
			
		||||
                    _pool.SetUnavailable(new Exception("连接字符串错误"), obj.LastGetTimeCopy);
 | 
			
		||||
                    throw new Exception($"【{this.Name}】连接字符串错误,请检查。");
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (obj.Value.State != ConnectionState.Open || DateTime.Now.Subtract(obj.LastReturnTime).TotalSeconds > 60 && (await obj.Value.PingAsync()) == false)
 | 
			
		||||
@@ -174,8 +163,9 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
			
		||||
                    }
 | 
			
		||||
                    catch (Exception ex)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (_pool.SetUnavailable(ex) == true)
 | 
			
		||||
                        if (_pool.SetUnavailable(ex, obj.LastGetTimeCopy) == true)
 | 
			
		||||
                            throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
 | 
			
		||||
                        throw ex;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user