mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
doc: add a little document describing new directory structure.
This commit is contained in:
parent
576dd1fc41
commit
0a31fb4aa3
158
doc/refactoring.txt
Normal file
158
doc/refactoring.txt
Normal file
@ -0,0 +1,158 @@
|
||||
Over time, I'd like to refactor the LVM code into these high level modules.
|
||||
|
||||
|
||||
+-------------------------------------------+
|
||||
| |
|
||||
| User Interface |
|
||||
| |
|
||||
| |
|
||||
+-------------------+-----------------------+
|
||||
|
|
||||
+--------------------v-----------------------+
|
||||
| |
|
||||
| LVM Core |
|
||||
| |
|
||||
| |
|
||||
+----+----------------+-----------------+----+
|
||||
| | |
|
||||
+-----v-----+ +-----v------+ +------v----+
|
||||
| | | | | |
|
||||
| Device | | Metadata | | System |
|
||||
| Mapper | | | | |
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
+-----------+ +------------+ +-----------+
|
||||
|
||||
+---------------------------------------------------------+
|
||||
|
||||
|
||||
+------------------------------------+
|
||||
| |
|
||||
| Base |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
+------------------------------------+
|
||||
|
||||
Going from the bottom up we have:
|
||||
|
||||
Base
|
||||
----
|
||||
|
||||
This holds all our general purpose code such as data structures, regex engine,
|
||||
memory allocators. In fact pretty much everything in libdevmapper apart from
|
||||
the dm code and config.
|
||||
|
||||
This can be used by any code in the system, which is why I've drawn a line
|
||||
between it and the code above rather than using arrows.
|
||||
|
||||
If anyone can come up with a better name please do. I'm trying to stay away
|
||||
from 'utils'.
|
||||
|
||||
|
||||
Device mapper
|
||||
-------------
|
||||
|
||||
As well as the low level dm-ioctl driving code we need to have all our dm 'best
|
||||
practise' stuff in here. For instance this is the code that decides to use the
|
||||
mirror target to move some data around; that knows to suspend a thin volume
|
||||
before taking a snapshot of it. This module is going to have a lot more code
|
||||
in it than the current libdevmapper.
|
||||
|
||||
It should not know anything about the LVM abstractions or metadata (no PVs, LVs
|
||||
or VGs). It just knows about the dm world.
|
||||
|
||||
Code in here is only allowed to use base.
|
||||
|
||||
|
||||
Metadata model
|
||||
--------------
|
||||
|
||||
Here we have all the format handling, labelling, config parsing etc. We try
|
||||
and put *everything* to do with LVM in here that doesn't actually require dm.
|
||||
|
||||
|
||||
System
|
||||
------
|
||||
|
||||
Code that interfaces with the system (udev etc).
|
||||
|
||||
|
||||
LVM Core
|
||||
--------
|
||||
|
||||
[terrible name]
|
||||
|
||||
This ties together the last 3 units. It should just be glue. We need to be
|
||||
strict about pushing code down from here to keep this as small as possible.
|
||||
|
||||
|
||||
User interface
|
||||
--------------
|
||||
|
||||
Self explanatory.
|
||||
|
||||
|
||||
Headers
|
||||
-------
|
||||
|
||||
Headers will be included using sub directories to make it clearer where they
|
||||
are in the tree.
|
||||
|
||||
eg,
|
||||
#include "base/mm/pool.h"
|
||||
#include "base/data-struct/list.h"
|
||||
#include "dm/thin-provisioning.h"
|
||||
#include "core/pvmove.h"
|
||||
|
||||
|
||||
Getting there
|
||||
=============
|
||||
|
||||
+-------------------------------------------+
|
||||
| |
|
||||
| |
|
||||
| Tools |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
+---------+------------------------------+--+
|
||||
| |
|
||||
| +---------------v---------------------------+
|
||||
| | |
|
||||
| | |
|
||||
| | Lib |
|
||||
| | |
|
||||
| | |
|
||||
| | |
|
||||
| | |
|
||||
| +----------------+--------------------------+
|
||||
| |
|
||||
| |
|
||||
+-----v-------------------------------v-----+
|
||||
| |
|
||||
| |
|
||||
| libdevmapper |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
+-------------------------------------------+
|
||||
|
||||
This is where I see us now.
|
||||
|
||||
'base' should be easy to factor out, it's just the non-dm part of libdevmapper
|
||||
(ie. the bulk of it). But we have the problem that libdevmapper is a public
|
||||
interface to get round.
|
||||
|
||||
'lib' is where the bulk of our code currently is. Dependency-wise the code is
|
||||
a bit like a ball of string. So splitting it up is going to take time. We can
|
||||
probably pull code pretty quickly into the 'metadata model' dir. But factoring
|
||||
out the dm best practises stuff is going to require splitting at least
|
||||
files, and probably functions. Certainly not something that can be done in one
|
||||
go. System should just be a question of cherry picking functions.
|
||||
|
||||
I'm not too familiar with the tools dir. Hopefully it just corresponds with
|
||||
the User Interface module and doesn't contain any business logic.
|
Loading…
Reference in New Issue
Block a user