libstorage-ng
LvmLv.h
1 /*
2  * Copyright (c) [2016-2021] SUSE LLC
3  *
4  * All Rights Reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of version 2 of the GNU General Public License as published
8  * by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, contact Novell, Inc.
17  *
18  * To contact Novell about this file by physical or electronic mail, you may
19  * find current contact information at www.novell.com.
20  */
21 
22 
23 #ifndef STORAGE_LVM_LV_H
24 #define STORAGE_LVM_LV_H
25 
26 
27 #include "storage/Devices/BlkDevice.h"
28 #include "storage/Devicegraph.h"
29 
30 
31 namespace storage
32 {
33 
34  class LvmVg;
35 
36 
40  enum class LvType
41  {
47  UNKNOWN,
48 
52  NORMAL,
53 
59  THIN_POOL,
60 
64  THIN,
65 
71  RAID,
72 
78  CACHE_POOL,
79 
85  CACHE,
86 
92  WRITECACHE,
93 
99  SNAPSHOT,
100 
107  MIRROR
108  };
109 
110 
116  std::string get_lv_type_name(LvType lv_type);
117 
118 
120  {
121  public:
122 
123  LvmLvNotFoundByLvName(const std::string& lv_name);
124  };
125 
126 
128  {
129  public:
130 
131  InvalidStripeSize(const std::string& msg);
132  };
133 
134 
136  {
137  public:
138 
139  InvalidChunkSize(const std::string& msg);
140  };
141 
142 
146  class LvmLv : public BlkDevice
147  {
148 
149  public:
150 
157  static LvmLv* create(Devicegraph* devicegraph, const std::string& vg_name,
158  const std::string& lv_name, LvType lv_type);
159 
160  static LvmLv* load(Devicegraph* devicegraph, const xmlNode* node);
161 
165  static std::vector<LvmLv*> get_all(Devicegraph* devicegraph);
166 
170  static std::vector<const LvmLv*> get_all(const Devicegraph* devicegraph);
171 
180  const std::string& get_lv_name() const;
181 
188  void set_lv_name(const std::string& lv_name);
189 
193  static bool is_valid_lv_name(const std::string& lv_name);
194 
200  LvType get_lv_type() const;
201 
205  unsigned int get_stripes() const;
206 
214  void set_stripes(unsigned int stripes);
215 
219  unsigned long long get_stripe_size() const;
220 
228  void set_stripe_size(unsigned long long stripe_size);
229 
233  unsigned long long get_chunk_size() const;
234 
240  void set_chunk_size(unsigned long long chunk_size);
241 
247  const LvmVg* get_lvm_vg() const;
248 
254  const LvmLv* get_thin_pool() const;
255 
260  bool has_snapshots() const;
261 
267  std::vector<LvmLv*> get_snapshots();
268 
272  std::vector<const LvmLv*> get_snapshots() const;
273 
281  bool has_origin() const;
282 
290  LvmLv* get_origin();
291 
295  const LvmLv* get_origin() const;
296 
305  unsigned long long max_size_for_lvm_lv(LvType lv_type) const;
306 
315  LvmLv* create_lvm_lv(const std::string& lv_name, LvType lv_type, unsigned long long size);
316 
320  LvmLv* get_lvm_lv(const std::string& lv_name);
321 
322  std::vector<LvmLv*> get_lvm_lvs();
323  std::vector<const LvmLv*> get_lvm_lvs() const;
324 
332  static bool compare_by_lv_name(const LvmLv* lhs, const LvmLv* rhs);
333 
334  public:
335 
336  class Impl;
337 
338  Impl& get_impl();
339  const Impl& get_impl() const;
340 
341  virtual LvmLv* clone() const override;
342 
343  LvmLv(Impl* impl);
344 
345  };
346 
347 
353  bool is_lvm_lv(const Device* device);
354 
361  LvmLv* to_lvm_lv(Device* device);
362 
366  const LvmLv* to_lvm_lv(const Device* device);
367 
368 }
369 
370 #endif
A cache-pool logical volume.
std::string get_lv_type_name(LvType lv_type)
Convert LvType to string.
bool has_origin() const
Check whether the logical volume has an origin.
A thick snapshot.
A mirror volume.
Definition: LvmLv.h:135
A Logical Volume of the Logical Volume Manager (LVM).
Definition: LvmLv.h:146
static bool compare_by_lv_name(const LvmLv *lhs, const LvmLv *rhs)
Compare (less than) two LvmLvs by lv-name.
std::vector< LvmLv * > get_snapshots()
Get snapshots of the logical volume.
unsigned long long get_stripe_size() const
Get the stripe size.
const LvmVg * get_lvm_vg() const
Return volume group this logical volume belongs to.
LvType get_lv_type() const
Return the logical volume type.
LvmLv * get_lvm_lv(const std::string &lv_name)
A linear or striped logical volume.
const std::string & msg() const
Return the message string provided to the constructor.
Definition: Exception.h:150
const std::string & get_lv_name() const
Get the logical volume name.
A cache logical volume.
A Volume Group of the Logical Volume Manager (LVM).
Definition: LvmVg.h:60
unsigned int get_stripes() const
Get the number of stripes.
Definition: LvmLv.h:119
LvmLv * create_lvm_lv(const std::string &lv_name, LvType lv_type, unsigned long long size)
Create a logical volume with name lv_name and type lv_type in the thin pool.
const LvmLv * get_thin_pool() const
Return the thin pool for a thin logical volume.
The main container of the libstorage-ng.
Definition: Devicegraph.h:169
void set_lv_name(const std::string &lv_name)
Set the logical volume name.
An abstract Block Device.
Definition: BlkDevice.h:48
unsigned long long get_chunk_size() const
Get the chunk size.
static LvmLv * create(Devicegraph *devicegraph, const std::string &vg_name, const std::string &lv_name, LvType lv_type)
Create a device of type LvmLv.
unsigned long long max_size_for_lvm_lv(LvType lv_type) const
Return the max size in bytes for a new logical volume of type lv_type.
An abstract base class for storage devices.
Definition: Device.h:81
A thin logical volume.
Definition: Devicegraph.h:49
bool has_snapshots() const
Check whether the logical volume has snapshots.
void set_chunk_size(unsigned long long chunk_size)
Set the chunk size.
A thin-pool logical volume.
Definition: LvmLv.h:127
A raid logical volume.
Base class for storage exceptions.
Definition: Exception.h:113
bool is_lvm_lv(const Device *device)
Checks whether device points to a LvmLv.
The storage namespace.
Definition: Actiongraph.h:39
static bool is_valid_lv_name(const std::string &lv_name)
Check whether a (new and public) logical volume name is valid.
A writecache logical volume.
LvmLv * get_origin()
Get the origin of the logical volume if it has one.
LvType
LVM logical volume types, see lvs(8).
Definition: LvmLv.h:40
static std::vector< LvmLv * > get_all(Devicegraph *devicegraph)
Get all LvmLvs.
void set_stripes(unsigned int stripes)
Set the number of stripes.
LvmLv * to_lvm_lv(Device *device)
Converts pointer to Device to pointer to LvmLv.
void set_stripe_size(unsigned long long stripe_size)
Set the stripe size.