* Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#ifndef OMNISTREAM_FS_CHECKPOINT_STATE_OUTPUT_STREAM_H
#define OMNISTREAM_FS_CHECKPOINT_STATE_OUTPUT_STREAM_H
#include <ostream>
#include <string>
#include "core/utils/lang/AutoCloseable.h"
#include "core/fs/Path.h"
#include "runtime/state/StreamStateHandle.h"
#include "runtime/state/CheckpointStreamFactory.h"
class FsCheckpointStateOutputStream : public CheckpointStateOutputStream {
public:
FsCheckpointStateOutputStream(Path basePath,
int fs,
int bufferSize,
int localStateThreshold,
bool allowRelativePaths = false);
~FsCheckpointStateOutputStream()
{
delete outStream_;
}
void Write(const void* data, size_t length) override;
void Flush();
void Close();
std::shared_ptr<StreamStateHandle> CloseAndGetHandle();
bool IsClosed();
long GetPos();
void Sync();
private:
Path basePath_;
int fs_;
int bufferSize_;
int fileSize = 0;
int localStateThreshold_;
bool allowRelativePaths_;
bool closed_;
bool isSync = true;
std::string relativeStatePath_;
std::string tempPath_;
std::string finalPath_;
std::shared_ptr<StreamStateHandle> handle;
std::ostream* outStream_;
};
#endif