Drizzled Public API Documentation

drizzled::plugin::XaStorageEngine Class Reference

#include <xa_storage_engine.h>

Inheritance diagram for drizzled::plugin::XaStorageEngine:
drizzled::plugin::TransactionalStorageEngine drizzled::plugin::XaResourceManager drizzled::plugin::StorageEngine drizzled::plugin::Plugin drizzled::plugin::MonitoredInTransaction

List of all members.

Public Types

typedef uint64_t Table_flags
typedef std::pair< const
std::string, const std::string > 
map_key
typedef std::map< const
map_key, plugin::Plugin * > 
map
typedef std::vector< Plugin * > vector
typedef ::boost::unordered_set
< my_xid
commit_list_set

Public Member Functions

 XaStorageEngine (const std::string name_arg, const std::bitset< HTON_BIT_SIZE > &flags_arg=HTON_NO_FLAGS)
int startTransaction (Session *session, start_transaction_option_t options)
void startStatement (Session *session)
bool participatesInSqlTransaction () const
bool participatesInXaTransaction () const
bool alwaysRegisterForXaTransaction () const
virtual int commit (Session *session, bool normal_transaction)
virtual int rollback (Session *session, bool normal_transaction)
int setSavepoint (Session *session, NamedSavepoint &sp)
int rollbackToSavepoint (Session *session, NamedSavepoint &sp)
int releaseSavepoint (Session *session, NamedSavepoint &sp)
const std::string & getTableDefinitionFileExtension ()
const std::vector< std::string > & getAliases () const
void addAlias (std::string alias)
virtual void print_error (int error, myf errflag, const Table &table) const
bool is_user_selectable () const
bool check_flag (const engine_flag_bits flag) const
virtual uint32_t index_flags (enum ha_key_alg) const
virtual void endStatement (Session *session)
virtual int close_connection (Session *)
virtual Cursorcreate (Table &)=0
virtual bool flush_logs ()
virtual bool show_status (Session *, stat_print_fn *, enum ha_stat_type)
virtual const char ** bas_ext () const =0
int renameTable (Session &session, const drizzled::identifier::Table &from, const drizzled::identifier::Table &to)
CursorgetCursor (Table &share)
uint32_t max_record_length () const
uint32_t max_keys () const
uint32_t max_key_parts () const
uint32_t max_key_length () const
uint32_t max_key_part_length (void) const
virtual uint32_t max_supported_record_length (void) const
virtual uint32_t max_supported_keys (void) const
virtual uint32_t max_supported_key_parts (void) const
virtual uint32_t max_supported_key_length (void) const
virtual uint32_t max_supported_key_part_length (void) const
virtual bool validateCreateTableOption (const std::string &key, const std::string &state)
virtual bool validateCreateSchemaOption (const std::string &key, const std::string &state)
virtual void shutdownPlugin ()
virtual void prime ()
virtual void startup (drizzled::Session &)
void activate ()
void deactivate ()
bool isActive () const
const std::string & getName () const
void setModule (module::Module *module)
const std::string & getTypeName () const
virtual bool removeLast () const
const std::string & getModuleName () const
size_t getId () const
int xaPrepare (Session *session, bool normal_transaction)
int xaCommit (Session *session, bool normal_transaction)
int xaRollback (Session *session, bool normal_transaction)
int xaCommitXid (XID *xid)
int xaRollbackXid (XID *xid)
int xaRecover (XID *append_to, size_t len)
uint64_t getCurrentTransactionId (Session *session)
uint64_t getNewTransactionId (Session *session)

Static Public Member Functions

