All Versions
11
Latest Version
Avg Release Cycle
71 days
Latest Release
1248 days ago
Changelog History
Page 1
Changelog History
Page 1
-
v1.1.9
November 18, 2020 -
v1.1.8
March 16, 2020 -
v1.1.7
September 11, 2019 -
v1.1.6
August 28, 2019 -
v1.1.5
July 17, 2019 -
v1.1.4
July 16, 2019 -
v1.1.3
April 28, 2019 -
v1.1.2 Changes
April 16, 2019๐ Supports Go Modules ( GO111MODULE=on )
-
v1.1.1 Changes
December 12, 2018๐ Fix
import
command ( see #9 ) -
v1.1.0 Changes
December 11, 2018๐ Supports Distributed Transaction
How To Use
Set before/after callback for commit
octillery.BeforeCommitCallback(func(tx \*sql.Tx, writeQueries []\*sql.QueryLog) error { // write all writeQueries to log (WAL) in application sidereturn nil})) octillery.AfterCommitCallback(func(tx \*sql.Tx) error {}, func(tx \*sql.Tx, isCriticalError bool, failureWriteQueries []\*sql.QueryLog) error { if isCriticalError { // distributed transaction error// record failureWriteQueries and should execute after. } }))
Also, callback function can set at
*sql.Tx
scope too.tx, \_ := db.Begin() tx.BeforeCommitCallback(func(writeQueries []\*sql.QueryLog) error { // write all writeQueries to log (WAL) in application sidereturn nil})) tx.AfterCommitCallback(func() error {}, func(isCriticalError bool, failureWriteQueries []\*sql.QueryLog) error { if isCriticalError { // distributed transaction error// record failureWriteQueries and should execute after. } }))
Exec for multiple databases
You can use
*sql.Tx
to multiple databases.(tableA and tableB are stored other databases)
tx, \_ := db.Begin() tx.Exec("insert into tableA ...") // (1)tx.Exec("insert into tableB ...") // (2)// tx.Commit() commit (1) before it commit (2)// if (1) and (2) are success too, call AfterCommitSuccessCallback// if (1) and (2) are failure too, call AfterCommitFailureCallback with NOT CriticalError// if (1) is failure, instantly call AfterCommitFailureCallback with NOT CriticalError// if (1) is OK but (2) is failure, call AfterCommitFailureCallback with CriticalErrorif err := tx.Commit(); err != nil { ... }
๐ Recover from CriticalError
writeQueryLogs := queryLogsfromWAL()tx, \_ := db.Begin()for \_, writeQueryLog := range writeQueryLogs { isCommittedQuery, err := tx.IsAlreadyCommittedQueryLog(writeQueryLog) if err != nil { .... } if !isCommittedQuery { result, err := tx.ExecWithQueryLog(writeQueryLog) .... } }
๐ If disable distributed transaction support
set
distributed_transaction: false
indatabases.yml