diff --git a/generators/core_main_visitor.go b/generators/core_main_visitor.go index 09eac9630466d8ed9cc9eec02459ab9febb659a0..409f8b765fb329ddeaffde27e328852d31737354 100644 --- a/generators/core_main_visitor.go +++ b/generators/core_main_visitor.go @@ -49,6 +49,7 @@ type MainVisitor struct { added_imports map[string]bool frameworks map[string]netgen.NetworkGenerator DepGraph *DependencyGraph + commands []string // Process Main Function state localServicesInfo map[string]map[string]string ProcInfo *ProcessRunServicesInfo @@ -184,6 +185,7 @@ func (v *MainVisitor) VisitDockerContainerNode(_ Visitor, n *DockerContainerNode v.public_ports = make(map[int]int) v.isservice = true v.imageName = "" + v.commands = []string{} v.DefaultVisitor.VisitDockerContainerNode(v, n) // Generate Docker File for each container @@ -196,7 +198,7 @@ func (v *MainVisitor) VisitDockerContainerNode(_ Visitor, n *DockerContainerNode v.generateDockerFile(docker_dir, n) if !v.isservice { - dockerInfo := &deploy.DeployInfo{Address: v.address, Port: v.port, DockerPath: "", ImageName: v.imageName, EnvVars: v.cur_env_vars, PublicPorts: v.public_ports} + dockerInfo := &deploy.DeployInfo{Address: v.address, Port: v.port, DockerPath: "", ImageName: v.imageName, EnvVars: v.cur_env_vars, PublicPorts: v.public_ports, Command: v.commands} v.deployInfo = dockerInfo depgen, err := v.depgenfactory.GetGenerator("docker") if err != nil { @@ -960,6 +962,8 @@ func (v *MainVisitor) VisitMemcachedNode(_ Visitor, n *MemcachedNode) { v.cur_env_vars[n.Name+"_ADDRESS"] = v.address v.cur_env_vars[n.Name+"_PORT"] = strconv.Itoa(v.port) v.imageName = "memcached" + v.commands = append(v.commands, "\"-c\"") + v.commands = append(v.commands, "\"65536\"") } func (v *MainVisitor) VisitRedisNode(_ Visitor, n *RedisNode) { diff --git a/generators/deploy/core_deployer.go b/generators/deploy/core_deployer.go index 30e3465ddaa440d92738971000b110c7ef6f7bdc..caaff5929627840a661c7624080d44fc7434543a 100644 --- a/generators/deploy/core_deployer.go +++ b/generators/deploy/core_deployer.go @@ -13,6 +13,7 @@ type DeployInfo struct { EnvVars map[string]string PublicPorts map[int]int NumReplicas int + Command []string } func NewDeployInfo() *DeployInfo { diff --git a/generators/deploy/plugin_dockercompose.go b/generators/deploy/plugin_dockercompose.go index 29446a89fde3b04ef48d1c3cb4d7f1b2978dc1a0..cc4379774efc378b4c1edfe27abd736d6ee2d141 100644 --- a/generators/deploy/plugin_dockercompose.go +++ b/generators/deploy/plugin_dockercompose.go @@ -3,8 +3,8 @@ package deploy import ( "os" "path" - "strings" "strconv" + "strings" ) type DockerComposeDeployerGenerator struct { @@ -59,6 +59,10 @@ func (d *DockerComposeDeployerGenerator) AddChoice(name string, depInfo *DeployI d.composeString += prefix + prefix + prefix + "- " + key + "=" + val + "\n" } } + if len(depInfo.Command) != 0 { + d.composeString += prefix + prefix + "command:\n" + d.composeString += prefix + prefix + prefix + "[" + strings.Join(depInfo.Command, ", ") + "]\n" + } d.composeString += prefix + prefix + "restart: always\n\n" } @@ -71,4 +75,4 @@ func (d *DockerComposeDeployerGenerator) GenerateConfigFiles(out_dir string) err d.composeString = "version: '3'\nservices:\n" + d.composeString _, err = outf.WriteString(d.composeString) return err -} \ No newline at end of file +} diff --git a/stdlib/choices/cache/memcached.go b/stdlib/choices/cache/memcached.go index b37667e6bb3572a12cf5a1bfaeb953e818381974..0be051665b18da223882313e70fe9e478f5ca98f 100644 --- a/stdlib/choices/cache/memcached.go +++ b/stdlib/choices/cache/memcached.go @@ -5,46 +5,29 @@ import ( "sync" "github.com/bradfitz/gomemcache/memcache" - "gitlab.mpi-sws.org/cld/blueprint/blueprint-compiler/stdlib" ) -type MCConnection struct{ +type Memcached struct { Client *memcache.Client } -func NewCacheConn(addr string, port string) *MCConnection { +func NewMemcachedClient(addr string, port string) *Memcached { conn_addr := addr + ":" + port client := memcache.New(conn_addr) - client.MaxIdleConns = 60000 - return &MCConnection{Client : client} -} - -type Memcached struct { - connPool *stdlib.ClientPool[*MCConnection] -} - -func NewMemcachedClient(addr string, port string) *Memcached { - NewConn := func() *MCConnection { - return NewCacheConn(addr, port) - } - pool := stdlib.NewClientPool[*MCConnection](1024, NewConn) - return &Memcached{connPool: pool} + client.MaxIdleConns = 1000 + return &Memcached{Client: client} } func (m *Memcached) Put(key string, value interface{}) error { - conn := m.connPool.Pop() - defer m.connPool.Push(conn) marshaled_val, err := json.Marshal(value) if err != nil { return err } - return conn.Client.Set(&memcache.Item{Key: key, Value: marshaled_val}) + return m.Client.Set(&memcache.Item{Key: key, Value: marshaled_val}) } func (m *Memcached) Get(key string, value interface{}) error { - conn := m.connPool.Pop() - defer m.connPool.Push(conn) - it, err := conn.Client.Get(key) + it, err := m.Client.Get(key) if err != nil { return err } @@ -52,22 +35,16 @@ func (m *Memcached) Get(key string, value interface{}) error { } func (m *Memcached) Incr(key string) (int64, error) { - conn := m.connPool.Pop() - defer m.connPool.Push(conn) - val, err := conn.Client.Increment(key, 1) + val, err := m.Client.Increment(key, 1) return int64(val), err } func (m *Memcached) Delete(key string) error { - conn := m.connPool.Pop() - defer m.connPool.Push(conn) - return conn.Client.Delete(key) + return m.Client.Delete(key) } func (m *Memcached) Mget(keys []string, values []interface{}) error { - conn := m.connPool.Pop() - defer m.connPool.Push(conn) - val_map, err := conn.Client.GetMulti(keys) + val_map, err := m.Client.GetMulti(keys) if err != nil { return err }