Add a SubVolumeInfo function that works like the `ceph fs subvolume
info` command. This function returns a SubVolumeInfo type from parsing
the response JSON.
In order to re-use the existing QuotaSize type, which is an interface
and thus can't be unmarshaled directly, we use a non-exported wrapper
type for the unmarshaling and then we fix up the BytesQuota field so
that users of the library don't need to directly deal with the quota
size placeholder type, which can unmarshal the value.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
The date & time format used by ceph differs from the default used by Go
for time.Time types. Define a new type, embedding time.Time, that can
parse and expressing date+time strings the ceph way.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
Add a new quotaSizePlaceholder type which is a non-interface type that
can unmarshal JSON with a varying type into one of our types that meets
the QuotaSize interface.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
This clarifies what the size values are for when this interface is used
and hopefully clarifies what the size actually does to a subvolume. This
also generalizes the type a bit in preparation for it being used in
other upcoming functions.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
The SubVolumeGroupPath function maps the subvolumegroup to a path from
the root of the cephfs, and works like `ceph fs subvolumegroup getpath
...`.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
The SubVolumePath function maps the subvolume to a path from the root
of the cephfs, and works like `ceph fs subvolume getpath ...`.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
The EnumerateVolumes function returns a list of Name & ID pairs,
to identify the file systems in the cluster. The enumeration is based
on `ceph fs dump` like JSON, but for implementation only. The dump
feature itself is not currently exported in a raw form.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
Some of the queries we need to make are not mgr commands but (still?)
mon commands. Extend the interface and helper funcs to support issuing
mon commands.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
GetParentInfo() currently requires the caller to specify the
string length for various attributes it returns. If the
specified string length is less than required, it can return
ERANGE error. Replacing it with a new function which avoids
this.
Signed-off-by: Mudit Agarwal <muagarwa@redhat.com>
Removes some old reminder comments.
Adds doc comments with the keyword "Similar To" followed by block quoted
text that shows a cli command the function will behave similarly to.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
The environment variable to turn on tracing will now be parsed using
strconv.ParseBool rather than just a quick-n-dirty str compare.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
The volume status command does not appear to be able to return JSON
on nautilus. Disable it on anything other than octopus for now.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
When the ceph client code has not yet (asynchronously) gotten the mgr
map, it can return -EACCES when we run the MgrCommand function. We
before continuing with the test function to get the fsadmin we delay a
bit so that we are more likely to have the mgr map before continuing.
This change also fixes the caching of the fs admin.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
Add a function for resizing a subvolume as well as types needed to
create the JSON command and parse the response JSON. The newSize
argument can be passed a numeric value (as a ByteCount) or the special
constant `Infinite` much like the ceph cli command. This is accomplished
using the interface type `NewSize`.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
Allow the environment variable GO_CEPH_TEST_DEBUG_TRACE=yes to enable
tracing of the input & output json from the manager commands. This is
both useful for debugging the tests themselves and demonstrates the use
of something other than rados.Conn meeting the interface required by
FSAdmin.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
Add type to parse the pool info from the volume status response.
Use new general response unmarshal function.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
Integrate the new 'cephfs/admin' package with existing makefile rules
and entrypoint.sh for testing.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
Adds the central admin type `FSAdmin` and some helper functions.
Adds basic volume list and info functions.
Adds tests for the volume functions and common fsadmin functions.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
These functions are not part of the cephfs APIs but will be based on the
various command-json features of the 'ceph' command line tool.
This change only adds a doc.go to stub in the package.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
Make the statemant about not being able to statically link a less
general statement. It's not just cgo, we also only have shared objects
from ceph lib{rados,rbd,cephfs}.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
There were various random "documentation" tidbits, all for rados,
on the main readme. As these are neither comprehensive nor complete
I am moving them to a seperate page and calling them "hints" which
seem to be closer to what they are.
Eventually, we could include more comprehensive examples in the
docs/ directory.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
Add a caveat that go-ceph requires the ceph dynamically linked libraries
at runtime and that static linking is not available.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
Like a lot of projects on github the readme didn't really explain what
go-ceph *is*. There is a very brief project description and if you're
clever you may know what "bindings" are. This short introduction should
help clarify and expand that for any newcomers to the project.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
This "badge" was making use of travis ci. We dropped use of travis ci
months ago. I am opting not to replace the badge with something new
because I don't think badges are useful in the first place.
But I don't want to rock the boat too much and remove all of them.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
Extend the Preadv/Pwritev test cases by adding assertions for the
behavior of the call in the end-of-file condition, and add another
test case to clarify the behavior in an explicit short-read test.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
As pointed out in a review of Pwritev/Preadv functions, someone could
be using the tests as example code and not realize the "wide open"
permissions used in the test. Because it doesn't actually impact the
behavior of the test there's no reason not use use more restricted
permissions.
This change makes the older functions in the file use the restricted
perms too.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
Add Preadv implementing ceph_preadv.
Add Pwritev implementing ceph_pwritev.
These calls act similarly to ReadAt and WriteAt but take multiple
buffers at once.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
This type is useful for passing disparate buffers to be read or
written in a single call. Functions using this type exist in cephfs
and rbd. Currently this is needed for cephfs calls.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
The sparsify function can be used to make an image sparse by replacing
runs of zeros with holes. This change adds a wrapper for the basic
rbd_sparsify function and accompanying tests.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
Since the index of the registered callbacks is basically only used as
void*/unsafe.Pointer, it makes more sense and code simpler, if
the index type is uintptr instead of a simple int.
Signed-off-by: Sven Anderson <sven@redhat.com>
Bump the golang version to 1.14.7. Go 1.14 is now the older supported
version, with the recent release of Go.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
Switch the example of how to compile go-ceph with tags to refer to
nautilus in light of luminous and mimic being deprecated.
Small wording/grammar changes to try and make the sentence clearer.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
The castxml install from centos8+epel has been rather fraught with
errors including broken/failed installs and, at the time of this commit,
it installs but can not run due to llvm integration/cli issues.
On top of this it was not available on centos7 anyway and so would,
in theory, only have worked on the octopus container image.
At this point it seem that running the implements tool is not worth
all the failures that trying to install castxml causes.
Signed-off-by: John Mulligan <jmulligan@redhat.com>
Now that ceph/daemon-base:latest-octopus is on v15.2.4 we can
stop the need to update already installed packages in the container.
To make things "safer" and fail early with errors rather than mysterious
compatibility problems, I am adding explicit versions to the
lib{cephfs,rados,rbd}-devel-* packages. Now if the container can't find
these packages it will fail rather than partially upgrade the ceph
packages.
Signed-off-by: John Mulligan <jmulligan@redhat.com>