Class RAMAccessManager

    • Field Detail

      • rawstore

        private RawStoreFactory rawstore
        The raw store that this access manager uses.
      • implhash

        private java.util.Hashtable<java.lang.String,​MethodFactory> implhash
        Hash table on primary implementation type.
      • formathash

        private java.util.Hashtable<UUID,​MethodFactory> formathash
        Hash table on primary format.
      • serviceProperties

        private java.util.Properties serviceProperties
        Service properties. These are supplied from ModuleControl.boot(), and ultimately come from the service.properties file. By convention, these properties are passed down to all modules booted by this one. If this module needs to pass specific instructions to its sub-modules, it should create a new Properties object with serviceProperties as its default (so that the rest of the modules that are looking at it don't see the properties that this module needs to add).
      • system_default_locking_policy

        LockingPolicy system_default_locking_policy
        Default locking policy for the entire system.
      • xactProperties

        private PropertyConglomerate xactProperties
        The object providing the properties like behaviour that is transactional.
      • table_level_policy

        protected LockingPolicy[] table_level_policy
      • record_level_policy

        protected LockingPolicy[] record_level_policy
      • conglom_map

        protected ConglomerateFactory[] conglom_map
        A map of the implementation specific id to conglomerate object.

        A map of the implementation specific id to conglomerate object. The id is encoded into the conglomerate number, and then used to pick the right implementation of the conglomerate. It is then up to the conglomerate implementation to retrieve it's stored representation from disk. An internal mapping of the encoding of conglomerate identity in the conglomerate number to the actual conglomerate implementation. Encoding this means that we can't dynamically add conglomerate implementations into the system, so when we want to do that this mapping will have to be more dynamic - but for now store knows exactly what implementations there are.

      • conglom_cache

        private CacheManager conglom_cache
        Cache of Conglomerate objects, keyed by conglom id. Used to speed up subsquent open of conglomerates, first open will need to call the conglomerate to read and return it's description.
      • conglom_nextid

        private long conglom_nextid
        Routines to map to/from conglomid/containerid:
    • Constructor Detail

      • RAMAccessManager

        public RAMAccessManager()
        Constructors for This class:
    • Method Detail

      • getDefaultLockingPolicy

        protected LockingPolicy getDefaultLockingPolicy()
        Return the default locking policy for this access manager.
        Returns:
        the default locking policy for this accessmanager.
      • getSystemLockLevel

        protected abstract int getSystemLockLevel()
        Return the locking level of the system.

        This routine controls the lowest level of locking enabled for all locks for all tables accessed through this accessmanager. The concrete implementation may set this value always to table level locking for a client configuration, or it may set it to row level locking for a server configuration.

        If TransactionController.MODE_RECORD is returned table may either be locked at table or row locking depending on the type of access expected (ie. level 3 will require table locking for heap scans.)

        Returns:
        TransactionController.MODE_TABLE if only table locking allowed, else returns TransactionController.MODE_RECORD.
      • bootLookupSystemLockLevel

        protected abstract void bootLookupSystemLockLevel​(TransactionController tc)
                                                   throws StandardException
        Query property system to get the System lock level.

        This routine will be called during boot after access has booted far enough, to allow access to the property conglomerate. This routine will call the property system and set the value to be returned by getSystemLockLevel().

        Throws:
        StandardException - Standard exception policy.
      • getNextConglomId

        protected long getNextConglomId​(int factory_type)
                                 throws StandardException
        Return next conglomid to try to add the container with.

        The conglomerate number has 2 parts. The low 4 bits are used to encode the factory which "owns" the conglomerate. The high 60 bits are used as a normal unique id mechanism.

        So for example if the next id to assign is 0x54 the following will be the conglomid: if a HEAP (factory 0) - 0x540 if a BTREE (factory 1) - 0x541 And the next id assigned will be: if a HEAP (factory 0) - 0x550 if a BTREE (factory 1) - 0x551

        Parameters:
        factory_type - factory id as gotten from getConglomerateFactoryId()
        Returns:
        The identifier to be used to open the conglomerate later.
        Throws:
        StandardException - Standard exception policy.
      • getFactoryFromConglomId

        ConglomerateFactory getFactoryFromConglomId​(long conglom_id)
                                             throws StandardException
        Given a conglomid, return the factory which "owns" it.

        A simple lookup on the boot time built table which maps the low order 4 bits into which factory owns the conglomerate.

        Parameters:
        conglom_id - The conglomerate id of the conglomerate to look up.
        Returns:
        The ConglomerateFactory which "owns" this conglomerate.
        Throws:
        StandardException - Standard exception policy.
      • conglomCacheInit

        private void conglomCacheInit()
                               throws StandardException
        Initialize the conglomerate cache.

        Simply calls the cache manager to create the cache with some hard coded defaults for size.

        Throws:
        StandardException - Standard exception policy.
      • conglomCacheFind

        Conglomerate conglomCacheFind​(long conglomid)
                               throws StandardException
        Find a conglomerate by conglomid in the cache.

        Look for a conglomerate given a conglomid. If in cache return it, otherwise fault in an entry by asking the owning factory to produce an entry.

        Parameters:
        conglomid - The conglomerate id of the conglomerate to look up.
        Returns:
        The conglomerate object identified by "conglomid".
        Throws:
        StandardException - Standard exception policy.
      • conglomCacheInvalidate

        protected void conglomCacheInvalidate()
                                       throws StandardException
        Invalide the current Conglomerate Cache.

        Abort of certain operations will invalidate the contents of the cache. Longer term we could just invalidate those entries, but for now just invalidate the whole cache.

        Throws:
        StandardException - Standard exception policy.
      • conglomCacheAddEntry

        void conglomCacheAddEntry​(long conglomid,
                                  Conglomerate conglom)
                           throws StandardException
        Add a newly created conglomerate to the cache.

        Parameters:
        conglomid - The conglomid of conglomerate to replace.
        conglom - The Conglom to add.
        Throws:
        StandardException - Standard exception policy.
      • conglomCacheRemoveEntry

        void conglomCacheRemoveEntry​(long conglomid)
                              throws StandardException
        Remove an entry from the cache.

        Parameters:
        conglomid - The conglomid of conglomerate to replace.
        Throws:
        StandardException - Standard exception policy.
      • getCurrentTransactionContext

        RAMTransactionContext getCurrentTransactionContext()

        Get the current transaction context.

        If there is an internal transaction on the context stack, return the internal transaction. Otherwise, if there is a nested user transaction on the context stack, return the nested transaction. Otherwise, return the current user transaction.

        Returns:
        a context object referencing the current transaction
      • getLockFactory

        public LockFactory getLockFactory()
        Description copied from interface: AccessFactory
        Get the LockFactory to use with this store.
        Specified by:
        getLockFactory in interface AccessFactory
        Returns:
        The lock factory to use with this store.
      • startXATransaction

        public java.lang.Object startXATransaction​(ContextManager cm,
                                                   int format_id,
                                                   byte[] global_id,
                                                   byte[] branch_id)
                                            throws StandardException
        Start a global transaction.

        Get a transaction controller with which to manipulate data within the access manager. Implicitly creates an access context.

        Must only be called if no other transaction context exists in the current context manager. If another transaction exists in the context an exception will be thrown.

        The (format_id, global_id, branch_id) triplet is meant to come exactly from a javax.transaction.xa.Xid. We don't use Xid so that the system can be delivered on a non-1.2 vm system and not require the javax classes in the path.

        Specified by:
        startXATransaction in interface AccessFactory
        Parameters:
        cm - The context manager for the current context.
        format_id - the format id part of the Xid - ie. Xid.getFormatId().
        global_id - the global transaction identifier part of XID - ie. Xid.getGlobalTransactionId().
        branch_id - The branch qualifier of the Xid - ie. Xid.getBranchQaulifier()
        Throws:
        StandardException - Standard exception policy.
        See Also:
        TransactionController
      • getXAResourceManager

        public java.lang.Object getXAResourceManager()
                                              throws StandardException
        Return the XAResourceManager associated with this AccessFactory.

        Returns an object which can be used to implement the "offline" 2 phase commit interaction between the accessfactory and outstanding transaction managers taking care of in-doubt transactions.

        Specified by:
        getXAResourceManager in interface AccessFactory
        Returns:
        The XAResourceManager associated with this accessfactory.
        Throws:
        StandardException - Standard exception policy.
      • createReadMeFiles

        public void createReadMeFiles()
                               throws StandardException
        DERBY-5996(Create readme files (cautioning users against modifying database files) at database hard upgrade time) This gets called during hard upgrade. It will create 3 readme files one in database directory, one in "seg0" directory and one in log directory. These readme files warn users against touching any of files associated with derby database
        Specified by:
        createReadMeFiles in interface AccessFactory
        Throws:
        StandardException
      • getTransactionInfo

        public TransactionInfo[] getTransactionInfo()
        Description copied from interface: AccessFactory
        Return a snap shot of all transactions in the db.

        Take a snap shot of all transactions currently in the database and make a record of their information.

        Specified by:
        getTransactionInfo in interface AccessFactory
        Returns:
        an array of TransactionInfo, or null if there is no transaction in the database.
      • startReplicationMaster

        public void startReplicationMaster​(java.lang.String dbmaster,
                                           java.lang.String host,
                                           int port,
                                           java.lang.String replicationMode)
                                    throws StandardException
        Start the replication master role for this database.
        Specified by:
        startReplicationMaster in interface AccessFactory
        Parameters:
        dbmaster - The master database that is being replicated.
        host - The hostname for the slave
        port - The port the slave is listening on
        replicationMode - The type of replication contract. Currently only asynchronous replication is supported, but 1-safe/2-safe/very-safe modes may be added later.
        Throws:
        StandardException - Standard Derby exception policy, thrown on error.
      • failover

        public void failover​(java.lang.String dbname)
                      throws StandardException
        Description copied from interface: AccessFactory
        Start the failover for this database.
        Specified by:
        failover in interface AccessFactory
        Parameters:
        dbname - the replication database that is being failed over.
        Throws:
        StandardException - Standard Derby exception policy, 1) If the failover succeeds, an exception is thrown to indicate that the master database was shutdown after a successful failover 2) If a failure occurs during network communication with slave.
      • backup

        public void backup​(java.lang.String backupDir,
                           boolean wait)
                    throws StandardException
        Description copied from interface: AccessFactory
        Backup the database to backupDir.

        Please see Derby on line documentation on backup and restore.

        Specified by:
        backup in interface AccessFactory
        Parameters:
        backupDir - the name of the directory where the backup should be stored.
        wait - if true, waits for all the backup blocking operations in progress to finish.
        Throws:
        StandardException - Thrown on error
      • backupAndEnableLogArchiveMode

        public void backupAndEnableLogArchiveMode​(java.lang.String backupDir,
                                                  boolean deleteOnlineArchivedLogFiles,
                                                  boolean wait)
                                           throws StandardException
        Description copied from interface: AccessFactory
        Backup the database to a backup directory and enable the log archive mode that will keep the archived log files required for roll-forward from this version backup.
        Specified by:
        backupAndEnableLogArchiveMode in interface AccessFactory
        Parameters:
        backupDir - the directory name where the database backup should go. This directory will be created if not it does not exist.
        deleteOnlineArchivedLogFiles - If true deletes online archived log files that exist before this backup, delete will occur only after backup is complete.
        wait - if true, waits for all the backup blocking operations in progress to finish.
        Throws:
        StandardException - Thrown on error
      • disableLogArchiveMode

        public void disableLogArchiveMode​(boolean deleteOnlineArchivedLogFiles)
                                   throws StandardException
        Description copied from interface: AccessFactory
        disables the log archival process, i.e No old log files will be kept around for a roll-forward recovery.
        Specified by:
        disableLogArchiveMode in interface AccessFactory
        Parameters:
        deleteOnlineArchivedLogFiles - If true deletes all online archived log files that exist before this call immediately; Only restore that can be performed after disabling log archive mode is version recovery.
        Throws:
        StandardException - Thrown on error
      • stop

        public void stop()
        Description copied from interface: ModuleControl
        Stop the module. The module may be found via a findModule() method until some time after this method returns. Therefore the factory must be prepared to reject requests to it once it has been stopped. In addition other modules may cache a reference to the module and make requests of it after it has been stopped, these requests should be rejected as well.
        Specified by:
        stop in interface ModuleControl
        See Also:
        Monitor, ModuleFactory
      • init

        public void init​(boolean dbOnly,
                         java.util.Dictionary p)
        Description copied from interface: PropertySetCallback
        Initialize the properties for this callback. Called when addPropertySetNotification() is called with a non-null transaction controller. This allows code to set read its initial property values at boot time.

        Code within an init() method should use the 3 argument PropertyUtil method getPropertyFromSet() to obtain a property's value.

        Specified by:
        init in interface PropertySetCallback
        Parameters:
        dbOnly - true if only per-database properties are to be looked at
        p - the complete set of per-database properties.
      • validate

        public boolean validate​(java.lang.String key,
                                java.io.Serializable value,
                                java.util.Dictionary p)
                         throws StandardException
        Description copied from interface: PropertySetCallback
        Validate a property change.
        Specified by:
        validate in interface PropertySetCallback
        Parameters:
        key - Property key for the property being set
        value - proposed new value for the property being set or null if the property is being dropped.
        p - Property set before the change. SettingProperty may read but must never change p.
        Returns:
        true if this object was interested in this property, false otherwise.
        Throws:
        StandardException - Oh well.
      • apply

        public Serviceable apply​(java.lang.String key,
                                 java.io.Serializable value,
                                 java.util.Dictionary p)
                          throws StandardException
        Description copied from interface: PropertySetCallback
        Apply a property change. Will only be called after validate has been called and only if validate returned true. If this method is called then the new value is the value to be used, ie. the property is not set in the overriding JVM system set.
        Specified by:
        apply in interface PropertySetCallback
        Parameters:
        key - Property key for the property being set
        value - proposed new value for the property being set or null if the property is being dropped.
        p - Property set before the change. SettingProperty may read but must never change p.
        Returns:
        post commit work for the property change.
        Throws:
        StandardException - Oh well.
      • map

        public java.io.Serializable map​(java.lang.String key,
                                        java.io.Serializable value,
                                        java.util.Dictionary p)
                                 throws StandardException
        Description copied from interface: PropertySetCallback
        Map a proposed new value for a property to an official value. Will only be called after apply() has been called.
        Specified by:
        map in interface PropertySetCallback
        Parameters:
        key - Property key for the property being set
        value - proposed new value for the property being set or null if the property is being dropped.
        p - Property set before the change. SettingProperty may read but must never change p.
        Returns:
        new value for the change
        Throws:
        StandardException - Oh well.
      • getContextService

        private static ContextService getContextService()
        Privileged lookup of the ContextService. Must be private so that user code can't call this entry point.
      • getContext

        private static Context getContext​(java.lang.String contextID)
        Privileged lookup of a Context. Must be private so that user code can't call this entry point.
      • getMonitor

        private static ModuleFactory getMonitor()
        Privileged Monitor lookup. Must be private so that user code can't call this entry point.
      • startSystemModule

        private static java.lang.Object startSystemModule​(java.lang.String factoryInterface)
                                                   throws StandardException
        Privileged startup. Must be private so that user code can't call this entry point.
        Throws:
        StandardException
      • bootServiceModule

        private static java.lang.Object bootServiceModule​(boolean create,
                                                          java.lang.Object serviceModule,
                                                          java.lang.String factoryInterface,
                                                          java.util.Properties properties)
                                                   throws StandardException
        Privileged startup. Must be private so that user code can't call this entry point.
        Throws:
        StandardException
      • bootServiceModule

        private static java.lang.Object bootServiceModule​(boolean create,
                                                          java.lang.Object serviceModule,
                                                          java.lang.String factoryInterface,
                                                          java.lang.String identifier,
                                                          java.util.Properties properties)
                                                   throws StandardException
        Privileged startup. Must be private so that user code can't call this entry point.
        Throws:
        StandardException
      • findServiceModule

        private static java.lang.Object findServiceModule​(java.lang.Object serviceModule,
                                                          java.lang.String factoryInterface)
                                                   throws StandardException
        Privileged startup. Must be private so that user code can't call this entry point.
        Throws:
        StandardException