Skip to content

🐛 [Bug]: Otelfiber blocks stream writers #1126

Open
@RohanDoshi21

Description

Bug Description

The stream writer is attempting to flush events, but the initial response is never received on the client, neither are the subsequent events.

How to Reproduce

Steps to reproduce the behavior:

  1. Use go-fiber recipe example Link
  2. Add otel-fiber middleware to this example
  3. Immediately the requests gets blocked
    get

Expected Behavior

Otelfiber shouldn't block stream writers.

Contrib package Version

v1.0.10

Code Snippet (optional)

package main

import (
	"bufio"
	"fmt"
	"log"
	"time"

	"github.com/gofiber/contrib/otelfiber"
	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/fiber/v2/middleware/cors"
	"github.com/valyala/fasthttp"
)

func main() {
	// Fiber instance
	app := fiber.New()

	// CORS for external resources
	app.Use(cors.New(cors.Config{
		AllowOrigins: "*",
		AllowHeaders: "Cache-Control",
	}))

	app.Use(otelfiber.Middleware(
		otelfiber.WithServerName("test"),
	))

	app.Get("/sse", func(c *fiber.Ctx) error {
		c.Set("Content-Type", "text/event-stream")
		c.Set("Cache-Control", "no-cache")
		c.Set("Connection", "keep-alive")
		c.Set("Transfer-Encoding", "chunked")

		c.Context().SetBodyStreamWriter(fasthttp.StreamWriter(func(w *bufio.Writer) {
			fmt.Println("WRITER")
			var i int
			for {
				i++
				msg := fmt.Sprintf("%d - the time is %v", i, time.Now())
				fmt.Fprintf(w, "data: Message: %s\n\n", msg)
				fmt.Println(msg)

				w.Flush()
				time.Sleep(5 * time.Second)
			}
		}))

		return nil
	})

	// Start server
	log.Fatal(app.Listen(":3000"))
}

Checklist:

  • I agree to follow Fiber's Code of Conduct.
  • I have checked for existing issues that describe my problem prior to opening this one.
  • I understand that improperly formatted bug reports may be closed without explanation.

Metadata

Assignees

No one assigned

    Labels

    ☢️ BugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions