コード例 #1
0
ファイル: CountsComputerTest.cs プロジェクト: Neo4Net/Neo4Net
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldCreateACountsStoreWhenThereAreUnusedNodeRecordsInTheDB()
        public virtual void ShouldCreateACountsStoreWhenThereAreUnusedNodeRecordsInTheDB()
        {
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @SuppressWarnings("deprecation") final org.neo4j.kernel.internal.GraphDatabaseAPI db = (org.neo4j.kernel.internal.GraphDatabaseAPI) dbBuilder.newGraphDatabase();
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
            GraphDatabaseAPI db = ( GraphDatabaseAPI )_dbBuilder.newGraphDatabase();

            using (Transaction tx = Db.beginTx())
            {
                Db.createNode(Label.label("A"));
                Db.createNode(Label.label("C"));
                Node node = Db.createNode(Label.label("D"));
                Db.createNode();
                node.Delete();
                tx.Success();
            }
            long lastCommittedTransactionId = GetLastTxId(db);

            Db.shutdown();

            RebuildCounts(lastCommittedTransactionId);

            using (Lifespan life = new Lifespan())
            {
                CountsTracker store = life.Add(CreateCountsTracker());
                assertEquals(BASE_TX_ID + 1 + 1 + 1 + 1, store.TxId());
                assertEquals(3, store.TotalEntriesStored());
                assertEquals(3, Get(store, nodeKey(-1)));
                assertEquals(1, Get(store, nodeKey(0)));
                assertEquals(1, Get(store, nodeKey(1)));
                assertEquals(0, Get(store, nodeKey(2)));
                assertEquals(0, Get(store, nodeKey(3)));
            }
        }
コード例 #2
0
ファイル: CountsRotationTest.cs プロジェクト: Neo4Net/Neo4Net
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldRotateCountsStoreWhenClosingTheDatabase()
        public virtual void ShouldRotateCountsStoreWhenClosingTheDatabase()
        {
            // GIVEN
            GraphDatabaseAPI db = ( GraphDatabaseAPI )_dbBuilder.newGraphDatabase();

            using (Transaction tx = Db.beginTx())
            {
                Db.createNode(_a);
                tx.Success();
            }

            // WHEN
            Db.shutdown();

            // THEN
            assertTrue(_fs.fileExists(AlphaStoreFile()));
            assertTrue(_fs.fileExists(BetaStoreFile()));

            using (Lifespan life = new Lifespan())
            {
                CountsTracker store = life.Add(CreateCountsTracker(_pageCache));
                // a transaction for creating the label and a transaction for the node
                assertEquals(BASE_TX_ID + 1 + 1, store.TxId());
                assertEquals(INITIAL_MINOR_VERSION, store.MinorVersion());
                // one for all nodes and one for the created "A" label
                assertEquals(1 + 1, store.TotalEntriesStored());
                assertEquals(1 + 1, AllRecords(store).Count);
            }
        }
コード例 #3
0
ファイル: CountsRotationTest.cs プロジェクト: Neo4Net/Neo4Net
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldCreateEmptyCountsTrackerStoreWhenCreatingDatabase()
        public virtual void ShouldCreateEmptyCountsTrackerStoreWhenCreatingDatabase()
        {
            // GIVEN
            GraphDatabaseAPI db = ( GraphDatabaseAPI )_dbBuilder.newGraphDatabase();

            // WHEN
            Db.shutdown();

            // THEN
            assertTrue(_fs.fileExists(AlphaStoreFile()));
            assertFalse(_fs.fileExists(BetaStoreFile()));

            using (Lifespan life = new Lifespan())
            {
                CountsTracker store = life.Add(CreateCountsTracker(_pageCache));

                assertEquals(BASE_TX_ID, store.TxId());
                assertEquals(INITIAL_MINOR_VERSION, store.MinorVersion());
                assertEquals(0, store.TotalEntriesStored());
                assertEquals(0, AllRecords(store).Count);
            }

            using (Lifespan life = new Lifespan())
            {
                CountsTracker store = life.Add(CreateCountsTracker(_pageCache));
                assertEquals(BASE_TX_ID, store.TxId());
                assertEquals(INITIAL_MINOR_VERSION, store.MinorVersion());
                assertEquals(0, store.TotalEntriesStored());
                assertEquals(0, AllRecords(store).Count);
            }
        }
