コード例 #1
0
 public void checkConsistency(Org.Neo4j.Kernel.impl.store.record.RelationshipRecord relationship, CheckerEngine <Org.Neo4j.Kernel.impl.store.record.RelationshipRecord, Org.Neo4j.Consistency.report.ConsistencyReport_RelationshipConsistencyReport> engine, Org.Neo4j.Consistency.store.RecordAccess records)
 {
     Org.Neo4j.Consistency.checking.cache.CacheAccess_Client cacheAccess = records.cacheAccess().client(); if (!endOfChain(relationship))
     {
         Org.Neo4j.Consistency.store.RecordReference <Org.Neo4j.Kernel.impl.store.record.RelationshipRecord> referred = null; long reference = valueFrom(relationship); long nodeId = -1; if (records.shouldCheck(reference, Org.Neo4j.Consistency.checking.full.MultiPassStore.RELATIONSHIPS))
         {
             nodeId = NODE == NodeField.SOURCE ? relationship.getFirstNode() : relationship.getSecondNode(); if (Org.Neo4j.Kernel.impl.store.record.Record.NO_NEXT_RELATIONSHIP.@is(cacheAccess.getFromCache(nodeId, SLOT_RELATIONSHIP_ID)))
             {
                 referred = Org.Neo4j.Consistency.store.RecordReference_SkippingReference.skipReference(); cacheAccess.incAndGetCount(Org.Neo4j.Consistency.statistics.Counts_Type.noCacheSkip);
             }
             else
             {
                 referred = buildFromCache(relationship, reference, nodeId, records); if (referred == Org.Neo4j.Consistency.store.RecordReference_SkippingReference.skipReference <Org.Neo4j.Kernel.impl.store.record.RelationshipRecord>())
                 {
                     cacheAccess.incAndGetCount(Org.Neo4j.Consistency.statistics.Counts_Type.skipCheck);
                 }
             }
         }
         else
         {
             if (referenceShouldBeSkipped(relationship, reference, records))
             {
                 referred = Org.Neo4j.Consistency.store.RecordReference_SkippingReference.skipReference();
             }
         }
         engine.comparativeCheck(referred, this); if (referred != Org.Neo4j.Consistency.store.RecordReference_SkippingReference.skipReference <Org.Neo4j.Kernel.impl.store.record.RelationshipRecord>())
         {
             cacheAccess.incAndGetCount(Org.Neo4j.Consistency.statistics.Counts_Type.@checked); linkChecked(cacheAccess);
         }
     }
     else
     {
         cacheAccess.incAndGetCount(Org.Neo4j.Consistency.statistics.Counts_Type.@checked); linkChecked(cacheAccess);
     }
 }
コード例 #2
0
            public void checkReference(Org.Neo4j.Kernel.impl.store.record.RelationshipRecord record, Org.Neo4j.Kernel.impl.store.record.RelationshipRecord referred, CheckerEngine <Org.Neo4j.Kernel.impl.store.record.RelationshipRecord, Org.Neo4j.Consistency.report.ConsistencyReport_RelationshipConsistencyReport> engine, Org.Neo4j.Consistency.store.RecordAccess records)
            {
                NodeField field = NodeField.select(referred, node(record)); if (field == null)

                {
                    otherNode(engine.report(), referred);
                }
                else
                {
                    Org.Neo4j.Consistency.checking.cache.CacheAccess_Client cacheAccess = records.cacheAccess().client(); if (other(field, referred) != record.getId())
                    {
                        if (referred.isCreated())
                        {
                            Org.Neo4j.Consistency.store.RecordReference <Org.Neo4j.Kernel.impl.store.record.RelationshipRecord> refRel = records.relationship(referred.getId()); referred = (Org.Neo4j.Kernel.impl.store.record.RelationshipRecord)((Org.Neo4j.Consistency.store.DirectRecordReference)refRel).record(); checkReference(record, referred, engine, records); cacheAccess.incAndGetCount(Org.Neo4j.Consistency.statistics.Counts_Type.skipBackup);
                        }
                        else
                        {
                            cacheAccess.incAndGetCount(Org.Neo4j.Consistency.statistics.Counts_Type.checkErrors); noBackReference(engine == null ? null : engine.report(), referred);
                        }
                    }
                    else
                    {
                        if (!referenceShouldBeSkipped(record, referred.getId(), records) && !referred.inUse())
                        {
                            engine.report().notUsedRelationshipReferencedInChain(referred);
                        }
                        if (referred.isCreated())
                        {
                            cacheAccess.clearCache(node(record));
                        }
                    }
                }
            }
コード例 #3
0
 protected internal override void CheckRelationship(RecordStore <RelationshipRecord> store, RelationshipRecord rel, RecordCheck <RelationshipRecord, Org.Neo4j.Consistency.report.ConsistencyReport_RelationshipConsistencyReport> checker)
 {
     if (_stage != null && (_stage == CheckStage.Stage6RSForward || _stage == CheckStage.Stage7RSBackward))
     {
         long id = rel.Id;
         Org.Neo4j.Consistency.checking.cache.CacheAccess_Client client = CacheAccess.client();
         CountLinks(id, rel.FirstNextRel, client);
         CountLinks(id, rel.FirstPrevRel, client);
         CountLinks(id, rel.SecondNextRel, client);
         CountLinks(id, rel.SecondPrevRel, client);
     }
     _report.forRelationship(rel, checker);
 }
コード例 #4
0
 public virtual void CountLinks(long id1, long id2, Org.Neo4j.Consistency.checking.cache.CacheAccess_Client client)
 {
     Org.Neo4j.Consistency.statistics.Counts_Type type = null;
     if (id2 == -1)
     {
         type = Org.Neo4j.Consistency.statistics.Counts_Type.NullLinks;
     }
     else if (id2 > id1)
     {
         type = Org.Neo4j.Consistency.statistics.Counts_Type.ForwardLinks;
     }
     else
     {
         type = Org.Neo4j.Consistency.statistics.Counts_Type.BackLinks;
     }
     client.IncAndGetCount(type);
 }
コード例 #5
0
        public override void Process(NodeRecord nodeRecord)
        {
            _reporter.forNode(nodeRecord, _nodeIndexCheck);
            Org.Neo4j.Consistency.checking.cache.CacheAccess_Client client = _cacheAccess.client();
            using (MandatoryProperties.Check <NodeRecord, ConsistencyReport_NodeConsistencyReport> mandatoryCheck = _mandatoryProperties.apply(nodeRecord))
            {
                IEnumerable <PropertyRecord> properties = client.PropertiesFromCache;

                // We do this null-check here because even if nodeIndexCheck should provide the properties for us,
                // or an empty list at least, it may fail in one way or another and exception be caught by
                // broad exception handler in reporter. The caught exception will produce an ERROR so it will not
                // go by unnoticed.
                if (properties != null)
                {
                    foreach (PropertyRecord property in properties)
                    {
                        _reporter.forProperty(property, _propertyCheck);
                        mandatoryCheck.Receive(ChainCheck.keys(property));
                    }
                }
            }
        }
コード例 #6
0
 internal Org.Neo4j.Consistency.store.RecordReference <Org.Neo4j.Kernel.impl.store.record.RelationshipRecord> buildFromCache(Org.Neo4j.Kernel.impl.store.record.RelationshipRecord relationship, long reference, long nodeId, Org.Neo4j.Consistency.store.RecordAccess records)
 {
     Org.Neo4j.Consistency.checking.cache.CacheAccess_Client cacheAccess = records.cacheAccess().client(); if (!cacheAccess.withinBounds(nodeId))
     {
         cacheAccess.incAndGetCount(Org.Neo4j.Consistency.statistics.Counts_Type.correctSkipCheck); return(Org.Neo4j.Consistency.store.RecordReference_SkippingReference.skipReference());
     }
     if (reference != cacheAccess.getFromCache(nodeId, SLOT_RELATIONSHIP_ID))
     {
         if (referenceShouldBeSkipped(relationship, reference, records))
         {
             cacheAccess.incAndGetCount(Org.Neo4j.Consistency.statistics.Counts_Type.correctSkipCheck); return(Org.Neo4j.Consistency.store.RecordReference_SkippingReference.skipReference());
         }
         cacheAccess.incAndGetCount(Org.Neo4j.Consistency.statistics.Counts_Type.missCheck); return(records.relationship(reference));
     }
     Org.Neo4j.Kernel.impl.store.record.RelationshipRecord rel = new Org.Neo4j.Kernel.impl.store.record.RelationshipRecord(reference); rel.setCreated(); if (cacheAccess.getFromCache(nodeId, SLOT_SOURCE_OR_TARGET) == SOURCE)
     {
         rel.setFirstNode(nodeId);
     }
     else
     {
         rel.setSecondNode(nodeId);
     } rel = populateRelationshipFromCache(nodeId, rel, cacheAccess); return(new Org.Neo4j.Consistency.store.DirectRecordReference <>(rel, records));
 }
