From 1915aeb62ba28b896a8946048488af4ad5a7ced8 Mon Sep 17 00:00:00 2001 From: Chris Roberts Date: Mon, 17 May 2021 16:33:24 -0700 Subject: [PATCH] Add some helpers for wrapping scoping core plugins --- internal/core/core.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 internal/core/core.go diff --git a/internal/core/core.go b/internal/core/core.go new file mode 100644 index 000000000..6d9c66fa1 --- /dev/null +++ b/internal/core/core.go @@ -0,0 +1,40 @@ +package core + +import ( + "github.com/hashicorp/go-plugin" + "google.golang.org/grpc" +) + +type closer interface { + Closer(func() error) +} + +type closes interface { + Close() error +} + +func wrapInstance(p plugin.GRPCPlugin, b *plugin.GRPCBroker, c closer) (uint32, error) { + id := b.NextId() + errChan := make(chan error, 1) + + go b.AcceptAndServe(id, func(opts []grpc.ServerOption) *grpc.Server { + server := plugin.DefaultGRPCServer(opts) + if err := p.GRPCServer(b, server); err != nil { + errChan <- err + return nil + } + c.Closer(func() error { + server.GracefulStop() + return nil + }) + close(errChan) + return server + }) + + err := <-errChan + if err != nil { + return 0, err + } + + return id, nil +}