Disabled option to do transaction from view
This commit is contained in:
parent
3be16781e7
commit
f44291e278
@ -16,13 +16,14 @@ import (
|
|||||||
"golang.org/x/term"
|
"golang.org/x/term"
|
||||||
)
|
)
|
||||||
|
|
||||||
var TxMaxRetries = 3
|
var TxMaxRetries = 5
|
||||||
|
|
||||||
type (
|
type (
|
||||||
DB struct{ *sql.DB }
|
DB struct{ *sql.DB }
|
||||||
Tx struct{ *sql.Tx }
|
Tx struct{ *sql.Tx }
|
||||||
|
|
||||||
Attribute struct {
|
Attribute struct {
|
||||||
Value interface{}
|
Value any
|
||||||
Table string
|
Table string
|
||||||
AttName string
|
AttName string
|
||||||
ID int64
|
ID int64
|
||||||
@ -70,9 +71,15 @@ func getCredentials() (string, string, error) {
|
|||||||
return user, pass, nil
|
return user, pass, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func wait(iteration int) {
|
||||||
|
waitTime := time.Duration(math.Pow(2, float64(iteration))) * 100 * time.Millisecond
|
||||||
|
jitter := time.Duration(rand.IntN(int(waitTime)/2)) * time.Millisecond
|
||||||
|
time.Sleep(waitTime + jitter)
|
||||||
|
}
|
||||||
|
|
||||||
func OpenDB(dbName string) (*DB, error) {
|
func OpenDB(dbName string) (*DB, error) {
|
||||||
var err error
|
var err error
|
||||||
db := DB{DB: &sql.DB{}}
|
db := DB{DB: new(sql.DB)}
|
||||||
|
|
||||||
cfg := mysql.NewConfig()
|
cfg := mysql.NewConfig()
|
||||||
cfg.DBName = dbName
|
cfg.DBName = dbName
|
||||||
@ -108,7 +115,7 @@ func (db *DB) UpdateAttributes(a ...*Attribute) error {
|
|||||||
`, attribute.Table, attribute.AttName)
|
`, attribute.Table, attribute.AttName)
|
||||||
if _, err := tx.Exec(query, attribute.Value, attribute.ID); err != nil {
|
if _, err := tx.Exec(query, attribute.Value, attribute.ID); err != nil {
|
||||||
if rollbackErr := tx.Rollback(); rollbackErr != nil {
|
if rollbackErr := tx.Rollback(); rollbackErr != nil {
|
||||||
log.Fatalf("error: transaction error: %v, rollback error: %v", err, rollbackErr)
|
log.Fatalf("transaction error: %v, rollback error: %v", err, rollbackErr)
|
||||||
}
|
}
|
||||||
return fmt.Errorf("error updating %v in DB: %v", attribute.AttName, err)
|
return fmt.Errorf("error updating %v in DB: %v", attribute.AttName, err)
|
||||||
}
|
}
|
||||||
@ -124,9 +131,7 @@ func (db *DB) UpdateAttributes(a ...*Attribute) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
waitTime := time.Duration(math.Pow(2, float64(i))) * time.Second
|
wait(i)
|
||||||
jitter := time.Duration(rand.IntN(1000)) * time.Millisecond
|
|
||||||
time.Sleep(waitTime + jitter)
|
|
||||||
}
|
}
|
||||||
return fmt.Errorf("error: %v unsuccessful retries for DB operation, aborting", TxMaxRetries)
|
return fmt.Errorf("error: %v unsuccessful retries for DB operation, aborting", TxMaxRetries)
|
||||||
}
|
}
|
||||||
@ -143,31 +148,6 @@ func (db *DB) CountEntries(table string) (int64, error) {
|
|||||||
return count, nil
|
return count, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DB) StartTransaction() (*Tx, error) {
|
|
||||||
tx := &Tx{Tx: new(sql.Tx)}
|
|
||||||
var err error
|
|
||||||
|
|
||||||
tx.Tx, err = db.Begin()
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("error starting transaction: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return tx, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (tx *Tx) CommitTransaction() error {
|
|
||||||
if err := tx.Commit(); err != nil {
|
|
||||||
return fmt.Errorf("error committing transaction: %v", err)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (tx *Tx) RollbackTransaction() {
|
|
||||||
if err := tx.Rollback(); err != nil {
|
|
||||||
log.Fatalf("error rolling back transaction: %v", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (tx *Tx) UpdateAttributes(a ...*Attribute) error {
|
func (tx *Tx) UpdateAttributes(a ...*Attribute) error {
|
||||||
for _, attribute := range a {
|
for _, attribute := range a {
|
||||||
query := fmt.Sprintf(`
|
query := fmt.Sprintf(`
|
||||||
@ -177,7 +157,7 @@ func (tx *Tx) UpdateAttributes(a ...*Attribute) error {
|
|||||||
`, attribute.Table, attribute.AttName)
|
`, attribute.Table, attribute.AttName)
|
||||||
if _, err := tx.Exec(query, attribute.Value, attribute.ID); err != nil {
|
if _, err := tx.Exec(query, attribute.Value, attribute.ID); err != nil {
|
||||||
if rollbackErr := tx.Rollback(); rollbackErr != nil {
|
if rollbackErr := tx.Rollback(); rollbackErr != nil {
|
||||||
log.Fatalf("error: transaction error: %v, rollback error: %v", err, rollbackErr)
|
log.Fatalf("transaction error: %v, rollback error: %v", err, rollbackErr)
|
||||||
}
|
}
|
||||||
return fmt.Errorf("error updating %v in DB: %v", attribute.AttName, err)
|
return fmt.Errorf("error updating %v in DB: %v", attribute.AttName, err)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user