@@ -1777,15 +1777,16 @@ func TestQuerier_DetectedFields(t *testing.T) {
1777
1777
detectedFields := resp .Fields
1778
1778
// log lines come from querier_mock_test.go
1779
1779
// message="line %d" count=%d fake=true bytes=%dMB duration=%dms percent=%f even=%t
1780
- assert .Len (t , detectedFields , 7 )
1780
+ assert .Len (t , detectedFields , 8 )
1781
1781
expectedCardinality := map [string ]uint64 {
1782
- "message" : 5 ,
1783
- "count" : 5 ,
1784
- "fake" : 1 ,
1785
- "bytes" : 5 ,
1786
- "duration" : 5 ,
1787
- "percent" : 5 ,
1788
- "even" : 2 ,
1782
+ "message" : 5 ,
1783
+ "count" : 5 ,
1784
+ "fake" : 1 ,
1785
+ "bytes" : 5 ,
1786
+ "duration" : 5 ,
1787
+ "percent" : 5 ,
1788
+ "even" : 2 ,
1789
+ "name_extracted" : 1 ,
1789
1790
}
1790
1791
for _ , d := range detectedFields {
1791
1792
card := expectedCardinality [d .Label ]
@@ -1821,17 +1822,18 @@ func TestQuerier_DetectedFields(t *testing.T) {
1821
1822
detectedFields := resp .Fields
1822
1823
// log lines come from querier_mock_test.go
1823
1824
// message="line %d" count=%d fake=true bytes=%dMB duration=%dms percent=%f even=%t
1824
- assert .Len (t , detectedFields , 9 )
1825
+ assert .Len (t , detectedFields , 10 )
1825
1826
expectedCardinality := map [string ]uint64 {
1826
- "variable" : 5 ,
1827
- "constant" : 1 ,
1828
- "message" : 5 ,
1829
- "count" : 5 ,
1830
- "fake" : 1 ,
1831
- "bytes" : 5 ,
1832
- "duration" : 5 ,
1833
- "percent" : 5 ,
1834
- "even" : 2 ,
1827
+ "variable" : 5 ,
1828
+ "constant" : 1 ,
1829
+ "message" : 5 ,
1830
+ "count" : 5 ,
1831
+ "fake" : 1 ,
1832
+ "bytes" : 5 ,
1833
+ "duration" : 5 ,
1834
+ "percent" : 5 ,
1835
+ "even" : 2 ,
1836
+ "name_extracted" : 1 ,
1835
1837
}
1836
1838
for _ , d := range detectedFields {
1837
1839
card := expectedCardinality [d .Label ]
@@ -1867,7 +1869,7 @@ func TestQuerier_DetectedFields(t *testing.T) {
1867
1869
detectedFields := resp .Fields
1868
1870
// log lines come from querier_mock_test.go
1869
1871
// message="line %d" count=%d fake=true bytes=%dMB duration=%dms percent=%f even=%t
1870
- assert .Len (t , detectedFields , 7 )
1872
+ assert .Len (t , detectedFields , 8 )
1871
1873
1872
1874
var messageField , countField , bytesField , durationField , floatField , evenField * logproto.DetectedField
1873
1875
for _ , field := range detectedFields {
@@ -1923,7 +1925,7 @@ func TestQuerier_DetectedFields(t *testing.T) {
1923
1925
detectedFields := resp .Fields
1924
1926
// log lines come from querier_mock_test.go
1925
1927
// message="line %d" count=%d fake=true bytes=%dMB duration=%dms percent=%f even=%t
1926
- assert .Len (t , detectedFields , 9 )
1928
+ assert .Len (t , detectedFields , 10 )
1927
1929
1928
1930
var messageField , countField , bytesField , durationField , floatField , evenField , constantField , variableField * logproto.DetectedField
1929
1931
for _ , field := range detectedFields {
@@ -1955,7 +1957,56 @@ func TestQuerier_DetectedFields(t *testing.T) {
1955
1957
assert .Equal (t , []string {"logfmt" }, evenField .Parsers )
1956
1958
assert .Equal (t , []string {"" }, constantField .Parsers )
1957
1959
assert .Equal (t , []string {"" }, variableField .Parsers )
1958
- })
1960
+ },
1961
+ )
1962
+
1963
+ t .Run (
1964
+ "adds _extracted suffix to detected fields that conflict with indexed labels" ,
1965
+ func (t * testing.T ) {
1966
+ store := newStoreMock ()
1967
+ store .On ("SelectLogs" , mock .Anything , mock .Anything ).
1968
+ Return (mockLogfmtStreamIterator (1 , 2 ), nil )
1969
+
1970
+ queryClient := newQueryClientMock ()
1971
+ queryClient .On ("Recv" ).
1972
+ Return (mockQueryResponse ([]logproto.Stream {mockLogfmtStreamWithStructuredMetadata (1 , 2 )}), nil )
1973
+
1974
+ ingesterClient := newQuerierClientMock ()
1975
+ ingesterClient .On ("Query" , mock .Anything , mock .Anything , mock .Anything ).
1976
+ Return (queryClient , nil )
1977
+
1978
+ querier , err := newQuerier (
1979
+ conf ,
1980
+ mockIngesterClientConfig (),
1981
+ newIngesterClientMockFactory (ingesterClient ),
1982
+ mockReadRingWithOneActiveIngester (),
1983
+ & mockDeleteGettter {},
1984
+ store , limits )
1985
+ require .NoError (t , err )
1986
+
1987
+ resp , err := querier .DetectedFields (ctx , & request )
1988
+ require .NoError (t , err )
1989
+
1990
+ detectedFields := resp .Fields
1991
+ // log lines come from querier_mock_test.go
1992
+ // message="line %d" count=%d fake=true bytes=%dMB duration=%dms percent=%f even=%t
1993
+ assert .Len (t , detectedFields , 10 )
1994
+
1995
+ var nameField * logproto.DetectedField
1996
+ for _ , field := range detectedFields {
1997
+ switch field .Label {
1998
+ case "name_extracted" :
1999
+ nameField = field
2000
+ }
2001
+ }
2002
+
2003
+ assert .NotNil (t , nameField )
2004
+ assert .Equal (t , "name_extracted" , nameField .Label )
2005
+ assert .Equal (t , logproto .DetectedFieldString , nameField .Type )
2006
+ assert .Equal (t , []string {"logfmt" }, nameField .Parsers )
2007
+ assert .Equal (t , uint64 (1 ), nameField .Cardinality )
2008
+ },
2009
+ )
1959
2010
}
1960
2011
1961
2012
func BenchmarkQuerierDetectedFields (b * testing.B ) {
0 commit comments