Search in sources :

Example 1 with InlineNodeLabels

use of org.neo4j.kernel.impl.store.InlineNodeLabels in project neo4j by neo4j.

the class NodeRecordCheckTest method shouldReportLabelNotInUse.

@Test
public void shouldReportLabelNotInUse() throws Exception {
    // given
    NodeRecord node = inUse(new NodeRecord(42, false, NONE, NONE));
    new InlineNodeLabels(node).add(1, null, null);
    LabelTokenRecord labelRecordNotInUse = notInUse(new LabelTokenRecord(1));
    add(labelRecordNotInUse);
    add(node);
    // when
    ConsistencyReport.NodeConsistencyReport report = check(node);
    // then
    verify(report).labelNotInUse(labelRecordNotInUse);
}
Also used : NodeRecord(org.neo4j.kernel.impl.store.record.NodeRecord) InlineNodeLabels(org.neo4j.kernel.impl.store.InlineNodeLabels) LabelTokenRecord(org.neo4j.kernel.impl.store.record.LabelTokenRecord) ConsistencyReport(org.neo4j.consistency.report.ConsistencyReport) Test(org.junit.Test)

Example 2 with InlineNodeLabels

use of org.neo4j.kernel.impl.store.InlineNodeLabels in project neo4j by neo4j.

the class NodeRecordCheckTest method shouldReportOutOfOrderLabels.

@Test
public void shouldReportOutOfOrderLabels() throws Exception {
    // given
    final NodeRecord node = inUse(new NodeRecord(42, false, NONE, NONE));
    // We need to do this override so we can put the labels unsorted, since InlineNodeLabels always sorts on insert
    new InlineNodeLabels(node) {

        @Override
        public Collection<DynamicRecord> put(long[] labelIds, NodeStore nodeStore, DynamicRecordAllocator allocator) {
            return putSorted(node, labelIds, nodeStore, allocator);
        }
    }.put(new long[] { 3, 1, 2 }, null, null);
    LabelTokenRecord label1 = inUse(new LabelTokenRecord(1));
    LabelTokenRecord label2 = inUse(new LabelTokenRecord(2));
    LabelTokenRecord label3 = inUse(new LabelTokenRecord(3));
    add(label1);
    add(label2);
    add(label3);
    add(node);
    // when
    ConsistencyReport.NodeConsistencyReport report = check(node);
    // then
    verify(report).labelsOutOfOrder(3, 1);
}
Also used : NodeRecord(org.neo4j.kernel.impl.store.record.NodeRecord) InlineNodeLabels(org.neo4j.kernel.impl.store.InlineNodeLabels) DynamicRecordAllocator(org.neo4j.kernel.impl.store.DynamicRecordAllocator) NodeStore(org.neo4j.kernel.impl.store.NodeStore) Collection(java.util.Collection) LabelTokenRecord(org.neo4j.kernel.impl.store.record.LabelTokenRecord) ConsistencyReport(org.neo4j.consistency.report.ConsistencyReport) Test(org.junit.Test)

Example 3 with InlineNodeLabels

use of org.neo4j.kernel.impl.store.InlineNodeLabels in project neo4j by neo4j.

the class NodeRecordCheckTest method shouldReportDuplicateLabels.

@Test
public void shouldReportDuplicateLabels() throws Exception {
    // given
    NodeRecord node = inUse(new NodeRecord(42, false, NONE, NONE));
    new InlineNodeLabels(node).put(new long[] { 1, 2, 1 }, null, null);
    LabelTokenRecord label1 = inUse(new LabelTokenRecord(1));
    LabelTokenRecord label2 = inUse(new LabelTokenRecord(2));
    add(label1);
    add(label2);
    add(node);
    // when
    ConsistencyReport.NodeConsistencyReport report = check(node);
    // then
    verify(report).labelDuplicate(1);
}
Also used : NodeRecord(org.neo4j.kernel.impl.store.record.NodeRecord) InlineNodeLabels(org.neo4j.kernel.impl.store.InlineNodeLabels) LabelTokenRecord(org.neo4j.kernel.impl.store.record.LabelTokenRecord) ConsistencyReport(org.neo4j.consistency.report.ConsistencyReport) Test(org.junit.Test)

Example 4 with InlineNodeLabels

