# devopsgym / codegen__prometheus__prometheus-6555

- taskset: [devopsgym](https://harnessreport.com/tasks/devopsgym.md)
- difficulty: hard
- category: code-generation
- language: 
- runnable from the site: no
- agent timeout: 3000s

## Results by harness

_none yet_

## Instruction

```
This is a code generation task. You are expected to write working code that solves the described problem.
<issue>
      ## Bug Report
**What did you do?**

Run this test case with `promtool test rules`.  This test case is isolated from a series that failed in our production Prometheus instance.

```yaml
evaluation_interval: 1m
tests:
  - interval: 1s
    input_series:
      - series: 'node_namespace_pod:kube_pod_info:{namespace="observability",node="gke-search-infra-custom-96-253440-fli-d135b119-jx00",pod="node-exporter-l454v"}'
        values: '1'
      - series: 'node_cpu_seconds_total{cpu="10",endpoint="https",instance="10.253.57.87:9100",job="node-exporter",mode="idle",namespace="observability",pod="node-exporter-l454v",service="node-exporter"}'
        values: '449'
      - series: 'node_cpu_seconds_total{cpu="35",endpoint="https",instance="10.253.57.87:9100",job="node-exporter",mode="idle",namespace="observability",pod="node-exporter-l454v",service="node-exporter"}'
        values: '449'
      - series: 'node_cpu_seconds_total{cpu="89",endpoint="https",instance="10.253.57.87:9100",job="node-exporter",mode="idle",namespace="observability",pod="node-exporter-l454v",service="node-exporter"}'
        values: '449'
    promql_expr_test:
      - expr: count by(namespace, pod, cpu) (node_cpu_seconds_total{cpu=~".*",job="node-exporter",mode="idle",namespace="observability",pod="node-exporter-l454v"}) * on(namespace, pod) group_left(node) node_namespace_pod:kube_pod_info:{namespace="observability",pod="node-exporter-l454v"}
        eval_time: 4s
        exp_samples:
          - labels: '{cpu="10",namespace="observability",node="gke-search-infra-custom-96-253440-fli-d135b119-jx00",pod="node-exporter-l454v"}'
            value: 1
          - labels: '{cpu="35",namespace="observability",node="gke-search-infra-custom-96-253440-fli-d135b119-jx00",pod="node-exporter-l454v"}'
            value: 1
          - labels: '{cpu="89",namespace="observability",node="gke-search-infra-custom-96-253440-fli-d135b119-jx00",pod="node-exporter-l454v"}'
            value: 1
```

**What did you expect to see?**

A success message, with the three output series correctly calculated.

**What did you see instead? Under which circumstances?**

A test failure:
```
  FAILED:
    expr:'count by(namespace, pod, cpu) (node_cpu_seconds_total{cpu=~".*",job="node-exporter",mode="idle",namespace="observability",pod="node-exporter-l454v"}) * on(namespace, pod) group_left(node) node_namespace_pod:kube_pod_info:{namespace="observability",pod="node-exporter-l454v"}', time:4s, err:multiple matches for labels: grouping labels must ensure unique matches
```

**Investigation**

This failure is due to a hash collision in the VectorBinop code in `engine.go`, discovered by @cristi- .  Specifically, combining the hashes of the LHS and RHS at [L1550](https://github.com/prometheus/prometheus/blob/851131b0740be7291b98f295567a97f32fffc655/promql/engine.go#L1550) results in a collision between two of the series in the test file, `cpu="35"` and `cpu="89"`.  Because the hashes collide there, the result metric is incorrectly reused for two series that are not identical, leading to VectorBinop incorrectly reporting non-unique matches.

You can see the hash-mixing function `(lh ^ rh) + lh` collide in isolation with this code ([playground](https://play.golang.org/p/YKRBZru5XHA)):

```go
package main

import (
    "fmt"
)

func h(l, r uint64) uint64 {
    return (l ^ r) + l
}

func main() {
    fmt.Println(h(4717575973110797488, 6876917458372880354))
    fmt.Println(h(9462489420336518194, 6876917458372880354))
}
```

This would be fixed with a different function for mixing hashes that better preserves entropy, or not combining hashes at all and using the calculated result hash throughout.

**Environment**

* System information: Linux 5.1.0-1.el7.elrepo.x86_64 x86_64
* Prometheus version: reproduced on v2.8.1 and master (851131b0740be7291b98f295567a97f32fffc655)
* Alertmanager version: n/a
* Prometheus configuration file: n/a
* Alertmanager configuration file: n/a
* Logs: n/a

</issue>
Focus on implementing the required functionality correctly and efficiently. Treat this as a programming challenge.
You are not allowed to read git history.
```
---
Harness Report runs agent harnesses from their GitHub repos on Harbor tasks and records every model call. Every page is also `.md` and `.json`; index: https://harnessreport.com/llms.txt · MCP: https://harnessreport.com/mcp
