1 //  Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
2 //  This source code is licensed under both the GPLv2 (found in the
3 //  COPYING file in the root directory) and Apache 2.0 License
4 //  (found in the LICENSE.Apache file in the root directory).
5 
6 #pragma once
7 
8 #include <cassert>
9 #include <cstdint>
10 #include <iosfwd>
11 #include <string>
12 
13 #include "db/blob/blob_constants.h"
14 #include "rocksdb/rocksdb_namespace.h"
15 
16 namespace ROCKSDB_NAMESPACE {
17 
18 class JSONWriter;
19 class Slice;
20 class Status;
21 
22 class BlobFileAddition {
23  public:
24   BlobFileAddition() = default;
25 
BlobFileAddition(uint64_t blob_file_number,uint64_t total_blob_count,uint64_t total_blob_bytes,std::string checksum_method,std::string checksum_value)26   BlobFileAddition(uint64_t blob_file_number, uint64_t total_blob_count,
27                    uint64_t total_blob_bytes, std::string checksum_method,
28                    std::string checksum_value)
29       : blob_file_number_(blob_file_number),
30         total_blob_count_(total_blob_count),
31         total_blob_bytes_(total_blob_bytes),
32         checksum_method_(std::move(checksum_method)),
33         checksum_value_(std::move(checksum_value)) {
34     assert(checksum_method_.empty() == checksum_value_.empty());
35   }
36 
GetBlobFileNumber()37   uint64_t GetBlobFileNumber() const { return blob_file_number_; }
GetTotalBlobCount()38   uint64_t GetTotalBlobCount() const { return total_blob_count_; }
GetTotalBlobBytes()39   uint64_t GetTotalBlobBytes() const { return total_blob_bytes_; }
GetChecksumMethod()40   const std::string& GetChecksumMethod() const { return checksum_method_; }
GetChecksumValue()41   const std::string& GetChecksumValue() const { return checksum_value_; }
42 
43   void EncodeTo(std::string* output) const;
44   Status DecodeFrom(Slice* input);
45 
46   std::string DebugString() const;
47   std::string DebugJSON() const;
48 
49  private:
50   enum CustomFieldTags : uint32_t;
51 
52   uint64_t blob_file_number_ = kInvalidBlobFileNumber;
53   uint64_t total_blob_count_ = 0;
54   uint64_t total_blob_bytes_ = 0;
55   std::string checksum_method_;
56   std::string checksum_value_;
57 };
58 
59 bool operator==(const BlobFileAddition& lhs, const BlobFileAddition& rhs);
60 bool operator!=(const BlobFileAddition& lhs, const BlobFileAddition& rhs);
61 
62 std::ostream& operator<<(std::ostream& os,
63                          const BlobFileAddition& blob_file_addition);
64 JSONWriter& operator<<(JSONWriter& jw,
65                        const BlobFileAddition& blob_file_addition);
66 
67 }  // namespace ROCKSDB_NAMESPACE
68