From 788c5be03a2393e5a6c759e1875fd4a79addcc00 Mon Sep 17 00:00:00 2001 From: Chris Roberts Date: Fri, 16 Sep 2022 17:15:24 -0700 Subject: [PATCH] Delete server config state and service --- internal/server/ptypes/server_config.go | 35 ----- .../singleprocess/service_server_config.go | 43 ------ .../service_server_config_test.go | 38 ----- .../singleprocess/state/server_config.go | 143 ------------------ .../singleprocess/state/server_config_test.go | 42 ----- 5 files changed, 301 deletions(-) delete mode 100644 internal/server/ptypes/server_config.go delete mode 100644 internal/server/singleprocess/service_server_config.go delete mode 100644 internal/server/singleprocess/service_server_config_test.go delete mode 100644 internal/server/singleprocess/state/server_config.go delete mode 100644 internal/server/singleprocess/state/server_config_test.go diff --git a/internal/server/ptypes/server_config.go b/internal/server/ptypes/server_config.go deleted file mode 100644 index 60572ae92..000000000 --- a/internal/server/ptypes/server_config.go +++ /dev/null @@ -1,35 +0,0 @@ -package ptypes - -import ( - "github.com/go-ozzo/ozzo-validation/v4" - "github.com/imdario/mergo" - "github.com/mitchellh/go-testing-interface" - "github.com/stretchr/testify/require" - - "github.com/hashicorp/vagrant/internal/server/proto/vagrant_server" -) - -func TestServerConfig(t testing.T, src *vagrant_server.ServerConfig) *vagrant_server.ServerConfig { - t.Helper() - - if src == nil { - src = &vagrant_server.ServerConfig{} - } - - require.NoError(t, mergo.Merge(src, &vagrant_server.ServerConfig{ - AdvertiseAddrs: []*vagrant_server.ServerConfig_AdvertiseAddr{ - { - Addr: "127.0.0.1", - }, - }, - })) - - return src -} - -// ValidateServerConfig validates the server config structure. -func ValidateServerConfig(c *vagrant_server.ServerConfig) error { - return validation.ValidateStruct(c, - validation.Field(&c.AdvertiseAddrs, validation.Required, validation.Length(1, 1)), - ) -} diff --git a/internal/server/singleprocess/service_server_config.go b/internal/server/singleprocess/service_server_config.go deleted file mode 100644 index bc2b6c295..000000000 --- a/internal/server/singleprocess/service_server_config.go +++ /dev/null @@ -1,43 +0,0 @@ -package singleprocess - -import ( - "context" - - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/types/known/emptypb" - - "github.com/hashicorp/vagrant/internal/server/proto/vagrant_server" - serverptypes "github.com/hashicorp/vagrant/internal/server/ptypes" -) - -type Targeter interface { - ServerTarget() string -} - -func (s *service) SetServerConfig( - ctx context.Context, - req *vagrant_server.SetServerConfigRequest, -) (*emptypb.Empty, error) { - if err := serverptypes.ValidateServerConfig(req.Config); err != nil { - return nil, status.Errorf(codes.FailedPrecondition, err.Error()) - } - - if err := s.state.ServerConfigSet(req.Config); err != nil { - return nil, err - } - - return &emptypb.Empty{}, nil -} - -func (s *service) GetServerConfig( - ctx context.Context, - req *emptypb.Empty, -) (*vagrant_server.GetServerConfigResponse, error) { - cfg, err := s.state.ServerConfigGet() - if err != nil { - return nil, err - } - - return &vagrant_server.GetServerConfigResponse{Config: cfg}, nil -} diff --git a/internal/server/singleprocess/service_server_config_test.go b/internal/server/singleprocess/service_server_config_test.go deleted file mode 100644 index 21e41a347..000000000 --- a/internal/server/singleprocess/service_server_config_test.go +++ /dev/null @@ -1,38 +0,0 @@ -package singleprocess - -import ( - "context" - "testing" - - "github.com/hashicorp/vagrant/internal/server" - "github.com/hashicorp/vagrant/internal/server/proto/vagrant_server" - "github.com/stretchr/testify/require" - "google.golang.org/protobuf/types/known/emptypb" -) - -func TestServiceServerConfig(t *testing.T) { - ctx := context.Background() - - t.Run("set and get", func(t *testing.T) { - require := require.New(t) - db := testDB(t) - impl, err := New(WithDB(db)) - require.NoError(err) - client := server.TestServer(t, impl) - - resp, err := client.SetServerConfig(ctx, &vagrant_server.SetServerConfigRequest{ - Config: &vagrant_server.ServerConfig{ - AdvertiseAddrs: []*vagrant_server.ServerConfig_AdvertiseAddr{ - {Addr: "1.2.3.4"}, - }, - }, - }) - require.NoError(err) - require.NotNil(resp) - - getResp, err := client.GetServerConfig(ctx, &emptypb.Empty{}) - require.NoError(err) - require.NotNil(getResp) - require.Equal("1.2.3.4", getResp.Config.AdvertiseAddrs[0].Addr) - }) -} diff --git a/internal/server/singleprocess/state/server_config.go b/internal/server/singleprocess/state/server_config.go deleted file mode 100644 index 0c3fed260..000000000 --- a/internal/server/singleprocess/state/server_config.go +++ /dev/null @@ -1,143 +0,0 @@ -package state - -import ( - "google.golang.org/protobuf/proto" - "github.com/hashicorp/go-memdb" - bolt "go.etcd.io/bbolt" - - "github.com/hashicorp/vagrant/internal/server/proto/vagrant_server" -) - -var ( - serverConfigBucket = []byte("server-config") - serverConfigId = []byte("1") -) - -func init() { - dbBuckets = append(dbBuckets, serverConfigBucket) - dbIndexers = append(dbIndexers, (*State).serverConfigIndexInit) - schemas = append(schemas, serverConfigIndexSchema) -} - -// ServerConfigSet writes the server configuration. -func (s *State) ServerConfigSet(c *vagrant_server.ServerConfig) error { - memTxn := s.inmem.Txn(true) - defer memTxn.Abort() - - err := s.db.Update(func(dbTxn *bolt.Tx) error { - return s.serverConfigSet(dbTxn, memTxn, c) - }) - if err == nil { - memTxn.Commit() - } - - return err -} - -// ServerConfigGet gets the server configuration. -func (s *State) ServerConfigGet() (*vagrant_server.ServerConfig, error) { - memTxn := s.inmem.Txn(false) - defer memTxn.Abort() - - v, err := memTxn.First( - serverConfigIndexTableName, - serverConfigIndexIdIndexName, - string(serverConfigId), - ) - if err != nil { - return nil, err - } - if v == nil { - return &vagrant_server.ServerConfig{}, nil - } - - return v.(*serverConfigIndexRecord).Config, nil -} - -func (s *State) serverConfigSet( - dbTxn *bolt.Tx, - memTxn *memdb.Txn, - value *vagrant_server.ServerConfig, -) error { - id := serverConfigId - - // Get the global bucket and write the value to it. - b := dbTxn.Bucket(serverConfigBucket) - if value == nil { - if err := b.Delete(id); err != nil { - return err - } - } else { - if err := dbPut(b, id, value); err != nil { - return err - } - } - - // Create our index value and write that. - return s.serverConfigIndexSet(memTxn, id, value) -} - -// serverConfigIndexSet writes an index record for the server config. -func (s *State) serverConfigIndexSet(txn *memdb.Txn, id []byte, value *vagrant_server.ServerConfig) error { - record := &serverConfigIndexRecord{ - Id: string(id), - Config: value, - } - - // If we have no value, we delete from the memdb index - if value == nil { - return txn.Delete(serverConfigIndexTableName, record) - } - - // Insert the index - return txn.Insert(serverConfigIndexTableName, record) -} - -// serverConfigIndexInit initializes the server config index from persisted data. -func (s *State) serverConfigIndexInit(dbTxn *bolt.Tx, memTxn *memdb.Txn) error { - bucket := dbTxn.Bucket(serverConfigBucket) - - data := bucket.Get(serverConfigId) - if data == nil { - return nil - } - - var value vagrant_server.ServerConfig - if err := proto.Unmarshal(data, &value); err != nil { - return err - } - if err := s.serverConfigIndexSet(memTxn, serverConfigId, &value); err != nil { - return err - } - - return nil -} - -func serverConfigIndexSchema() *memdb.TableSchema { - return &memdb.TableSchema{ - Name: serverConfigIndexTableName, - Indexes: map[string]*memdb.IndexSchema{ - serverConfigIndexIdIndexName: { - Name: serverConfigIndexIdIndexName, - AllowMissing: false, - Unique: true, - Indexer: &memdb.StringFieldIndex{ - Field: "Id", - Lowercase: true, - }, - }, - }, - } -} - -const ( - serverConfigIndexTableName = "server-config-index" - serverConfigIndexIdIndexName = "id" -) - -// Our record for the server config index. We will only have at most one -// of these because server config is a singleton. -type serverConfigIndexRecord struct { - Id string - Config *vagrant_server.ServerConfig -} diff --git a/internal/server/singleprocess/state/server_config_test.go b/internal/server/singleprocess/state/server_config_test.go deleted file mode 100644 index de001e355..000000000 --- a/internal/server/singleprocess/state/server_config_test.go +++ /dev/null @@ -1,42 +0,0 @@ -package state - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/hashicorp/vagrant/internal/server/proto/vagrant_server" -) - -func TestServerConfig(t *testing.T) { - t.Run("basic put and get", func(t *testing.T) { - require := require.New(t) - - s := TestState(t) - defer s.Close() - - // Set - require.NoError(s.ServerConfigSet(&vagrant_server.ServerConfig{ - AdvertiseAddrs: []*vagrant_server.ServerConfig_AdvertiseAddr{}, - })) - - { - // Get - cfg, err := s.ServerConfigGet() - require.NoError(err) - require.NotNil(cfg) - require.NotNil(cfg.AdvertiseAddrs) - } - - // Unset - require.NoError(s.ServerConfigSet(nil)) - - { - // Get - cfg, err := s.ServerConfigGet() - require.NoError(err) - require.NotNil(cfg) - require.Nil(cfg.AdvertiseAddrs) - } - }) -}