Comments (2)
Hey,
I assume that you use recover
to continue execution, correct?
One possible issue with defer db.freeConn(cn, err)
is that on panic it will put connection back to the pool, which can cause some side effects if data was not fully written/read.
An alternative would be to fix go-pg to never panic :) Can you please attach a backtrace showing the panic? Thanks.
from pg.
Yes, we use gin.Recover
for that. Every panic
is caught by that and the web application continues working.
In what cases could data be not fully written or read?
This is our backtrace:
ERROR: reflect: call of reflect.Value.Type on zero Value
goroutine 2973 [running]:
runtime/debug.Stack(0x0, 0x0, 0x0)
/usr/local/Cellar/go/1.6/libexec/src/runtime/debug/stack.go:24 +0x80
github.com/housinganywhere/ha/vendor/github.com/housinganywhere/gomvc.GetHandler.func1.1(0x7fd60d47b458, 0xc821757b80)
/Users/negval/Code/go/src/github.com/housinganywhere/ha/vendor/github.com/housinganywhere/gomvc/gomvc.go:103 +0x284
panic(0xf09200, 0xc821ed9260)
/usr/local/Cellar/go/1.6/libexec/src/runtime/panic.go:426 +0x4e9
reflect.Value.Type(0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/Cellar/go/1.6/libexec/src/reflect/value.go:1671 +0x7b
github.com/housinganywhere/pg.NewColumnLoader(0xfd2120, 0x0, 0x0, 0x0, 0x0, 0x0)
/Users/negval/Code/go/src/github.com/housinganywhere/pg/loader.go:176 +0x2a8
github.com/housinganywhere/pg.readDataRow(0xc8222974a0, 0xfd2120, 0x0, 0xc822722ae0, 0x6, 0x6, 0x0, 0x0)
/Users/negval/Code/go/src/github.com/housinganywhere/pg/messages.go:407 +0xe0
github.com/housinganywhere/pg.readSimpleQueryData(0xc8222974a0, 0x7fd60d275860, 0xc8220165b0, 0x0, 0x0, 0x0)
/Users/negval/Code/go/src/github.com/housinganywhere/pg/messages.go:454 +0x1ee
github.com/housinganywhere/pg.simpleQueryData(0xc8222974a0, 0x7fd60d275860, 0xc8220165b0, 0xc821af9c80, 0x3d, 0xc822516388, 0x2, 0x2, 0x0, 0x0, ...)
/Users/negval/Code/go/src/github.com/housinganywhere/pg/db.go:413 +0x122
github.com/housinganywhere/pg.(*DB).Query(0xc8201af0f0, 0x7fd60d275860, 0xc8220165b0, 0xc821af9c80, 0x3d, 0xc822516388, 0x2, 0x2, 0x0, 0x0, ...)
/Users/negval/Code/go/src/github.com/housinganywhere/pg/db.go:233 +0xee
github.com/housinganywhere/pg.(*DB).QueryOne(0xc8201af0f0, 0xfd2120, 0x0, 0xc821af9c80, 0x3d, 0xc822516388, 0x2, 0x2, 0x199, 0x0, ...)
/Users/negval/Code/go/src/github.com/housinganywhere/pg/db.go:246 +0xec
github.com/housinganywhere/repo-pg.SelectOne(0xfd2120, 0x0, 0xc821af9c80, 0x3d, 0xc822516388, 0x2, 0x2, 0x0, 0x0)
/Users/negval/Code/go/src/github.com/housinganywhere/repo-pg/repo.go:117 +0x620
...cut...
I'd suggest this quick fix:
func() {
defer db.freeConn(cn, err)
res, err = simpleQuery(cn, q, args...)
}()
Since defer
calls are executed after function returns, it is better to narrow its scope and put a connection back straight away after using, not when DB.Query
returns.
from pg.
Related Issues (20)
- Error in join query not erroring Select call
- CreateTable method not accepting CreateTableOptions struct HOT 4
- How do you change which field/column in the base table is referenced by the foreign key of a sub table?
- 42703 column does not exist, only for multi-word columns on one table
- Update omit zero when no fields produces invalid syntax HOT 1
- panic on non nil "Result" with nil value in "AfterQuery" hook
- "BeforeUpdate" hook not working for individual column updates
- CountEstimate is not safe to be called from transaction context
- nil-pointer dereference in getConn HOT 3
- conn.OnQueryProcessed undefined (type *pg.DB has no field or method OnQueryProcessed) HOT 1
- Only one of the Columns that have the same name parsed in map[string]interface{} HOT 1
- Open does not return Error when connection fails HOT 1
- r.db.RunInTransaction can not use r.db.ModelContext
- Do we support select to insert HOT 1
- Join() being ignored when using Delete() HOT 3
- Help me to get the relation.
- Scan JSON value get panic HOT 1
- Unable to insert a value of type uint64 into the table column of type DECIMAL(20,0).
- Potential Memory Leak in appendRune Function
- Multiple joins not deserializing correctly
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pg.