public class CacheOnceMetadataIndex extends Object implements IMetadataIndex
Modifier and Type | Field and Description |
---|---|
protected AbstractScaleOutFederation<?> |
fed
The federation.
|
protected static org.apache.log4j.Logger |
log |
protected MetadataIndex.MetadataIndexMetadata |
mdmd
Cached metadata record for the metadata index.
|
protected String |
name
Name of the scale-out index.
|
protected long |
timestamp
Timestamp of the view.
|
Constructor and Description |
---|
CacheOnceMetadataIndex(AbstractScaleOutFederation<?> fed,
String name,
long timestamp,
MetadataIndex.MetadataIndexMetadata mdmd)
Caches the index partition locators.
|
Modifier and Type | Method and Description |
---|---|
protected void |
cacheLocators(byte[] fromKey,
byte[] toKey)
Bulk copy the partition definitions for the scale-out index into the
client.
|
PartitionLocator |
find(byte[] key)
Find and return the partition spanning the given key.
|
PartitionLocator |
get(byte[] key)
The partition with that separator key or
null (exact match
on the separator key). |
MetadataIndex.MetadataIndexMetadata |
getIndexMetadata()
The metadata for the metadata index itself.
|
IndexMetadata |
getScaleOutIndexMetadata()
The metadata template for the scale-out index managed by this metadata
index.
|
long |
rangeCount()
Return the #of tuples in the index.
|
long |
rangeCount(byte[] fromKey,
byte[] toKey)
Return the #of tuples in a half-open key range.
|
long |
rangeCountExact(byte[] fromKey,
byte[] toKey)
Return the exact #of tuples in a half-open key range.
|
long |
rangeCountExactWithDeleted(byte[] fromKey,
byte[] toKey)
Return the exact #of tuples in a half-open key range, including any
deleted tuples.
|
ITupleIterator |
rangeIterator()
Visits all tuples in key order.
|
ITupleIterator |
rangeIterator(byte[] fromKey,
byte[] toKey)
Return an iterator that visits the entries in a half-open key range.
|
ITupleIterator |
rangeIterator(byte[] fromKey,
byte[] toKey,
int capacity,
int flags,
IFilter filter)
Designated variant (the one that gets overridden) for an iterator that
visits the entries in a half-open key range.
|
void |
staleLocator(PartitionLocator locator)
Notification that a locator is stale.
|
String |
toString() |
protected static final org.apache.log4j.Logger log
protected final AbstractScaleOutFederation<?> fed
protected final String name
protected final long timestamp
protected final MetadataIndex.MetadataIndexMetadata mdmd
public CacheOnceMetadataIndex(AbstractScaleOutFederation<?> fed, String name, long timestamp, MetadataIndex.MetadataIndexMetadata mdmd)
name
- The name of the scale-out index.protected void cacheLocators(byte[] fromKey, byte[] toKey)
Note: This assumes that the metadata index is NOT partitioned and DOES NOT support delete markers.
public void staleLocator(PartitionLocator locator)
IMetadataIndex
staleLocator
in interface IMetadataIndex
locator
- The locator.UnsupportedOperationException
- stale locators should not occur for read-historical views!public final MetadataIndex.MetadataIndexMetadata getIndexMetadata()
IMetadataIndex
MetadataIndex.MetadataIndexMetadata.getManagedIndexMetadata()
returns the
template IndexMetadata
for the scale-out index partitions.getIndexMetadata
in interface IMetadataIndex
IMetadataIndex.getScaleOutIndexMetadata()
public final IndexMetadata getScaleOutIndexMetadata()
IMetadataIndex
getScaleOutIndexMetadata
in interface IMetadataIndex
public PartitionLocator get(byte[] key)
IMetadataIndex
null
(exact match
on the separator key).get
in interface IMetadataIndex
key
- The separator key (the first key that would go into that
partition).null
.public PartitionLocator find(byte[] key)
IMetadataIndex
find
in interface IMetadataIndex
key
- A key (optional). When null
the locator for the
last index partition will be returned.null
if
there are no partitions defined.public long rangeCount()
IRangeQuery
Note: If the index supports deletion markers then the range count will be an upper bound and may double count tuples which have been overwritten, including the special case where the overwrite is a delete.
rangeCount
in interface IRangeQuery
ISimpleIndexAccess.rangeCount()
public long rangeCount(byte[] fromKey, byte[] toKey)
IRangeQuery
Note: If the index supports deletion markers then the range count will be an upper bound and may double count tuples which have been overwritten, including the special case where the overwrite is a delete.
rangeCount
in interface IRangeQuery
fromKey
- The lowest key that will be counted (inclusive). When
null
there is no lower bound.toKey
- The first key that will not be counted (exclusive). When
null
there is no upper bound.public long rangeCountExact(byte[] fromKey, byte[] toKey)
IRangeQuery
Note: If the index supports deletion markers then this operation will require a key-range scan.
rangeCountExact
in interface IRangeQuery
fromKey
- The lowest key that will be counted (inclusive). When
null
there is no lower bound.toKey
- The first key that will not be counted (exclusive). When
null
there is no upper bound.public long rangeCountExactWithDeleted(byte[] fromKey, byte[] toKey)
IRangeQuery
When the view is just an AbstractBTree
the result is the same as
for IRangeQuery.rangeCount(byte[], byte[])
, which already
reports all tuples regardless of whether or not they are deleted.
When the index is a view with multiple sources, this operation requires a key-range scan where both deleted and undeleted tuples are visited.
rangeCountExactWithDeleted
in interface IRangeQuery
fromKey
- The lowest key that will be counted (inclusive). When
null
there is no lower bound.toKey
- The first key that will not be counted (exclusive). When
null
there is no upper bound.IRangeQuery.rangeCountExact(byte[], byte[])
public ITupleIterator rangeIterator()
IRangeQuery
rangeIterator(null, null)
rangeIterator
in interface IRangeQuery
public ITupleIterator rangeIterator(byte[] fromKey, byte[] toKey, int capacity, int flags, IFilter filter)
IRangeQuery
rangeIterator
in interface IRangeQuery
fromKey
- The first key that will be visited (inclusive lower bound).
When null
there is no lower bound.toKey
- The first key that will NOT be visited (exclusive upper
bound). When null
there is no upper bound.capacity
- The #of entries to buffer at a time. This is a hint and MAY be
zero (0) to use an implementation specific default
capacity. A non-zero value may be used if you know that you
want at most N results or if you want to override the default
#of results to be buffered before sending them across a
network interface. (Note that you can control the default
value using
IBigdataClient.Options#DEFAULT_CLIENT_RANGE_QUERY_CAPACITY
).flags
- A bitwise OR of IRangeQuery.KEYS
, IRangeQuery.VALS
, etc.filter
- An optional object used to construct a stacked iterator. When
IRangeQuery.CURSOR
is specified in flags, the base
iterator will implement ITupleCursor
and the first
filter in the stack can safely cast the source iterator to an
ITupleCursor
. If the outermost filter in the stack
does not implement ITupleIterator
, then it will be
wrapped an ITupleIterator
.SuccessorUtil, which may be used to compute the successor of a value
before encoding it as a component of a key.
,
BytesUtil#successor(byte[]), which may be used to compute the
successor of an encoded key.
,
IFilterConstructor, which may be used to construct an iterator stack
performing filtering or other operations.
public ITupleIterator rangeIterator(byte[] fromKey, byte[] toKey)
IRangeQuery
rangeIterator
in interface IRangeQuery
fromKey
- The first key that will be visited (inclusive lower bound).
When null
there is no lower bound.toKey
- The first key that will NOT be visited (exclusive upper
bound). When null
there is no upper bound.SuccessorUtil, which may be used to compute the successor of a value
before encoding it as a component of a key.
,
BytesUtil#successor(byte[]), which may be used to compute the
successor of an encoded key.
,
EntryFilter, which may be used to filter the entries visited by the
iterator.
Copyright © 2006–2019 SYSTAP, LLC DBA Blazegraph. All rights reserved.