mondrian.rolap.cache
public class SegmentCacheIndexImpl extends Object implements SegmentCacheIndex
Not thread safe.
Constructor and Description |
---|
SegmentCacheIndexImpl(Thread thread)
Creates a SegmentCacheIndexImpl.
|
Modifier and Type | Method and Description |
---|---|
void |
add(SegmentHeader header,
boolean loading,
SegmentBuilder.SegmentConverter converter)
Adds a header to the index.
|
List<List<SegmentHeader>> |
findRollupCandidates(String schemaName,
ByteString schemaChecksum,
String cubeName,
String measureName,
String rolapStarFactTableName,
BitKey constrainedColsBitKey,
Map<String,Comparable> coordinates,
List<String> compoundPredicates)
Returns a list of segments that can be rolled up to satisfy a given
cell request.
|
SegmentBuilder.SegmentConverter |
getConverter(String schemaName,
ByteString schemaChecksum,
String cubeName,
String rolapStarFactTableName,
String measureName,
List<String> compoundPredicates)
Returns a converter that can convert the given header to internal
format.
|
Future<SegmentBody> |
getFuture(SegmentHeader header)
Returns a future slot for a segment body, if a segment is currently
loading, otherwise null.
|
List<SegmentHeader> |
intersectRegion(String schemaName,
ByteString schemaChecksum,
String cubeName,
String measureName,
String rolapStarFactTableName,
SegmentColumn[] region)
Finds a list of headers that intersect a given region.
|
void |
loadFailed(SegmentHeader header,
Throwable throwable)
Notifies the segment index that a segment failed to load, and removes the
segment from the index.
|
void |
loadSucceeded(SegmentHeader header,
SegmentBody body)
Changes the state of a header from loading to loaded.
|
List<SegmentHeader> |
locate(String schemaName,
ByteString schemaChecksum,
String cubeName,
String measureName,
String rolapStarFactTableName,
BitKey constrainedColsBitKey,
Map<String,Comparable> coordinates,
List<String> compoundPredicates)
Identifies the segment headers that contain a given cell.
|
static List |
makeConverterKey(CellRequest request,
AggregationKey key) |
static List |
makeConverterKey(SegmentHeader header) |
static boolean |
matches(SegmentHeader header,
Map<String,Comparable> coords,
List<String> compoundPredicates) |
void |
printCacheState(PrintWriter pw)
Prints the state of the cache to the given writer.
|
void |
remove(SegmentHeader header)
Removes a header from the index.
|
void |
setConverter(String schemaName,
ByteString schemaChecksum,
String cubeName,
String rolapStarFactTableName,
String measureName,
List<String> compoundPredicates,
SegmentBuilder.SegmentConverter converter)
Sets a converter that can convert headers in for a given measure to
internal format.
|
public SegmentCacheIndexImpl(Thread thread)
thread
- Thread that must be used to execute commands.public static List makeConverterKey(SegmentHeader header)
public static List makeConverterKey(CellRequest request, AggregationKey key)
public List<SegmentHeader> locate(String schemaName, ByteString schemaChecksum, String cubeName, String measureName, String rolapStarFactTableName, BitKey constrainedColsBitKey, Map<String,Comparable> coordinates, List<String> compoundPredicates)
SegmentCacheIndex
locate
in interface SegmentCacheIndex
schemaName
- Schema nameschemaChecksum
- Schema checksumcubeName
- Cube namemeasureName
- Measure namerolapStarFactTableName
- Fact table tableconstrainedColsBitKey
- Bit keycoordinates
- CoordinatescompoundPredicates
- Compound predicatespublic void add(SegmentHeader header, boolean loading, SegmentBuilder.SegmentConverter converter)
SegmentCacheIndex
If loading
is true, there must follow a call to
SegmentCacheIndex.loadSucceeded(mondrian.spi.SegmentHeader, mondrian.spi.SegmentBody)
or SegmentCacheIndex.loadFailed(mondrian.spi.SegmentHeader, java.lang.Throwable)
.
add
in interface SegmentCacheIndex
header
- Segment headerloading
- Whether segment is pending a load from SQLconverter
- Segment converterpublic void loadSucceeded(SegmentHeader header, SegmentBody body)
SegmentCacheIndex
The segment must have previously been added by calling SegmentCacheIndex.add(mondrian.spi.SegmentHeader, boolean, mondrian.rolap.agg.SegmentBuilder.SegmentConverter)
with a not-null value of the bodyFuture
parameter;
neither loadSucceeded
nor SegmentCacheIndex.loadFailed(mondrian.spi.SegmentHeader, java.lang.Throwable)
must have been
called.
Informs anyone waiting on the future supplied with
SegmentCacheIndex.add(mondrian.spi.SegmentHeader, boolean, mondrian.rolap.agg.SegmentBuilder.SegmentConverter)
.
loadSucceeded
in interface SegmentCacheIndex
header
- Segment headerbody
- Segment bodypublic void loadFailed(SegmentHeader header, Throwable throwable)
SegmentCacheIndex
The segment must have previously been added using SegmentCacheIndex.add(mondrian.spi.SegmentHeader, boolean, mondrian.rolap.agg.SegmentBuilder.SegmentConverter)
with a not-null value of the bodyFuture
parameter;
neither SegmentCacheIndex.loadSucceeded(mondrian.spi.SegmentHeader, mondrian.spi.SegmentBody)
nor loadFailed
must have been
called.
Informs anyone waiting on the future supplied with
SegmentCacheIndex.add(mondrian.spi.SegmentHeader, boolean, mondrian.rolap.agg.SegmentBuilder.SegmentConverter)
.
loadFailed
in interface SegmentCacheIndex
header
- Headerthrowable
- Error messagepublic void remove(SegmentHeader header)
SegmentCacheIndex
remove
in interface SegmentCacheIndex
header
- Segment headerpublic static boolean matches(SegmentHeader header, Map<String,Comparable> coords, List<String> compoundPredicates)
public List<SegmentHeader> intersectRegion(String schemaName, ByteString schemaChecksum, String cubeName, String measureName, String rolapStarFactTableName, SegmentColumn[] region)
SegmentCacheIndex
This method is used to find out which headers need to be trimmed or removed during a flush.
intersectRegion
in interface SegmentCacheIndex
schemaName
- Schema nameschemaChecksum
- Schema checksumcubeName
- Cube namemeasureName
- Measure namerolapStarFactTableName
- Fact table tableregion
- Regionpublic void printCacheState(PrintWriter pw)
SegmentCacheIndex
printCacheState
in interface SegmentCacheIndex
pw
- Print writerpublic Future<SegmentBody> getFuture(SegmentHeader header)
SegmentCacheIndex
getFuture
in interface SegmentCacheIndex
header
- Segment headerpublic SegmentBuilder.SegmentConverter getConverter(String schemaName, ByteString schemaChecksum, String cubeName, String rolapStarFactTableName, String measureName, List<String> compoundPredicates)
SegmentCacheIndex
getConverter
in interface SegmentCacheIndex
schemaName
- Schema nameschemaChecksum
- Schema checksumcubeName
- Cube namerolapStarFactTableName
- Fact tablemeasureName
- Measure namecompoundPredicates
- Compound predicatespublic void setConverter(String schemaName, ByteString schemaChecksum, String cubeName, String rolapStarFactTableName, String measureName, List<String> compoundPredicates, SegmentBuilder.SegmentConverter converter)
SegmentCacheIndex
setConverter
in interface SegmentCacheIndex
schemaName
- Schema nameschemaChecksum
- Schema checksumcubeName
- Cube namerolapStarFactTableName
- Fact tablemeasureName
- Measure namecompoundPredicates
- Compound predicatesconverter
- Converter to storepublic List<List<SegmentHeader>> findRollupCandidates(String schemaName, ByteString schemaChecksum, String cubeName, String measureName, String rolapStarFactTableName, BitKey constrainedColsBitKey, Map<String,Comparable> coordinates, List<String> compoundPredicates)
SegmentCacheIndex
findRollupCandidates
in interface SegmentCacheIndex
schemaName
- Schema nameschemaChecksum
- Schema checksumcubeName
- Cube namemeasureName
- Measure namerolapStarFactTableName
- Fact table tableconstrainedColsBitKey
- Bit keycoordinates
- CoordinatescompoundPredicates
- Compound predicates