Skip to content
This repository has been archived by the owner on Oct 18, 2019. It is now read-only.

Commit

Permalink
Prevent remote store setup on startup if not required
Browse files Browse the repository at this point in the history
Re-working of the ingest file cmd, so that we don't require the setup
of serf if not required.
  • Loading branch information
SimonRichardson committed Nov 7, 2017
1 parent a1b5f23 commit 6299492
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 18 deletions.
49 changes: 34 additions & 15 deletions cmd/courier/ingest.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import (

const (
defaultQueue = "remote"
defaultAuditLog = "nop"
defaultAuditLog = "remote"
defaultAuditLogRootPath = "bin"
defaultFilesystem = "nop"

Expand All @@ -47,8 +47,8 @@ const (

defaultRecipientURL = ""
defaultNumConsumers = 2
defaultMaxNumberOfMessages = 5
defaultVisibilityTimeout = "1s"
defaultMaxNumberOfMessages = 10
defaultVisibilityTimeout = "30s"
defaultMetricsRegistration = true
)

Expand Down Expand Up @@ -347,6 +347,36 @@ func configureStore(logger log.Logger,
peers []string,
) (store.Store, error) {

// Make sure that we need the remote config, before going a head and setting
// it up. It prevents allocations that aren't required.
var (
err error
remoteStoreConfig *store.RemoteConfig
)
if store.RequiresRemoteConfig(storeType) {
remoteStoreConfig, err = configureRemoteStore(logger, replicationFactor, bindAddr, advertiseAddr, peers)
if err != nil {
return nil, errors.Wrap(err, "store remote config")
}
}

storeConfig, err := store.Build(
store.With(storeType),
store.WithSize(size),
store.WithRemoteConfig(remoteStoreConfig),
)
if err != nil {
return nil, errors.Wrap(err, "store config")
}

return store.New(storeConfig, log.With(logger, "component", "store"))
}

func configureRemoteStore(logger log.Logger,
replicationFactor int,
bindAddr, advertiseAddr string,
peers []string,
) (*store.RemoteConfig, error) {
clusterBindHost, clusterBindPort, err := parseClusterAddr(bindAddr, defaultClusterPort)
if err != nil {
return nil, err
Expand Down Expand Up @@ -392,19 +422,8 @@ func configureStore(logger log.Logger,
return nil, errors.Wrap(err, "members remote")
}

storeRemoteConfig, err := store.BuildConfig(
return store.BuildConfig(
store.WithReplicationFactor(replicationFactor),
store.WithPeer(cluster.NewPeer(storeMembers, log.With(logger, "component", "peer"))),
)
if err != nil {
return nil, errors.Wrap(err, "store remote config")
}

storeConfig, err := store.Build(
store.With(storeType),
store.WithSize(size),
store.WithRemoteConfig(storeRemoteConfig),
)

return store.New(storeConfig, log.With(logger, "component", "store"))
}
6 changes: 3 additions & 3 deletions glide.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions glide.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,11 @@ import:
- package: github.com/pborman/uuid
- package: github.com/golang/mock/gomock
- package: github.com/SimonRichardson/gexec
version: c3f2b6a0a84bbf048eafea7f53c393899492806b
- package: github.com/SimonRichardson/betwixt
- package: github.com/SimonRichardson/resilience
- package: github.com/SimonRichardson/flagset
version: d8eb0e54974d098768a93de414d268bc2d0a334f
- package: github.com/hashicorp/go-sockaddr
- package: github.com/hashicorp/memberlist
- package: github.com/hashicorp/serf
Expand Down
5 changes: 5 additions & 0 deletions pkg/store/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,3 +77,8 @@ func New(config *Config, logger log.Logger) (store Store, err error) {
}
return
}

// RequiresRemoteConfig states if the remote configuration setup is required.
func RequiresRemoteConfig(name string) bool {
return name == "remote"
}
21 changes: 21 additions & 0 deletions pkg/store/store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

"github.com/go-kit/kit/log"
"github.com/pkg/errors"
"github.com/trussle/harness/generators"
)

func TestBuildingStore(t *testing.T) {
Expand Down Expand Up @@ -62,3 +63,23 @@ func TestNew(t *testing.T) {
}
})
}

func TestRequiresRemoteConfig(t *testing.T) {
t.Parallel()

t.Run("remote", func(t *testing.T) {
got := RequiresRemoteConfig("remote")
if expected, actual := true, got; expected != actual {
t.Errorf("expected: %t, actual: %t", expected, actual)
}
})

t.Run("any", func(t *testing.T) {
fn := func(name generators.ASCII) bool {
return !RequiresRemoteConfig(name.String())
}
if err := quick.Check(fn, nil); err != nil {
t.Error(err)
}
})
}

0 comments on commit 6299492

Please sign in to comment.