コード例 #7
0
            public override void Check(NodeRecord record, CheckerEngine <NodeRecord, ConsistencyReport_NodeConsistencyReport> engine, RecordAccess records)
            {
                if (CountUpdateCondition.test(record))
                {
                    if (record.InUse())
                    {
                        Org.Neo4j.Consistency.checking.cache.CacheAccess_Client client = records.CacheAccess().client();
                        client.PutToCacheSingle(record.Id, SLOT_IN_USE, 1);
                        client.PutToCacheSingle(record.Id, SLOT_LABEL_FIELD, record.LabelField);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.util.Set<long> labels = labelsFor(nodeStore, engine, records, record.getId());
                        ISet <long> labels = LabelsFor(NodeStore, engine, records, record.Id);
                        lock ( Counts )
                        {
                            Counts.addToValue(nodeKey(WILDCARD), 1);
                            foreach (long label in labels)
                            {
                                Counts.addToValue(nodeKey(( int )label), 1);
                            }
                        }
                    }
                }
                Inner.check(record, engine, records);
            }
コード例 #8
0
 internal abstract void linkChecked(Org.Neo4j.Consistency.checking.cache.CacheAccess_Client cacheAccess);
コード例 #9
0
 internal abstract Org.Neo4j.Kernel.impl.store.record.RelationshipRecord populateRelationshipFromCache(long nodeId, Org.Neo4j.Kernel.impl.store.record.RelationshipRecord rel, Org.Neo4j.Consistency.checking.cache.CacheAccess_Client cacheAccess);
コード例 #10
0
            public override void Check(RelationshipRecord record, CheckerEngine <RelationshipRecord, ConsistencyReport_RelationshipConsistencyReport> engine, RecordAccess records)
            {
                if (CountUpdateCondition.test(record))
                {
                    if (record.InUse())
                    {
                        Org.Neo4j.Consistency.checking.cache.CacheAccess_Client cacheAccess = records.CacheAccess().client();
                        ISet <long> firstNodeLabels;
                        ISet <long> secondNodeLabels;
                        long        firstLabelsField = cacheAccess.GetFromCache(record.FirstNode, SLOT_LABEL_FIELD);
                        if (NodeLabelsField.fieldPointsToDynamicRecordOfLabels(firstLabelsField))
                        {
                            firstNodeLabels = LabelsFor(NodeStore, engine, records, record.FirstNode);
                        }
                        else
                        {
                            firstNodeLabels = NodeLabelReader.GetListOfLabels(firstLabelsField);
                        }
                        long secondLabelsField = cacheAccess.GetFromCache(record.SecondNode, SLOT_LABEL_FIELD);
                        if (NodeLabelsField.fieldPointsToDynamicRecordOfLabels(secondLabelsField))
                        {
                            secondNodeLabels = LabelsFor(NodeStore, engine, records, record.SecondNode);
                        }
                        else
                        {
                            secondNodeLabels = NodeLabelReader.GetListOfLabels(secondLabelsField);
                        }
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final int type = record.getType();
                        int type = record.Type;
                        lock ( Counts )
                        {
                            Counts.addToValue(relationshipKey(WILDCARD, WILDCARD, WILDCARD), 1);
                            Counts.addToValue(relationshipKey(WILDCARD, type, WILDCARD), 1);
                            if (firstNodeLabels != null)
                            {
                                foreach (long firstLabel in firstNodeLabels)
                                {
                                    Counts.addToValue(relationshipKey(( int )firstLabel, WILDCARD, WILDCARD), 1);
                                    Counts.addToValue(relationshipKey(( int )firstLabel, type, WILDCARD), 1);
                                }
                            }
                            if (secondNodeLabels != null)
                            {
                                foreach (long secondLabel in secondNodeLabels)
                                {
                                    Counts.addToValue(relationshipKey(WILDCARD, WILDCARD, ( int )secondLabel), 1);
                                    Counts.addToValue(relationshipKey(WILDCARD, type, ( int )secondLabel), 1);
                                }
                            }
                            if (COMPUTE_DOUBLE_SIDED_RELATIONSHIP_COUNTS)
                            {
                                foreach (long firstLabel in firstNodeLabels)
                                {
                                    foreach (long secondLabel in secondNodeLabels)
                                    {
                                        Counts.addToValue(relationshipKey(( int )firstLabel, WILDCARD, ( int )secondLabel), 1);
                                        Counts.addToValue(relationshipKey(( int )firstLabel, type, ( int )secondLabel), 1);
                                    }
                                }
                            }
                        }
                    }
                }
                Inner.check(record, engine, records);
            }