extend and shrink share with glusterfs volume layout

Registered by Ramana Raja on 2015-06-05

Implement extend and shrink share APIs for glusterfs volume layout.

Volume size might exceed share size. In that case, GlusterFS quota can be used to enforce the declared size limit for the share, cf. https://bugs.launchpad.net/manila/+bug/1488356. This also provides a trivial mechanism for share shrinking, ie. through lowering the quota.

Share extension could be tried in the same way -- by increasing the quota; the problem with this idea is that it works only if volume size does exceed share size to the specified degree, which is too
much a gamble to be a suitable base for implementing the extend method.

However, there is one more circumstance that we can exploit to leverage this mechanism in a more regular manner: with a typical setup of GlusterFS volume layout, the volume pool will consist of *thin provisioned* volumes. Therefore it's possible without wasting storage capacity to assign a volume V to share S so that the nominal size of V is much larger than the requested size of S. If this is done strategically, we can turn it into a share extension mechanism.

The plan is as follows: we introduce two options,
- glusterfs_min_size_multiplier: for a share of size q we require a volume of size ≥ q * glusterfs_min_size_multiplier
- glusterfs_opt_size_multiplier: of the volumes suitable to back a share of size q, we chose one of those ones whose size is closest to q * glusterfs_opt_size_multiplier

That means we can guarantee the success of extension requests up to glusterfs_min_size_multiplier times of the original share size, and we do a best effort to satisfy extension requests up to glusterfs_min_size_multiplier times of the original share size.

Current behavior can be obtained with glusterfs_opt_size_multiplier = glusterfs_opt_size_multiplier = 1.

Blueprint information

Status:
Not started
Approver:
None
Priority:
Undefined
Drafter:
Ramana Raja
Direction:
Needs approval
Assignee:
Csaba Henk
Definition:
Approved
Series goal:
Proposed for liberty
Implementation:
Unknown
Milestone target:
None

Related branches

Sprints

Whiteboard

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.

Subscribers

No subscribers.