Skip to content

Commit 8bbe40c

Browse files
committed
Feature(fs): support configure environment variables for client container.
1 parent 6640f82 commit 8bbe40c

File tree

3 files changed

+89
-15
lines changed

3 files changed

+89
-15
lines changed

internal/configure/client.go

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ const (
4545
KEY_CURVEBS_LISTEN_MDS_ADDRS = "mds.listen.addr"
4646
KEY_CURVEFS_LISTEN_MDS_ADDRS = "mdsOpt.rpcRetryOpt.addrs"
4747
KEY_CONTAINER_PID = "container_pid"
48+
KEY_ENVIRONMENT = "env"
4849

4950
KEY_CLIENT_S3_ACCESS_KEY = "s3.ak"
5051
KEY_CLIENT_S3_SECRET_KEY = "s3.sk"
@@ -66,6 +67,7 @@ var (
6667
KEY_DATA_DIR: true,
6768
KEY_CORE_DIR: true,
6869
KEY_CONTAINER_PID: true,
70+
KEY_ENVIRONMENT: true,
6971
}
7072

7173
LAYOUT_CURVEBS_ROOT_DIR = topology.GetCurveBSProjectLayout().ProjectRootDir
@@ -173,18 +175,19 @@ func (cc *ClientConfig) getBool(key string) bool {
173175
return v.(bool)
174176
}
175177

176-
func (cc *ClientConfig) GetKind() string { return cc.getString(KEY_KIND) }
177-
func (cc *ClientConfig) GetDataDir() string { return cc.getString(KEY_DATA_DIR) }
178-
func (cc *ClientConfig) GetLogDir() string { return cc.getString(KEY_LOG_DIR) }
179-
func (cc *ClientConfig) GetCoreDir() string { return cc.getString(KEY_CORE_DIR) }
180-
func (cc *ClientConfig) GetS3AccessKey() string { return cc.getString(KEY_CLIENT_S3_ACCESS_KEY) }
181-
func (cc *ClientConfig) GetS3SecretKey() string { return cc.getString(KEY_CLIENT_S3_SECRET_KEY) }
182-
func (cc *ClientConfig) GetS3Address() string { return cc.getString(KEY_CLIENT_S3_ADDRESS) }
183-
func (cc *ClientConfig) GetS3BucketName() string { return cc.getString(KEY_CLIENT_S3_BUCKET_NAME) }
184-
func (c *ClientConfig) GetContainerPid() string { return c.getString(KEY_CONTAINER_PID) }
185-
func (cc *ClientConfig) GetCoreLocateDir() string { return DEFAULT_CORE_LOCATE_DIR }
186-
func (c *ClientConfig) GetServiceConfig() map[string]string { return c.serviceConfig }
187-
func (cc *ClientConfig) GetVariables() *variable.Variables { return cc.variables }
178+
func (cc *ClientConfig) GetKind() string { return cc.getString(KEY_KIND) }
179+
func (cc *ClientConfig) GetDataDir() string { return cc.getString(KEY_DATA_DIR) }
180+
func (cc *ClientConfig) GetLogDir() string { return cc.getString(KEY_LOG_DIR) }
181+
func (cc *ClientConfig) GetCoreDir() string { return cc.getString(KEY_CORE_DIR) }
182+
func (cc *ClientConfig) GetS3AccessKey() string { return cc.getString(KEY_CLIENT_S3_ACCESS_KEY) }
183+
func (cc *ClientConfig) GetS3SecretKey() string { return cc.getString(KEY_CLIENT_S3_SECRET_KEY) }
184+
func (cc *ClientConfig) GetS3Address() string { return cc.getString(KEY_CLIENT_S3_ADDRESS) }
185+
func (cc *ClientConfig) GetS3BucketName() string { return cc.getString(KEY_CLIENT_S3_BUCKET_NAME) }
186+
func (cc *ClientConfig) GetContainerPid() string { return cc.getString(KEY_CONTAINER_PID) }
187+
func (cc *ClientConfig) GetEnvironments() string { return cc.getString(KEY_ENVIRONMENT) }
188+
func (cc *ClientConfig) GetCoreLocateDir() string { return DEFAULT_CORE_LOCATE_DIR }
189+
func (cc *ClientConfig) GetServiceConfig() map[string]string { return cc.serviceConfig }
190+
func (cc *ClientConfig) GetVariables() *variable.Variables { return cc.variables }
188191
func (cc *ClientConfig) GetContainerImage() string {
189192
containerImage := cc.getString(KEY_CONTAINER_IMAGE)
190193
if len(containerImage) == 0 {

internal/task/task/fs/mount.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,8 +191,8 @@ func newCurveBSMutate(cc *configure.ClientConfig, delimiter string) step.Mutate
191191
func newToolsMutate(cc *configure.ClientConfig, delimiter string) step.Mutate {
192192
clientConfig := cc.GetServiceConfig()
193193
tools2client := map[string]string{
194-
"mdsAddr": "mdsOpt.rpcRetryOpt.addrs",
195-
"volumeCluster" : KEY_CURVEBS_CLUSTER,
194+
"mdsAddr": "mdsOpt.rpcRetryOpt.addrs",
195+
"volumeCluster": KEY_CURVEBS_CLUSTER,
196196
}
197197
return func(in, key, value string) (out string, err error) {
198198
if len(key) == 0 {
@@ -225,6 +225,17 @@ func checkMountStatus(mountPoint string, out *string) step.LambdaType {
225225
}
226226
}
227227

228+
func getEnvironments(cc *configure.ClientConfig) []string {
229+
envs := []string{
230+
"LD_PRELOAD=/usr/local/lib/libjemalloc.so",
231+
}
232+
env := cc.GetEnvironments()
233+
if len(env) > 0 {
234+
envs = append(envs, strings.Split(env, " ")...)
235+
}
236+
return envs
237+
}
238+
228239
func (s *step2InsertClient) Execute(ctx *context.Context) error {
229240
config := s.config
230241
curveadm := s.curveadm
@@ -310,7 +321,7 @@ func NewMountFSTask(curveadm *cli.CurveAdm, cc *configure.ClientConfig) (*task.T
310321
Image: cc.GetContainerImage(),
311322
Command: getMountCommand(cc, mountFSName, mountFSType, mountPoint),
312323
Entrypoint: "/bin/bash",
313-
Envs: []string{"LD_PRELOAD=/usr/local/lib/libjemalloc.so"},
324+
Envs: getEnvironments(cc),
314325
Init: true,
315326
Name: mountPoint2ContainerName(mountPoint),
316327
Mount: fmt.Sprintf(FORMAT_MOUNT_OPTION, mountPoint, containerMountPath),
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package fs
2+
3+
import (
4+
"strings"
5+
"testing"
6+
7+
"github.com/opencurve/curveadm/internal/configure"
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
var (
12+
KEY_KIND = strings.ToLower(configure.KEY_KIND)
13+
KEY_ADDRS = strings.ToLower(configure.KEY_CURVEFS_LISTEN_MDS_ADDRS)
14+
KEY_ENV = strings.ToLower(configure.KEY_ENVIRONMENT)
15+
)
16+
17+
func run(t *testing.T, config map[string]interface{}, envs []string) {
18+
assert := assert.New(t)
19+
cc, err := configure.NewClientConfig(config)
20+
assert.Nil(err)
21+
assert.Equal(envs, getEnvironments(cc))
22+
}
23+
24+
func TestConfigureEnv_Basic(t *testing.T) {
25+
run(t, map[string]interface{}{
26+
KEY_KIND: "curvefs",
27+
KEY_ADDRS: "1.1.1.1",
28+
}, []string{
29+
"LD_PRELOAD=/usr/local/lib/libjemalloc.so",
30+
})
31+
32+
run(t, map[string]interface{}{
33+
KEY_KIND: "curvefs",
34+
KEY_ADDRS: "1.1.1.1",
35+
KEY_ENV: "MALLOC_CONF=prof:true,lg_prof_interval:26,prof_prefix:/curvefs/client/logs/jeprof.out",
36+
}, []string{
37+
"LD_PRELOAD=/usr/local/lib/libjemalloc.so",
38+
"MALLOC_CONF=prof:true,lg_prof_interval:26,prof_prefix:/curvefs/client/logs/jeprof.out",
39+
})
40+
41+
run(t, map[string]interface{}{
42+
KEY_KIND: "curvefs",
43+
KEY_ADDRS: "1.1.1.1",
44+
KEY_ENV: "NAME=jack AGE=18 FROM=china",
45+
}, []string{
46+
"LD_PRELOAD=/usr/local/lib/libjemalloc.so",
47+
"NAME=jack",
48+
"AGE=18",
49+
"FROM=china",
50+
})
51+
52+
run(t, map[string]interface{}{
53+
KEY_KIND: "curvefs",
54+
KEY_ADDRS: "1.1.1.1",
55+
KEY_ENV: "LD_PRELOAD=",
56+
}, []string{
57+
"LD_PRELOAD=/usr/local/lib/libjemalloc.so",
58+
"LD_PRELOAD=",
59+
})
60+
}

0 commit comments

Comments
 (0)