github.com/grafana/pyroscope@v1.18.0/pkg/metastore/test/metastore_leader_details_test.go (about)

     1  package test
     2  
     3  import (
     4  	"context"
     5  	"crypto/rand"
     6  	"testing"
     7  
     8  	"github.com/grafana/dskit/flagext"
     9  	"github.com/oklog/ulid/v2"
    10  	"github.com/stretchr/testify/require"
    11  
    12  	metastorev1 "github.com/grafana/pyroscope/api/gen/proto/go/metastore/v1"
    13  	"github.com/grafana/pyroscope/pkg/metastore"
    14  	"github.com/grafana/pyroscope/pkg/metastore/raftnode"
    15  	"github.com/grafana/pyroscope/pkg/objstore/providers/memory"
    16  )
    17  
    18  func TestRaftDetailsAddBlock(t *testing.T) {
    19  	cfg := new(metastore.Config)
    20  	flagext.DefaultValues(cfg)
    21  
    22  	ms := NewMetastoreSet(t, cfg, 3, memory.NewInMemBucket())
    23  	defer ms.Close()
    24  
    25  	errors := 0
    26  	m := &metastorev1.BlockMeta{
    27  		Id: ulid.MustNew(1, rand.Reader).String(),
    28  	}
    29  	for _, it := range ms.Instances {
    30  		_, err := it.AddBlock(context.Background(), &metastorev1.AddBlockRequest{
    31  			Block: m,
    32  		})
    33  		if err != nil {
    34  			requireRaftDetails(t, err)
    35  			errors++
    36  		}
    37  	}
    38  	require.Equal(t, 2, errors)
    39  }
    40  
    41  func TestRaftDetailsPullCompaction(t *testing.T) {
    42  	cfg := new(metastore.Config)
    43  	flagext.DefaultValues(cfg)
    44  
    45  	ms := NewMetastoreSet(t, cfg, 3, memory.NewInMemBucket())
    46  	defer ms.Close()
    47  
    48  	errors := 0
    49  	for _, it := range ms.Instances {
    50  		_, err := it.PollCompactionJobs(context.Background(), &metastorev1.PollCompactionJobsRequest{})
    51  		if err != nil {
    52  			requireRaftDetails(t, err)
    53  			errors++
    54  		}
    55  	}
    56  	require.Equal(t, 2, errors)
    57  }
    58  
    59  func requireRaftDetails(t *testing.T, err error) {
    60  	t.Log("error", err)
    61  	leader, ok := raftnode.RaftLeaderFromStatusDetails(err)
    62  	require.True(t, ok)
    63  	t.Log("leader is", leader)
    64  }