.. include:: ../common.defs
Cache Data Structures
*********************
.. cpp:class:: Vol
A badly named class that represents a :term:`stripe`.
.. cpp:class:: OpenDirEntry
Represents an active cache object.
.. cpp:class:: CacheHttpInfoVector::Slice
A version of an :term:`alternate`.
.. cpp:class:: CacheVC
A cache operation object that intermediates between the HTTP transaction and an object in cache.
Each instance is associated with a specific cached object and a specific transaction.
Diagrams
========
Class diagram.
.. uml::
class OpenDirEntry {
CacheVC* open_writer
}
class CacheVC {
}
OpenDirEntry::open_writer *- CacheVC
.. graphviz::
digraph data {
rankdir=LR
node [shape=plaintext]
CacheVC [ label=<
>
]
OpenDirEntry [ label=< >
]
HttpCacheAlt [ label=<
| \N |
| m_earliest |
| m_cached_idx |
>
]
FragmentDescriptor [ label=<
| \N |
| m_key |
| m_offset |
| ⊤m_flags |
| ⊢.cached_p |
>
]
Slice [ label=<
| \N |
| _writers |
| _active |
| _waiting |
| _content_buffers |
| _wait_idx_min |
| _wait_idx_max |
| _gen |
| ⊤_flags |
| ⊢.dirty |
>
]
HttpCacheAlt:m_earliest -> FragmentDescriptor:name [dir=back,arrowtail=diamond]
Slice:writers -> CacheVC:name [dir=back,arrowtail=odiamond,label="1:*"]
Slice:active -> CacheVC:name [dir=back,arrowtail=odiamond,label="1:*"]
Slice:waiting -> CacheVC:name [dir=back,arrowtail=odiamond,label="1:*"]
}