2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								// Copyright 2017 The Prometheus Authors
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Licensed under the Apache License, Version 2.0 (the "License");
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// you may not use this file except in compliance with the License.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// You may obtain a copy of the License at
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// http://www.apache.org/licenses/LICENSE-2.0
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Unless required by applicable law or agreed to in writing, software
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// distributed under the License is distributed on an "AS IS" BASIS,
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// See the License for the specific language governing permissions and
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// limitations under the License.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								package  remote  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  (  
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"net/url" 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									"testing" 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-05 01:21:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"time" 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-06-26 14:33:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/prometheus/client_golang/prometheus" 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									common_config  "github.com/prometheus/common/config" 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-05 01:21:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/prometheus/common/model" 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/stretchr/testify/require" 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-22 17:00:08 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									"github.com/prometheus/prometheus/config" 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-08 22:23:17 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									"github.com/prometheus/prometheus/model/labels" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"github.com/prometheus/prometheus/model/relabel" 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								)  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-25 15:24:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								func  testRemoteWriteConfig ( )  * config . RemoteWriteConfig  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									return  & config . RemoteWriteConfig { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Name :  "dev" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										URL :  & common_config . URL { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											URL :  & url . URL { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Scheme :  "http" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Host :    "localhost" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-25 15:24:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										QueueConfig :  config . DefaultQueueConfig , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  TestNoDuplicateWriteConfigs ( t  * testing . T )  {  
						 
					
						
							
								
									
										
										
										
											2021-11-20 04:21:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									dir  :=  t . TempDir ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									cfg1  :=  config . RemoteWriteConfig { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Name :  "write-1" , 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-08 05:05:39 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										URL :  & common_config . URL { 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											URL :  & url . URL { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Scheme :  "http" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Host :    "localhost" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										QueueConfig :  config . DefaultQueueConfig , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									cfg2  :=  config . RemoteWriteConfig { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Name :  "write-2" , 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-08 05:05:39 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										URL :  & common_config . URL { 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											URL :  & url . URL { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Scheme :  "http" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Host :    "localhost" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										QueueConfig :  config . DefaultQueueConfig , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									cfg3  :=  config . RemoteWriteConfig { 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-08 05:05:39 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										URL :  & common_config . URL { 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											URL :  & url . URL { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Scheme :  "http" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Host :    "localhost" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										QueueConfig :  config . DefaultQueueConfig , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									type  testcase  struct  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										cfgs  [ ] * config . RemoteWriteConfig 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										err   bool 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									cases  :=  [ ] testcase { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{  // Two duplicates, we should get an error.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											cfgs :  [ ] * config . RemoteWriteConfig { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												& cfg1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												& cfg1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											err :  true , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{  // Duplicates but with different names, we should not get an error.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											cfgs :  [ ] * config . RemoteWriteConfig { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												& cfg1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												& cfg2 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											err :  false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{  // Duplicates but one with no name, we should not get an error.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											cfgs :  [ ] * config . RemoteWriteConfig { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												& cfg1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												& cfg3 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											err :  false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{  // Duplicates both with no name, we should get an error.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											cfgs :  [ ] * config . RemoteWriteConfig { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												& cfg3 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												& cfg3 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											err :  true , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  _ ,  tc  :=  range  cases  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-11-19 23:23:03 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										s  :=  NewWriteStorage ( nil ,  nil ,  dir ,  time . Millisecond ,  nil ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										conf  :=  & config . Config { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											GlobalConfig :        config . DefaultGlobalConfig , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											RemoteWriteConfigs :  tc . cfgs , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										err  :=  s . ApplyConfig ( conf ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										gotError  :=  err  !=  nil 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										require . Equal ( t ,  tc . err ,  gotError ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										err  =  s . Close ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  TestRestartOnNameChange ( t  * testing . T )  {  
						 
					
						
							
								
									
										
										
										
											2021-11-20 04:21:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									dir  :=  t . TempDir ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-25 15:24:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									cfg  :=  testRemoteWriteConfig ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									hash ,  err  :=  toHash ( cfg ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-19 23:23:03 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									s  :=  NewWriteStorage ( nil ,  nil ,  dir ,  time . Millisecond ,  nil ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-25 15:24:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									conf  :=  & config . Config { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										GlobalConfig :  config . DefaultGlobalConfig , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RemoteWriteConfigs :  [ ] * config . RemoteWriteConfig { 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-25 15:24:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											cfg , 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  s . ApplyConfig ( conf ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									require . Equal ( t ,  s . queues [ hash ] . client ( ) . Name ( ) ,  cfg . Name ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// Change the queues name, ensure the queue has been restarted.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									conf . RemoteWriteConfigs [ 0 ] . Name  =  "dev-2" 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  s . ApplyConfig ( conf ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									hash ,  err  =  toHash ( cfg ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									require . Equal ( t ,  s . queues [ hash ] . client ( ) . Name ( ) ,  conf . RemoteWriteConfigs [ 0 ] . Name ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									err  =  s . Close ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-06-26 14:33:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								func  TestUpdateWithRegisterer ( t  * testing . T )  {  
						 
					
						
							
								
									
										
										
										
											2021-11-20 04:21:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									dir  :=  t . TempDir ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-26 14:33:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-19 23:23:03 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									s  :=  NewWriteStorage ( nil ,  prometheus . NewRegistry ( ) ,  dir ,  time . Millisecond ,  nil ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-26 14:33:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									c1  :=  & config . RemoteWriteConfig { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Name :  "named" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										URL :  & common_config . URL { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											URL :  & url . URL { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Scheme :  "http" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Host :    "localhost" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										QueueConfig :  config . DefaultQueueConfig , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									c2  :=  & config . RemoteWriteConfig { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										URL :  & common_config . URL { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											URL :  & url . URL { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Scheme :  "http" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Host :    "localhost" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										QueueConfig :  config . DefaultQueueConfig , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									conf  :=  & config . Config { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										GlobalConfig :        config . DefaultGlobalConfig , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RemoteWriteConfigs :  [ ] * config . RemoteWriteConfig { c1 ,  c2 } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  s . ApplyConfig ( conf ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-26 14:33:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									c1 . QueueConfig . MaxShards  =  10 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									c2 . QueueConfig . MaxShards  =  10 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  s . ApplyConfig ( conf ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-26 14:33:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									for  _ ,  queue  :=  range  s . queues  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										require . Equal ( t ,  10 ,  queue . cfg . MaxShards ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-26 14:33:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-11-20 04:21:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									err  :=  s . Close ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-26 14:33:52 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								func  TestWriteStorageLifecycle ( t  * testing . T )  {  
						 
					
						
							
								
									
										
										
										
											2021-11-20 04:21:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									dir  :=  t . TempDir ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-19 23:23:03 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									s  :=  NewWriteStorage ( nil ,  nil ,  dir ,  defaultFlushDeadline ,  nil ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									conf  :=  & config . Config { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										GlobalConfig :  config . DefaultGlobalConfig , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RemoteWriteConfigs :  [ ] * config . RemoteWriteConfig { 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-01 00:20:16 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											baseRemoteWriteConfig ( "http://test-storage.com" ) , 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-25 15:24:33 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  s . ApplyConfig ( conf ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . Equal ( t ,  1 ,  len ( s . queues ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-11-20 04:21:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									err  :=  s . Close ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  TestUpdateExternalLabels ( t  * testing . T )  {  
						 
					
						
							
								
									
										
										
										
											2021-11-20 04:21:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									dir  :=  t . TempDir ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-19 23:23:03 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									s  :=  NewWriteStorage ( nil ,  prometheus . NewRegistry ( ) ,  dir ,  time . Second ,  nil ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									externalLabels  :=  labels . FromStrings ( "external" ,  "true" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									conf  :=  & config . Config { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										GlobalConfig :  config . GlobalConfig { } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RemoteWriteConfigs :  [ ] * config . RemoteWriteConfig { 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-25 15:24:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											testRemoteWriteConfig ( ) , 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									hash ,  err  :=  toHash ( conf . RemoteWriteConfigs [ 0 ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-25 15:24:33 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  s . ApplyConfig ( conf ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . Equal ( t ,  1 ,  len ( s . queues ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									require . Equal ( t ,  labels . Labels ( nil ) ,  s . queues [ hash ] . externalLabels ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									conf . GlobalConfig . ExternalLabels  =  externalLabels 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									hash ,  err  =  toHash ( conf . RemoteWriteConfigs [ 0 ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-25 15:24:33 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  s . ApplyConfig ( conf ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . Equal ( t ,  1 ,  len ( s . queues ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									require . Equal ( t ,  externalLabels ,  s . queues [ hash ] . externalLabels ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									err  =  s . Close ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  TestWriteStorageApplyConfigsIdempotent ( t  * testing . T )  {  
						 
					
						
							
								
									
										
										
										
											2021-11-20 04:21:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									dir  :=  t . TempDir ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-19 23:23:03 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									s  :=  NewWriteStorage ( nil ,  nil ,  dir ,  defaultFlushDeadline ,  nil ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									conf  :=  & config . Config { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										GlobalConfig :  config . GlobalConfig { } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RemoteWriteConfigs :  [ ] * config . RemoteWriteConfig { 
							 
						 
					
						
							
								
									
										
										
										
											2022-07-01 00:20:16 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											baseRemoteWriteConfig ( "http://test-storage.com" ) , 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									hash ,  err  :=  toHash ( conf . RemoteWriteConfigs [ 0 ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-25 15:24:33 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  s . ApplyConfig ( conf ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . Equal ( t ,  1 ,  len ( s . queues ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-25 15:24:33 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  s . ApplyConfig ( conf ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . Equal ( t ,  1 ,  len ( s . queues ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_ ,  hashExists  :=  s . queues [ hash ] 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . True ( t ,  hashExists ,  "Queue pointer should have remained the same" ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									err  =  s . Close ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-01 09:39:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2019-09-05 01:21:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  TestWriteStorageApplyConfigsPartialUpdate ( t  * testing . T )  {  
						 
					
						
							
								
									
										
										
										
											2021-11-20 04:21:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									dir  :=  t . TempDir ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-05 01:21:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-19 23:23:03 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									s  :=  NewWriteStorage ( nil ,  nil ,  dir ,  defaultFlushDeadline ,  nil ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-05 01:21:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									c0  :=  & config . RemoteWriteConfig { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RemoteTimeout :  model . Duration ( 10  *  time . Second ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										QueueConfig :    config . DefaultQueueConfig , 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										WriteRelabelConfigs :  [ ] * relabel . Config { 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-13 09:55:42 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											{ 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
												Regex :  relabel . MustNewRegexp ( ".+" ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-05 01:21:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									c1  :=  & config . RemoteWriteConfig { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RemoteTimeout :  model . Duration ( 20  *  time . Second ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										QueueConfig :    config . DefaultQueueConfig , 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-31 11:39:29 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										HTTPClientConfig :  common_config . HTTPClientConfig { 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											BearerToken :  "foo" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-05 01:21:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									c2  :=  & config . RemoteWriteConfig { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RemoteTimeout :  model . Duration ( 30  *  time . Second ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										QueueConfig :    config . DefaultQueueConfig , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									conf  :=  & config . Config { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										GlobalConfig :        config . GlobalConfig { } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RemoteWriteConfigs :  [ ] * config . RemoteWriteConfig { c0 ,  c1 ,  c2 } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									// We need to set URL's so that metric creation doesn't panic.
 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									for  i  :=  range  conf . RemoteWriteConfigs  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										conf . RemoteWriteConfigs [ i ] . URL  =  & common_config . URL { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											URL :  & url . URL { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Host :  "http://test-storage.com" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  s . ApplyConfig ( conf ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									require . Equal ( t ,  3 ,  len ( s . queues ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-13 04:47:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									hashes  :=  make ( [ ] string ,  len ( conf . RemoteWriteConfigs ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-31 11:39:29 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									queues  :=  make ( [ ] * QueueManager ,  len ( conf . RemoteWriteConfigs ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									storeHashes  :=  func ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										for  i  :=  range  conf . RemoteWriteConfigs  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											hash ,  err  :=  toHash ( conf . RemoteWriteConfigs [ i ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											hashes [ i ]  =  hash 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-31 11:39:29 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											queues [ i ]  =  s . queues [ hash ] 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-05 01:21:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									storeHashes ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-05 01:21:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									// Update c0 and c2.
 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									c0 . WriteRelabelConfigs [ 0 ]  =  & relabel . Config { Regex :  relabel . MustNewRegexp ( "foo" ) } 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-05 01:21:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									c2 . RemoteTimeout  =  model . Duration ( 50  *  time . Second ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									conf  =  & config . Config { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										GlobalConfig :        config . GlobalConfig { } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RemoteWriteConfigs :  [ ] * config . RemoteWriteConfig { c0 ,  c1 ,  c2 } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  s . ApplyConfig ( conf ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									require . Equal ( t ,  3 ,  len ( s . queues ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-05 01:21:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_ ,  hashExists  :=  s . queues [ hashes [ 0 ] ] 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . False ( t ,  hashExists ,  "The queue for the first remote write configuration should have been restarted because the relabel configuration has changed." ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-31 11:39:29 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									q ,  hashExists  :=  s . queues [ hashes [ 1 ] ] 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . True ( t ,  hashExists ,  "Hash of unchanged queue should have remained the same" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									require . Equal ( t ,  q ,  queues [ 1 ] ,  "Pointer of unchanged queue should have remained the same" ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_ ,  hashExists  =  s . queues [ hashes [ 2 ] ] 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . False ( t ,  hashExists ,  "The queue for the third remote write configuration should have been restarted because the timeout has changed." ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-05 01:21:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									storeHashes ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-31 11:39:29 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									secondClient  :=  s . queues [ hashes [ 1 ] ] . client ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									// Update c1.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									c1 . HTTPClientConfig . BearerToken  =  "bar" 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-20 04:21:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									err  :=  s . ApplyConfig ( conf ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									require . Equal ( t ,  3 ,  len ( s . queues ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									_ ,  hashExists  =  s . queues [ hashes [ 0 ] ] 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . True ( t ,  hashExists ,  "Pointer of unchanged queue should have remained the same" ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-31 11:39:29 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									q ,  hashExists  =  s . queues [ hashes [ 1 ] ] 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . True ( t ,  hashExists ,  "Hash of queue with secret change should have remained the same" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									require . NotEqual ( t ,  secondClient ,  q . client ( ) ,  "Pointer of a client with a secret change should not be the same" ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_ ,  hashExists  =  s . queues [ hashes [ 2 ] ] 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . True ( t ,  hashExists ,  "Pointer of unchanged queue should have remained the same" ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									storeHashes ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-05 01:21:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									// Delete c0.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									conf  =  & config . Config { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										GlobalConfig :        config . GlobalConfig { } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										RemoteWriteConfigs :  [ ] * config . RemoteWriteConfig { c1 ,  c2 } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-25 15:24:33 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  s . ApplyConfig ( conf ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . Equal ( t ,  2 ,  len ( s . queues ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-05 01:21:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_ ,  hashExists  =  s . queues [ hashes [ 0 ] ] 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . False ( t ,  hashExists ,  "If a config is removed, the queue should be stopped and recreated." ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_ ,  hashExists  =  s . queues [ hashes [ 1 ] ] 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . True ( t ,  hashExists ,  "Pointer of unchanged queue should have remained the same" ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-16 00:49:18 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									_ ,  hashExists  =  s . queues [ hashes [ 2 ] ] 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . True ( t ,  hashExists ,  "Pointer of unchanged queue should have remained the same" ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-05 01:21:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									err  =  s . Close ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2020-10-29 17:43:23 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									require . NoError ( t ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-05 01:21:53 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}