private Slot AllocateSlot(bool appendToFile, int slotLength) { if (!appendToFile) { Slot slot = _container.FreespaceManager().AllocateSafeSlot(slotLength); if (slot != null) { return(slot); } } return(_container.AppendBytes(slotLength)); }
/// <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())); }
public virtual void CommitIds() { FreespaceCommitter freespaceCommitter = new FreespaceCommitter(_targetDb.FreespaceManager ()); freespaceCommitter.TransactionalIdSystem(SystemTrans().IdSystem()); _targetDb.IdSystem().Commit(Mapping().SlotChanges(), freespaceCommitter); freespaceCommitter.Commit(); }
protected Slot AllocateSlot(int length) { Slot reusedSlot = _container.FreespaceManager().AllocateSafeSlot(length); if (reusedSlot != null) { return(reusedSlot); } return(_container.AppendBytes(length)); }
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())); }
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(); }
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); }
private long Freespace() { _db.FreespaceManager().Traverse(new _IVisitor4_190(this)); return(_db.FreespaceManager().TotalFreespace()); }
private void MapFreespace() { _db.FreespaceManager().Traverse(new _IVisitor4_110(this)); }