Interface SegmentCacheIndex
-
- All Known Implementing Classes:
SegmentCacheIndexImpl
public interface SegmentCacheIndex
Data structure that identifies which segments contain cells.Not thread-safe.
- Author:
- Julian Hyde
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description void
add(SegmentHeader header, SegmentBuilder.SegmentConverter converter, boolean loading)
Adds a header to the index.void
cancel(Execution exec)
This method must remove all registrations as a client for the given execution.boolean
contains(SegmentHeader header)
Tells whether or not a given segment is known to this 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(Execution exec, 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
linkSqlStatement(SegmentHeader header, Statement stmt)
Allows to link aStatement
to a segment.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.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.void
update(SegmentHeader oldHeader, SegmentHeader newHeader)
Updates a header in the index.
-
-
-
Method Detail
-
locate
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.- Parameters:
schemaName
- Schema nameschemaChecksum
- Schema checksumcubeName
- Cube namemeasureName
- Measure namerolapStarFactTableName
- Fact table tableconstrainedColsBitKey
- Bit keycoordinates
- CoordinatescompoundPredicates
- Compound predicates- Returns:
- Empty list if not found; never null
-
findRollupCandidates
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.- Parameters:
schemaName
- Schema nameschemaChecksum
- Schema checksumcubeName
- Cube namemeasureName
- Measure namerolapStarFactTableName
- Fact table tableconstrainedColsBitKey
- Bit keycoordinates
- CoordinatescompoundPredicates
- Compound predicates- Returns:
- List of candidates; each element is a list of headers that, when combined using union, are sufficient to answer the given cell request
-
intersectRegion
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.This method is used to find out which headers need to be trimmed or removed during a flush.
- Parameters:
schemaName
- Schema nameschemaChecksum
- Schema checksumcubeName
- Cube namemeasureName
- Measure namerolapStarFactTableName
- Fact table tableregion
- Region- Returns:
- List of intersecting headers
-
add
void add(SegmentHeader header, SegmentBuilder.SegmentConverter converter, boolean loading)
Adds a header to the index.- Parameters:
header
- Segment headerloading
- Whether segment is pending a load from SQLconverter
- Segment converter
-
update
void update(SegmentHeader oldHeader, SegmentHeader newHeader)
Updates a header in the index. This is required when some of the excluded regions have changed.- Parameters:
oldHeader
- The old header to replace.newHeader
- The new header to use instead.
-
loadSucceeded
void loadSucceeded(SegmentHeader header, SegmentBody body)
Changes the state of a header from loading to loaded.The segment must have previously been added by calling
add(mondrian.spi.SegmentHeader, mondrian.rolap.agg.SegmentBuilder.SegmentConverter, boolean)
with a not-null value of thebodyFuture
parameter; neitherloadSucceeded
norloadFailed(mondrian.spi.SegmentHeader, java.lang.Throwable)
must have been called.Informs anyone waiting on the future supplied with
add(mondrian.spi.SegmentHeader, mondrian.rolap.agg.SegmentBuilder.SegmentConverter, boolean)
.- Parameters:
header
- Segment headerbody
- Segment body
-
loadFailed
void loadFailed(SegmentHeader header, Throwable throwable)
Notifies the segment index that a segment failed to load, and removes the segment from the index.The segment must have previously been added using
add(mondrian.spi.SegmentHeader, mondrian.rolap.agg.SegmentBuilder.SegmentConverter, boolean)
with a not-null value of thebodyFuture
parameter; neitherloadSucceeded(mondrian.spi.SegmentHeader, mondrian.spi.SegmentBody)
norloadFailed
must have been called.Informs anyone waiting on the future supplied with
add(mondrian.spi.SegmentHeader, mondrian.rolap.agg.SegmentBuilder.SegmentConverter, boolean)
.- Parameters:
header
- Headerthrowable
- Error message
-
remove
void remove(SegmentHeader header)
Removes a header from the index.- Parameters:
header
- Segment header
-
printCacheState
void printCacheState(PrintWriter pw)
Prints the state of the cache to the given writer.- Parameters:
pw
- Print writer
-
getFuture
Future<SegmentBody> getFuture(Execution exec, SegmentHeader header)
Returns a future slot for a segment body, if a segment is currently loading, otherwise null. This is the method to use to get segments 'hot out of the oven'.When this method is invoked, the execution instance of the thread is automatically added to the list of clients for the given segment. The calling code is responsible for calling
cancel(Execution)
when it is done with the segments, or else this registration will prevent others from canceling the running SQL statements associated to this segment.- Parameters:
header
- Segment header- Returns:
- Slot, or null
-
cancel
void cancel(Execution exec)
This method must remove all registrations as a client for the given execution. This must terminate all SQL activity for any orphaned segments.- Parameters:
exec
- The execution to unregister.
-
contains
boolean contains(SegmentHeader header)
Tells whether or not a given segment is known to this index.
-
linkSqlStatement
void linkSqlStatement(SegmentHeader header, Statement stmt)
Allows to link aStatement
to a segment. This allows the index to cleanup whencancel(Execution)
is invoked and orphaned segments are left.- Parameters:
header
- The segment.stmt
- The SQL statement.
-
getConverter
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.- Parameters:
schemaName
- Schema nameschemaChecksum
- Schema checksumcubeName
- Cube namerolapStarFactTableName
- Fact tablemeasureName
- Measure namecompoundPredicates
- Compound predicates- Returns:
- Converter
-
setConverter
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.- Parameters:
schemaName
- Schema nameschemaChecksum
- Schema checksumcubeName
- Cube namerolapStarFactTableName
- Fact tablemeasureName
- Measure namecompoundPredicates
- Compound predicatesconverter
- Converter to store
-
-