@Override public Observable<MarkedEdge> loadEdgesToTargetByType( final SearchByIdType search ) { final Observable<MarkedEdge> edges = Observable.create( new ObservableIterator<MarkedEdge>( "loadEdgesToTargetByType" ) { @Override protected Iterator<MarkedEdge> getIterator() { return storageEdgeSerialization.getEdgesToTargetBySourceType( scope, search ); } } ).buffer( graphFig.getScanPageSize() ) .compose( new EdgeBufferFilter( search.filterMarked() ) ); return ObservableTimer.time( edges, loadEdgesToTargetByTypeTimer ); }
@Override public Observable<MarkedEdge> loadEdgesToTarget( final SearchByEdgeType search ) { final Observable<MarkedEdge> edges = Observable.create( new ObservableIterator<MarkedEdge>( "loadEdgesToTarget" ) { @Override protected Iterator<MarkedEdge> getIterator() { return storageEdgeSerialization.getEdgesToTarget( scope, search ); } } ).buffer( graphFig.getScanPageSize() ) .compose( new EdgeBufferFilter( search.filterMarked() ) ); return ObservableTimer.time( edges, loadEdgesToTargetTimer ); }
@Override public Observable<MarkedEdge> loadEdgesFromSourceByType( final SearchByIdType search ) { final Observable<MarkedEdge> edges = Observable.create( new ObservableIterator<MarkedEdge>( "loadEdgesFromSourceByType" ) { @Override protected Iterator<MarkedEdge> getIterator() { return storageEdgeSerialization.getEdgesFromSourceByTargetType( scope, search ); } } ).buffer( graphFig.getScanPageSize() ) .compose( new EdgeBufferFilter( search.filterMarked() ) ); return ObservableTimer.time( edges, loadEdgesFromSourceByTypeTimer ); }
@Override public Observable<MarkedEdge> loadEdgesFromSource( final SearchByEdgeType search ) { final Observable<MarkedEdge> edges = Observable.create( new ObservableIterator<MarkedEdge>( "loadEdgesFromSource" ) { @Override protected Iterator<MarkedEdge> getIterator() { return storageEdgeSerialization.getEdgesFromSource( scope, search ); } } ).buffer( graphFig.getScanPageSize() ) .compose( new EdgeBufferFilter( search.filterMarked() ) ); return ObservableTimer.time( edges, loadEdgesFromSourceTimer ); }
@Override public Observable<MarkedEdge> loadEdgeVersions( final SearchByEdge searchByEdge ) { final Observable<MarkedEdge> edges = Observable.create( new ObservableIterator<MarkedEdge>( "getEdgeTypesFromSource" ) { @Override protected Iterator<MarkedEdge> getIterator() { return storageEdgeSerialization.getEdgeVersions( scope, searchByEdge ); } } ).buffer( graphFig.getScanPageSize() ) .compose( new EdgeBufferFilter( searchByEdge.filterMarked() ) ); return ObservableTimer.time( edges, loadEdgesVersionsTimer ); }
private RangeBuilder createRange( final SearchEdgeType search ) { final RangeBuilder builder = new RangeBuilder().setLimit( graphFig.getScanPageSize() ); //we have a last, it's where we need to start seeking from if ( search.getLast().isPresent() ) { builder.setStart( search.getLast().get() ); } //no last was set, but we have a prefix, set it else if ( search.prefix().isPresent() ) { builder.setStart( search.prefix().get() ); } //we have a prefix, so make sure we only seek to prefix + max UTF value if ( search.prefix().isPresent() ) { builder.setEnd( search.prefix().get() + "\uffff" ); } return builder; }
@Override public void buildRange(final RangeBuilder rangeBuilder, final String value, String end) { rangeBuilder.setLimit( graphFig.getScanPageSize() ); if ( value != null ) { rangeBuilder.setStart( value ); } //we have a last, it's where we need to start seeking from else if ( search.getLast().isPresent() ) { rangeBuilder.setStart( search.getLast().get() ); } //no last was set, but we have a prefix, set it else if ( search.prefix().isPresent() ) { rangeBuilder.setStart( search.prefix().get() ); } //we have a prefix, so make sure we only seek to prefix + max UTF value if ( search.prefix().isPresent() ) { rangeBuilder.setEnd( search.prefix().get() + "\uffff" ); } }
.buffer( graphFig.getScanPageSize() ).flatMap( markedEdges -> {
graphFig.getScanPageSize(), graphFig.getSmartShardSeekEnabled() );
@Override public Iterator<Shard> getShardMetaData( final ApplicationScope scope, final Optional<Shard> start, final DirectedEdgeMeta metaData ) { ValidationUtils.validateApplicationScope( scope ); GraphValidation.validateDirectedEdgeMeta( metaData ); Preconditions.checkNotNull( metaData, "metadata must be present" ); /** * If the edge is present, we need to being seeking from this */ final RangeBuilder rangeBuilder = new RangeBuilder().setLimit( graphFig.getScanPageSize() ); if ( start.isPresent() ) { final Shard shard = start.get(); GraphValidation.valiateShard( shard ); rangeBuilder.setStart( shard.getShardIndex() ); } final ScopedRowKey rowKey = ScopedRowKey.fromKey( scope.getApplication(), metaData ); final RowQuery<ScopedRowKey<DirectedEdgeMeta>, Long> query = keyspace.prepareQuery( EDGE_SHARDS ).setConsistencyLevel( cassandraConfig.getReadCL() ).getKey( rowKey ) .autoPaginate( true ).withColumnRange( rangeBuilder.build() ); return new ColumnNameIterator<>( query, COLUMN_PARSER, false ); }
final int maxWorkSize = graphFig.getScanPageSize();
graphFig.getScanPageSize(), graphFig.getSmartShardSeekEnabled() );
/** * Get the edge types from the search criteria. * * @param scope The org scope * @param search The edge type search info * @param cf The column family to execute on */ private Iterator<String> getEdgeTypes( final ApplicationScope scope, final SearchEdgeType search, final MultiTenantColumnFamily<BucketScopedRowKey<Id>, String> cf ) { ValidationUtils.validateApplicationScope( scope ); GraphValidation.validateSearchEdgeType( search ); final Id applicationId = scope.getApplication(); final Id searchNode = search.getNode(); final int[] bucketIds = idExpandingShardLocator.getAllBuckets( searchNode ); //no generics is intentional here final List<BucketScopedRowKey<Id>> buckets = BucketScopedRowKey.fromRange( applicationId, searchNode, bucketIds ); final ColumnSearch<String> columnSearch = createSearch( search ); return new MultiRowColumnIterator( keyspace, cf, cassandraConfig.getReadCL(), PARSER, columnSearch, STRING_COMPARATOR, buckets, graphFig.getScanPageSize() ); }
graphFig.getScanPageSize(), graphFig.getSmartShardSeekEnabled() );
graphFig.getScanPageSize(), graphFig.getSmartShardSeekEnabled() );
graphFig.getScanPageSize(), graphFig.getSmartShardSeekEnabled() );
/** * Get the id types from the specified column family * * @param scope The organization scope to use * @param search The search criteria * @param cf The column family to search */ public Iterator<String> getIdTypes( final ApplicationScope scope, final SearchIdType search, final MultiTenantColumnFamily<BucketScopedRowKey<EdgeIdTypeKey>, String> cf ) { ValidationUtils.validateApplicationScope( scope ); GraphValidation.validateSearchEdgeIdType( search ); final Id applicationId = scope.getApplication(); final Id searchNode = search.getNode(); final EdgeIdTypeKey edgeIdTypeKey = new EdgeIdTypeKey( searchNode, search.getEdgeType() ); final int[] bucketIds = edgeTypeExpandingShardLocator.getAllBuckets( edgeIdTypeKey ); //no generics is intentional here final List<BucketScopedRowKey<EdgeIdTypeKey>> buckets = BucketScopedRowKey.fromRange( applicationId, edgeIdTypeKey, bucketIds ); final ColumnSearch<String> columnSearch = createSearch( search ); return new MultiRowColumnIterator( keyspace, cf, cassandraConfig.getReadCL(), PARSER, columnSearch, STRING_COMPARATOR, buckets, graphFig.getScanPageSize() ); }
/** * Test paging by resuming the search from the edge */ @Test @Category(StressTest.class) public void pageIteration() throws ConnectionException { int size = graphFig.getScanPageSize() * 2; final Id sourceId = IdGenerator.createId( "source" ); final String type = "edge"; Set<Edge> edges = new HashSet<Edge>( size ); long timestamp = 0; for ( int i = 0; i < size; i++ ) { final MarkedEdge edge = createEdge( sourceId, type, IdGenerator.createId( "target" ), timestamp ); serialization.writeEdge( scope, edge, UUIDGenerator.newTimeUUID() ).execute(); edges.add( edge ); timestamp++; } //get our edges out by name Iterator<MarkedEdge> results = serialization.getEdgesFromSource( scope, createSearchByEdge( sourceId, type, timestamp, null ) ); for ( MarkedEdge edge : new IterableWrapper<>( results ) ) { assertTrue( "Removed edge from write set", edges.remove( edge ) ); } assertEquals( "All edges were returned", 0, edges.size() ); }
final int edgeCount = graphFig.getScanPageSize() * 2; Id toDelete = IdGenerator.createId( "toDelete" ); final String edgeType = "test";
int writeCount = graphFig.getScanPageSize() * 3;