]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/StoreSwapLogData.h
330922f233e202bbcdbff8c20f0a5e9f3f06fef6
2 * Copyright (C) 1996-2025 The Squid Software Foundation and contributors
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
9 #ifndef SQUID_SRC_STORESWAPLOGDATA_H
10 #define SQUID_SRC_STORESWAPLOGDATA_H
13 \defgroup FileFormatSwapStateAPI swap.state File Structure
15 \section ImplementationNotes Implementation Notes
17 * When writing an object to disk, we must first write the meta data.
18 * Store::PackSwapMeta() serializes that meta data
19 * into a character buffer that we can write.
21 \note MemObject has a MemObject::swap_hdr_sz.
22 * This value is the size of that character buffer; the size of the
23 * swap file meta data. The StoreEntry has a member
24 * StoreEntry::swap_file_sz that represents the size of the disk file.
25 * Thus, the size of the object "content" is
26 \code StoreEntry->swap_file_sz - MemObject->swap_hdr_sz; \endcode
27 \note The swap file content includes the HTTP reply headers and the HTTP reply body (if any).
30 * When reading a swap file, Store::Unpack*SwapMeta*() functions iterate
31 * over stored swap meta data header fields and also extract
32 * the value for MemObject->swap_hdr_sz.
36 #include "mem/forward.h"
37 #include "store/forward.h"
39 /// maintains a 24-bit checksum over integer fields
43 SwapChecksum24() { raw
[0] = raw
[1] = raw
[2] = 0; }
45 bool operator ==(const SwapChecksum24
&o
) const {
46 return raw
[0] == o
.raw
[0] && raw
[1] == o
.raw
[1] && raw
[2] == o
.raw
[2];
49 bool operator !=(const SwapChecksum24
&o
) const {
53 /// compute and store checksum based on three 32bit integers
54 void set(uint32_t f1
, uint32_t f2
, uint32_t f3
);
56 /// compute and store checksum based on int32_t and uint64_t integers
57 void set(int32_t f1
, uint64_t f2
);
59 // printing for debugging
60 std::ostream
&print(std::ostream
&os
) const;
63 uint8_t raw
[3]; // designed to follow "op" members, in padding space
67 operator <<(std::ostream
&os
, const SwapChecksum24
&sum
)
73 \ingroup FielFormatSwapStateAPI
76 * Defines the structure of a binary swap.state file entry for UFS stores.
77 * TODO: Move to fs/ufs
79 \note StoreSwapLogData entries are written in native machine byte order
80 * They are not necessarily portable across architectures.
82 class StoreSwapLogData
84 MEMPROXY_CLASS(StoreSwapLogData
);
87 /// type to use for storing time-related members; must be signed
88 typedef int64_t SwappedTime
;
90 /// consistency self-check: whether the data appears to make sense
93 /// call this before storing the log entry
97 * Either SWAP_LOG_ADD when an object is added to the disk storage,
98 * or SWAP_LOG_DEL when an object is deleted.
103 * Fingerprint to weed out bogus/corrupted swap.state entries.
105 SwapChecksum24 checksum
; // follows "op" because compiler will pad anyway
108 * The 32-bit file number which maps to a pathname.
109 * Only the low 24-bits are relevant. The high 8-bits are
110 * used as an index to an array of storage directories, and
111 * are set at run time because the order of storage directories
112 * may change over time.
114 sfileno swap_filen
= 0;
117 * A Unix time value that represents the time when
118 * the origin server generated this response. If the response
119 * has a valid Date: header, this timestamp corresponds
120 * to that time. Otherwise, it is set to the Squid process time
121 * when the response is read (as soon as the end of headers are found).
123 SwappedTime timestamp
= 0;
126 * The last time that a client requested this object.
128 SwappedTime lastref
= 0;
131 * The value of the response's Expires: header, if any.
132 * If the response does not have an Expires: header, this
134 * If the response has an invalid (unparsable)
135 * Expires: header, it is also set to -1. There are some cases
136 * where Squid sets expires to -2. This happens for the
137 * internal "netdb" object and for FTP URL responses.
139 SwappedTime expires
= 0;
142 * The value of the response's Last-modified: header, if any.
143 * This is set to -1 if there is no Last-modified: header,
144 * or if it is unparsable.
146 SwappedTime lastmod
= 0;
149 * This is the number of bytes that the object occupies on
150 * disk. It includes the Squid "swap file header".
152 uint64_t swap_file_sz
= 0;
155 * The number of times that this object has been accessed (referenced).
156 * Since its a 16-bit quantity, it is susceptible to overflow
157 * if a single object is accessed 65,536 times before being replaced.
162 * A copy of the StoreEntry flags field. Used as a sanity
163 * check when rebuilding the cache at startup. Objects that
164 * have the KEY_PRIVATE flag set are not added back to the cache.
169 * The 128-bit MD5 hash for this object.
171 unsigned char key
[SQUID_MD5_DIGEST_LENGTH
] = {};
174 /// \ingroup FileFormatSwapStateAPI
175 /// Swap log starts with this binary structure.
176 class StoreSwapLogHeader
179 // sets default values for this Squid version; loaded values may differ
180 StoreSwapLogHeader();
182 /// consistency self-check: whether the data appears to make sense
185 /// number of bytes after the log header before the first log entry
186 size_t gapSize() const;
189 SwapChecksum24 checksum
; // follows "op" because compiler will pad anyway
194 #endif /* SQUID_SRC_STORESWAPLOGDATA_H */