Ejemplo n.º 1
0
        /// <summary>
        /// Logs the transaction data to the file and remembers the start position.
        /// </summary>
        /// <param name="itemToLog"></param>
        public void LogStartTransaction(ILoggable itemToLog)
        {
            // get the start position
            _currentTransactionDataStartPosition = (ulong)_persistenceManager.GetFileLength(GetTransactionLogFile());

            // now write the transaction data
            using (var stream = _persistenceManager.GetOutputStream(GetTransactionLogFile(), FileMode.Append))
            {
                itemToLog.LogTransactionDataToStream(stream);
            }
        }
        public ulong GetDataSize(string storeLocation)
        {
            ulong ret              = 0;
            var   dataFilePath     = Path.Combine(storeLocation, DataFileName);
            var   resourceFilePath = Path.Combine(storeLocation, ResourceFileName);

            if (_persistenceManager.FileExists(dataFilePath))
            {
                ret += (ulong)_persistenceManager.GetFileLength(dataFilePath);
            }
            if (_persistenceManager.FileExists(resourceFilePath))
            {
                ret += (ulong)_persistenceManager.GetFileLength(resourceFilePath);
            }
            return(ret);
        }
        /// <summary>
        /// Adds the specified commit point to the master file
        /// </summary>
        /// <param name="storeLocation">The path to the store directory</param>
        /// <param name="commitPoint">The commit point to add</param>
        /// <param name="overwrite">Specifies if the master file should be overwritten with just this commit point. Defaults to false.</param>
        /// <remarks>The <paramref name="overwrite"/> parameter is provided to enable store consolidation operations.</remarks>
        public void AppendCommitPoint(string storeLocation, CommitPoint commitPoint, bool overwrite = false)
        {
            Logging.LogDebug("AbstractStoreManager.AppendCommitPoint {0}, overwrite={1}", storeLocation, overwrite);
            var masterFileLocation = Path.Combine(storeLocation, MasterFileName);

            if (overwrite)
            {
                // Use a file delete operation to try to avoid file locking issues.
                Logging.LogDebug("AbstractStoreManager: Overwrite enabled. Deleting existing master file");
                _persistenceManager.DeleteFile(masterFileLocation);
            }
            if (!_persistenceManager.FileExists(masterFileLocation))
            {
                Logging.LogDebug("AbstractStoreManager: Master file not found at {0}. Creating new master file.", masterFileLocation);
                _persistenceManager.CreateFile(masterFileLocation);
            }
            using (var fs = _persistenceManager.GetOutputStream(masterFileLocation, FileMode.Append))
            {
                var   binaryWriter = new BinaryWriter(fs);
                ulong val          = 0;
                if (_persistenceManager.GetFileLength(masterFileLocation) == 0)
                {
                    // new master file so add header
                    for (int i = 0; i < MasterfileHeaderLongCount; i++)
                    {
                        binaryWriter.Write(val);
                    }
                }
                commitPoint.Save(fs);
            }
            Logging.LogDebug("AbstractStoreManager.UpdateMsterFile {0} completed.", storeLocation);
        }
Ejemplo n.º 4
0
        public void TestCreateAppendOnlyPageStore()
        {
            if (PersistenceManager.FileExists(PageFilePath))
            {
                PersistenceManager.DeleteFile(PageFilePath);
            }
            using (var readwritePageStore =
                       new AppendOnlyFilePageStore(PersistenceManager, PageFilePath, 8192, false, false))
            {
                Assert.AreEqual(8192, readwritePageStore.PageSize);
                Assert.IsTrue(readwritePageStore.CanRead);
                Assert.IsTrue(readwritePageStore.CanWrite);

                using (var readonlyPageStore =
                           new AppendOnlyFilePageStore(PersistenceManager, PageFilePath, 8192, true, false))
                {
                    Assert.AreEqual(8192, readonlyPageStore.PageSize);
                    Assert.IsTrue(readonlyPageStore.CanRead);
                    Assert.IsFalse(readonlyPageStore.CanWrite);
                }
            }

            Assert.IsTrue(PersistenceManager.FileExists(PageFilePath));

            Assert.AreEqual(0, PersistenceManager.GetFileLength(PageFilePath));
        }
        public void TestOpenForWriting()
        {
            if (_pm.FileExists("writeme.txt"))
            {
                _pm.DeleteFile("writeme.txt");
            }
            Assert.IsFalse(_pm.FileExists("writeme.txt"));
            using (var writer = new StreamWriter(_pm.GetOutputStream("writeme.txt", FileMode.CreateNew)))
            {
                writer.Write("Hello world");
            }
            Assert.IsTrue(_pm.FileExists("writeme.txt"));
            Assert.AreEqual(11, _pm.GetFileLength("writeme.txt"));

            // Test using Open mode
            using (var writer = new StreamWriter(_pm.GetOutputStream("writeme.txt", FileMode.Open)))
            {
                writer.BaseStream.Seek(0, SeekOrigin.End);
                writer.Write(" and goodbye");
            }
            Assert.AreEqual(23, _pm.GetFileLength("writeme.txt"));

            // Test using Truncate mode
            using (var writer = new StreamWriter(_pm.GetOutputStream("writeme.txt", FileMode.Truncate)))
            {
                writer.Write("Hello world");
            }
            Assert.AreEqual(11, _pm.GetFileLength("writeme.txt"));

            // Test using Append mode
            using (var writer = new StreamWriter(_pm.GetOutputStream("writeme.txt", FileMode.Append)))
            {
                writer.Write(" and goodbye");
            }
            Assert.AreEqual(23, _pm.GetFileLength("writeme.txt"));
        }