GoogleCloudPlatform/microservices-demo · error

failed to empty cart

Error message

failed to empty cart

What it means

emptyCartHandler failed to empty the user's cart via fe.emptyCart (cartservice EmptyCart RPC). The error is wrapped as "failed to empty cart" and returned as HTTP 500 instead of redirecting to the home page.

Source

Thrown at src/frontend/handlers.go:244

	if err != nil {
		renderHTTPError(log, r, w, errors.Wrap(err, "could not retrieve product"), http.StatusInternalServerError)
		return
	}

	if err := fe.insertCart(r.Context(), sessionID(r), p.GetId(), int32(payload.Quantity)); err != nil {
		renderHTTPError(log, r, w, errors.Wrap(err, "failed to add to cart"), http.StatusInternalServerError)
		return
	}
	w.Header().Set("location", baseUrl + "/cart")
	w.WriteHeader(http.StatusFound)
}

func (fe *frontendServer) emptyCartHandler(w http.ResponseWriter, r *http.Request) {
	log := r.Context().Value(ctxKeyLog{}).(logrus.FieldLogger)
	log.Debug("emptying cart")

	if err := fe.emptyCart(r.Context(), sessionID(r)); err != nil {
		renderHTTPError(log, r, w, errors.Wrap(err, "failed to empty cart"), http.StatusInternalServerError)
		return
	}
	w.Header().Set("location", baseUrl + "/")
	w.WriteHeader(http.StatusFound)
}

func (fe *frontendServer) viewCartHandler(w http.ResponseWriter, r *http.Request) {
	log := r.Context().Value(ctxKeyLog{}).(logrus.FieldLogger)
	log.Debug("view user cart")
	currencies, err := fe.getCurrencies(r.Context())
	if err != nil {
		renderHTTPError(log, r, w, errors.Wrap(err, "could not retrieve currencies"), http.StatusInternalServerError)
		return
	}
	cart, err := fe.getCart(r.Context(), sessionID(r))
	if err != nil {
		renderHTTPError(log, r, w, errors.Wrap(err, "could not retrieve cart"), http.StatusInternalServerError)
		return

View on GitHub (pinned to 72ba613a05)

Solutions

  1. Check cartservice health and logs.
  2. Verify CART_SERVICE_ADDR env configuration in frontend.
  3. Check the redis backend used by cartservice.
  4. Ensure sessionID(r) produces a valid non-empty user id; otherwise fix session cookie handling.

Example fix

// before
if err := fe.emptyCart(r.Context(), sessionID(r)); err != nil {
// after
if sessionID(r) == "" {
    http.Redirect(w, r, baseUrl+"/", http.StatusFound)
    return
}
if err := fe.emptyCart(r.Context(), sessionID(r)); err != nil {
Defensive patterns

Strategy: validation

Validate before calling

uid := sessionID(r)
if uid == "" {
    http.Redirect(w, r, baseUrl+"/", http.StatusFound)
    return
}

Type guard

func hasSession(r *http.Request) bool { return sessionID(r) != "" }

Try / catch

if err := fe.emptyCart(r.Context(), sessionID(r)); err != nil {
    log.WithField("error", err).Warn("failed to empty cart")
    renderHTTPError(log, r, w, errors.Wrap(err, "failed to empty cart"), http.StatusInternalServerError)
    return
}

Prevention

When it happens

Trigger: POST /cart/empty when cartservice EmptyCart returns an error: service unavailable, timeout, or an invalid/empty session user id rejected by the cart service.

Common situations: cartservice down or restarting, redis backend unreachable, session/user id missing or malformed (empty session cookie leading to an invalid empty-cart request).

Related errors


AI-assisted analysis of GoogleCloudPlatform/microservices-demo@72ba613a05 (2026-09-02). Data as JSON: /api/errors/cbfb15a0c0c79e74. Report an issue: GitHub.