blob: 7883c5bb626722c472697e1eda10cae191813ebb [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/result.h>
#include <stdint.h>
#include <optional>
#include "src/storage/blobfs/format.h"
namespace blobfs {
// Unique identifiers for each |Compressor|/|Decompressor| strategy.
enum class CompressionAlgorithm {
kUncompressed = 0,
kChunked,
};
const char* CompressionAlgorithmToString(CompressionAlgorithm);
// Returns the compression algorithm used in |inode|.
zx::result<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::kChunked;
// 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_