cephfs: add GetFsCid to implement ceph_get_fs_cid

This function can be used to uniquely id the file system that the
mount object is connecting to.

Signed-off-by: John Mulligan <jmulligan@redhat.com>
This commit is contained in:
John Mulligan 2020-02-14 10:00:21 -05:00 committed by Niels de Vos
parent 8948b20f5a
commit fa5bb0fd69
2 changed files with 62 additions and 0 deletions

30
cephfs/conn_nautilus.go Normal file
View File

@ -0,0 +1,30 @@
// +build !luminous,!mimic
package cephfs
/*
#cgo LDFLAGS: -lcephfs
#cgo CPPFLAGS: -D_FILE_OFFSET_BITS=64
#include <cephfs/libcephfs.h>
*/
import "C"
// Some general connectivity and mounting functions are new in
// Ceph Nautilus.
// GetFsCid returns the cluster ID for a mounted ceph file system.
// If the object does not refer to a mounted file system, an error
// will be returned.
//
// Note:
// Only supported in Ceph Nautilus and newer.
//
// Implements:
// int64_t ceph_get_fs_cid(struct ceph_mount_info *cmount);
func (mount *MountInfo) GetFsCid() (int64, error) {
ret := C.ceph_get_fs_cid(mount.mount)
if ret < 0 {
return 0, getError(C.int(ret))
}
return int64(ret), nil
}

View File

@ -0,0 +1,32 @@
// +build !luminous,!mimic
package cephfs
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestGetFsCid(t *testing.T) {
t.Run("unmounted", func(t *testing.T) {
mount, err := CreateMount()
require.NoError(t, err)
require.NotNil(t, mount)
err = mount.ReadDefaultConfigFile()
require.NoError(t, err)
cid, err := mount.GetFsCid()
assert.Error(t, err)
assert.Equal(t, cid, int64(0))
})
t.Run("mounted", func(t *testing.T) {
mount := fsConnect(t)
cid, err := mount.GetFsCid()
assert.NoError(t, err)
assert.GreaterOrEqual(t, cid, int64(0))
})
}