t8y2/dbx · error

invalid Hive connection string: %w

Error message

invalid Hive connection string: %w

What it means

parseHiveConnection accepts JDBC-style (jdbc:hive2://) or hive:// URLs. For a hive:// value that url.Parse cannot handle, the driver wraps the parse error. This surfaces malformed connection strings early before any network attempt.

Source

Thrown at agents/drivers/argo-go/config.go:305

func newParsedHiveConnection() parsedHiveConnection {
	return parsedHiveConnection{
		parameters: map[string]string{},
		hiveConfs:  map[string]string{},
		hiveVars:   map[string]string{},
	}
}

func parseHiveConnectionString(raw string) (parsedHiveConnection, error) {
	value := strings.TrimSpace(raw)
	if value == "" {
		return newParsedHiveConnection(), nil
	}
	if strings.HasPrefix(strings.ToLower(value), "jdbc:hive2://") {
		value = value[len("jdbc:hive2://"):]
	} else if strings.HasPrefix(strings.ToLower(value), "hive://") {
		parsedURL, err := url.Parse(value)
		if err != nil {
			return parsedHiveConnection{}, fmt.Errorf("invalid Hive connection string: %w", err)
		}
		result := newParsedHiveConnection()
		if parsedURL.User != nil {
			result.username = parsedURL.User.Username()
			result.password, _ = parsedURL.User.Password()
		}
		port := defaultHivePort
		if parsedURL.Port() != "" {
			parsedPort, err := strconv.Atoi(parsedURL.Port())
			if err != nil {
				return parsedHiveConnection{}, fmt.Errorf("invalid Hive port: %w", err)
			}
			port = parsedPort
		}
		result.endpoints = []endpoint{{Host: parsedURL.Hostname(), Port: port}}
		result.database = strings.Trim(parsedURL.Path, "/")
		for key, entries := range parsedURL.Query() {
			if len(entries) > 0 {

View on GitHub (pinned to c0390bff16)

Solutions

  1. Fix the connection string to be a valid URL: percent-encode special characters in user/password (e.g. @ -> %40)
  2. Trim whitespace and control characters from the value before passing it
  3. Use the jdbc:hive2:// form instead, which bypasses url.Parse
  4. Validate the URL in a test before deploying config

Example fix

// before
result, err := parseHiveConnection("hive://us er:pa@ss@host:10000/default")
// after
result, err := parseHiveConnection("hive://us%20user:pa%40ss@host:10000/default")
Defensive patterns

Strategy: validation

Validate before calling

// Validate before calling the parser
u, err := url.Parse(connStr)
if err != nil || (u.Scheme != "hive" && u.Scheme != "jdbc") {
    return fmt.Errorf("invalid Hive connection string %q: %v", connStr, err)
}

Type guard

func isValidHiveURL(s string) bool {
    u, err := url.Parse(s)
    return err == nil && (u.Scheme == "hive" || strings.HasPrefix(strings.ToLower(s), "jdbc:hive2://"))
}

Try / catch

conn, err := parseHiveConnection(raw)
if err != nil && strings.Contains(err.Error(), "invalid Hive connection string") {
    // surface config error to operator with the offending key
    return configError{key: "hive.url", cause: err}
}

Prevention

When it happens

Trigger: Calling the Hive connection parser with a value starting with hive:// that contains invalid URL syntax (e.g. raw spaces, bad percent-encoding like %zz, control characters).

Common situations: Copy-pasting a connection string with hidden whitespace, unencoded special characters in passwords, or hand-editing config files.

Related errors


AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05). Data as JSON: /api/errors/ee9ab2ef37c4398f. Report an issue: GitHub.