-
Type:
Task
-
Resolution: Done
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
None
-
Environment:mongo-go-driver v1.3.4
-
None
-
None
-
None
-
None
-
None
-
None
-
None
I set the ConnectTimeout, but it looks like no working.
This is my code:
type Conf struct {
Host string
Port string
DbName string
ConnectTimeout time.Duration
SocketTimeout time.Duration
MaxPoolSize uint64
MinPoolSize uint64
Direct bool
}
func Init() {
opts := conf2options(e.Conf)
c, err := mongo.Connect(NewCtx(e.Conf.ConnectTimeout),
opts.ApplyURI(fmt.Sprintf("mongodb://%s:%s/%s", e.Conf.Host, e.Conf.Port, e.Conf.DbName)))
if err != nil {
return err
}
err = c.Ping(context.Background(), readpref.Primary())
if err != nil {
return err
}
}
func conf2options(conf *Conf) *options.ClientOptions {
return &options.ClientOptions{
ConnectTimeout: &conf.ConnectTimeout,
SocketTimeout: &conf.SocketTimeout,
MaxPoolSize: &conf.MaxPoolSize,
MinPoolSize: &conf.MinPoolSize,
Direct: &conf.Direct,
}
}
I set `ConnectTimeout = 10 * time.second`, but the test output:
--- FAIL: TestClient (30.00s)
engine_test.go:9: server selection error: server selection timeout, current topology: { Type: Single, Servers: [{ Addr: 127.0.0.1:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: connection() : dial tcp 127.0.0.1:27017: connect: connection refused }, ] }
FAIL
exit status 1
FAIL go.study.org/mongoDemo/mongoorg 30.005s
It took 30 seconds, seems like default ConnectTimeout.
Then i use context.WithTimeout, it works.
func Init() {
opts := conf2options(e.Conf)
c, err := mongo.Connect(NewCtx(e.Conf.ConnectTimeout),
opts.ApplyURI(fmt.Sprintf("mongodb://%s:%s/%s", e.Conf.Host, e.Conf.Port, e.Conf.DbName)))
if err != nil {
return err
}
ctx, _ := context.WithTimeout(context.Backgroud(), 10*time.Second)
err = c.Ping(ctx, readpref.Primary())
if err != nil {
return err
}
}
the output:
--- FAIL: TestClient (10.00s) engine_test.go:9: context deadline exceeded FAIL exit status 1 FAIL go.study.org/mongoDemo/mongoorg 10.006s
I think I used it(options.ClientOptions.ConnectTimeout) in the wrong way
.But I can't found the true way.
Are there any way to make it works without context when used options.ClientOptions.ConnectTimeout?