GSoC Weekly Check-In (Week 6-7-8)
July 19, 2021
What Did I do last week?
It’s been a long 3 weeks! I continued working on the runtime plugin module for the last month or so. I am regularly reviewing, updating
and making my PR better. After supporting the compiled binary loading, the next feature that I implemented was the compiling of the plugin
and then loading it on the reva core. This part was relatively easy and did not require much of a discussion. We decided to compile and store
the plugin binary at /var/tmp/reva/bin/<userprovider>/<driver>
. In order to facilitate this, I used the go exec
utility to compile the provided code and then
load the code!
The load and the compile function looks something like the following:
func Load(pluginType, driver) (*RevaPlugin, error) {// Loader returns a "loaded" reva plugin}
RevaPlugin plugin represents a loaded reva plugin. It has the following fields:
type RevaPlugin struct {Plugin interface{}Client *plugin.Client}
RevaPlugin contains the plugin implementation and the hashicorp plugin client. This Plugin implementation is used by the services to manage the plugin lifecycle. (Start, Kill plugins).
PS: The results of the first evaluation period were out on 16th July and I’m glad that I could pass it and hope to continue the good work.
What will I do next week?
The initial plan was to implement hot-reloading of plugins. But this idea was dropped after series of discussions with my mentor because of increasing complexity and would involving changing the entire implementation.
Hence, the plan for next week is to download and load plugins hosted as version controlled repository. The user can provide configuration such as:
[grpc.services.userprovider]driver = "github.com/jimil749/reva-plugin
The reva package should be able to download the code, compile it and then load it for the usage.
Any hiccups?
Not really. Just a few bugs here and there, but nothing major!