static bool addPlugin (plugin::XaStorageEngine *engine)
static void removePlugin (plugin::XaStorageEngine *engine)
static int notifyStartTransaction (Session *session, start_transaction_option_t options)
static int releaseTemporaryLatches (Session *session)
static bool addPlugin (plugin::TransactionalStorageEngine *engine)
static bool addPlugin (plugin::StorageEngine *engine)
static void removePlugin (plugin::TransactionalStorageEngine *engine)
static void removePlugin (plugin::StorageEngine *engine)
static message::table::shared_ptr getTableMessage (Session &session, const drizzled::identifier::Table &identifier, bool include_temporary_tables=true)
static bool doesTableExist (Session &session, const drizzled::identifier::Table &identifier, bool include_temporary_tables=true)
static plugin::StorageEnginefindByName (const std::string &find_str)
static plugin::StorageEnginefindByName (Session &session, const std::string &find_str)
static void closeConnection (Session *session)
static void dropDatabase (char *path)
static bool flushLogs (plugin::StorageEngine *db_type)
static bool dropTable (Session &session, const drizzled::identifier::Table &identifier)
static bool dropTable (Session &session, const drizzled::identifier::Table &identifier, drizzled::error_t &error)
static bool dropTable (Session &session, StorageEngine &engine, identifier::Table::const_reference identifier, drizzled::error_t &error)
static void getIdentifiers (Session &session, const identifier::Schema &schema_identifier, identifier::Table::vector &set_of_identifiers)
static void getIdentifiers (Session &session, identifier::Schema::vector &schemas)
static bool canCreateTable (const drizzled::identifier::Table &identifier)
static message::schema::shared_ptr getSchemaDefinition (const drizzled::identifier::Table &identifier)
static message::schema::shared_ptr getSchemaDefinition (const drizzled::identifier::Schema &identifier)
static bool doesSchemaExist (const drizzled::identifier::Schema &identifier)
static const CHARSET_INFOgetSchemaCollation (const drizzled::identifier::Schema &identifier)
static bool createSchema (const drizzled::message::Schema &schema_message)
static bool dropSchema (Session &session, identifier::Schema::const_reference identifier, message::schema::const_reference schema_message)
static bool alterSchema (const drizzled::message::Schema &schema_message)
static const std::string & resolveName (const StorageEngine *engine)
static bool createTable (Session &session, const identifier::Table &identifier, message::Table &table_message)
static void removeLostTemporaryTables (Session &session, const char *directory)
static int commitOrRollbackXID (XID *xid, bool commit)
static int recoverAllXids ()
static int recoverAllXids (const commit_list_set &commit_list)
static bool addPlugin (plugin::XaResourceManager *manager)
static void removePlugin (plugin::XaResourceManager *manager)

Protected Types

typedef std::map< std::string,
message::Table
ProtoCache
 Used as a protobuf storage currently by TEMP only engines.

Protected Member Functions

virtual int doGetTableDefinition (Session &session, const drizzled::identifier::Table &identifier, message::Table &table_message)
void print_keydup_error (uint32_t key_nr, const char *msg, const Table &table) const
virtual bool get_error_message (int error, String *buf) const
virtual int doCreateTable (Session &session, Table &table_arg, const drizzled::identifier::Table &identifier, const message::Table &message)=0
virtual int doRenameTable (Session &session, const drizzled::identifier::Table &from, const drizzled::identifier::Table &to)=0
virtual int doDropTable (Session &session, const drizzled::identifier::Table &identifier)=0
virtual void doGetTableIdentifiers (CachedDirectory &directory, const drizzled::identifier::Schema &schema_identifier, identifier::Table::vector &set_of_identifiers)=0
virtual bool doDoesTableExist (Session &session, const drizzled::identifier::Table &identifier)
virtual bool doCanCreateTable (const drizzled::identifier::Table &identifier)
virtual void doGetSchemaIdentifiers (identifier::Schema::vector &)
virtual
drizzled::message::schema::shared_ptr 
doGetSchemaDefinition (const drizzled::identifier::Schema &)
virtual bool doCreateSchema (const drizzled::message::Schema &)
virtual bool doAlterSchema (const drizzled::message::Schema &)
virtual bool doDropSchema (const drizzled::identifier::Schema &)

Static Protected Member Functions

