hyperledger/fabric · error

some orderer organizations endpoints are empty: %s

Error message

some orderer organizations endpoints are empty: %s

What it means

When building the OrdererConfig, Fabric checks that every organization in the Orderer group defines at least one endpoint. validateAllOrgsHaveEndpoints collects orgs with empty Endpoints() and fails the whole config if any exist. This guarantees the ordering service membership has reachable endpoints.

Source

Thrown at common/channelconfig/orderer.go:252

		return fmt.Errorf("Attempted to set the batch timeout to a invalid value: %s", err)
	}
	if oc.batchTimeout <= 0 {
		return fmt.Errorf("Attempted to set the batch timeout to a non-positive value: %s", oc.batchTimeout)
	}
	return nil
}

func (oc *OrdererConfig) validateAllOrgsHaveEndpoints() error {
	var orgsMissingEndpoints []string

	for _, org := range oc.Organizations() {
		if len(org.Endpoints()) == 0 {
			orgsMissingEndpoints = append(orgsMissingEndpoints, org.Name())
		}
	}

	if len(orgsMissingEndpoints) > 0 {
		return errors.Errorf("some orderer organizations endpoints are empty: %s", orgsMissingEndpoints)
	}

	return nil
}

// This does just a barebones sanity check.
func brokerEntrySeemsValid(broker string) bool {
	if !strings.Contains(broker, ":") {
		return false
	}

	parts := strings.Split(broker, ":")
	if len(parts) > 2 {
		return false
	}

	host := parts[0]
	port := parts[1]

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. Add Orderer.Endpoints entries (host:port of its ordering nodes) for every org listed in the error
  2. Alternatively remove the org from the Orderer group if it should not be part of the ordering service
  3. Regenerate the config update and revalidate

Example fix

# before (configtx.yaml)
Orderer:
  Organizations:
    - &OrdererOrg
      Name: OrdererOrg
      # no Endpoints defined
# after
Orderer:
  Organizations:
    - &OrdererOrg
      Name: OrdererOrg
      Endpoints:
        - orderer.example.com:7050
Defensive patterns

Strategy: validation

Validate before calling

for _, org := range cfg.Orderer.Organizations {
	if len(org.OrdererEndpoints) == 0 {
		return fmt.Errorf("orderer org %q has no Endpoints", org.Name)
	}
}

Try / catch

_, err := channelconfig.NewOrdererConfig(ordererGroup, cryptoProvider)
if err != nil && strings.Contains(err.Error(), "endpoints are empty") {
	return fmt.Errorf("add Orderer.Endpoints for the listed orgs: %w", err)
}

Prevention

When it happens

Trigger: Creating/updating a channel whose Orderer group contains an org with no Orderer.Endpoints (no hosts defined) — typically after adding an org to the orderer group without endpoint entries, or removing all endpoints from an existing orderer org.

Common situations: Adding a new ordering org to a consortium/orderer group in a config update but forgetting its TLS/endpoint addresses; upgrading configs from older Fabric versions where endpoints lived in the service addresses of the legacy OrdererAddresses; generated configs where an org is referenced but not fully populated.

Related errors


AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04). Data as JSON: /api/errors/7787ffa2a8a8bdcd. Report an issue: GitHub.