mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 05:11:41 +01:00 
			
		
		
		
	Expose db.SetMaxOpenConns and allow non MySQL dbs to set conn pool params (#8528)
* Expose db.SetMaxOpenConns and allow other dbs to set their connection params * Add note about port exhaustion Co-Authored-By: guillep2k <18600385+guillep2k@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									73f8069249
								
							
						
					
					
						commit
						d8161ee3fd
					
				| @ -317,10 +317,12 @@ LOG_SQL = true | |||||||
| DB_RETRIES = 10 | DB_RETRIES = 10 | ||||||
| ; Backoff time per DB retry (time.Duration) | ; Backoff time per DB retry (time.Duration) | ||||||
| DB_RETRY_BACKOFF = 3s | DB_RETRY_BACKOFF = 3s | ||||||
| ; Max idle database connections on connnection pool, default is 0 | ; Max idle database connections on connnection pool, default is 2 | ||||||
| MAX_IDLE_CONNS = 0 | MAX_IDLE_CONNS = 2 | ||||||
| ; Database connection max life time, default is 3s | ; Database connection max life time, default is 0 or 3s mysql (See #6804 & #7071 for reasoning) | ||||||
| CONN_MAX_LIFETIME = 3s | CONN_MAX_LIFETIME = 3s | ||||||
|  | ; Database maximum number of open connections, default is 0 meaning no maximum | ||||||
|  | MAX_OPEN_CONNS = 0 | ||||||
| 
 | 
 | ||||||
| [indexer] | [indexer] | ||||||
| ; Issue indexer type, currently support: bleve or db, default is bleve | ; Issue indexer type, currently support: bleve or db, default is bleve | ||||||
| @ -870,6 +872,6 @@ TOKEN = | |||||||
| QUEUE_TYPE = channel | QUEUE_TYPE = channel | ||||||
| ; Task queue length, available only when `QUEUE_TYPE` is `channel`. | ; Task queue length, available only when `QUEUE_TYPE` is `channel`. | ||||||
| QUEUE_LENGTH = 1000 | QUEUE_LENGTH = 1000 | ||||||
| ; Task queue connction string, available only when `QUEUE_TYPE` is `redis`. | ; Task queue connection string, available only when `QUEUE_TYPE` is `redis`. | ||||||
| ; If there is a password of redis, use `addrs=127.0.0.1:6379 password=123 db=0`. | ; If there is a password of redis, use `addrs=127.0.0.1:6379 password=123 db=0`. | ||||||
| QUEUE_CONN_STR = "addrs=127.0.0.1:6379 db=0" | QUEUE_CONN_STR = "addrs=127.0.0.1:6379 db=0" | ||||||
|  | |||||||
| @ -192,8 +192,12 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`. | |||||||
| - `LOG_SQL`: **true**: Log the executed SQL. | - `LOG_SQL`: **true**: Log the executed SQL. | ||||||
| - `DB_RETRIES`: **10**: How many ORM init / DB connect attempts allowed. | - `DB_RETRIES`: **10**: How many ORM init / DB connect attempts allowed. | ||||||
| - `DB_RETRY_BACKOFF`: **3s**: time.Duration to wait before trying another ORM init / DB connect attempt, if failure occured. | - `DB_RETRY_BACKOFF`: **3s**: time.Duration to wait before trying another ORM init / DB connect attempt, if failure occured. | ||||||
| - `MAX_IDLE_CONNS` **0**: Max idle database connections on connnection pool, default is 0 | - `MAX_OPEN_CONNS` **0**: Database maximum open connections - default is 0, meaning there is no limit. | ||||||
| - `CONN_MAX_LIFETIME` **3s**: Database connection max lifetime | - `MAX_IDLE_CONNS` **2**: Max idle database connections on connnection pool, default is 2 - this will be capped to `MAX_OPEN_CONNS`. | ||||||
|  | - `CONN_MAX_LIFETIME` **0 or 3s**: Sets the maximum amount of time a DB connection may be reused - default is 0, meaning there is no limit (except on MySQL where it is 3s - see #6804 & #7071). | ||||||
|  |    | ||||||
|  | Please see #8540 & #8273 for further discussion of the appropriate values for `MAX_OPEN_CONNS`, `MAX_IDLE_CONNS` & `CONN_MAX_LIFETIME` and their | ||||||
|  | relation to port exhaustion. | ||||||
| 
 | 
 | ||||||
| ## Indexer (`indexer`) | ## Indexer (`indexer`) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -157,11 +157,9 @@ func SetEngine() (err error) { | |||||||
| 	// so use log file to instead print to stdout. | 	// so use log file to instead print to stdout. | ||||||
| 	x.SetLogger(NewXORMLogger(setting.Database.LogSQL)) | 	x.SetLogger(NewXORMLogger(setting.Database.LogSQL)) | ||||||
| 	x.ShowSQL(setting.Database.LogSQL) | 	x.ShowSQL(setting.Database.LogSQL) | ||||||
| 	if setting.Database.UseMySQL { | 	x.SetMaxOpenConns(setting.Database.MaxOpenConns) | ||||||
| 		x.SetMaxIdleConns(setting.Database.MaxIdleConns) | 	x.SetMaxIdleConns(setting.Database.MaxIdleConns) | ||||||
| 		x.SetConnMaxLifetime(setting.Database.ConnMaxLifetime) | 	x.SetConnMaxLifetime(setting.Database.ConnMaxLifetime) | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -42,12 +42,11 @@ var ( | |||||||
| 		DBConnectRetries  int | 		DBConnectRetries  int | ||||||
| 		DBConnectBackoff  time.Duration | 		DBConnectBackoff  time.Duration | ||||||
| 		MaxIdleConns      int | 		MaxIdleConns      int | ||||||
|  | 		MaxOpenConns      int | ||||||
| 		ConnMaxLifetime   time.Duration | 		ConnMaxLifetime   time.Duration | ||||||
| 		IterateBufferSize int | 		IterateBufferSize int | ||||||
| 	}{ | 	}{ | ||||||
| 		Timeout:         500, | 		Timeout: 500, | ||||||
| 		MaxIdleConns:    0, |  | ||||||
| 		ConnMaxLifetime: 3 * time.Second, |  | ||||||
| 	} | 	} | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| @ -80,8 +79,13 @@ func InitDBConfig() { | |||||||
| 	Database.Charset = sec.Key("CHARSET").In("utf8", []string{"utf8", "utf8mb4"}) | 	Database.Charset = sec.Key("CHARSET").In("utf8", []string{"utf8", "utf8mb4"}) | ||||||
| 	Database.Path = sec.Key("PATH").MustString(filepath.Join(AppDataPath, "gitea.db")) | 	Database.Path = sec.Key("PATH").MustString(filepath.Join(AppDataPath, "gitea.db")) | ||||||
| 	Database.Timeout = sec.Key("SQLITE_TIMEOUT").MustInt(500) | 	Database.Timeout = sec.Key("SQLITE_TIMEOUT").MustInt(500) | ||||||
| 	Database.MaxIdleConns = sec.Key("MAX_IDLE_CONNS").MustInt(0) | 	Database.MaxIdleConns = sec.Key("MAX_IDLE_CONNS").MustInt(2) | ||||||
| 	Database.ConnMaxLifetime = sec.Key("CONN_MAX_LIFE_TIME").MustDuration(3 * time.Second) | 	if Database.UseMySQL { | ||||||
|  | 		Database.ConnMaxLifetime = sec.Key("CONN_MAX_LIFE_TIME").MustDuration(3 * time.Second) | ||||||
|  | 	} else { | ||||||
|  | 		Database.ConnMaxLifetime = sec.Key("CONN_MAX_LIFE_TIME").MustDuration(0) | ||||||
|  | 	} | ||||||
|  | 	Database.MaxOpenConns = sec.Key("MAX_OPEN_CONNS").MustInt(0) | ||||||
| 
 | 
 | ||||||
| 	Database.IterateBufferSize = sec.Key("ITERATE_BUFFER_SIZE").MustInt(50) | 	Database.IterateBufferSize = sec.Key("ITERATE_BUFFER_SIZE").MustInt(50) | ||||||
| 	Database.LogSQL = sec.Key("LOG_SQL").MustBool(true) | 	Database.LogSQL = sec.Key("LOG_SQL").MustBool(true) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user