blob: 70e61c103458ac6ba6d8a6ed5cac471bbf2207d2 [file] [log] [blame]
/*
* Copyright 2024-present Alibaba Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include <cstdint>
#include <memory>
#include <string>
#include <vector>
#include "paimon/result.h"
#include "paimon/type_fwd.h"
#include "paimon/visibility.h"
namespace paimon {
class CommitMessageSerializer;
class MemoryPool;
/// Commit message for partition and bucket. Support Serialize and Deserialize, compatible with java
/// version.
// TODO(yonghao.fyh): to add some statistics of write (e.g., write bytes)
class PAIMON_EXPORT CommitMessage {
public:
/// Gets the version with which this serializer serializes.
static int32_t CurrentVersion();
virtual ~CommitMessage();
/// Serializes a single commit message to a binary string format.
/// The serialized format is compatible with the Java version of Paimon.
/// @param commit_message The commit message to serialize.
/// @param pool Memory pool for memory allocation during serialization.
/// @return Result containing the serialized string data, or an error if serialization fails.
static Result<std::string> Serialize(const std::shared_ptr<CommitMessage>& commit_message,
const std::shared_ptr<MemoryPool>& pool);
/// Serializes a list of commit messages to a binary string format.
/// @param commit_messages Vector of commit messages to serialize.
/// @param pool Memory pool for memory allocation during serialization.
/// @return Result containing the serialized string data, or an error if serialization fails.
static Result<std::string> SerializeList(
const std::vector<std::shared_ptr<CommitMessage>>& commit_messages,
const std::shared_ptr<MemoryPool>& pool);
/// Deserializes a single commit message from binary data.
/// @param version The serialization format version used when the data was serialized.
/// @param buffer Pointer to the binary data buffer.
/// @param length Length of the binary data in bytes.
/// @param pool Memory pool for memory allocation during deserialization.
/// @return Result containing the deserialized CommitMessage, or an error if deserialization
/// fails.
static Result<std::shared_ptr<CommitMessage>> Deserialize(
int32_t version, const char* buffer, int32_t length,
const std::shared_ptr<MemoryPool>& pool);
/// Deserializes a list of commit messages from binary data.
/// This is the counterpart to SerializeList() for batch processing.
/// @param version The serialization format version used when the data was serialized.
/// @param buffer Pointer to the binary data buffer.
/// @param length Length of the binary data in bytes.
/// @param pool Memory pool for memory allocation during deserialization.
/// @return Result containing a vector of deserialized CommitMessages, or an error if
/// deserialization fails.
static Result<std::vector<std::shared_ptr<CommitMessage>>> DeserializeList(
int32_t version, const char* buffer, int32_t length,
const std::shared_ptr<MemoryPool>& pool);
/// Converts a commit message to a human-readable debug string.
/// This is useful for logging, debugging, and troubleshooting purposes.
/// @param commit_message The commit message to convert to string.
/// @return Result containing the debug string representation, or an error if conversion fails.
static Result<std::string> ToDebugString(const std::shared_ptr<CommitMessage>& commit_message);
};
} // namespace paimon