コード例 #4
0
ファイル: CountsRotationTest.cs プロジェクト: Neo4Net/Neo4Net
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldRotateCountsStoreWhenRotatingLog() throws java.io.IOException
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldRotateCountsStoreWhenRotatingLog()
        {
            // GIVEN
            GraphDatabaseAPI db = ( GraphDatabaseAPI )_dbBuilder.newGraphDatabase();

            // WHEN doing a transaction (actually two, the label-mini-tx also counts)
            using (Transaction tx = Db.beginTx())
            {
                Db.createNode(_b);
                tx.Success();
            }
            // and rotating the log (which implies flushing)
            CheckPoint(db);
            // and creating another node after it
            using (Transaction tx = Db.beginTx())
            {
                Db.createNode(_c);
                tx.Success();
            }

            // THEN
            assertTrue(_fs.fileExists(AlphaStoreFile()));
            assertTrue(_fs.fileExists(BetaStoreFile()));

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.io.pagecache.PageCache pageCache = db.getDependencyResolver().resolveDependency(org.neo4j.io.pagecache.PageCache.class);
            PageCache pageCache = Db.DependencyResolver.resolveDependency(typeof(PageCache));

            using (Lifespan life = new Lifespan())
            {
                CountsTracker store = life.Add(CreateCountsTracker(pageCache));
                // NOTE since the rotation happens before the second transaction is committed we do not see those changes
                // in the stats
                // a transaction for creating the label and a transaction for the node
                assertEquals(BASE_TX_ID + 1 + 1, store.TxId());
                assertEquals(INITIAL_MINOR_VERSION, store.MinorVersion());
                // one for all nodes and one for the created "B" label
                assertEquals(1 + 1, store.TotalEntriesStored());
                assertEquals(1 + 1, AllRecords(store).Count);
            }

            // on the other hand the tracker should read the correct value by merging data on disk and data in memory
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final CountsTracker tracker = db.getDependencyResolver().resolveDependency(org.neo4j.kernel.impl.storageengine.impl.recordstorage.RecordStorageEngine.class).testAccessNeoStores().getCounts();
            CountsTracker tracker = Db.DependencyResolver.resolveDependency(typeof(RecordStorageEngine)).testAccessNeoStores().Counts;

            assertEquals(1 + 1, tracker.NodeCount(-1, newDoubleLongRegister()).readSecond());

            int labelId;

            using (Transaction tx = Db.beginTx())
            {
                KernelTransaction transaction = Db.DependencyResolver.resolveDependency(typeof(ThreadToStatementContextBridge)).getKernelTransactionBoundToThisThread(true);
                labelId = transaction.TokenRead().nodeLabel(_c.name());
            }
            assertEquals(1, tracker.NodeCount(labelId, newDoubleLongRegister()).readSecond());

            Db.shutdown();
        }
コード例 #5
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test @Resources.Life(STARTED) public void shouldSupportTransactionsAppliedOutOfOrderOnRotation() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldSupportTransactionsAppliedOutOfOrderOnRotation()
        {
            // given
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final CountsTracker tracker = resourceManager.managed(newTracker());
            CountsTracker tracker = ResourceManager.managed(NewTracker());

            using (Org.Neo4j.Kernel.Impl.Api.CountsAccessor_Updater tx = tracker.Apply(2).get())
            {
                tx.IncrementNodeCount(1, 1);
            }
            using (Org.Neo4j.Kernel.Impl.Api.CountsAccessor_Updater tx = tracker.Apply(4).get())
            {
                tx.IncrementNodeCount(1, 1);
            }

            // when
            Future <long> rotated = Threading.executeAndAwait(new Rotation(2), tracker, thread =>
            {
                switch (thread.State)
                {
                case BLOCKED:
                case WAITING:
                case TIMED_WAITING:
                case TERMINATED:
                    return(true);

                default:
                    return(false);
                }
            }, 10, SECONDS);

            using (Org.Neo4j.Kernel.Impl.Api.CountsAccessor_Updater tx = tracker.Apply(5).get())
            {
                tx.IncrementNodeCount(1, 1);
            }
            using (Org.Neo4j.Kernel.Impl.Api.CountsAccessor_Updater tx = tracker.Apply(3).get())
            {
                tx.IncrementNodeCount(1, 1);
            }

            // then
            assertEquals("rotated transaction", 4, rotated.get().longValue());
            assertEquals("stored transaction", 4, tracker.TxId());

            // the value in memory
            assertEquals("count", 4, tracker.NodeCount(1, Registers.newDoubleLongRegister()).readSecond());

            // the value in the store
            CountsVisitor visitor = mock(typeof(CountsVisitor));

            tracker.VisitFile(tracker.CurrentFile(), visitor);
            verify(visitor).visitNodeCount(1, 3);
            verifyNoMoreInteractions(visitor);

            assertEquals("final rotation", 5, tracker.Rotate(5));
        }
コード例 #6
0
ファイル: CountsComputerTest.cs プロジェクト: Neo4Net/Neo4Net
 private void CheckEmptyCountStore()
 {
     using (Lifespan life = new Lifespan())
     {
         CountsTracker store = life.Add(CreateCountsTracker());
         assertEquals(BASE_TX_ID, store.TxId());
         assertEquals(0, store.TotalEntriesStored());
     }
 }
コード例 #7
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test @Resources.Life(STARTED) public void shouldNotRotateIfNoDataChanges() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldNotRotateIfNoDataChanges()
        {
            // given
            CountsTracker tracker = ResourceManager.managed(NewTracker());
            File          before  = tracker.CurrentFile();

            // when
            tracker.Rotate(tracker.TxId());

            // then
            assertSame("not rotated", before, tracker.CurrentFile());
        }