static int deleteDefinitionFromPath (const drizzled::identifier::Table &identifier)
static int renameDefinitionFromPath (const drizzled::identifier::Table &dest, const drizzled::identifier::Table &src)
static int writeDefinitionFromPath (const drizzled::identifier::Table &identifier, const message::Table &proto)
static bool readTableFile (const std::string &path, message::Table &table_message)

Protected Attributes

std::string table_definition_ext
ProtoCache proto_cache
pthread_mutex_t proto_cache_mutex

Private Member Functions

virtual int doStartTransaction (Session *session, start_transaction_option_t options)
virtual void doStartStatement (Session *session)

Friends

class AddSchemaNames
class AddTableIdentifier
class AlterSchema
class CanCreateTable
class CreateSchema
class DropSchema
class DropTable
class DropTables
class FindEngineByName
class Ha_delete_table_error_handler
class StorageEngineCloseConnection
class StorageEngineDoesTableExist
class StorageEngineGetSchemaDefinition
class StorageEngineGetTableDefinition
class DropTableByIdentifier

Detailed Description

A type of storage engine which supports distributed transactions in the XA protocol.

The real XA resource manager interface is in the plugin::XaResourceManager class. We would extend XaResourceManager from plugin::Plugin but unfortunately that would lead to member name ambiguity (because plugin::Plugin has member data). So, in this case, TransactionalStorageEngine inherits from plugin::Plugin and XaResourceManager is a pure virtual abstract base class with the X/Open XA distributed transaction protocol interface for resource managers.

Definition at line 49 of file xa_storage_engine.h.


Member Function Documentation

bool drizzled::plugin::XaStorageEngine::alwaysRegisterForXaTransaction ( ) const [inline, virtual]

Returns true if the class should be registered for every XA transaction regardless of whether the class modifies the server's state.

Note:

As an example, the XaTransactionApplier plugin class returns true for this virtual method. Even though it does not change the result of the transaction (it simply is logging the changes made by other resource managers), the applier plugin should be enlisted in all XA transactions in order to be able to rollback or recover its logging activity properly.

Reimplemented from drizzled::plugin::TransactionalStorageEngine.

Definition at line 85 of file xa_storage_engine.h.

virtual const char** drizzled::plugin::StorageEngine::bas_ext ( ) const [pure virtual, inherited]

If frm_error() is called then we will use this to find out what file extentions exist for the storage engine. This is also used by the default rename_table and delete_table method in Cursor.cc.

For engines that have two file name extentions (separate meta/index file and data file), the order of elements is relevant. First element of engine file name extentions array should be meta/index file extention. Second element - data file extention. This order is assumed by prepare_for_repair() when REPAIR Table ... USE_FRM is issued.

Implemented in Function, HailDBEngine, Schema, drizzled::plugin::SEAPITester, and TableProtoTesterEngine.

Referenced by drizzled::plugin::StorageEngine::doDropTable().

bool drizzled::plugin::StorageEngine::canCreateTable ( const drizzled::identifier::Table identifier) [static, inherited]
Note:
on success table can be created.

Definition at line 1173 of file storage_engine.cc.

void drizzled::plugin::StorageEngine::closeConnection ( Session session) [static, inherited]
Note:
don't bother to rollback here, it's done already

Definition at line 261 of file storage_engine.cc.

int drizzled::plugin::XaResourceManager::commitOrRollbackXID ( XID xid,
bool  commit 
) [static, inherited]

The below static class methods wrap the interaction of the vector of registered XA storage engines.

Definition at line 46 of file xa_resource_manager.cc.

bool drizzled::plugin::StorageEngine::createTable ( Session session,
const identifier::Table identifier,
message::Table table_message 
) [static, inherited]

Initiates table-file and calls appropriate database-creator.

Return values:
0ok
1error

Definition at line 551 of file storage_engine.cc.

References drizzled::Table::delete_table().

int drizzled::plugin::StorageEngine::doDropTable ( Session session,
const drizzled::identifier::Table identifier 
) [protected, pure virtual, inherited]

