Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
snf-ganeti
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
itminedu
snf-ganeti
Commits
0f933d15
Commit
0f933d15
authored
Aug 29, 2008
by
Guido Trotter
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add doc/locking.txt, documenting locking order
Reviewed-by: imsnah
parent
082c5adb
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
34 additions
and
0 deletions
+34
-0
Makefile.am
Makefile.am
+1
-0
doc/locking.txt
doc/locking.txt
+33
-0
No files found.
Makefile.am
View file @
0f933d15
...
...
@@ -139,6 +139,7 @@ EXTRA_DIST = \
doc/examples/ganeti.initd.in
\
doc/examples/ganeti.cron.in
\
doc/examples/dumb-allocator
\
doc/locking.txt
\
test
/testutils.py
\
test
/mocks.py
\
$(dist_TESTS)
\
...
...
doc/locking.txt
0 → 100644
View file @
0f933d15
Introduction:
This document describes lock order dependencies in Ganeti.
It is divided by functional sections
Opcode Execution Locking:
These locks are declared by Logical Units (LUs) (in cmdlib.py) and acquired by
the Processor (in mcpu.py) with the aid of the Ganeti Locking Library
(locking.py). They are acquired in the following order:
* BGL: this is the Big Ganeti Lock, it exists for retrocompatibility. New LUs
acquire it in a shared fashion, and are able to execute all toghether
(baring other lock waits) while old LUs acquire it exclusively and can only
execute one at a time, and not at the same time with new LUs.
* Instance locks: can be declared in ExpandNames() o DeclareLocks() by an LU,
and have the same name as the instance itself. They are acquired as a set.
Internally the locking library acquired them in alphabetical order.
* Node locks: can be declared in ExpandNames() o DeclareLocks() by an LU, and
have the same name as the node itself. They are acquired as a set.
Internally the locking library acquired them in alphabetical order. Given
this order it's possible to safely acquire a set of instances, and then the
nodes they reside on.
The ConfigWriter (in config.py) is also protected by a SharedLock, which is
shared by functions that read the config and acquired exclusively by functions
that modify it. Since the ConfigWriter calls rpc.call_upload_file to all nodes
to distribute the config without holding the node locks, this call must be able
to execute on the nodes in parallel with other operations (but not necessarily
concurrently with itself on the same file, as inside the ConfigWriter this is
called with the internal config lock held.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment