コード例 #1
0
        public JournalledFileStore(String resource_name,
                                   LoggingBufferManager buffer_manager,
                                   bool read_only)
            : base(read_only)
        {
            this.resource_name  = resource_name;
            this.buffer_manager = buffer_manager;

            // Create the store resource object for this resource name
            this.store_resource = buffer_manager.CreateResource(resource_name);
        }
コード例 #2
0
        public JournalledFileStore(String resource_name,
            LoggingBufferManager buffer_manager,
            bool read_only)
            : base(read_only)
        {
            this.resource_name = resource_name;
            this.buffer_manager = buffer_manager;

            // Create the store resource object for this resource name
            this.store_resource = buffer_manager.CreateResource(resource_name);
        }
コード例 #3
0
 public PageCacheComparerImpl(LoggingBufferManager lbm)
 {
     this.lbm = lbm;
 }
コード例 #4
0
 internal JournalledSystem(string journal_path, bool read_only, int page_size,
     LoggingBufferManager.IStoreDataAccessorFactory sda_factory, Logger logger,
     bool enable_logging)
 {
     this.journal_path = journal_path;
     this.read_only = read_only;
     this.page_size = page_size;
     this.sda_factory = sda_factory;
     this.logger = logger;
     all_resources = new Hashtable();
     journal_number = 0;
     journal_archives = new ArrayList();
     this.ENABLE_LOGGING = enable_logging;
 }
コード例 #5
0
 public PageCacheComparerImpl(LoggingBufferManager lbm)
 {
     this.lbm = lbm;
 }
コード例 #6
0
ファイル: FileSystemDatabase.cs プロジェクト: ikvm/cloudb
        public void Stop()
        {
            // Check point before we stop
            CheckPoint();

            lock (lockObject) {
                // We can't stop a database that hasn't started
                if (!started || treeSystem == null)
                    return;

                // Close the store
                fileStore.Close();
                // Stop the buffer manager
                bufferManager.Stop();
                // Offer up all the internal objects to the GC
                bufferManager = null;
                fileStore = null;

                // Clear the internal state
                treeSystem = null;
                started = false;

            }
        }
コード例 #7
0
ファイル: FileSystemDatabase.cs プロジェクト: ikvm/cloudb
        public bool Start()
        {
            lock (lockObject) {
                // We can't start a database that is already started,
                if (started || treeSystem != null)
                    return false;

                // Make a data.db file with a single TreeSystem structure mapped into it
                const string fileExt = "db";
                const string dbFileName = "data";

                bufferManager = new LoggingBufferManager(path, path, false, maxPageCount, pageSize, fileExt, fileRolloverSize,
                                                          debug, true);
                bufferManager.Start();

                // The backing store
                fileStore = new JournalledFileStore(dbFileName, bufferManager, false);
                fileStore.Open();

                // The actual database
                StoreTreeSystem treeStore;

                // Get the header area
                IArea headerArea = fileStore.GetArea(-1);
                int magicValue = headerArea.ReadInt4();
                // If header area magic value is zero, then we assume this is a brand
                // new database and initialize it with the configuration information
                // given.
                if (magicValue == 0) {
                    // Create a tree store inside the file store,
                    treeStore = new StoreTreeSystem(fileStore, branchNodeSize, leafNodeSize, heapNodeCacheSize,
                                                     branchNodeCacheSize);
                    // Create the tree and returns a pointer to the tree,
                    long treePointer = treeStore.Create();

                    // Create an area object with state information about the tree
                    IAreaWriter area = fileStore.CreateArea(128);
                    area.WriteInt4(0x0101);    // The version value
                    area.WriteInt8(treePointer);
                    area.WriteInt4(branchNodeSize);
                    area.WriteInt4(leafNodeSize);
                    area.Finish();
                    long areaId = area.Id;
                    IMutableArea harea = fileStore.GetMutableArea(-1);
                    harea.WriteInt4(0x092BA001);  // The magic value
                    harea.WriteInt8(areaId);
                    harea.CheckOut();
                } else if (magicValue == 0x092BA001) {
                    long apointer = headerArea.ReadInt8();
                    // The area that contains configuration details,
                    IArea initArea = fileStore.GetArea(apointer);
                    int version = initArea.ReadInt4();
                    if (version != 0x0101)
                        throw new IOException("Unknown version in tree initialization area");

                    // Read the pointer to the tree store
                    long treePointer = initArea.ReadInt8();
                    // Read the branch and leaf node sizes as set when the database was
                    // created.
                    int ibranchNodeSize = initArea.ReadInt4();
                    int ileafNodeSize = initArea.ReadInt4();

                    // Create the tree store
                    treeStore = new StoreTreeSystem(fileStore, ibranchNodeSize, ileafNodeSize, heapNodeCacheSize,
                                                    branchNodeCacheSize);
                    // Initialize the tree
                    treeStore.Init(treePointer);
                } else {
                    throw new IOException("Data is corrupt, invalid magic value in store");
                }

                // Set the point of the tree store
                treeStore.CheckPoint();

                // Set up final internal state and return true
                treeSystem = treeStore;
                started = true;
                return true;
            }
        }