Skip to content

Conversation

@the-mikedavis
Copy link
Collaborator

This adds two new abstractions into osiris_log which provide hooks necessary for #184.

The simpler one is osiris_log_reader: open/1, pread/3, sendfile/4 and close/1. The default implementation reads directly from the passed segment file with the functions from file. A tiered storage reader would use the default implementation in osiris_log_reader for local files and otherwise read from the remote tier.

Then there is osiris_log_manifest which abstracts over whatever data structure is used to find positions within the log for readers. The default implementation is in osiris_log (in order to minimize the diff of this change) and it lists and sorts segment and index files from the stream's directory. While the manifest concept is meant to enable finding locations in the remote tier, this abstraction could also be used to swap out the current directory listing approach to do something like consult a file instead.

The manifest behaviour also has a callback for handling events: currently a segment file being rolled and a chunk being written. The manifest can use these events as hooks to update the backing data structure. This part isn't used by the default implementation.

@the-mikedavis the-mikedavis force-pushed the md/log-reader-and-manifest branch from 3e1045f to 71d7870 Compare August 1, 2025 21:43
TODO - fully replace the seg_info record with the map?
This change also refactors the overview type from being

    {osiris_log:range(), [{osiris:epoch(), osiris:offset()}]}

to being a map where both of those are required:

    #{range := osiris_log:range(),
      epoch_offsets := [{osiris:epoch(), osiris:offset()}]}

This allows other manifest implementations to stick other data in the
map. This map is passed through to replicas in `init_acceptor/2` and
`acceptor_manifest/2`, so they can use information from the manifest
from the writer's node.
@the-mikedavis
Copy link
Collaborator Author

Closing in favor of #196 - #196 is a much cleaner change

@the-mikedavis the-mikedavis deleted the md/log-reader-and-manifest branch October 14, 2025 15:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants