blob: d509a7c5205f8a3b3f82d1c55466b61a0768dcd4 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_STORAGE_BLOBFS_COMPRESSION_SETTINGS_H_
#define SRC_STORAGE_BLOBFS_COMPRESSION_SETTINGS_H_
#include <lib/zx/status.h>
#include <stdint.h>
#include <optional>
#include "src/storage/blobfs/format.h"
namespace blobfs {
// Unique identifiers for each |Compressor|/|Decompressor| strategy.
enum class CompressionAlgorithm {
UNCOMPRESSED = 0,
LZ4,
ZSTD,
ZSTD_SEEKABLE,
CHUNKED,
};
const char* CompressionAlgorithmToString(CompressionAlgorithm);
// Returns the compression algorithm used in |inode|.
zx::status<CompressionAlgorithm> AlgorithmForInode(const Inode& inode);
// Return an Inode header flagset with the flags associated with |algorithm|
// set, and all other flags are unset.
uint16_t CompressionInodeHeaderFlags(const CompressionAlgorithm& algorithm);
// Clear any existing compression flags and apply the new one.
void SetCompressionAlgorithm(Inode* inode, const CompressionAlgorithm algorithm);
// Settings to configure compression behavior.
struct CompressionSettings {
// Compression algorithm to use when storing blobs.
// Blobs that are already stored on disk using another compression algorithm from disk are not
// affected by this flag.
CompressionAlgorithm compression_algorithm = CompressionAlgorithm::CHUNKED;
// Write compression aggressiveness. Currently only used for ZSTD* and CHUNKED algorithms.
// If set to std::nullopt, an implementation-defined default is used.
std::optional<int> compression_level;
// Returns true if the configured settings are valid.
bool IsValid() const;
};
} // namespace blobfs
#endif // SRC_STORAGE_BLOBFS_COMPRESSION_SETTINGS_H_