vitessio/vitess · error

Error setting tablet to read-write: %w

Error message

Error setting tablet to read-write: %w

What it means

SetReadWrite calls vtctld SetWritable(writable=true) on the tablet; failure of that RPC is wrapped with this message. The tablet stays read-only and the wrapped vtctld error is returned to the caller.

Source

Thrown at go/vt/vtadmin/api.go:2396

	return &vtadminpb.SetReadOnlyResponse{}, nil
}

// SetReadWrite is part of the vtadminpb.VTAdminServer interface.
func (api *API) SetReadWrite(ctx context.Context, req *vtadminpb.SetReadWriteRequest) (*vtadminpb.SetReadWriteResponse, error) {
	span, ctx := trace.NewSpan(ctx, "API.SetReadWrite")
	defer span.Finish()

	tablet, c, err := api.getTabletForAction(ctx, span, rbac.ManageTabletWritabilityAction, req.Alias, req.ClusterIds)
	if err != nil {
		return nil, err
	}

	err = c.SetWritable(ctx, &vtctldatapb.SetWritableRequest{
		TabletAlias: tablet.Tablet.Alias,
		Writable:    true,
	})
	if err != nil {
		return nil, fmt.Errorf("Error setting tablet to read-write: %w", err)
	}

	return &vtadminpb.SetReadWriteResponse{}, nil
}

// StartReplication is part of the vtadminpb.VTAdminServer interface.
func (api *API) StartReplication(ctx context.Context, req *vtadminpb.StartReplicationRequest) (*vtadminpb.StartReplicationResponse, error) {
	span, ctx := trace.NewSpan(ctx, "API.StartReplication")
	defer span.Finish()

	tablet, c, err := api.getTabletForAction(ctx, span, rbac.ManageTabletReplicationAction, req.Alias, req.ClusterIds)
	if err != nil {
		return nil, err
	}

	start := true
	if err := c.ToggleTabletReplication(ctx, tablet, start); err != nil {
		return nil, err

View on GitHub (pinned to 01a25a7d17)

Solutions

  1. Verify the tablet is healthy and reachable, then retry SetReadWrite
  2. Check vtadmin-to-vtctld connectivity and the inner wrapped error details
  3. Confirm the tablet alias is current (topo lookup) before retrying
Defensive patterns

Strategy: try-catch

Validate before calling

// confirm tablet status before restoring writes
// e.g. ensure replication is caught up and tablet serves the expected type

Try / catch

resp, err := client.SetReadWrite(ctx, req)
if err != nil {
    if strings.Contains(err.Error(), "Error setting tablet to read-write") {
        return fmt.Errorf("tablet %s not set read-write: %w — verify tablet and vtctld health", alias, err)
    }
    return err
}

Prevention

When it happens

Trigger: Calling API.SetReadWrite when the cluster's SetWritable RPC fails (vtctld unreachable, tablet down, RPC error).

Common situations: Trying to re-enable writes during a failback while the tablet is still in a bad state; vtctld outage; stale tablet alias after tablet rebuild.

Related errors


AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01). Data as JSON: /api/errors/87bbf5d71228d1fc. Report an issue: GitHub.