Comments (3)
I modified GetConn
to check connection status and perform redial. Here's the changes:
func GetConn() (*RedisConn, error) {
resource, err := pool.Get()
if err != nil {
return nil, err
}
+
+ // Performs simple connection check. Redial if needed
+ _, err = resource.(*RedisConn).Do("PING")
+ if err != nil {
+ resource.(*RedisConn).Close()
+ resource, err = redisConnFromUri(uri)
+ if err != nil {
+ return nil, err
+ }
+ }
+
return resource.(*RedisConn), nil
}
Not sure if this is recommended way when working with vitess' pools.
I can make a PR if this changes are OK :)
from goworker.
I know this is an old thread but maybe this will help someone like me who found it when trying to handle disconnects.
This solution does not work because the connection does not get put back in the pool. When the pool tries to close it hangs on draining the chan
that contains the connections in the pool.
I opted to handle the error outside of goworker. It required a patch to get it to actually throw an error though. See my PR here #60
from goworker.
The main issue is that on the poller.poll
it would only return an error if it happens before the goroutine, once the goroutine is lunched Work
will always return nil
and just finish.
The only way I can think of having an error be returned as everything is running in goroutines and the main Work
is blocked with ah sync.WaitGroup
would be to have a make(chan error, 0)
be part of the internal struct on the poller.newPoller
so we can "just" <- poller.err
and have the WaitGroup be also in the select (with a goroutine and a channel that i'll be closed once it's done).
waitCh := make(chan struct{})
go func() {
monitor.Wait()
close(waitCh)
}()
select {
case <-waitCh:
case err := <-poller.error:
// quite to gracefully shut down
quit <- true
// Return the poller error
return err
}
All the possible errors from the workers are also related to Redis and and they'll be closed using the quite
(well they'll fail as there will be no connection to Redis but that's expected hehe).
Would this be ok to open a PR for?
from goworker.
Related Issues (20)
- How to panic handling on Job? HOT 2
- 100% cpu usage HOT 17
- Any plans to support Sidekiq backend? HOT 4
- Refactor the Enqueue API
- RabbitMQ Support HOT 1
- Example from Getting Started section doesn't run
- New version HOT 3
- How does goworker work? HOT 4
- Timeout for stuck workers HOT 6
- Any plan to replace garyburd/redigo with gomodule/redigo? HOT 2
- redis please use go-redis
- Supporting Resque Scheduler
- package broken
- missing the prefillParallelism argument in redis.go
- etcd support
- It's graceful, but how to optimize cpu usage? HOT 2
- pools.NewResourcePool request param has changed
- fail to install HOT 4
- There is atomicity problem when worker key is flushed by redis pool
- [Critical] Error on closing worker ip-xxx-xx-xx-xx:xxxxxx-4:xxx: redis: client is closed
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 goworker.