112 lines
2.9 KiB
Objective-C

/* Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
#ifndef OBSERVER_TRANS
#define OBSERVER_TRANS
#include <mysql/gcs/gcs_communication_interface.h>
#include "gcs_plugin_messages.h"
#include "plugin.h"
/**
Initialize transactions observer structures.
*/
void observer_trans_initialize();
/**
Terminate transactions observer structures.
*/
void observer_trans_terminate();
/**
Clear server sessions opened caches.
*/
void observer_trans_clear_io_cache_unused_list();
/*
Transaction lifecycle events observers.
*/
int group_replication_trans_before_dml(Trans_param *param, int& out);
int group_replication_trans_before_commit(Trans_param *param);
int group_replication_trans_before_rollback(Trans_param *param);
int group_replication_trans_after_commit(Trans_param *param);
int group_replication_trans_after_rollback(Trans_param *param);
extern Trans_observer trans_observer;
/*
@class Transaction_Message
Class to convey the serialized contents of the TCLE
*/
class Transaction_Message: public Plugin_gcs_message
{
public:
enum enum_payload_item_type
{
// This type should not be used anywhere.
PIT_UNKNOWN= 0,
// Length of the payload item: variable
PIT_TRANSACTION_DATA= 1,
// No valid type codes can appear after this one.
PIT_MAX= 2
};
/**
Default constructor
*/
Transaction_Message();
virtual ~Transaction_Message();
/**
Appends IO_CACHE data to the internal buffer
@param[in] src the IO_CACHE to copy data from
@return true in case of error
*/
bool append_cache(IO_CACHE *src);
protected:
/*
Implementation of the template methods
*/
void encode_payload(std::vector<unsigned char>* buffer) const;
void decode_payload(const unsigned char* buffer, const unsigned char* length);
private:
std::vector<uchar> data;
};
/**
Broadcasts the Transaction Message
@param msg the message to broadcast
@return the communication engine broadcast message error
@retval GCS_OK, when message is transmitted successfully
@retval GCS_NOK, when error occurred while transmitting message
@retval GCS_MESSAGE_TOO_BIG, when message is bigger than
communication engine can handle
*/
enum enum_gcs_error send_transaction_message(Transaction_Message* msg);
#endif /* OBSERVER_TRANS */