@@ -65,11 +65,11 @@ type dnsResolver struct {
6565 logger log.Logger
6666 target resolver.Target
6767 cc resolver.ClientConn
68- addrStore map [ string ][] string
68+ addrStore * dnsResolverBuilder
6969}
7070
7171func (r * dnsResolver ) start () {
72- addrStrs := r .addrStore [ r .target .Endpoint ()]
72+ addrStrs := r .addrStore . get ( r .target .Endpoint ())
7373 addrs := make ([]resolver.Address , len (addrStrs ))
7474 for i , s := range addrStrs {
7575 addrs [i ] = resolver.Address {Addr : s }
@@ -88,14 +88,28 @@ func (*dnsResolver) Close() {}
8888type dnsResolverBuilder struct {
8989 logger log.Logger
9090 addrStore map [string ][]string
91+
92+ sync.Mutex
93+ }
94+
95+ func (b * dnsResolverBuilder ) get (addr string ) []string {
96+ b .Lock ()
97+ defer b .Unlock ()
98+ return b .addrStore [addr ]
99+ }
100+
101+ func (b * dnsResolverBuilder ) updateStore (addr string , ips []string ) {
102+ b .Lock ()
103+ defer b .Unlock ()
104+ b .addrStore [addr ] = ips
91105}
92106
93107func (b * dnsResolverBuilder ) Build (target resolver.Target , cc resolver.ClientConn , opts resolver.BuildOptions ) (resolver.Resolver , error ) {
94108 r := & dnsResolver {
95109 logger : b .logger ,
96110 target : target ,
97111 cc : cc ,
98- addrStore : b . addrStore ,
112+ addrStore : b ,
99113 }
100114 r .start ()
101115 return r , nil
@@ -1841,8 +1855,6 @@ func TestHandlerFlippingHashrings(t *testing.T) {
18411855}
18421856
18431857func TestIngestorRestart (t * testing.T ) {
1844- // TODO: fix this test. It has a data race.
1845- t .Skip ("Skipping this test case temporarily due to a data race" )
18461858 var err error
18471859 logger := log .NewLogfmtLogger (os .Stderr )
18481860 addr1 , addr2 , addr3 := "localhost:14090" , "localhost:14091" , "localhost:14092"
@@ -1884,15 +1896,18 @@ func TestIngestorRestart(t *testing.T) {
18841896 },
18851897 }
18861898
1887- _ , err = client .handleRequest (ctx , 0 , "test" , data )
1899+ stats , err : = client .handleRequest (ctx , 0 , "test" , data )
18881900 require .NoError (t , err )
1901+ require .Equal (t , tenantRequestStats {
1902+ "test" : requestStats {timeseries : 2 , totalSamples : 2 },
1903+ }, stats )
18891904
18901905 // close srv2 to simulate ingestor down
18911906 ing2 .Shutdown (err )
18921907 ing3 := startIngestor (logger , addr3 , 2 * time .Second )
18931908 defer ing3 .Shutdown (err )
18941909 // bind the new backend to the same DNS
1895- dnsBuilder .addrStore [ clientAddr ] = []string {addr3 }
1910+ dnsBuilder .updateStore ( clientAddr , []string {addr3 })
18961911
18971912 iter , errs := 10 , 0
18981913 for i := 0 ; i < iter ; i ++ {
0 commit comments