com.bigdata.service
Class CachingMetadataIndex

java.lang.Object
  extended by com.bigdata.service.CacheOnceMetadataIndex
      extended by com.bigdata.service.CachingMetadataIndex
All Implemented Interfaces:
IRangeQuery, IMetadataIndex

public class CachingMetadataIndex
extends CacheOnceMetadataIndex

Implementation caches all locators and then updates them on demand as stale locators are discovered.

Version:
$Id: CachingMetadataIndex.java 5915 2012-01-30 16:47:10Z thompsonbry $
Author:
Bryan Thompson

Field Summary
 
Fields inherited from class com.bigdata.service.CacheOnceMetadataIndex
fed, log, mdmd, name, timestamp
 
Fields inherited from interface com.bigdata.btree.IRangeQuery
ALL, CURSOR, DEFAULT, DELETED, FIXED_LENGTH_SUCCESSOR, KEYS, NONE, PARALLEL, READONLY, REMOVEALL, REVERSE, VALS
 
Constructor Summary
CachingMetadataIndex(AbstractScaleOutFederation<?> fed, String name, long timestamp, MetadataIndex.MetadataIndexMetadata mdmd)
          Cache the index partition metadata in the client.
 
Method Summary
 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).
 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.
 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)
          FIXME this is wrong.
 void staleLocator(PartitionLocator locator)
          Re-fetches the locator(s).
 
Methods inherited from class com.bigdata.service.CacheOnceMetadataIndex
cacheLocators, getIndexMetadata, getScaleOutIndexMetadata, rangeCountExactWithDeleted, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

CachingMetadataIndex

public CachingMetadataIndex(AbstractScaleOutFederation<?> fed,
                            String name,
                            long timestamp,
                            MetadataIndex.MetadataIndexMetadata mdmd)
Cache the index partition metadata in the client.

Parameters:
name - The name of the scale-out index.
Method Detail

staleLocator

public void staleLocator(PartitionLocator locator)
Re-fetches the locator(s).

Specified by:
staleLocator in interface IMetadataIndex
Overrides:
staleLocator in class CacheOnceMetadataIndex
Parameters:
locator - The locator.

get

public PartitionLocator get(byte[] key)
Description copied from interface: IMetadataIndex
The partition with that separator key or null (exact match on the separator key).

Specified by:
get in interface IMetadataIndex
Overrides:
get in class CacheOnceMetadataIndex
Parameters:
key - The separator key (the first key that would go into that partition).
Returns:
The partition with that separator key or null.

find

public PartitionLocator find(byte[] key)
Description copied from interface: IMetadataIndex
Find and return the partition spanning the given key.

Specified by:
find in interface IMetadataIndex
Overrides:
find in class CacheOnceMetadataIndex
Parameters:
key - A key (optional). When null the locator for the last index partition will be returned.
Returns:
The partition spanning the given key or null if there are no partitions defined.

rangeCount

public long rangeCount()
Description copied from interface: IRangeQuery
Return the #of tuples in the index.

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.

Specified by:
rangeCount in interface IRangeQuery
Overrides:
rangeCount in class CacheOnceMetadataIndex
Returns:
The #of tuples in the index.

rangeCount

public long rangeCount(byte[] fromKey,
                       byte[] toKey)
Description copied from interface: IRangeQuery
Return the #of tuples in a half-open key range. The fromKey and toKey need not exist in the B+Tree.

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.

Specified by:
rangeCount in interface IRangeQuery
Overrides:
rangeCount in class CacheOnceMetadataIndex
Parameters:
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.
Returns:
The #of tuples in the half-open key range.

rangeCountExact

public long rangeCountExact(byte[] fromKey,
                            byte[] toKey)
Description copied from interface: IRangeQuery
Return the exact #of tuples in a half-open key range. The fromKey and toKey need not exist in the B+Tree.

Note: If the index supports deletion markers then this operation will require a key-range scan.

Specified by:
rangeCountExact in interface IRangeQuery
Overrides:
rangeCountExact in class CacheOnceMetadataIndex
Parameters:
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.
Returns:
The exact #of tuples in the half-open key range.

rangeIterator

public ITupleIterator rangeIterator()
Description copied from interface: IRangeQuery
Visits all tuples in key order. This is identical to
 rangeIterator(null, null)
 

Specified by:
rangeIterator in interface IRangeQuery
Overrides:
rangeIterator in class CacheOnceMetadataIndex
Returns:
An iterator that will visit all entries in key order.

rangeIterator

public ITupleIterator rangeIterator(byte[] fromKey,
                                    byte[] toKey)
Description copied from interface: IRangeQuery
Return an iterator that visits the entries in a half-open key range. When toKey EQ fromKey nothing will be visited. It is an error if toKey LT fromKey.

Specified by:
rangeIterator in interface IRangeQuery
Overrides:
rangeIterator in class CacheOnceMetadataIndex
Parameters:
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.
See Also:
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.

rangeIterator

public ITupleIterator rangeIterator(byte[] fromKey,
                                    byte[] toKey,
                                    int capacity,
                                    int flags,
                                    IFilter filter)
FIXME this is wrong. The delegate must be a UnisolatedReadWriteIndex in order to provide correct locking for the iterator. The class may have to be refactored in order to permit the behavior to be gated by an UnisolatedReadWriteIndex.

Specified by:
rangeIterator in interface IRangeQuery
Overrides:
rangeIterator in class CacheOnceMetadataIndex
Parameters:
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.
See Also:
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.


Copyright © 2006-2011 SYSTAP, LLC. All Rights Reserved.