Skip to content

Commit f8669fa

Browse files
committed
Don't recreate each time a config, a machine client and a handler
Just call the config.Get() when it is necessary.
1 parent bf0b4f8 commit f8669fa

9 files changed

Lines changed: 49 additions & 75 deletions

File tree

cmd/crc/cmd/daemon.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
"time"
1414

1515
"github.com/code-ready/crc/pkg/crc/api"
16-
crcConfig "github.com/code-ready/crc/pkg/crc/config"
1716
"github.com/code-ready/crc/pkg/crc/constants"
1817
"github.com/code-ready/gvisor-tap-vsock/pkg/transport"
1918
"github.com/code-ready/gvisor-tap-vsock/pkg/types"
@@ -142,15 +141,10 @@ func run(configuration *types.Configuration, endpoints []string) error {
142141
}
143142
}
144143

145-
func newConfig() (crcConfig.Storage, error) {
146-
config, _, err := newViperConfig()
147-
return config, err
148-
}
149-
150144
func runDaemon() error {
151145
// Remove if an old socket is present
152146
os.Remove(constants.DaemonSocketPath)
153-
apiServer, err := api.CreateServer(constants.DaemonSocketPath, newConfig, newMachineWithConfig)
147+
apiServer, err := api.CreateServer(constants.DaemonSocketPath, config, newMachine())
154148
if err != nil {
155149
return err
156150
}

cmd/crc/cmd/root.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -164,13 +164,7 @@ func newViperConfig() (*crcConfig.Config, *crcConfig.ViperStorage, error) {
164164
}
165165

166166
func newMachine() machine.Client {
167-
return newMachineWithConfig(config)
168-
}
169-
170-
func newMachineWithConfig(config crcConfig.Storage) machine.Client {
171-
networkMode := network.ParseMode(config.Get(cmdConfig.NetworkMode).AsString())
172-
enableMonitoring := config.Get(cmdConfig.EnableClusterMonitoring).AsBool()
173-
return machine.NewClient(constants.DefaultName, networkMode, enableMonitoring)
167+
return machine.NewClient(constants.DefaultName, isDebugLog(), config)
174168
}
175169

176170
func addForceFlag(cmd *cobra.Command) {

pkg/crc/api/api.go

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import (
66
"fmt"
77
"net"
88

9+
crcConfig "github.com/code-ready/crc/pkg/crc/config"
910
"github.com/code-ready/crc/pkg/crc/logging"
11+
"github.com/code-ready/crc/pkg/crc/machine"
1012
)
1113

12-
func CreateServer(socketPath string, config newConfigFunc, machine newMachineFunc) (Server, error) {
14+
func CreateServer(socketPath string, config crcConfig.Storage, machine machine.Client) (Server, error) {
1315
listener, err := net.Listen("unix", socketPath)
1416
if err != nil {
1517
logging.Error("Failed to create socket: ", err.Error())
@@ -18,19 +20,13 @@ func CreateServer(socketPath string, config newConfigFunc, machine newMachineFun
1820
return createServerWithListener(listener, config, machine)
1921
}
2022

21-
func createServerWithListener(listener net.Listener, config newConfigFunc, machine newMachineFunc) (Server, error) {
23+
func createServerWithListener(listener net.Listener, config crcConfig.Storage, machine machine.Client) (Server, error) {
2224
apiServer := Server{
2325
listener: listener,
2426
clusterOpsRequestsChan: make(chan clusterOpsRequest, 10),
25-
handlerFactory: func() (RequestHandler, error) {
26-
cfg, err := config()
27-
if err != nil {
28-
return nil, err
29-
}
30-
return &Handler{
31-
Config: cfg,
32-
MachineClient: &Adapter{Underlying: machine(cfg)},
33-
}, nil
27+
handler: &Handler{
28+
Config: config,
29+
MachineClient: &Adapter{Underlying: machine},
3430
},
3531
}
3632
return apiServer, nil
@@ -61,33 +57,25 @@ func (api Server) handleRequest(req commandRequest, conn net.Conn) {
6157
defer conn.Close()
6258
var result string
6359

64-
handler, err := api.handlerFactory()
65-
if err != nil {
66-
logging.Error(err.Error())
67-
result = encodeErrorToJSON(fmt.Sprintf("Failed to initialize new config store: %v", err))
68-
writeStringToSocket(conn, result)
69-
return
70-
}
71-
7260
switch req.Command {
7361
case "start":
74-
result = handler.Start(req.Args)
62+
result = api.handler.Start(req.Args)
7563
case "stop":
76-
result = handler.Stop()
64+
result = api.handler.Stop()
7765
case "status":
78-
result = handler.Status()
66+
result = api.handler.Status()
7967
case "delete":
80-
result = handler.Delete()
68+
result = api.handler.Delete()
8169
case "version":
82-
result = handler.GetVersion()
70+
result = api.handler.GetVersion()
8371
case "setconfig":
84-
result = handler.SetConfig(req.Args)
72+
result = api.handler.SetConfig(req.Args)
8573
case "unsetconfig":
86-
result = handler.UnsetConfig(req.Args)
74+
result = api.handler.UnsetConfig(req.Args)
8775
case "getconfig":
88-
result = handler.GetConfig(req.Args)
76+
result = api.handler.GetConfig(req.Args)
8977
case "webconsoleurl":
90-
result = handler.GetWebconsoleInfo()
78+
result = api.handler.GetWebconsoleInfo()
9179
default:
9280
result = encodeErrorToJSON(fmt.Sprintf("Unknown command supplied: %s", req.Command))
9381
}

pkg/crc/api/api_test.go

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313

1414
cmdConfig "github.com/code-ready/crc/cmd/crc/cmd/config"
1515
"github.com/code-ready/crc/pkg/crc/config"
16-
"github.com/code-ready/crc/pkg/crc/machine"
1716
"github.com/code-ready/crc/pkg/crc/machine/fakemachine"
1817
"github.com/code-ready/crc/pkg/crc/preflight"
1918
"github.com/code-ready/crc/pkg/crc/version"
@@ -32,9 +31,7 @@ func TestApi(t *testing.T) {
3231
require.NoError(t, err)
3332

3433
client := fakemachine.NewClient()
35-
api, err := createServerWithListener(listener, setupNewInMemoryConfig, func(_ config.Storage) machine.Client {
36-
return client
37-
})
34+
api, err := createServerWithListener(listener, setupNewInMemoryConfig(), client)
3835
require.NoError(t, err)
3936
go func() {
4037
if err := api.Serve(); err != nil {
@@ -201,15 +198,15 @@ func TestGetconfigApi(t *testing.T) {
201198
}, getconfigRes)
202199
}
203200

204-
func setupNewInMemoryConfig() (config.Storage, error) {
201+
func setupNewInMemoryConfig() config.Storage {
205202
storage := config.NewEmptyInMemoryStorage()
206203
cfg := config.New(&skipPreflights{
207204
storage: storage,
208205
})
209206
cmdConfig.RegisterSettings(cfg)
210207
preflight.RegisterSettings(cfg)
211208

212-
return cfg, nil
209+
return cfg
213210
}
214211

215212
func setupAPIServer(t *testing.T) (string, func()) {
@@ -221,9 +218,7 @@ func setupAPIServer(t *testing.T) (string, func()) {
221218
require.NoError(t, err)
222219

223220
client := fakemachine.NewClient()
224-
api, err := createServerWithListener(listener, setupNewInMemoryConfig, func(_ config.Storage) machine.Client {
225-
return client
226-
})
221+
api, err := createServerWithListener(listener, setupNewInMemoryConfig(), client)
227222
require.NoError(t, err)
228223
go func() {
229224
if err := api.Serve(); err != nil {

pkg/crc/api/types.go

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,14 @@ package api
33
import (
44
"encoding/json"
55
"net"
6-
7-
"github.com/code-ready/crc/pkg/crc/config"
8-
"github.com/code-ready/crc/pkg/crc/machine"
96
)
107

11-
type newHandlerFunc func() (RequestHandler, error)
12-
type newConfigFunc func() (config.Storage, error)
13-
type newMachineFunc func(config.Storage) machine.Client
14-
158
type commandError struct {
169
Err string
1710
}
1811

1912
type Server struct {
20-
handlerFactory newHandlerFunc
13+
handler RequestHandler
2114
listener net.Listener
2215
clusterOpsRequestsChan chan clusterOpsRequest
2316
}

pkg/crc/machine/client.go

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package machine
22

33
import (
4+
cmdConfig "github.com/code-ready/crc/cmd/crc/cmd/config"
5+
crcConfig "github.com/code-ready/crc/pkg/crc/config"
46
"github.com/code-ready/crc/pkg/crc/network"
57
"github.com/code-ready/machine/libmachine/state"
68
)
@@ -20,16 +22,16 @@ type Client interface {
2022
}
2123

2224
type client struct {
23-
name string
24-
networkMode network.Mode
25-
monitoringEnabled bool
25+
name string
26+
debug bool
27+
config crcConfig.Storage
2628
}
2729

28-
func NewClient(name string, networkMode network.Mode, monitoringEnabled bool) Client {
30+
func NewClient(name string, debug bool, config crcConfig.Storage) Client {
2931
return &client{
30-
name: name,
31-
networkMode: networkMode,
32-
monitoringEnabled: monitoringEnabled,
32+
name: name,
33+
debug: debug,
34+
config: config,
3335
}
3436
}
3537

@@ -38,5 +40,13 @@ func (client *client) GetName() string {
3840
}
3941

4042
func (client *client) useVSock() bool {
41-
return client.networkMode == network.VSockMode
43+
return client.networkMode() == network.VSockMode
44+
}
45+
46+
func (client *client) networkMode() network.Mode {
47+
return network.ParseMode(client.config.Get(cmdConfig.NetworkMode).AsString())
48+
}
49+
50+
func (client *client) monitoringEnabled() bool {
51+
return client.config.Get(cmdConfig.EnableClusterMonitoring).AsBool()
4252
}

pkg/crc/machine/start.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func (client *client) Start(startConfig StartConfig) (*StartResult, error) {
116116
CPUs: startConfig.CPUs,
117117
Memory: startConfig.Memory,
118118
DiskSize: startConfig.DiskSize,
119-
NetworkMode: client.networkMode,
119+
NetworkMode: client.networkMode(),
120120
}
121121

122122
crcBundleMetadata, err = getCrcBundleInfo(startConfig.BundlePath)
@@ -261,7 +261,7 @@ func (client *client) Start(startConfig StartConfig) (*StartResult, error) {
261261
IP: instanceIP,
262262
// TODO: should be more finegrained
263263
BundleMetadata: *crcBundleMetadata,
264-
NetworkMode: client.networkMode,
264+
NetworkMode: client.networkMode(),
265265
}
266266

267267
// Run the DNS server inside the VM
@@ -335,7 +335,7 @@ func (client *client) Start(startConfig StartConfig) (*StartResult, error) {
335335
return nil, errors.Wrap(err, "Failed to update cluster ID")
336336
}
337337

338-
if client.monitoringEnabled {
338+
if client.monitoringEnabled() {
339339
logging.Info("Enabling cluster monitoring operator...")
340340
if err := cluster.StartMonitoring(ocConfig); err != nil {
341341
return nil, errors.Wrap(err, "Cannot start monitoring stack")
@@ -406,7 +406,7 @@ func (client *client) IsRunning() (bool, error) {
406406
}
407407

408408
func (client *client) validateStartConfig(startConfig StartConfig) error {
409-
if client.monitoringEnabled && startConfig.Memory < minimumMemoryForMonitoring {
409+
if client.monitoringEnabled() && startConfig.Memory < minimumMemoryForMonitoring {
410410
return fmt.Errorf("Too little memory (%s) allocated to the virtual machine to start the monitoring stack, %s is the minimum",
411411
units.BytesSize(float64(startConfig.Memory)*1024*1024),
412412
units.BytesSize(minimumMemoryForMonitoring*1024*1024))

pkg/crc/machine/status.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func (client *client) Status() (*ClusterStatusResult, error) {
6161
}
6262
return &ClusterStatusResult{
6363
CrcStatus: state.Running,
64-
OpenshiftStatus: getOpenShiftStatus(sshRunner, client.monitoringEnabled),
64+
OpenshiftStatus: getOpenShiftStatus(sshRunner, client.monitoringEnabled()),
6565
OpenshiftVersion: crcBundleMetadata.GetOpenshiftVersion(),
6666
DiskUse: diskUse,
6767
DiskSize: diskSize,

test/e2e/crcsuite/collect.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ import (
1313
"sync"
1414
"time"
1515

16+
crcConfig "github.com/code-ready/crc/pkg/crc/config"
1617
"github.com/code-ready/crc/pkg/crc/constants"
1718
"github.com/code-ready/crc/pkg/crc/logging"
1819
"github.com/code-ready/crc/pkg/crc/machine"
19-
"github.com/code-ready/crc/pkg/crc/network"
2020
"github.com/code-ready/crc/pkg/crc/ssh"
2121
"github.com/pkg/errors"
2222
"golang.org/x/sync/semaphore"
@@ -177,7 +177,7 @@ type VMCommandCollector struct {
177177
}
178178

179179
func (collector *VMCommandCollector) Collect(w Writer) error {
180-
client := machine.NewClient(constants.DefaultName, network.DefaultMode, false)
180+
client := machine.NewClient(constants.DefaultName, true, crcConfig.New(crcConfig.NewEmptyInMemoryStorage()))
181181
ip, err := client.IP()
182182
if err != nil {
183183
return err
@@ -198,7 +198,7 @@ type ContainerLogCollector struct {
198198
}
199199

200200
func (collector *ContainerLogCollector) Collect(w Writer) error {
201-
client := machine.NewClient(constants.DefaultName, network.DefaultMode, false)
201+
client := machine.NewClient(constants.DefaultName, true, crcConfig.New(crcConfig.NewEmptyInMemoryStorage()))
202202
ip, err := client.IP()
203203
if err != nil {
204204
return err

0 commit comments

Comments
 (0)