setupConnParams converts query parameters in u to option value in o.
(u *url.URL, o *Options)
| 660 | |
| 661 | // setupConnParams converts query parameters in u to option value in o. |
| 662 | func setupConnParams(u *url.URL, o *Options) (*Options, error) { |
| 663 | q := queryOptions{q: u.Query()} |
| 664 | |
| 665 | // compat: a future major release may use q.int("db") |
| 666 | if tmp := q.string("db"); tmp != "" { |
| 667 | db, err := strconv.Atoi(tmp) |
| 668 | if err != nil { |
| 669 | return nil, fmt.Errorf("redis: invalid database number: %w", err) |
| 670 | } |
| 671 | o.DB = db |
| 672 | } |
| 673 | |
| 674 | o.Protocol = q.int("protocol") |
| 675 | o.ClientName = q.string("client_name") |
| 676 | o.MaxRetries = q.int("max_retries") |
| 677 | o.MinRetryBackoff = q.duration("min_retry_backoff") |
| 678 | o.MaxRetryBackoff = q.duration("max_retry_backoff") |
| 679 | o.DialTimeout = q.duration("dial_timeout") |
| 680 | o.ReadTimeout = q.duration("read_timeout") |
| 681 | o.WriteTimeout = q.duration("write_timeout") |
| 682 | o.PoolFIFO = q.bool("pool_fifo") |
| 683 | o.PoolSize = q.int("pool_size") |
| 684 | o.PoolTimeout = q.duration("pool_timeout") |
| 685 | o.MinIdleConns = q.int("min_idle_conns") |
| 686 | o.MaxIdleConns = q.int("max_idle_conns") |
| 687 | o.MaxActiveConns = q.int("max_active_conns") |
| 688 | o.MaxConcurrentDials = q.int("max_concurrent_dials") |
| 689 | if q.has("conn_max_idle_time") { |
| 690 | o.ConnMaxIdleTime = q.duration("conn_max_idle_time") |
| 691 | } else { |
| 692 | o.ConnMaxIdleTime = q.duration("idle_timeout") |
| 693 | } |
| 694 | if q.has("conn_max_lifetime") { |
| 695 | o.ConnMaxLifetime = q.duration("conn_max_lifetime") |
| 696 | } else { |
| 697 | o.ConnMaxLifetime = q.duration("max_conn_age") |
| 698 | } |
| 699 | if q.has("conn_max_lifetime_jitter") { |
| 700 | o.ConnMaxLifetimeJitter = min(q.duration("conn_max_lifetime_jitter"), o.ConnMaxLifetime) |
| 701 | } |
| 702 | if q.err != nil { |
| 703 | return nil, q.err |
| 704 | } |
| 705 | if o.TLSConfig != nil && q.has("skip_verify") { |
| 706 | o.TLSConfig.InsecureSkipVerify = q.bool("skip_verify") |
| 707 | } |
| 708 | |
| 709 | // any parameters left? |
| 710 | if r := q.remaining(); len(r) > 0 { |
| 711 | return nil, fmt.Errorf("redis: unexpected option: %s", strings.Join(r, ", ")) |
| 712 | } |
| 713 | |
| 714 | return o, nil |
| 715 | } |
| 716 | |
| 717 | func getUserPassword(u *url.URL) (string, string) { |
| 718 | var user, password string |