1
0
mirror of https://github.com/ManyakRus/starter.git synced 2025-11-26 23:10:42 +02:00

сделал tinkoff_connect

This commit is contained in:
Nikitin Aleksandr
2025-05-14 16:10:09 +03:00
parent 67e6f29743
commit aa4376074a
6 changed files with 47 additions and 27 deletions

View File

@@ -30,8 +30,8 @@ var Conn *gorm.DB
// log - глобальный логгер
//var log = logger.GetLog()
// mutexReconnect - защита от многопоточности Reconnect()
var mutexReconnect = &sync.Mutex{}
// mutex_Connect - защита от многопоточности Connect()
var mutex_Connect = &sync.RWMutex{}
// NeedReconnect - флаг необходимости переподключения
var NeedReconnect bool
@@ -170,8 +170,8 @@ func IsClosed() bool {
// Reconnect повторное подключение к базе данных, если оно отключено
// или полная остановка программы
func Reconnect(err error) {
mutexReconnect.Lock()
defer mutexReconnect.Unlock()
mutex_Connect.Lock()
defer mutex_Connect.Unlock()
if err == nil {
return
@@ -414,6 +414,11 @@ func GetDSN(ApplicationName string) string {
// GetConnection - возвращает соединение к нужной базе данных
func GetConnection() *gorm.DB {
//мьютекс чтоб не подключаться одновременно
mutex_Connect.RLock()
defer mutex_Connect.RUnlock()
//
if Conn == nil {
err := Connect_err()
if err != nil {

View File

@@ -31,8 +31,8 @@ import (
// Conn - соединение к базе данных
var Conn *pgx.Conn
// mutexReconnect - защита от многопоточности Reconnect()
var mutexReconnect = &sync.RWMutex{}
// mutex_Connect - защита от многопоточности Connect()
var mutex_Connect = &sync.RWMutex{}
// Settings хранит все нужные переменные окружения
var Settings SettingsINI
@@ -162,8 +162,8 @@ func IsClosed() bool {
// Reconnect повторное подключение к базе данных, если оно отключено
// или полная остановка программы
func Reconnect(err error) {
mutexReconnect.Lock()
defer mutexReconnect.Unlock()
mutex_Connect.Lock()
defer mutex_Connect.Unlock()
if err == nil {
return
@@ -234,8 +234,8 @@ func CloseConnection_err() error {
ctx, cancel := context.WithTimeout(ctxMain, 60*time.Second)
defer cancel()
mutexReconnect.Lock()
defer mutexReconnect.Unlock()
mutex_Connect.Lock()
defer mutex_Connect.Unlock()
err := GetConnection().Close(ctx)
@@ -376,10 +376,10 @@ loop:
case <-ticker.C:
//ping в базе данных
mutexReconnect.RLock() //race
mutex_Connect.RLock() //race
//err = GetConnection().Ping(ctx) //ping делать нельзя т.к. data race
err = Ping_err(ctx)
mutexReconnect.RUnlock()
mutex_Connect.RUnlock()
if err != nil {
switch err.Error() {
case TextConnBusy:
@@ -423,6 +423,11 @@ loop:
// GetConnection - возвращает соединение к нужной базе данных
func GetConnection() *pgx.Conn {
//мьютекс чтоб не подключаться одновременно
mutex_Connect.RLock()
defer mutex_Connect.RUnlock()
//
if Conn == nil || Conn.IsClosed() {
err := Connect_err()
if err != nil {

View File

@@ -1,6 +1,6 @@
// модуль для работы с базой данных
package postgres_connect
package postgres_sqlx
import (
"context"
@@ -24,8 +24,8 @@ var Conn *sqlx.DB
// log - глобальный логгер
//var log = logger.GetLog()
// mutexReconnect - защита от многопоточности Reconnect()
var mutexReconnect = &sync.Mutex{}
// mutex_Connect - защита от многопоточности Reconnect()
var mutex_Connect = &sync.RWMutex{}
// Settings хранит все нужные переменные окружения
var Settings SettingsINI
@@ -115,8 +115,8 @@ func IsClosed() bool {
// Reconnect повторное подключение к базе данных, если оно отключено
// или полная остановка программы
func Reconnect(err error) {
mutexReconnect.Lock()
defer mutexReconnect.Unlock()
mutex_Connect.Lock()
defer mutex_Connect.Unlock()
if err == nil {
return

View File

@@ -1,4 +1,4 @@
package postgres_connect
package postgres_sqlx
import (
"errors"

View File

@@ -39,13 +39,13 @@ var MapConnection = make(map[int64]connections.Connection)
// log - глобальный логгер
//var log = logger.GetLog()
// mutexReconnect - защита от многопоточности Reconnect()
var mutexReconnect = &sync.Mutex{}
// mutex_Connect - защита от многопоточности Reconnect()
var mutex_Connect = &sync.RWMutex{}
// NeedReconnect - флаг необходимости переподключения
var NeedReconnect bool
var MutexConnection sync.Mutex
//var MutexConnection sync.Mutex
// Connect_err - подключается к базе данных
func Connect(Connection connections.Connection) {
@@ -107,12 +107,12 @@ func Connect_err(Connection connections.Connection) error {
err = DB.Ping()
}
MutexConnection.Lock() //race
mutex_Connect.Lock() //race
MapConnection[Connection.ID] = Connection
MapConn[Connection.ID] = Conn
MutexConnection.Unlock()
mutex_Connect.Unlock()
return err
}
@@ -142,8 +142,8 @@ func IsClosed(Connection connections.Connection) bool {
// Reconnect повторное подключение к базе данных, если оно отключено
// или полная остановка программы
func Reconnect(Connection connections.Connection, err error) {
mutexReconnect.Lock()
defer mutexReconnect.Unlock()
mutex_Connect.Lock()
defer mutex_Connect.Unlock()
if err == nil {
return
@@ -248,12 +248,12 @@ func CloseConnection_err(Connection connections.Connection) error {
}
Conn = nil
MutexConnection.Lock() //race
mutex_Connect.Lock() //race
delete(MapConnection, Connection.ID)
delete(MapConn, Connection.ID)
MutexConnection.Unlock()
mutex_Connect.Unlock()
return err
}
@@ -335,6 +335,15 @@ func GetDSN(Connection connections.Connection) string {
// GetConnection - возвращает соединение к нужной базе данных
func GetConnection(Connection connections.Connection) *gorm.DB {
//мьютекс чтоб не подключаться одновременно
mutex_Connect.RLock()
defer mutex_Connect.RUnlock()
//мьютекс чтоб не подключаться одновременно
mutex_Connect.RLock()
defer mutex_Connect.RUnlock()
//
Conn := MapConn[Connection.ID]
if Conn == nil {
Connect(Connection)

View File

@@ -42,6 +42,7 @@ func GetConnection() *investgo.Client {
mutex_Connect.RLock()
defer mutex_Connect.RUnlock()
//
if Client == nil {
err := Connect_err()
LogInfo_Connected(err)