Пример #1
0
        public void ShouldVerifyBufferAlignment()
        {
            var buffer = new UnsafeBuffer(BufferUtil.AllocateDirect(1024));

            try
            {
                buffer.VerifyAlignment();
            }
            catch (InvalidOperationException ex)
            {
                Assert.Fail("All buffers should be aligned " + ex);
            }
        }
Пример #2
0
        public void ShouldVerifyBufferAlignment()
        {
            var buffer = new UnsafeBuffer(new byte[1024]);

            try
            {
                buffer.VerifyAlignment();
            }
            catch (InvalidOperationException ex)
            {
                Assert.Fail("All buffers should be aligned " + ex);
            }
        }
Пример #3
0
        public LogBuffers(string logFileName, MapMode mapMode)
        {
            var fileInfo = new FileInfo(logFileName);

            var logLength  = fileInfo.Length;
            var termLength = LogBufferDescriptor.ComputeTermLength(logLength);

            LogBufferDescriptor.CheckTermLength(termLength);

            _termLength = termLength;

            // if log length exceeds MAX_INT we need multiple mapped buffers, (see FileChannel.map doc).
            if (logLength < int.MaxValue)
            {
                var mappedBuffer = IoUtil.MapExistingFile(logFileName, mapMode);

                _mappedByteBuffers = new[] { mappedBuffer };

                for (var i = 0; i < LogBufferDescriptor.PARTITION_COUNT; i++)
                {
                    termBuffers[i] = new UnsafeBuffer(mappedBuffer.Pointer, i * termLength, termLength);
                }

                logMetaDataBuffer = new UnsafeBuffer(mappedBuffer.Pointer, (int)(logLength - LogBufferDescriptor.LOG_META_DATA_LENGTH), LogBufferDescriptor.LOG_META_DATA_LENGTH);
            }
            else
            {
                _mappedByteBuffers = new MappedByteBuffer[LogBufferDescriptor.PARTITION_COUNT + 1];
                var memoryMappedFile = IoUtil.OpenMemoryMappedFile(logFileName, mapMode);

                for (var i = 0; i < LogBufferDescriptor.PARTITION_COUNT; i++)
                {
                    _mappedByteBuffers[i] = new MappedByteBuffer(memoryMappedFile, termLength * (long)i, termLength);
                    termBuffers[i]        = new UnsafeBuffer(_mappedByteBuffers[i].Pointer, 0, termLength);
                }

                var metaDataMappedBuffer = new MappedByteBuffer(memoryMappedFile, logLength - LogBufferDescriptor.LOG_META_DATA_LENGTH, LogBufferDescriptor.LOG_META_DATA_LENGTH);
                _mappedByteBuffers[_mappedByteBuffers.Length - 1] = metaDataMappedBuffer;
                logMetaDataBuffer = new UnsafeBuffer(metaDataMappedBuffer.Pointer, 0, LogBufferDescriptor.LOG_META_DATA_LENGTH);
            }

            // TODO try/catch

            foreach (var buffer in termBuffers)
            {
                buffer.VerifyAlignment();
            }

            logMetaDataBuffer.VerifyAlignment();
        }
Пример #4
0
        public void ShouldThrowExceptionWhenBufferNotAligned()
        {
            var buffer = new UnsafeBuffer(new byte[1024], 1, 1023);

            buffer.VerifyAlignment();
        }