Skip to content
This repository was archived by the owner on Nov 8, 2022. It is now read-only.

Small Metadata refactor. #713

Merged
merged 1 commit into from
May 29, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion experiments/example/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ func main() {

// Connect to metadata database (Cassandra is the only supported database).
// Besides experiment results and platform metrics (we use Snap to gather them) we save certain deta about experiment configuration and environment (metadata).
metadata, err := experiment.NewMetadata(uid, experiment.MetadataConfigFromFlags())
metadata, err := experiment.NewMetadata(uid, experiment.DefaultMetadataConfig())
// errutil.CheckWithContext() is a helper function that will panic on error and provide some additional information about error origin.
errutil.CheckWithContext(err, "Cannot connect to Cassandra Metadata Database")

Expand Down
2 changes: 1 addition & 1 deletion experiments/memcached-cat/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ func main() {
logger.Initialize(appName, uid)

// Connect to metadata database
metadata, err := experiment.NewMetadata(uid, experiment.MetadataConfigFromFlags())
metadata, err := experiment.NewMetadata(uid, experiment.DefaultMetadataConfig())
errutil.CheckWithContext(err, "Cannot connect to Cassandra Metadata Database")

// Save experiment runtime environment (configuration, environmental variables, etc).
Expand Down
2 changes: 1 addition & 1 deletion experiments/memcached-sensitivity-profile/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ func main() {
// Initialize logger.
logger.Initialize(appName, uid)

metadata, err := experiment.NewMetadata(uid, experiment.MetadataConfigFromFlags())
metadata, err := experiment.NewMetadata(uid, experiment.DefaultMetadataConfig())
errutil.CheckWithContext(err, "Cannot connect to Cassandra Metadata Database")

// Save experiment runtime environment (configuration, environmental variables, etc).
Expand Down
2 changes: 1 addition & 1 deletion experiments/optimal-core-allocation/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func main() {
logger.Initialize(appName, uid)

// connect to metadata database
metadata, err := experiment.NewMetadata(uid, experiment.MetadataConfigFromFlags())
metadata, err := experiment.NewMetadata(uid, experiment.DefaultMetadataConfig())
errutil.CheckWithContext(err, "Cannot connect to Cassandra Metadata Database")

// Save experiment runtime environment (configuration, environmental variables, etc).
Expand Down
2 changes: 1 addition & 1 deletion experiments/specjbb-sensitivity-profile/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ func main() {
uid := uuid.New() // Initialize logger.
logger.Initialize(appName, uid)
// Create metadata associated with experiment
metadata, err := experiment.NewMetadata(uid, experiment.MetadataConfigFromFlags())
metadata, err := experiment.NewMetadata(uid, experiment.DefaultMetadataConfig())
errutil.Check(err)

err = metadata.RecordRuntimeEnv(experimentStart)
Expand Down
2 changes: 1 addition & 1 deletion pkg/experiment/conf.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ func Configure() bool {
if *dumpConfig {
previousExperimentID := *dumpConfigExperimentID
if previousExperimentID != "" {
metadata, err := NewMetadata(previousExperimentID, MetadataConfigFromFlags())
metadata, err := NewMetadata(previousExperimentID, DefaultMetadataConfig())
errutil.Check(err)
flags, err := metadata.GetGroup("flags")
errutil.Check(err)
Expand Down
47 changes: 12 additions & 35 deletions pkg/experiment/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,31 +51,9 @@ type MetadataConfig struct {
CassandraUsername string
}

// DefaultMetadataConfig returns a setup which use a Cassandra cluster running on localhost
// without any authentication or encryption.
func DefaultMetadataConfig() MetadataConfig {
return MetadataConfig{
CassandraAddress: "127.0.0.1",
CassandraConnectionTimeout: 0,
CassandraCreateKeyspace: true,
CassandraIgnorePeerAddr: false,
CassandraInitialHostLookup: true,
CassandraKeyspaceName: "swan",
CassandraPassword: "",
CassandraPort: 9042,
CassandraSslCAPath: "",
CassandraSslCertPath: "",
CassandraSslEnabled: false,
CassandraSslHostValidation: false,
CassandraSslKeyPath: "",
CassandraTimeout: 0,
CassandraUsername: "",
}
}

// MetadataConfigFromFlags applies the Cassandra settings from the command line flags and
// DefaultMetadataConfig applies the Cassandra settings from the command line flags and
// environment variables.
func MetadataConfigFromFlags() MetadataConfig {
func DefaultMetadataConfig() MetadataConfig {
return MetadataConfig{
CassandraAddress: conf.CassandraAddress.Value(),
CassandraConnectionTimeout: time.Duration(conf.CassandraConnectionTimeout.Value()) * time.Second,
Expand Down Expand Up @@ -112,7 +90,7 @@ func NewMetadata(experimentID string, config MetadataConfig) (*Metadata, error)
experimentID: experimentID,
config: config,
}
err := metadata.Connect()
err := metadata.connect()
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -140,8 +118,8 @@ func sslOptions(config MetadataConfig) *gocql.SslOptions {
return sslOptions
}

// connect creates a session to the Cassandra cluster. This function should only be called once.
func (m *Metadata) connect() *gocql.ClusterConfig {
// getClusterConfig prepares configuration to Cassandra cluster.
func (m *Metadata) getClusterConfig() *gocql.ClusterConfig {
cluster := gocql.NewCluster(m.config.CassandraAddress)

// TODO(niklas): make consistency configurable.
Expand All @@ -157,23 +135,22 @@ func (m *Metadata) connect() *gocql.ClusterConfig {
return cluster
}

func (m *Metadata) createKeyspace() error {
connectionConfiguration := m.connect()
session, err := connectionConfiguration.CreateSession()
defer session.Close()
func (m *Metadata) createKeyspace(clusterConfig *gocql.ClusterConfig) error {
session, err := clusterConfig.CreateSession()
if err != nil {
return errors.Wrap(err, "cannot create session for creating keyspace")
}
defer session.Close()

query := fmt.Sprintf("CREATE KEYSPACE IF NOT EXISTS %s WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 1};", m.config.CassandraKeyspaceName)

return errors.Wrap(session.Query(query).Exec(), "cannot create keyspace")

}

// Connect creates a session to the Cassandra cluster. This function should only be called once.
func (m *Metadata) Connect() error {
cluster := m.connect()
// connect creates a session to the Cassandra cluster. This function should only be called once.
func (m *Metadata) connect() error {
cluster := m.getClusterConfig()
cluster.Keyspace = m.config.CassandraKeyspaceName

if m.config.CassandraUsername != "" && m.config.CassandraPassword != "" {
Expand All @@ -195,7 +172,7 @@ func (m *Metadata) Connect() error {
m.session = session

if m.config.CassandraCreateKeyspace {
if err = m.createKeyspace(); err != nil {
if err = m.createKeyspace(cluster); err != nil {
return err
}
}
Expand Down