initParsedTargetAndResolverBuilder parses the user's dial target and stores the parsed target in `cc.parsedTarget`. The resolver to use is determined based on the scheme in the parsed target and the same is stored in `cc.resolverBuilder`. Doesn't grab cc.mu as this method is expected to be called
()
| 1834 | // |
| 1835 | // Doesn't grab cc.mu as this method is expected to be called only at Dial time. |
| 1836 | func (cc *ClientConn) initParsedTargetAndResolverBuilder() error { |
| 1837 | logger.Infof("original dial target is: %q", cc.target) |
| 1838 | |
| 1839 | var rb resolver.Builder |
| 1840 | parsedTarget, err := parseTarget(cc.target) |
| 1841 | if err == nil { |
| 1842 | rb = cc.getResolver(parsedTarget.URL.Scheme) |
| 1843 | if rb != nil { |
| 1844 | cc.parsedTarget = parsedTarget |
| 1845 | cc.resolverBuilder = rb |
| 1846 | return nil |
| 1847 | } |
| 1848 | } |
| 1849 | |
| 1850 | // We are here because the user's dial target did not contain a scheme or |
| 1851 | // specified an unregistered scheme. We should fallback to the default |
| 1852 | // scheme, except when a custom dialer is specified in which case, we should |
| 1853 | // always use passthrough scheme. For either case, we need to respect any overridden |
| 1854 | // global defaults set by the user. |
| 1855 | defScheme := cc.dopts.defaultScheme |
| 1856 | if internal.UserSetDefaultScheme { |
| 1857 | defScheme = resolver.GetDefaultScheme() |
| 1858 | } |
| 1859 | |
| 1860 | canonicalTarget := defScheme + ":///" + cc.target |
| 1861 | |
| 1862 | parsedTarget, err = parseTarget(canonicalTarget) |
| 1863 | if err != nil { |
| 1864 | return err |
| 1865 | } |
| 1866 | rb = cc.getResolver(parsedTarget.URL.Scheme) |
| 1867 | if rb == nil { |
| 1868 | return fmt.Errorf("could not get resolver for default scheme: %q", parsedTarget.URL.Scheme) |
| 1869 | } |
| 1870 | cc.parsedTarget = parsedTarget |
| 1871 | cc.resolverBuilder = rb |
| 1872 | return nil |
| 1873 | } |
| 1874 | |
| 1875 | // parseTarget uses RFC 3986 semantics to parse the given target into a |
| 1876 | // resolver.Target struct containing url. Query params are stripped from the |
no test coverage detected