public virtual void TestSize() { DeleteBase("writing.neodatis"); DeleteBase("writing"); DeleteBase("reserving.neodatis"); DeleteBase("reserving"); NeoDatis.Odb.Core.Layers.Layer3.IStorageEngine engine1 = NeoDatis.Odb.OdbConfiguration .GetCoreProvider().GetClientStorageEngine(new NeoDatis.Odb.Core.Layers.Layer3.IOFileParameter (NeoDatis.Odb.Test.ODBTest.Directory + "writing.neodatis", true, null, null)); NeoDatis.Odb.Core.Layers.Layer3.IStorageEngine engine2 = NeoDatis.Odb.OdbConfiguration .GetCoreProvider().GetClientStorageEngine(new NeoDatis.Odb.Core.Layers.Layer3.IOFileParameter (NeoDatis.Odb.Test.ODBTest.Directory + "reserving.neodatis", true, null, null)); NeoDatis.Odb.Core.Layers.Layer3.Engine.IFileSystemInterface writingFsi = engine1. GetObjectWriter().GetFsi(); NeoDatis.Odb.Core.Layers.Layer3.Engine.IFileSystemInterface reservingFsi = engine2 .GetObjectWriter().GetFsi(); AssertEquals(writingFsi.GetLength(), reservingFsi.GetLength()); Write(writingFsi, false); Write(reservingFsi, true); AssertEquals(writingFsi.GetLength(), reservingFsi.GetLength()); engine1.Commit(); engine1.Close(); engine2.Commit(); engine2.Close(); DeleteBase("writing.neodatis"); DeleteBase("reserving.neodatis"); }
/// <exception cref="System.IO.IOException"></exception> /// <exception cref="System.TypeLoadException"></exception> public virtual void LoadWriteActionsBackwards(string filename, bool apply) { int executedWriteAction = 0; if (NeoDatis.Odb.OdbConfiguration.IsDebugEnabled(LogId)) { NeoDatis.Tool.DLogger.Debug("Load write actions of " + filename); } NeoDatis.Odb.Core.Transaction.IWriteAction wa = null; try { CheckFileAccess(false, filename); fsi.UseBuffer(true); fsi.SetReadPosition(0); isCommited = fsi.ReadByte() == 1; creationDateTime = fsi.ReadLong(); System.Collections.Generic.IDictionary <long, long> writtenPositions = null; if (apply) { writtenPositions = new NeoDatis.Tool.Wrappers.Map.OdbHashMap <long, long>(); } long position = System.Convert.ToInt64(-1); int i = numberOfWriteActions; long previousWriteActionPosition = fsi.GetLength(); while (i > 0) { // Sets the position 8 bytes backwards fsi.SetReadPosition(previousWriteActionPosition - NeoDatis.Odb.Core.Layers.Layer2.Meta.ODBType .Long.GetSize()); // And then the read a long, this will be the previous write // action position previousWriteActionPosition = fsi.ReadLong(); // Then sets the read position to read the write action fsi.SetReadPosition(previousWriteActionPosition); wa = NeoDatis.Odb.Impl.Core.Transaction.DefaultWriteAction.Read(fsi, i + 1); if (apply) { position = wa.GetPosition(); if (writtenPositions[position] != null) { // It has already been written something more recent at // this position, do not write again i--; continue; } wa.ApplyTo(fsiToApplyWriteActions, i + 1); writtenPositions.Add(position, position); executedWriteAction++; } else { AddWriteAction(wa, false); } i--; } if (apply) { fsiToApplyWriteActions.Flush(); if (NeoDatis.Odb.OdbConfiguration.IsDebugEnabled(LogId)) { NeoDatis.Tool.DLogger.Debug("Total Write actions : " + i + " / position cache = " + writtenPositions.Count); } NeoDatis.Tool.DLogger.Info("Total write actions = " + numberOfWriteActions + " : executed = " + executedWriteAction); writtenPositions.Clear(); writtenPositions = null; } } finally { } }