package writecache

import (
	"context"

	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard/mode"
	"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
	"go.opentelemetry.io/otel/attribute"
	"go.opentelemetry.io/otel/trace"
)

func (c *cache) Seal(ctx context.Context, ignoreErrors bool) error {
	ctx, span := tracing.StartSpanFromContext(ctx, "writecache.Seal",
		trace.WithAttributes(
			attribute.Bool("ignore_errors", ignoreErrors),
		))
	defer span.End()

	c.modeMtx.Lock()
	defer c.modeMtx.Unlock()

	// flush will be done by setMode
	err := c.setMode(ctx, mode.DegradedReadOnly, ignoreErrors)
	if err == nil {
		c.metrics.SetMode(mode.ComponentDisabled)
	}
	return err
}