use of org.neo4j.kernel.impl.store.InlineNodeLabels in project neo4j by neo4j.

the class NodeRecordCheckTest method shouldProperlyReportOutOfOrderLabelsThatAreFarAway.

@Test
public void shouldProperlyReportOutOfOrderLabelsThatAreFarAway() throws Exception {
    // given
    final NodeRecord node = inUse(new NodeRecord(42, false, NONE, NONE));
    // We need to do this override so we can put the labels unsorted, since InlineNodeLabels always sorts on insert
    new InlineNodeLabels(node) {

        @Override
        public Collection<DynamicRecord> put(long[] labelIds, NodeStore nodeStore, DynamicRecordAllocator allocator) {
            return putSorted(node, labelIds, nodeStore, allocator);
        }
    }.put(new long[] { 1, 18, 13, 14, 15, 16, 12 }, null, null);
    LabelTokenRecord label1 = inUse(new LabelTokenRecord(1));
    LabelTokenRecord label12 = inUse(new LabelTokenRecord(12));
    LabelTokenRecord label13 = inUse(new LabelTokenRecord(13));
    LabelTokenRecord label14 = inUse(new LabelTokenRecord(14));
    LabelTokenRecord label15 = inUse(new LabelTokenRecord(15));
    LabelTokenRecord label16 = inUse(new LabelTokenRecord(16));
    LabelTokenRecord label18 = inUse(new LabelTokenRecord(18));
    add(label1);
    add(label12);
    add(label13);
    add(label14);
    add(label15);
    add(label16);
    add(label18);
    add(node);
    // when
    ConsistencyReport.NodeConsistencyReport report = check(node);
    // then
    verify(report).labelsOutOfOrder(18, 13);
    verify(report).labelsOutOfOrder(16, 12);
}
Also used : NodeRecord(org.neo4j.kernel.impl.store.record.NodeRecord) InlineNodeLabels(org.neo4j.kernel.impl.store.InlineNodeLabels) DynamicRecordAllocator(org.neo4j.kernel.impl.store.DynamicRecordAllocator) NodeStore(org.neo4j.kernel.impl.store.NodeStore) Collection(java.util.Collection) LabelTokenRecord(org.neo4j.kernel.impl.store.record.LabelTokenRecord) ConsistencyReport(org.neo4j.consistency.report.ConsistencyReport) Test(org.junit.Test)

Example 5 with InlineNodeLabels

use of org.neo4j.kernel.impl.store.InlineNodeLabels in project neo4j by neo4j.

the class NodeCheckerTest method testDynamicRecordChain.

private <T extends ConsistencyReport> void testDynamicRecordChain(Consumer<NodeRecord> vandal, Class<T> expectedReportClass, Consumer<T> report) throws Exception {
    // given
    try (AutoCloseable ignored = tx()) {
        long nodeId = nodeStore.nextId(CursorContext.NULL);
        NodeRecord node = new NodeRecord(nodeId).initialize(true, NULL, false, NULL, 0);
        new InlineNodeLabels(node).put(toLongs(otherLabels), nodeStore, nodeStore.getDynamicLabelStore(), CursorContext.NULL, INSTANCE);
        assertThat(node.getDynamicLabelRecords().size()).isGreaterThanOrEqualTo(2);
        nodeStore.updateRecord(node, CursorContext.NULL);
        vandal.accept(node);
        nodeStore.updateRecord(node, CursorContext.NULL);
    }
    // when
    check();
    // then
    expect(expectedReportClass, report);
}
Also used : NodeRecord(org.neo4j.kernel.impl.store.record.NodeRecord) InlineNodeLabels(org.neo4j.kernel.impl.store.InlineNodeLabels)

Aggregations

InlineNodeLabels (org.neo4j.kernel.impl.store.InlineNodeLabels)6 NodeRecord (org.neo4j.kernel.impl.store.record.NodeRecord)6 Test (org.junit.Test)4 ConsistencyReport (org.neo4j.consistency.report.ConsistencyReport)4 LabelTokenRecord (org.neo4j.kernel.impl.store.record.LabelTokenRecord)4 Collection (java.util.Collection)2 DynamicRecordAllocator (org.neo4j.kernel.impl.store.DynamicRecordAllocator)2 NodeStore (org.neo4j.kernel.impl.store.NodeStore)2