MySQL 9.0.0
Source Code Documentation
transaction_message.h
Go to the documentation of this file.
1/* Copyright (c) 2013, 2024, Oracle and/or its affiliates.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License, version 2.0,
5 as published by the Free Software Foundation.
6
7 This program is designed to work with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the program and your derivative works with the
12 separately licensed software that they have either included with
13 the program or referenced in the documentation.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License, version 2.0, for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
23
24#ifndef TRANSACTION_MESSAGE_INCLUDED
25#define TRANSACTION_MESSAGE_INCLUDED
26
28
29/*
30 @class Transaction_message
31 Class to convey the serialized contents of the TCLE
32 */
34 public:
36 // This type should not be used anywhere.
38
39 // Length of the payload item: variable
41
42 // Length of the payload item: 8 bytes
44
45 // No valid type codes can appear after this one.
46 PIT_MAX = 3
47 };
48
49 /**
50 Constructor
51
52 @param[in] payload_capacity The transaction data size
53 */
54 Transaction_message(uint64_t payload_capacity);
55 ~Transaction_message() override;
56
57 /**
58 Overrides Basic_ostream::write().
59 Transaction_message is a Basic_ostream, which appends
60 data into the a Gcs_message_data.
61
62 @param[in] buffer where the data will be read
63 @param[in] length the length of the data to write
64
65 @return returns false if succeeds, otherwise true is returned.
66 */
67 bool write(const unsigned char *buffer, my_off_t length) override;
68
69 /**
70 Length of the message.
71
72 @return message length
73 */
74 uint64_t length() override;
75
76 /**
77 Get the Gcs_message_data object, which contains the serialized
78 transaction data.
79 The internal Gcs_message_data is nullified, to avoid further usage
80 of this Transaction object and the caller receives a pointer to the
81 previously internal Gcs_message_data, which whom it is now responsible.
82
83 @return the serialized transaction data in a Gcs_message_data object
84 */
86
87 /**
88 Return the time at which the message contained in the buffer was sent.
89 @see Metrics_handler::get_current_time()
90
91 @param[in] buffer the buffer to decode from.
92 @param[in] length the buffer length
93
94 @return the time on which the message was sent.
95 */
96 static uint64_t get_sent_timestamp(const unsigned char *buffer,
97 size_t length);
98
99 protected:
100 /*
101 Implementation of the template methods
102 */
103 void encode_payload(std::vector<unsigned char> *buffer) const override;
104 void decode_payload(const unsigned char *buffer,
105 const unsigned char *) override;
106
107 private:
109 static const uint64_t s_sent_timestamp_pit_size;
110};
111
112#endif /* TRANSACTION_MESSAGE_INCLUDED */
This class serves as data container for information flowing in the GCS ecosystem.
Definition: gcs_message.h:48
Definition: transaction_message_interface.h:41
Definition: transaction_message.h:33
Gcs_message_data * m_gcs_message_data
Definition: transaction_message.h:108
static uint64_t get_sent_timestamp(const unsigned char *buffer, size_t length)
Return the time at which the message contained in the buffer was sent.
Definition: transaction_message.cc:105
uint64_t length() override
Length of the message.
Definition: transaction_message.cc:68
void encode_payload(std::vector< unsigned char > *buffer) const override
Encodes the contents of this instance payload into the buffer.
Definition: transaction_message.cc:94
bool write(const unsigned char *buffer, my_off_t length) override
Overrides Basic_ostream::write().
Definition: transaction_message.cc:59
Gcs_message_data * get_message_data_and_reset() override
Get the Gcs_message_data object, which contains the serialized transaction data.
Definition: transaction_message.cc:77
enum_payload_item_type
Definition: transaction_message.h:35
@ PIT_MAX
Definition: transaction_message.h:46
@ PIT_UNKNOWN
Definition: transaction_message.h:37
@ PIT_SENT_TIMESTAMP
Definition: transaction_message.h:43
@ PIT_TRANSACTION_DATA
Definition: transaction_message.h:40
static const uint64_t s_sent_timestamp_pit_size
Definition: transaction_message.h:109
void decode_payload(const unsigned char *buffer, const unsigned char *) override
Decodes the contents of the buffer and sets the payload field values according to the values decoded.
Definition: transaction_message.cc:99
Transaction_message(uint64_t payload_capacity)
Constructor.
Definition: transaction_message.cc:32
~Transaction_message() override
Definition: transaction_message.cc:54
ulonglong my_off_t
Definition: my_inttypes.h:72
mutable_buffer buffer(void *p, size_t n) noexcept
Definition: buffer.h:418