Esempio n. 1
0
 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");
 }
Esempio n. 2
0
        /// <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
            {
            }
        }