llnl / llnl/UnifyFS

Design: client library API

Open
#257 13 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
C
Stars
122
Forks
34
PR merge metrics
No merged PRs in 30d

Description

Currently, all client library functionality is designed around direct interception of existing I/O APIs (either via linker wrapping or GOTCHA). As a result, there really isn't a defined client library API other than `unifycr_mount` and `unifycr_unmount`. This leads to quite a bit of redundant code, and doesn't adequately support alternate uses, such as
* direct application clients, like Hyogi's command line tools effort (#148)
* VeloC memory-based API
* memory-based object stores and shared/anonymous mmap regions (related to #248)

This issue is to track the code reorganization needed within the client library to cleanly abstract the UnifyCR functionality from the upper-level uses. Ideally, we would end up with a `libunifycr` that could be used directly by an application, or as a support library for by `libunifycr-posix` (and perhaps `libunifycr-mem`). My suggestion is that the `libunifycr` API needs a thoughtful design to support the various use cases, and should not be tied to POSIX APIs/semantics. The `libunifycr` implementation would contain all of the code to interact with the local `unifycrd` (i.e., RPCs and shmem communication, shared data types and any associated serialization).

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the existing unifycr_mount and unifycr_unmount entry points, then map how libunifycr, libunifycr-posix, and the client-side communication with unifycrd are organized. Review the related uses in #148 and #248. Done means a defined, non-POSIX-specific libunifycr API that can support direct applications and higher-level libraries while containing the RPC, shared-memory, data-type, and serialization logic.

Written by the indexing model from the issue text.

Assessment

Tech stack
c
Domain
api, backend, distributed-systems
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.