[Libguestfs] [PATCH nbdkit v2] Add the ability to write plugins in golang.
Daniel P. Berrangé
berrange at redhat.com
Thu Apr 23 13:49:25 UTC 2020
On Thu, Apr 23, 2020 at 10:03:45AM +0100, Richard W.M. Jones wrote:
> On Tue, Apr 21, 2020 at 05:07:43PM +0100, Daniel P. Berrangé wrote:
> > On Tue, Apr 21, 2020 at 11:44:59AM +0100, Richard W.M. Jones wrote:
> > > Thanks: Dan Berrangé
> > >
> > > XXX UNFINISHED:
> > >
> > > - Is using uintptr for the handle a good idea? Plugins must return
> > > something != 0. In other languages we would allow plugins to
> > > return an arbitrary object here, but this is not possible in golang
> > > because of lack of GC roots.
> >
> > Yeah, this is the bit that looks wierd to me when thinking about this
> > from a Go dev POV. You asked me on IRC whether we should have a separate
> > interface for a connection object, and this makes me think that we should
> > indeed do that.
> ...
>
> This is what the patch looks like with a separate connection object.
> It appears to work.
>
> Rich.
>
> --
> Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
> Read my programming and virtualization blog: http://rwmj.wordpress.com
> virt-df lists disk usage of guests without needing to install any
> software inside the virtual machine. Supports Linux and Windows.
> http://people.redhat.com/~rjones/virt-df/
> From a929cff8745f21df913ea3230741dc7f2a1c016e Mon Sep 17 00:00:00 2001
> From: "Richard W.M. Jones" <rjones at redhat.com>
> Date: Thu, 9 Apr 2020 12:45:10 +0100
> Subject: [PATCH] Add the ability to write plugins in golang.
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
>
> Thanks: Dan Berrangé
>
> XXX UNFINISHED:
>
> - Default can_* methods are hard to implement. Ideally we would be
> able to test if a user plugin implements a particular callback
> (eg. TestPlugin.PWrite) or else defaults to the default callback,
> but even with reflection I don't think this is possible in golang.
> [Discussed on IRC: We decided the only option was to go for
> nbdkit-sh-plugin style can_* methods]
>
> - Write wrappers etc for all the other methods.
>
> - Write documentation.
> ---
> plugins/golang/nbdkit-golang-plugin.pod | 34 +++
> configure.ac | 32 +++
> plugins/golang/Makefile.am | 80 ++++++
> .../src/libguestfs.org/nbdkit/wrappers.h | 41 +++
> plugins/golang/config-test.go | 38 +++
> .../src/libguestfs.org/nbdkit/nbdkit.go | 270 ++++++++++++++++++
> .../golang/src/libguestfs.org/nbdkit/utils.go | 75 +++++
> .../src/libguestfs.org/nbdkit/wrappers.go | 102 +++++++
> plugins/golang/test/run-test.sh | 42 +++
> plugins/golang/test/test.go | 119 ++++++++
> .gitignore | 2 +
> README | 4 +
> 12 files changed, 839 insertions(+)
> create mode 100644 plugins/golang/nbdkit-golang-plugin.pod
> create mode 100644 plugins/golang/Makefile.am
> create mode 100644 plugins/golang/src/libguestfs.org/nbdkit/wrappers.h
> create mode 100644 plugins/golang/config-test.go
> create mode 100644 plugins/golang/src/libguestfs.org/nbdkit/nbdkit.go
> create mode 100644 plugins/golang/src/libguestfs.org/nbdkit/utils.go
> create mode 100644 plugins/golang/src/libguestfs.org/nbdkit/wrappers.go
> create mode 100755 plugins/golang/test/run-test.sh
> create mode 100644 plugins/golang/test/test.go
I think this design with two interfaces looks pretty nice from the
Go plugin implementors POV now.
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
More information about the Libguestfs
mailing list