Ejemplo n.º 1
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: protected void performReadOrUpdate(java.util.concurrent.ThreadLocalRandom rng, boolean updateCounter, int pf_flags) throws java.io.IOException
            protected internal override void performReadOrUpdate(ThreadLocalRandom rng, bool updateCounter, int pfFlags)
            {
                try
                {
                    int   pageCount = rng.Next(1, _maxCursorsPerThread);
                    int[] pageIds   = new int[pageCount];
                    for (int j = 0; j < pageCount; j++)
                    {
                        pageIds[j] = rng.Next(0, _filePages);
                    }
                    PageCursor[] cursors = new PageCursor[pageCount];
                    for (int j = 0; j < pageCount; j++)
                    {
                        cursors[j] = _pagedFile.io(pageIds[j], pfFlags);
                        assertTrue(cursors[j].Next());
                    }
                    for (int j = 0; j < pageCount; j++)
                    {
                        int        pageId = pageIds[j];
                        PageCursor cursor = cursors[j];
                        int        counter;
                        do
                        {
                            cursor.Offset = offset;
                            counter       = cursor.Int;
                        } while (cursor.ShouldRetry());
                        string lockName = updateCounter ? "PF_SHARED_WRITE_LOCK" : "PF_SHARED_READ_LOCK";
                        string reason   = string.Format("inconsistent page read from filePageId = {0}, with {1}, workerId = {2} [t:{3}]", pageId, lockName, threadId, Thread.CurrentThread.Id);
                        assertThat(reason, counter, @is(pageCounts[pageId]));
                        if (updateCounter)
                        {
                            counter++;
                            pageCounts[pageId]++;
                            cursor.Offset = offset;
                            cursor.PutInt(counter);
                        }
                    }
                    foreach (PageCursor cursor in cursors)
                    {
                        cursor.Close();
                    }
                }
                catch (Exception throwable)
                {
                    _shouldStop.set(true);
                    throw throwable;
                }
            }
Ejemplo n.º 2
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: protected void performReadOrUpdate(java.util.concurrent.ThreadLocalRandom rng, boolean updateCounter, int pf_flags) throws java.io.IOException
            protected internal override void performReadOrUpdate(ThreadLocalRandom rng, bool updateCounter, int pfFlags)
            {
                int pageId = rng.Next(0, _filePages);

                using (PageCursor cursor = _pagedFile.io(pageId, pfFlags))
                {
                    int counter;
                    try
                    {
                        assertTrue(cursor.Next());
                        do
                        {
                            cursor.Offset = offset;
                            counter       = cursor.Int;
                        } while (cursor.ShouldRetry());
                        string lockName = updateCounter ? "PF_SHARED_WRITE_LOCK" : "PF_SHARED_READ_LOCK";
                        string reason   = string.Format("inconsistent page read from filePageId:{0}, with {1}, threadId:{2}", pageId, lockName, Thread.CurrentThread.Id);
                        assertThat(reason, counter, @is(pageCounts[pageId]));
                    }
                    catch (Exception throwable)
                    {
                        _shouldStop.set(true);
                        throw throwable;
                    }
                    if (updateCounter)
                    {
                        counter++;
                        pageCounts[pageId]++;
                        cursor.Offset = offset;
                        cursor.PutInt(counter);
                    }
                    if (cursor.CheckAndClearBoundsFlag())
                    {
                        _shouldStop.set(true);
                        throw new System.IndexOutOfRangeException("offset = " + offset + ", filPageId:" + pageId + ", threadId: " + threadId + ", updateCounter = " + updateCounter);
                    }
                }
            }