@Override protected Id getId( final MarkedEdge edge ) { return edge.getTargetNode(); } }
@Override protected DirectedEdge createColumn( final MarkedEdge last ) { return new DirectedEdge( last.getTargetNode(), last.getTimestamp() ); }
@Override protected DirectedEdge createColumn( final MarkedEdge last ) { return new DirectedEdge( last.getTargetNode(), last.getTimestamp() ); }
@Override protected DirectedEdge createColumn( final MarkedEdge last ) { return new DirectedEdge( last.getTargetNode(), last.getTimestamp() ); }
@Override public Observable<FilterResult<Id>> call( final Observable<FilterResult<Id>> filterValueObservable ) { final GraphManager gm = graphManagerFactory.createEdgeManager( pipelineContext.getApplicationScope() ); return filterValueObservable.flatMap( filterValue -> { final String edgeTypeName = getEdgeName(); final Id id = filterValue.getValue(); //create our search final SearchByEdge searchByEdge = new SimpleSearchByEdge( id, edgeTypeName, targetId, Long.MAX_VALUE, SearchByEdgeType.Order.DESCENDING, Optional.absent() ); //load the versions of the edge, take the first since that's all we need to validate existence, then emit the target node return gm.loadEdgeVersions( searchByEdge ).take( 1 ).map( edge -> edge.getTargetNode() ).map( targetId -> new FilterResult<>(targetId, filterValue.getPath())); } ); }
@Override public Observable<FilterResult<Id>> call( final Observable<FilterResult<Id>> filterResultObservable ) { //get the graph manager final GraphManager graphManager = graphManagerFactory.createEdgeManager( pipelineContext.getApplicationScope() ); final String edgeName = getEdgeTypeFromConnectionType( connectionName ); //return all ids that are emitted from this edge return filterResultObservable.flatMap( idFilterResult -> { //set our our constant state final Optional<MarkedEdge> startFromCursor = getSeekValue(); final Id id = idFilterResult.getValue(); final Optional<Edge> typeWrapper = Optional.fromNullable(startFromCursor.orNull()); final SimpleSearchByIdType search = new SimpleSearchByIdType( id, edgeName, Long.MAX_VALUE, SearchByEdgeType.Order.DESCENDING, entityType, typeWrapper ); return graphManager.loadEdgesFromSourceByType( search ).map( edge -> createFilterResult( edge.getTargetNode(), edge, idFilterResult.getPath() )); } ); }
/** * Use Graph to get old appinfos from the old and deprecated System App. */ public Observable<org.apache.usergrid.persistence.model.entity.Entity> getOldAppInfos() { final ApplicationScope systemAppScope = getApplicationScope( SYSTEM_APP_ID ); final EntityCollectionManager systemCollectionManager = entityCollectionManagerFactory.createCollectionManager( systemAppScope ); final GraphManager gm = graphManagerFactory.createEdgeManager( systemAppScope ); String edgeType = CpNamingUtils.getEdgeTypeFromCollectionName( "appinfos" ); Id rootAppId = systemAppScope.getApplication(); final SimpleSearchByEdgeType simpleSearchByEdgeType = new SimpleSearchByEdgeType( rootAppId, edgeType, Long.MAX_VALUE, SearchByEdgeType.Order.DESCENDING, Optional.absent() ); Observable<org.apache.usergrid.persistence.model.entity.Entity> entityObs = gm.loadEdgesFromSource( simpleSearchByEdgeType ).flatMap( edge -> { final Id appInfoId = edge.getTargetNode(); return systemCollectionManager.load( appInfoId ).filter( entity -> ( entity != null ) ); } ); return entityObs; }
/** * Write the source write operation */ private EdgeVersions( final EdgeColumnFamilies edgeColumnFamilies, final MarkedEdge markedEdge, final DirectedEdgeMeta directedEdgeMeta ) { this.columnFamily = edgeColumnFamilies.getGraphEdgeVersions(); this.targetNode = markedEdge.getTargetNode(); this.sourceNode = markedEdge.getSourceNode(); this.type = markedEdge.getType(); this.isDeleted = markedEdge.isDeleted(); this.edgeVersion = markedEdge.getTimestamp(); this.directedEdgeMeta = directedEdgeMeta; }
/** * Write the source write operation */ private SourceTargetTypeWriteOp( final EdgeColumnFamilies edgeColumnFamilies, final MarkedEdge markedEdge, final DirectedEdgeMeta directedEdgeMeta ) { this.columnFamily = edgeColumnFamilies.getSourceNodeTargetTypeCfName(); this.sourceNodeId = markedEdge.getSourceNode(); this.type = markedEdge.getType(); this.targetId = markedEdge.getTargetNode(); this.isDeleted = markedEdge.isDeleted(); this.directedEdge = new DirectedEdge( targetId, markedEdge.getTimestamp() ); this.directedEdgeMeta = directedEdgeMeta; }
/** * Write the source write operation */ private SourceWriteOp( final EdgeColumnFamilies edgeColumnFamilies, final MarkedEdge markedEdge, final DirectedEdgeMeta directedEdgeMeta ) { this.columnFamily = edgeColumnFamilies.getSourceNodeCfName(); this.sourceNodeId = markedEdge.getSourceNode(); this.type = markedEdge.getType(); this.isDeleted = markedEdge.isDeleted(); this.directedEdge = new DirectedEdge( markedEdge.getTargetNode(), markedEdge.getTimestamp() ); this.directedEdgeMeta = directedEdgeMeta; }
/** * Write the source write operation */ private TargetWriteOp( final EdgeColumnFamilies edgeColumnFamilies, final MarkedEdge markedEdge, final DirectedEdgeMeta directedEdgeMeta ) { this.columnFamily = edgeColumnFamilies.getTargetNodeCfName(); this.targetNode = markedEdge.getTargetNode(); this.type = markedEdge.getType(); this.isDeleted = markedEdge.isDeleted(); this.directedEdge = new DirectedEdge( markedEdge.getSourceNode(), markedEdge.getTimestamp() ); this.directedEdgeMeta = directedEdgeMeta; }
/** * Write the source write operation */ private TargetSourceTypeWriteOp( final EdgeColumnFamilies edgeColumnFamilies, final MarkedEdge markedEdge, final DirectedEdgeMeta directedEdgeMeta ) { this.columnFamily = edgeColumnFamilies.getSourceNodeTargetTypeCfName(); this.targetNode = markedEdge.getTargetNode(); this.sourceNode = markedEdge.getSourceNode(); this.type = markedEdge.getType(); this.isDeleted = markedEdge.isDeleted(); this.directedEdge = new DirectedEdge( sourceNode, markedEdge.getTimestamp() ); this.directedEdgeMeta = directedEdgeMeta; }
final Id appInfo = edge.getTargetNode();
public Observable<Integer> receive( final ApplicationScope scope, final MarkedEdge edge, final UUID eventTimestamp ) { final long maxTimestamp = edge.getTimestamp(); return edgeDeleteRepair.repair( scope, edge, eventTimestamp ) .flatMap( markedEdge -> { Observable<Integer> sourceDelete = edgeMetaRepair .repairSources( scope, edge.getSourceNode(), edge.getType(), maxTimestamp ); Observable<Integer> targetDelete = edgeMetaRepair .repairTargets( scope, edge.getTargetNode(), edge.getType(), maxTimestamp ); return MathObservable.sumInteger( Observable.merge( sourceDelete, targetDelete ) ); } ); } }
/** * TODO: Use Graph to get application_info for an specified Application. */ private org.apache.usergrid.persistence.Entity getApplicationInfo( final UUID appId ) throws Exception { final ApplicationScope managementAppScope = getApplicationScope( CpNamingUtils.MANAGEMENT_APPLICATION_ID ); final EntityCollectionManager managementCollectionManager = entityCollectionManagerFactory.createCollectionManager( managementAppScope ); Observable<MarkedEdge> edgesObservable = getApplicationInfoEdges( appId ); //get the graph for all app infos Observable<org.apache.usergrid.persistence.model.entity.Entity> entityObs = edgesObservable.flatMap( edge -> { final Id appInfoId = edge.getTargetNode(); return managementCollectionManager.load( appInfoId ).filter( entity -> { //check for app id return entity != null ? entity.getId().getUuid().equals( appId ) : false; } ); } ); // don't expect many applications, so we block org.apache.usergrid.persistence.model.entity.Entity applicationInfo = entityObs.toBlocking().lastOrDefault( null ); if ( applicationInfo == null ) { return null; } Class clazz = Schema.getDefaultSchema().getEntityClass( applicationInfo.getId().getType() ); org.apache.usergrid.persistence.Entity entity = EntityFactory.newEntity( applicationInfo.getId().getUuid(), applicationInfo.getId().getType(), clazz ); entity.setProperties( CpEntityMapUtils.toMap( applicationInfo ) ); return entity; }
@Test public void cleanTargetSingleEdge() throws ConnectionException { MarkedEdge edge = createEdge( "source", "test", "target" ); storageEdgeSerialization.writeEdge( scope, edge, UUIDGenerator.newTimeUUID() ).execute(); edgeMetadataSerialization.writeEdge( scope, edge ).execute(); int value = edgeMetaRepair.repairTargets( scope, edge.getTargetNode(), edge.getType(), edge.getTimestamp() ) .toBlocking().single(); assertEquals( "No subtypes removed, edge exists", 1, value ); //now delete the edge storageEdgeSerialization.deleteEdge( scope, edge, UUIDGenerator.newTimeUUID() ).execute(); value = edgeMetaRepair.repairTargets( scope, edge.getTargetNode(), edge.getType(), edge.getTimestamp() ) .toBlocking().single(); assertEquals( "Single subtype should be removed", 0, value ); //now verify they're gone Iterator<String> edgeTypes = edgeMetadataSerialization .getEdgeTypesToTarget( scope, new SimpleSearchEdgeType( edge.getTargetNode(), null, null ) ); assertFalse( "No edge types exist", edgeTypes.hasNext() ); Iterator<String> sourceTypes = edgeMetadataSerialization .getIdTypesToTarget( scope, new SimpleSearchIdType( edge.getTargetNode(), edge.getType(), null, null ) ); assertFalse( "No edge types exist", sourceTypes.hasNext() ); }
@Override public void deleteConnection( ConnectionRef connectionRef ) throws Exception { // First, clean up the dictionary records of the connection EntityRef connectingEntityRef = connectionRef.getSourceRefs(); // source EntityRef connectedEntityRef = connectionRef.getTargetRefs(); // target String connectionType = connectionRef.getTargetRefs().getConnectionType(); if ( logger.isTraceEnabled() ) { logger.trace( "Deleting connection '{}' from source {}:{} \n to target {}:{}", connectionType, connectingEntityRef.getType(), connectingEntityRef.getUuid(), connectedEntityRef.getType(), connectedEntityRef.getUuid() ); } Id entityId = new SimpleId( connectedEntityRef.getUuid(), connectedEntityRef.getType() ); org.apache.usergrid.persistence.model.entity.Entity targetEntity = ( ( CpEntityManager ) em ).load( entityId ); GraphManager gm = managerCache.getGraphManager( applicationScope ); final Id sourceId = new SimpleId( connectingEntityRef.getUuid(), connectingEntityRef.getType() ); final SearchByEdge search = createConnectionSearchByEdge( sourceId, connectionType, targetEntity.getId() ); //delete all the edges and queue their processing gm.loadEdgeVersions( search ).flatMap( returnedEdge -> gm.markEdge( returnedEdge ) ) .doOnNext( returnedEdge -> { if ( !skipIndexingForType( returnedEdge.getSourceNode().getType() ) || !skipIndexingForType( returnedEdge.getTargetNode().getType() ) ) { indexService.queueDeleteEdge(applicationScope, returnedEdge); } }).toBlocking() .lastOrDefault( null ); }
final Id targetId = edge1.getTargetNode();
/** * Test paging by resuming the search from the edge */ @Test public void testPaging() throws ConnectionException { final MarkedEdge edge1 = createEdge( "source", "edge", "target", 0 ); final Id sourceId = edge1.getSourceNode(); final Id targetId = edge1.getTargetNode(); final MarkedEdge edge2 = createEdge( sourceId, "edge", targetId, 1 ); serialization.writeEdge( scope, edge1, UUIDGenerator.newTimeUUID() ).execute(); serialization.writeEdge( scope, edge2, UUIDGenerator.newTimeUUID() ).execute(); long now = System.currentTimeMillis(); //get our edges out by name Iterator<MarkedEdge> results = serialization.getEdgesFromSource( scope, createSearchByEdge( sourceId, "edge", now, edge2 ) ); assertEquals( edge1, results.next() ); assertFalse( results.hasNext() ); //test getting the next edge results = serialization.getEdgesFromSource( scope, createSearchByEdge( sourceId, "edge", now, edge1 ) ); assertFalse( "No results should be returned", results.hasNext() ); //test getting source edges from the target results = serialization.getEdgesToTarget( scope, createSearchByEdge( targetId, "edge", now, edge2 ) ); assertEquals( edge1, results.next() ); assertFalse( results.hasNext() ); results = serialization.getEdgesToTarget( scope, createSearchByEdge( targetId, "edge", now, edge1 ) ); assertFalse( "No results should be returned", results.hasNext() ); //test resume by name }
final Id targetId = edgev1.getTargetNode();