mirror of
https://github.com/apache/druid.git
synced 2025-02-17 07:25:02 +00:00
Fix cache keys of DefaultDimensionSpec and ExtractionDimensionSpec (#6390)
This commit is contained in:
parent
00ea8c00ac
commit
faf3f1e426
@ -24,12 +24,11 @@ import com.fasterxml.jackson.annotation.JsonProperty;
|
|||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import org.apache.druid.java.util.common.StringUtils;
|
import org.apache.druid.query.cache.CacheKeyBuilder;
|
||||||
import org.apache.druid.query.extraction.ExtractionFn;
|
import org.apache.druid.query.extraction.ExtractionFn;
|
||||||
import org.apache.druid.segment.DimensionSelector;
|
import org.apache.druid.segment.DimensionSelector;
|
||||||
import org.apache.druid.segment.column.ValueType;
|
import org.apache.druid.segment.column.ValueType;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -132,12 +131,10 @@ public class DefaultDimensionSpec implements DimensionSpec
|
|||||||
@Override
|
@Override
|
||||||
public byte[] getCacheKey()
|
public byte[] getCacheKey()
|
||||||
{
|
{
|
||||||
byte[] dimensionBytes = StringUtils.toUtf8(dimension);
|
return new CacheKeyBuilder(CACHE_TYPE_ID)
|
||||||
|
.appendString(dimension)
|
||||||
return ByteBuffer.allocate(1 + dimensionBytes.length)
|
.appendString(outputType.toString())
|
||||||
.put(CACHE_TYPE_ID)
|
.build();
|
||||||
.put(dimensionBytes)
|
|
||||||
.array();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -22,13 +22,11 @@ package org.apache.druid.query.dimension;
|
|||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import org.apache.druid.java.util.common.StringUtils;
|
import org.apache.druid.query.cache.CacheKeyBuilder;
|
||||||
import org.apache.druid.query.extraction.ExtractionFn;
|
import org.apache.druid.query.extraction.ExtractionFn;
|
||||||
import org.apache.druid.segment.DimensionSelector;
|
import org.apache.druid.segment.DimensionSelector;
|
||||||
import org.apache.druid.segment.column.ValueType;
|
import org.apache.druid.segment.column.ValueType;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
public class ExtractionDimensionSpec implements DimensionSpec
|
public class ExtractionDimensionSpec implements DimensionSpec
|
||||||
@ -114,14 +112,11 @@ public class ExtractionDimensionSpec implements DimensionSpec
|
|||||||
@Override
|
@Override
|
||||||
public byte[] getCacheKey()
|
public byte[] getCacheKey()
|
||||||
{
|
{
|
||||||
byte[] dimensionBytes = StringUtils.toUtf8(dimension);
|
return new CacheKeyBuilder(CACHE_TYPE_ID)
|
||||||
byte[] dimExtractionFnBytes = extractionFn.getCacheKey();
|
.appendString(dimension)
|
||||||
|
.appendCacheable(extractionFn)
|
||||||
return ByteBuffer.allocate(1 + dimensionBytes.length + dimExtractionFnBytes.length)
|
.appendString(outputType.toString())
|
||||||
.put(CACHE_TYPE_ID)
|
.build();
|
||||||
.put(dimensionBytes)
|
|
||||||
.put(dimExtractionFnBytes)
|
|
||||||
.array();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -55,4 +55,12 @@ public class DefaultDimensionSpecTest
|
|||||||
Assert.assertEquals(spec, other);
|
Assert.assertEquals(spec, other);
|
||||||
Assert.assertEquals(spec.hashCode(), other.hashCode());
|
Assert.assertEquals(spec.hashCode(), other.hashCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCacheKey()
|
||||||
|
{
|
||||||
|
final DimensionSpec spec = new DefaultDimensionSpec("foo", "foo", ValueType.FLOAT);
|
||||||
|
final byte[] expected = new byte[] {0, 7, 102, 111, 111, 7, 70, 76, 79, 65, 84};
|
||||||
|
Assert.assertArrayEquals(expected, spec.getCacheKey());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|||||||
import org.apache.druid.jackson.DefaultObjectMapper;
|
import org.apache.druid.jackson.DefaultObjectMapper;
|
||||||
import org.apache.druid.query.extraction.MatchingDimExtractionFn;
|
import org.apache.druid.query.extraction.MatchingDimExtractionFn;
|
||||||
import org.apache.druid.query.extraction.RegexDimExtractionFn;
|
import org.apache.druid.query.extraction.RegexDimExtractionFn;
|
||||||
|
import org.apache.druid.query.extraction.StrlenExtractionFn;
|
||||||
import org.apache.druid.segment.column.ValueType;
|
import org.apache.druid.segment.column.ValueType;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@ -144,4 +145,17 @@ public class ExtractionDimensionSpecTest
|
|||||||
.getExtractionFn() instanceof MatchingDimExtractionFn
|
.getExtractionFn() instanceof MatchingDimExtractionFn
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCacheKey()
|
||||||
|
{
|
||||||
|
final ExtractionDimensionSpec dimensionSpec = new ExtractionDimensionSpec(
|
||||||
|
"foo",
|
||||||
|
"len",
|
||||||
|
ValueType.LONG,
|
||||||
|
StrlenExtractionFn.instance()
|
||||||
|
);
|
||||||
|
final byte[] expected = new byte[]{1, 7, 102, 111, 111, 9, 14, 7, 76, 79, 78, 71};
|
||||||
|
Assert.assertArrayEquals(expected, dimensionSpec.getCacheKey());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user