[pve-devel] [PATCH storage v3 2/5] Cephfs storage plugin
Wolfgang Bumiller
w.bumiller at proxmox.com
Wed Jun 13 09:17:00 CEST 2018
On Tue, Jun 12, 2018 at 02:48:48PM +0200, Thomas Lamprecht wrote:
> On 6/11/18 11:31 AM, Alwin Antreich wrote:
> > - ability to mount through kernel and fuse client
> > - allow mount options
> > - get MONs from ceph config if not in storage.cfg
> > - allow the use of ceph config with fuse client
> >
(...)
> > +sub cephfs_is_mounted {
> > + my ($scfg, $storeid, $mountdata) = @_;
> > +
> > + my $cmd_option = PVE::CephStorageTools::ceph_connect_option($scfg, $storeid);
> > + my $configfile = $cmd_option->{ceph_conf};
> > + my $server = $get_monaddr_list->($scfg, $configfile);
> > +
> > + my $subdir = $scfg->{subdir} ? $scfg->{subdir} : '/';
>
> We normally use the following style for this:
>
> my $subdir = $scfg->{subdir} // '/';
Note the subtle difference - // checks for defined()ness of
$scfg->{subdir} in this case which you were probably lacking, depending
on whether explicit empty paths are allowed...
> > + my $mountpoint = $scfg->{path};
> > + my $source = "$server:$subdir";
> > +
> > + $mountdata = PVE::ProcFSTools::parse_proc_mounts() if !$mountdata;
> > + return $mountpoint if grep {
> > + $_->[2] =~ m#^ceph|fuse\.ceph-fuse# &&
> > + $_->[0] =~ m#^\Q$source\E|ceph-fuse$# &&
> > + $_->[1] eq $mountpoint
> > + } @$mountdata;
> > +
> > + warn "A filesystem is already mounted on $mountpoint\n"
> > + if grep { $_->[1] eq $mountpoint } @$mountdata;
> > +
> > + return undef;
> > +}
> > +
(...)
> > +
> > +sub activate_storage {
> > + my ($class, $storeid, $scfg, $cache) = @_;
> > +
> > + $cache->{mountdata} = PVE::ProcFSTools::parse_proc_mounts()
> > + if !$cache->{mountdata};
> > +
> > + my $path = $scfg->{path};
> > +
> > + if (!cephfs_is_mounted($scfg, $storeid, $cache->{mountdata})) {
> > +
> > + # NOTE: only call mkpath when not mounted (avoid hang
> > + # when cephfs is offline
> > +
> > + mkpath $path if !(defined($scfg->{mkdir}) && !$scfg->{mkdir});
>
> what? I do not understand this, who set's mkdir and why should it
> tell us if cephfs is not mounted?
> I'd just omit above comment, it's more confusing than helpful, IMO.
It's our directory-based storage option to know whether to create the
path leading up to the storage, as doing so when there's an
intermediate mount-point missing might prevent the mount from
happening. (eg. zfs)
But the comment isn't about this condition, it's about the one 2 lines
further up, so move it above the if, or remove the empty line in
between, to group them together.
Btw., since we're mounting a directory, it would probably be nice to
also allow adding the 'is_mountpoint' condition (particularly the path
based variant is always useful).
More information about the pve-devel
mailing list