mirror of
https://github.com/safing/portmaster
synced 2025-09-07 04:59:16 +00:00
* Move portbase into monorepo * Add new simple module mgr * [WIP] Switch to new simple module mgr * Add StateMgr and more worker variants * [WIP] Switch more modules * [WIP] Switch more modules * [WIP] swtich more modules * [WIP] switch all SPN modules * [WIP] switch all service modules * [WIP] Convert all workers to the new module system * [WIP] add new task system to module manager * [WIP] Add second take for scheduling workers * [WIP] Add FIXME for bugs in new scheduler * [WIP] Add minor improvements to scheduler * [WIP] Add new worker scheduler * [WIP] Fix more bug related to new module system * [WIP] Fix start handing of the new module system * [WIP] Improve startup process * [WIP] Fix minor issues * [WIP] Fix missing subsystem in settings * [WIP] Initialize managers in constructor * [WIP] Move module event initialization to constrictors * [WIP] Fix setting for enabling and disabling the SPN module * [WIP] Move API registeration into module construction * [WIP] Update states mgr for all modules * [WIP] Add CmdLine operation support * Add state helper methods to module group and instance * Add notification and module status handling to status package * Fix starting issues * Remove pilot widget and update security lock to new status data * Remove debug logs * Improve http server shutdown * Add workaround for cleanly shutting down firewall+netquery * Improve logging * Add syncing states with notifications for new module system * Improve starting, stopping, shutdown; resolve FIXMEs/TODOs * [WIP] Fix most unit tests * Review new module system and fix minor issues * Push shutdown and restart events again via API * Set sleep mode via interface * Update example/template module * [WIP] Fix spn/cabin unit test * Remove deprecated UI elements * Make log output more similar for the logging transition phase * Switch spn hub and observer cmds to new module system * Fix log sources * Make worker mgr less error prone * Fix tests and minor issues * Fix observation hub * Improve shutdown and restart handling * Split up big connection.go source file * Move varint and dsd packages to structures repo * Improve expansion test * Fix linter warnings * Fix interception module on windows * Fix linter errors --------- Co-authored-by: Vladimir Stoilov <vladimir@safing.io>
55 lines
2.5 KiB
Markdown
55 lines
2.5 KiB
Markdown
This is a fork of the github.com/google/renameio Go package at commit 353f8196982447d8b12c64f69530e657331e3dbc.
|
||
|
||
The inital commit of this package will carry the original package contents.
|
||
The Original License is the Apache License in Version 2.0 and the copyright of the forked package is held by Google Inc.
|
||
Any changes are recorded in the git history, which is part of this project.
|
||
|
||
---
|
||
|
||
The `renameio` Go package provides a way to atomically create or replace a file or
|
||
symbolic link.
|
||
|
||
## Atomicity vs durability
|
||
|
||
`renameio` concerns itself *only* with atomicity, i.e. making sure applications
|
||
never see unexpected file content (a half-written file, or a 0-byte file).
|
||
|
||
As a practical example, consider https://manpages.debian.org/: if there is a
|
||
power outage while the site is updating, we are okay with losing the manpages
|
||
which were being rendered at the time of the power outage. They will be added in
|
||
a later run of the software. We are not okay with having a manpage replaced by a
|
||
0-byte file under any circumstances, though.
|
||
|
||
## Advantages of this package
|
||
|
||
There are other packages for atomically replacing files, and sometimes ad-hoc
|
||
implementations can be found in programs.
|
||
|
||
A naive approach to the problem is to create a temporary file followed by a call
|
||
to `os.Rename()`. However, there are a number of subtleties which make the
|
||
correct sequence of operations hard to identify:
|
||
|
||
* The temporary file should be removed when an error occurs, but a remove must
|
||
not be attempted if the rename succeeded, as a new file might have been
|
||
created with the same name. This renders a throwaway `defer
|
||
os.Remove(t.Name())` insufficient; state must be kept.
|
||
|
||
* The temporary file must be created on the same file system (same mount point)
|
||
for the rename to work, but the TMPDIR environment variable should still be
|
||
respected, e.g. to direct temporary files into a separate directory outside of
|
||
the webserver’s document root but on the same file system.
|
||
|
||
* On POSIX operating systems, the
|
||
[`fsync`](https://manpages.debian.org/stretch/manpages-dev/fsync.2) system
|
||
call must be used to ensure that the `os.Rename()` call will not result in a
|
||
0-length file.
|
||
|
||
This package attempts to get all of these details right, provides an intuitive,
|
||
yet flexible API and caters to use-cases where high performance is required.
|
||
|
||
## Disclaimer
|
||
|
||
This is not an official Google product (experimental or otherwise), it
|
||
is just code that happens to be owned by Google.
|
||
|
||
This project is not affiliated with the Go project.
|