コード例 #8
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test @Resources.Life(STARTED) public void shouldRotateOnDataChangesEvenIfTransactionIsUnchanged() throws Exception
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldRotateOnDataChangesEvenIfTransactionIsUnchanged()
        {
            // given
            CountsTracker tracker = ResourceManager.managed(NewTracker());
            File          before  = tracker.CurrentFile();

            using (Org.Neo4j.Kernel.Impl.Api.CountsAccessor_IndexStatsUpdater updater = tracker.UpdateIndexCounts())
            {
                updater.IncrementIndexUpdates(7, 100);
            }

            // when
            tracker.Rotate(tracker.TxId());

            // then
            assertNotEquals("rotated", before, tracker.CurrentFile());
        }
コード例 #9
0
ファイル: CountsComputerTest.cs プロジェクト: Neo4Net/Neo4Net
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldCreateACountStoreWhenDBContainsDenseNodes()
        public virtual void ShouldCreateACountStoreWhenDBContainsDenseNodes()
        {
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @SuppressWarnings("deprecation") final org.neo4j.kernel.internal.GraphDatabaseAPI db = (org.neo4j.kernel.internal.GraphDatabaseAPI) dbBuilder.setConfig(org.neo4j.graphdb.factory.GraphDatabaseSettings.dense_node_threshold, "2").newGraphDatabase();
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
            GraphDatabaseAPI db = ( GraphDatabaseAPI )_dbBuilder.setConfig(GraphDatabaseSettings.dense_node_threshold, "2").newGraphDatabase();

            using (Transaction tx = Db.beginTx())
            {
                Node nodeA = Db.createNode(Label.label("A"));
                Node nodeC = Db.createNode(Label.label("C"));
                Node nodeD = Db.createNode(Label.label("D"));
                nodeA.CreateRelationshipTo(nodeA, RelationshipType.withName("TYPE1"));
                nodeA.CreateRelationshipTo(nodeC, RelationshipType.withName("TYPE2"));
                nodeA.CreateRelationshipTo(nodeD, RelationshipType.withName("TYPE3"));
                nodeD.CreateRelationshipTo(nodeC, RelationshipType.withName("TYPE4"));
                tx.Success();
            }
            long lastCommittedTransactionId = GetLastTxId(db);

            Db.shutdown();

            RebuildCounts(lastCommittedTransactionId);

            using (Lifespan life = new Lifespan())
            {
                CountsTracker store = life.Add(CreateCountsTracker());
                assertEquals(BASE_TX_ID + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1, store.TxId());
                assertEquals(22, store.TotalEntriesStored());
                assertEquals(3, Get(store, nodeKey(-1)));
                assertEquals(1, Get(store, nodeKey(0)));
                assertEquals(1, Get(store, nodeKey(1)));
                assertEquals(1, Get(store, nodeKey(2)));
                assertEquals(0, Get(store, nodeKey(3)));
                assertEquals(4, Get(store, relationshipKey(-1, -1, -1)));
                assertEquals(1, Get(store, relationshipKey(-1, 0, -1)));
                assertEquals(1, Get(store, relationshipKey(-1, 1, -1)));
                assertEquals(1, Get(store, relationshipKey(-1, 2, -1)));
                assertEquals(1, Get(store, relationshipKey(-1, 3, -1)));
                assertEquals(0, Get(store, relationshipKey(-1, 4, -1)));
                assertEquals(1, Get(store, relationshipKey(-1, 1, 1)));
                assertEquals(2, Get(store, relationshipKey(-1, -1, 1)));
                assertEquals(3, Get(store, relationshipKey(0, -1, -1)));
            }
        }
コード例 #10
0
ファイル: CountsRotationTest.cs プロジェクト: Neo4Net/Neo4Net
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void rotationShouldNotCauseUnmappedFileProblem() throws java.io.IOException
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void RotationShouldNotCauseUnmappedFileProblem()
        {
            // GIVEN
            GraphDatabaseAPI db = ( GraphDatabaseAPI )_dbBuilder.newGraphDatabase();

            DependencyResolver  resolver      = Db.DependencyResolver;
            RecordStorageEngine storageEngine = resolver.ResolveDependency(typeof(RecordStorageEngine));
            CountsTracker       countStore    = storageEngine.TestAccessNeoStores().Counts;

            AtomicBoolean workerContinueFlag = new AtomicBoolean(true);
            AtomicLong    lookupsCounter     = new AtomicLong();
            int           rotations          = 100;

            for (int i = 0; i < 5; i++)
            {
                _threadingRule.execute(CountStoreLookup(workerContinueFlag, lookupsCounter), countStore);
            }

            long startTxId = countStore.TxId();

            for (int i = 1; (i < rotations) || (lookupsCounter.get() == 0); i++)
            {
                using (Transaction tx = Db.beginTx())
                {
                    Db.createNode(_b);
                    tx.Success();
                }
                CheckPoint(db);
            }
            workerContinueFlag.set(false);

            assertEquals("Should perform at least 100 rotations.", rotations, Math.Min(rotations, countStore.TxId() - startTxId));
            assertTrue("Should perform more then 0 lookups without exceptions.", lookupsCounter.get() > 0);

            Db.shutdown();
        }