caddyserver / caddyserver/certmagic

Use posix file advisory locks on supported platforms

Open
#295 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

feature request
Dominant language
Go
Stars
5.6k
Forks
354
Avg merge
9d 23h
Merged PRs (30d)
3

Description

the current storage implementation uses a home brew approach to locking a file for a specific process.

this is a feature built into posix compatible filesystems.

certmagic filestorage should capability detect if posix locks are available, and if they are, use them to protect access to files.

advisory locks have two major weaknesses, that users of sqlite, mdbx, lmdb, are probably well familiar with.

  1. they do not work well on network filesystems (depends on implementation, very flaky regardless)
  2. you cannot use them to lock within a process - you still need mutex in process code to protect access to it.

#1 already exists as an issue in the current implementation

#2 can easily be dealt with by go's mutex.

as a result, I think that it would be good to incorporate this feature into certmagic storage.

that said, I don't use the filesystem module in production, so I don't really care that much. maybe someone who does would be happy to do this work :)

some resources:

https://gavv.net/articles/file-locks/
https://github.com/juju/fslock

Contributor guide

Open the contributing guide

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 by inspecting the certmagic filestorage implementation and its current file-locking path. Read the linked file-lock resources and determine how supported platforms can be detected; done means POSIX advisory locks protect file access where available while in-process access remains protected by a Go mutex.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
backend, operating-systems
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.