Delete all files with extension from bas_ext().

Parameters:
nameBase name of table
Note:
We assume that the Cursor may return more extensions than was actually used for the file.
Return values:
0If we successfully deleted at least one file from base_ext and didn't get any other errors than ENOENT
!0Error

Implemented in Function, HailDBEngine, Schema, drizzled::plugin::SEAPITester, and TableProtoTesterEngine.

Definition at line 137 of file storage_engine.cc.

References drizzled::plugin::StorageEngine::bas_ext().

Referenced by drizzled::plugin::SEAPITester::doDropTable().

bool drizzled::plugin::plugin::StorageEngine::doesTableExist ( Session session,
const drizzled::identifier::Table identifier,
bool  include_temporary_tables = true 
) [static, inherited]

Utility method which hides some of the details of getTableDefinition()

Definition at line 332 of file storage_engine.cc.

Referenced by drizzled::internal_alter_table().

bool drizzled::plugin::StorageEngine::get_error_message ( int  error,
String buf 
) const [protected, virtual, inherited]

Return an error message specific to this Cursor.

Parameters:
errorerror code previously returned by Cursor
bufpointer to String where to add error message
Returns:
Returns true if this is a temporary error

Definition at line 1005 of file storage_engine.cc.

Referenced by drizzled::plugin::StorageEngine::print_error().

size_t drizzled::plugin::MonitoredInTransaction::getId ( ) const [inline, inherited]

Returns the "slot" or ID of the monitored resource

Definition at line 87 of file monitored_in_transaction.h.

int drizzled::plugin::TransactionalStorageEngine::notifyStartTransaction ( Session session,
start_transaction_option_t  options 
) [static, inherited]

The below static class methods wrap the interaction of the vector of transactional storage engines.

Definition at line 106 of file transactional_storage_engine.cc.

bool drizzled::plugin::XaStorageEngine::participatesInSqlTransaction ( ) const [inline, virtual]

Returns true if the class should participate in the SQL transaction.

Reimplemented from drizzled::plugin::TransactionalStorageEngine.

Definition at line 77 of file xa_storage_engine.h.

bool drizzled::plugin::XaStorageEngine::participatesInXaTransaction ( ) const [inline, virtual]

Returns true if the class should participate in the XA transaction.

Reimplemented from drizzled::plugin::TransactionalStorageEngine.

Definition at line 81 of file xa_storage_engine.h.

void drizzled::plugin::StorageEngine::print_error ( int  error,
myf  errflag,
const Table table 
) const [virtual, inherited]

Print error that we got from Cursor function.

Note:
In case of delete table it's only safe to use the following parts of the 'table' structure:
  • table->getShare()->path
  • table->alias

Definition at line 801 of file storage_engine.cc.

References drizzled::Table::get_dup_key(), drizzled::plugin::StorageEngine::get_error_message(), and drizzled::Table::key_info.

int drizzled::plugin::TransactionalStorageEngine::releaseTemporaryLatches ( Session session) [static, inherited]
Todo:
Kill this one entirely. It's implementation, not interface...

This function should be called when MySQL sends rows of a SELECT result set or the EOF mark to the client. It releases a possible adaptive hash index S-latch held by session in InnoDB and also releases a possible InnoDB query FIFO ticket to enter InnoDB. To save CPU time, InnoDB allows a session to keep them over several calls of the InnoDB Cursor interface when a join is executed. But when we let the control to pass to the client they have to be released because if the application program uses use_result(), it may deadlock on the S-latch if the application on another connection performs another SQL query. In MySQL-4.1 this is even more important because there a connection can have several SELECT queries open at the same time.

Parameters:
sessionthe thread handle of the current connection
Returns:
always 0

Definition at line 85 of file transactional_storage_engine.cc.

Referenced by drizzled::insert_query(), and drizzled::FileSort::run().


The documentation for this class was generated from the following files: