コード例 #1
0
ファイル: InMemoryIdSystem.cs プロジェクト: git-thinh/limada
 private Slot AllocateSlot(bool appendToFile, int slotLength)
 {
     if (!appendToFile)
     {
         Slot slot = _container.FreespaceManager().AllocateSafeSlot(slotLength);
         if (slot != null)
         {
             return(slot);
         }
     }
     return(_container.AppendBytes(slotLength));
 }
コード例 #2
0
        /// <exception cref="System.Exception"></exception>
        public static void AssertAllSlotsFreed(LocalTransaction trans, BTree bTree, ICodeBlock
                                               block)
        {
            LocalObjectContainer   container  = (LocalObjectContainer)trans.Container();
            ITransactionalIdSystem idSystem   = trans.IdSystem();
            IEnumerator            allSlotIDs = bTree.AllNodeIds(trans.SystemTransaction());
            Collection4            allSlots   = new Collection4();

            while (allSlotIDs.MoveNext())
            {
                int  slotID = ((int)allSlotIDs.Current);
                Slot slot   = idSystem.CurrentSlot(slotID);
                allSlots.Add(slot);
            }
            Slot bTreeSlot = idSystem.CurrentSlot(bTree.GetID());

            allSlots.Add(bTreeSlot);
            Collection4       freedSlots       = new Collection4();
            IFreespaceManager freespaceManager = container.FreespaceManager();

            container.InstallDebugFreespaceManager(new FreespaceManagerForDebug(new _ISlotListener_99
                                                                                    (freedSlots)));
            block.Run();
            container.InstallDebugFreespaceManager(freespaceManager);
            Assert.IsTrue(freedSlots.ContainsAll(allSlots.GetEnumerator()));
        }
コード例 #3
0
        public virtual void CommitIds()
        {
            FreespaceCommitter freespaceCommitter = new FreespaceCommitter(_targetDb.FreespaceManager
                                                                               ());

            freespaceCommitter.TransactionalIdSystem(SystemTrans().IdSystem());
            _targetDb.IdSystem().Commit(Mapping().SlotChanges(), freespaceCommitter);
            freespaceCommitter.Commit();
        }
コード例 #4
0
        protected Slot AllocateSlot(int length)
        {
            Slot reusedSlot = _container.FreespaceManager().AllocateSafeSlot(length);

            if (reusedSlot != null)
            {
                return(reusedSlot);
            }
            return(_container.AppendBytes(length));
        }
コード例 #5
0
            public void Apply(object state)
            {
                ConsistencyCheckerTestCase.Item item = ((ConsistencyCheckerTestCase.Item)((Pair)state
                                                                                          ).second);
                LocalObjectContainer db = ((LocalObjectContainer)((Pair)state).first);
                int  id   = (int)db.GetID(item);
                Slot slot = db.IdSystem().CommittedSlot(id);

                db.FreespaceManager().Free(new Slot(slot.Address() + 1, slot.Length()));
            }
コード例 #6
0
 public virtual void Commit(IVisitable slotChanges, FreespaceCommitter freespaceCommitter
                            )
 {
     _container.FreespaceManager().BeginCommit();
     slotChanges.Accept(new _IVisitor4_129(this));
     // TODO: Maybe we want a BTree that doesn't allow duplicates.
     // Then we could do the following in one step without removing first.
     _bTree.Commit(Transaction());
     IdGeneratorValue(_idGenerator.PersistentGeneratorValue());
     if (_idGenerator.IsDirty())
     {
         _idGenerator.SetClean();
         _persistentState.SetStateDirty();
     }
     if (_persistentState.IsDirty())
     {
         _persistentState.Write(Transaction());
     }
     _container.FreespaceManager().EndCommit();
     _transactionalIdSystem.Commit(freespaceCommitter);
     _transactionalIdSystem.Clear();
 }
コード例 #7
0
        public void Apply(IInternalObjectContainer container)
        {
            if (!(container is LocalObjectContainer) || container.ConfigImpl.IsReadOnly())
            {
                return;
            }
            LocalObjectContainer localObjectContainer = (LocalObjectContainer)container;
            IFreespaceManager    freespaceManager     = localObjectContainer.FreespaceManager();
            FreespaceListener    freespaceListener    = new FreespaceListener(localObjectContainer);

            freespaceManager.Traverse(new FreespaceInitializingVisitor(freespaceListener));

            IEventRegistry eventRegistry = EventRegistryFactory.ForObjectContainer(container);

            eventRegistry.Closing += delegate
            {
                freespaceListener.Dispose();
                freespaceManager.Listener(NullFreespaceListener.Instance);
            };

            freespaceManager.Listener(freespaceListener);
        }
コード例 #8
0
 private long Freespace()
 {
     _db.FreespaceManager().Traverse(new _IVisitor4_190(this));
     return(_db.FreespaceManager().TotalFreespace());
 }
コード例 #9
0
 private void MapFreespace()
 {
     _db.FreespaceManager().Traverse(new _IVisitor4_110(this));
 }