-
Notifications
You must be signed in to change notification settings - Fork 4.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor database plugin sdk and prepare for ent database plugin sdk …
…development
- Loading branch information
Showing
15 changed files
with
266 additions
and
164 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
// Copyright (c) HashiCorp, Inc. | ||
// SPDX-License-Identifier: MPL-2.0 | ||
|
||
//go:build !enterprise | ||
|
||
package dbplugin | ||
|
||
import ( | ||
"github.com/hashicorp/vault/sdk/database/dbplugin/v5/proto" | ||
"github.com/hashicorp/vault/sdk/helper/pluginutil" | ||
) | ||
|
||
type entGRPCClient struct{} | ||
|
||
func (c gRPCClient) Close() error { | ||
ctx, cancel := getContextWithTimeout(pluginutil.PluginGRPCTimeoutClose) | ||
defer cancel() | ||
|
||
_, err := c.client.Close(ctx, &proto.Empty{}) | ||
if err != nil { | ||
if c.doneCtx.Err() != nil { | ||
return ErrPluginShutdown | ||
} | ||
return err | ||
} | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
// Copyright (c) HashiCorp, Inc. | ||
// SPDX-License-Identifier: MPL-2.0 | ||
|
||
//go:build !enterprise | ||
|
||
package dbplugin | ||
|
||
import ( | ||
"github.com/hashicorp/vault/sdk/database/dbplugin/v5/proto" | ||
) | ||
|
||
var _ proto.DatabaseClient = fakeClient{} | ||
|
||
type fakeClient struct { | ||
initResp *proto.InitializeResponse | ||
initErr error | ||
|
||
newUserResp *proto.NewUserResponse | ||
newUserErr error | ||
|
||
updateUserResp *proto.UpdateUserResponse | ||
updateUserErr error | ||
|
||
deleteUserResp *proto.DeleteUserResponse | ||
deleteUserErr error | ||
|
||
typeResp *proto.TypeResponse | ||
typeErr error | ||
|
||
closeErr error | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
55 changes: 55 additions & 0 deletions
55
sdk/database/dbplugin/v5/grpc_database_plugin_stubs_oss.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
// Copyright (c) HashiCorp, Inc. | ||
// SPDX-License-Identifier: MPL-2.0 | ||
|
||
//go:build !enterprise | ||
|
||
package dbplugin | ||
|
||
import ( | ||
"context" | ||
|
||
"github.com/hashicorp/go-plugin" | ||
"github.com/hashicorp/vault/sdk/database/dbplugin/v5/proto" | ||
"github.com/hashicorp/vault/sdk/helper/pluginutil" | ||
"github.com/hashicorp/vault/sdk/logical" | ||
"google.golang.org/grpc" | ||
) | ||
|
||
// GRPCClient (Vault CE edition) initializes and returns a gRPCClient with Database and | ||
// PluginVersion gRPC clients. It implements GRPCClient() defined | ||
// by GRPCPlugin interface in go-plugin/plugin.go | ||
func (GRPCDatabasePlugin) GRPCClient(doneCtx context.Context, _ *plugin.GRPCBroker, c *grpc.ClientConn) (interface{}, error) { | ||
client := gRPCClient{ | ||
client: proto.NewDatabaseClient(c), | ||
versionClient: logical.NewPluginVersionClient(c), | ||
doneCtx: doneCtx, | ||
} | ||
return client, nil | ||
} | ||
|
||
// GRPCServer (Vault CE edition) registers multiplexing server if the plugin supports it, and | ||
// registers the Database and PluginVersion gRPC servers. It implements GRPCServer() defined | ||
// by GRPCPlugin interface in go-plugin/plugin.go | ||
func (d GRPCDatabasePlugin) GRPCServer(_ *plugin.GRPCBroker, s *grpc.Server) error { | ||
var server gRPCServer | ||
|
||
if d.Impl != nil { | ||
server = gRPCServer{singleImpl: d.Impl} | ||
} else { | ||
// multiplexing is supported | ||
server = gRPCServer{ | ||
factoryFunc: d.FactoryFunc, | ||
instances: make(map[string]Database), | ||
} | ||
|
||
// Multiplexing is enabled for this plugin, register the server so we | ||
// can tell the client in Vault. | ||
pluginutil.RegisterPluginMultiplexingServer(s, pluginutil.PluginMultiplexingServerImpl{ | ||
Supported: true, | ||
}) | ||
} | ||
|
||
proto.RegisterDatabaseServer(s, &server) | ||
logical.RegisterPluginVersionServer(s, &server) | ||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
// Copyright (c) HashiCorp, Inc. | ||
// SPDX-License-Identifier: MPL-2.0 | ||
|
||
//go:build !enterprise | ||
|
||
package dbplugin | ||
|
||
import ( | ||
"sync" | ||
|
||
"github.com/hashicorp/vault/sdk/database/dbplugin/v5/proto" | ||
"github.com/hashicorp/vault/sdk/logical" | ||
) | ||
|
||
type gRPCServer struct { | ||
proto.UnimplementedDatabaseServer | ||
logical.UnimplementedPluginVersionServer | ||
|
||
// holds the non-multiplexed Database | ||
// when this is set the plugin does not support multiplexing | ||
singleImpl Database | ||
|
||
// instances holds the multiplexed Databases | ||
instances map[string]Database | ||
factoryFunc func() (interface{}, error) | ||
|
||
sync.RWMutex | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
// Copyright (c) HashiCorp, Inc. | ||
// SPDX-License-Identifier: MPL-2.0 | ||
|
||
//go:build !enterprise | ||
|
||
package dbplugin | ||
|
||
import ( | ||
"github.com/hashicorp/vault/sdk/logical" | ||
) | ||
|
||
var _ Database = fakeDatabase{} | ||
|
||
type fakeDatabase struct { | ||
initResp InitializeResponse | ||
initErr error | ||
|
||
newUserResp NewUserResponse | ||
newUserErr error | ||
|
||
updateUserResp UpdateUserResponse | ||
updateUserErr error | ||
|
||
deleteUserResp DeleteUserResponse | ||
deleteUserErr error | ||
|
||
typeResp string | ||
typeErr error | ||
|
||
closeErr error | ||
} | ||
|
||
var _ Database = &recordingDatabase{} | ||
|
||
type recordingDatabase struct { | ||
initializeCalls int | ||
newUserCalls int | ||
updateUserCalls int | ||
deleteUserCalls int | ||
typeCalls int | ||
closeCalls int | ||
|
||
// recordingDatabase can act as middleware so we can record the calls to other test Database implementations | ||
next Database | ||
} | ||
|
||
type fakeDatabaseWithVersion struct { | ||
version string | ||
} | ||
|
||
var ( | ||
_ Database = (*fakeDatabaseWithVersion)(nil) | ||
_ logical.PluginVersioner = (*fakeDatabaseWithVersion)(nil) | ||
) |
Oops, something went wrong.