mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2025-01-10 15:14:09 +00:00
lib/vmselectapi: do not send empty label names for labelNames request (#4936)
* lib/vmselectapi: do not send empty label names for labelNames request it breaks cluster communication, since vmselect incorrectly reads request buffer, leaving unread data on it https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4932 * typo fix * wip --------- Co-authored-by: Aliaksandr Valialkin <valyala@victoriametrics.com>
This commit is contained in:
parent
d7cd7cc998
commit
fac272bc10
2 changed files with 9 additions and 1 deletions
|
@ -41,6 +41,7 @@ The following `tip` changes can be tested by building VictoriaMetrics components
|
|||
|
||||
* BUGFIX: [Official Grafana dashboards for VictoriaMetrics](https://grafana.com/orgs/victoriametrics): fix display of ingested rows rate for `Samples ingested/s` and `Samples rate` panels for vmagent's dasbhoard. Previously, not all ingested protocols were accounted in these panels. An extra panel `Rows rate` was added to `Ingestion` section to display the split for rows ingested rate by protocol.
|
||||
* BUGFIX: [vminsert](https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html): properly close broken vmstorage connection during [read-only state](https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html#readonly-mode) checks at `vmstorage`. Previously it wasn't properly closed, which prevents restoring `vmstorage` node from read-only mode. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4870).
|
||||
* BUGFIX: [vmstorage](https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html): prevent from breaking `vmselect` -> `vmstorage` RPC communication when `vmstorage` returns an empty label name at `/api/v1/labels` request. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4932).
|
||||
|
||||
## [v1.93.2](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.93.2)
|
||||
|
||||
|
|
|
@ -690,6 +690,10 @@ func (s *Server) processLabelNames(ctx *vmselectRequestCtx) error {
|
|||
|
||||
// Send labelNames to vmselect
|
||||
for _, labelName := range labelNames {
|
||||
if len(labelName) == 0 {
|
||||
// Skip empty label names, since they may break RPC communication with vmselect
|
||||
continue
|
||||
}
|
||||
if err := ctx.writeString(labelName); err != nil {
|
||||
return fmt.Errorf("cannot write label name %q: %w", labelName, err)
|
||||
}
|
||||
|
@ -741,7 +745,7 @@ func (s *Server) processLabelValues(ctx *vmselectRequestCtx) error {
|
|||
// Send labelValues to vmselect
|
||||
for _, labelValue := range labelValues {
|
||||
if len(labelValue) == 0 {
|
||||
// Skip empty label values, since they have no sense for prometheus.
|
||||
// Skip empty label values, since they may break RPC communication with vmselect
|
||||
continue
|
||||
}
|
||||
if err := ctx.writeString(labelValue); err != nil {
|
||||
|
@ -919,6 +923,9 @@ func (s *Server) processTenants(ctx *vmselectRequestCtx) error {
|
|||
|
||||
// Send tenants to vmselect
|
||||
for _, tenant := range tenants {
|
||||
if len(tenant) == 0 {
|
||||
logger.Panicf("BUG: unexpected empty tenant name")
|
||||
}
|
||||
if err := ctx.writeString(tenant); err != nil {
|
||||
return fmt.Errorf("cannot write tenant %q: %w", tenant, err)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue