Skip to content

Commit 8fd417a

Browse files
committed
Merge branch 'feature/docker-cp' into 'master'
RFC backup functionality in eru-core See merge request !59
2 parents 6d8530a + 95961a1 commit 8fd417a

16 files changed

+457
-107
lines changed

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.7.17
1+
0.7.18

cluster/calcium/backup.go

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package calcium
2+
3+
import (
4+
"compress/gzip"
5+
"io"
6+
"os"
7+
"path/filepath"
8+
"strings"
9+
"time"
10+
11+
log "github.com/Sirupsen/logrus"
12+
"gitlab.ricebook.net/platform/core/types"
13+
"gitlab.ricebook.net/platform/core/utils"
14+
)
15+
16+
// Backup uses docker cp to copy specified directory into configured BackupDir
17+
func (c *calcium) Backup(id, srcPath string) (*types.BackupMessage, error) {
18+
log.Debugf("Backup %s for container %s", srcPath, id)
19+
container, err := c.GetContainer(id)
20+
node, err := c.GetNode(container.Podname, container.Nodename)
21+
ctx := utils.ToDockerContext(node.Engine)
22+
23+
resp, stat, err := node.Engine.CopyFromContainer(ctx, container.ID, srcPath)
24+
defer resp.Close()
25+
log.Debugf("Docker cp stat: %v", stat)
26+
if err != nil {
27+
log.Errorf("Error during CopyFromContainer: %v", err)
28+
return nil, err
29+
}
30+
31+
appname, entrypoint, ident, err := utils.ParseContainerName(container.Name)
32+
if err != nil {
33+
log.Errorf("Error during ParseContainerName: %v", err)
34+
return nil, err
35+
}
36+
now := strings.Replace(time.Now().Format(time.RFC3339), ":", "", -1)
37+
baseDir := filepath.Join(c.config.BackupDir, appname, entrypoint)
38+
err = os.MkdirAll(baseDir, os.FileMode(0400))
39+
if err != nil {
40+
log.Errorf("Error during mkdir %s, %v", baseDir, err)
41+
return nil, err
42+
}
43+
44+
backupFile := filepath.Join(baseDir, stat.Name+"-"+ident+"-"+now+".tar.gz")
45+
log.Debugf("Creating %s", backupFile)
46+
file, err := os.Create(backupFile)
47+
if err != nil {
48+
log.Errorf("Error during create backup file %s: %v", backupFile, err)
49+
}
50+
defer file.Close()
51+
52+
gw := gzip.NewWriter(file)
53+
defer gw.Close()
54+
55+
_, err = io.Copy(gw, resp)
56+
if err != nil {
57+
log.Errorf("Error during copy resp: %v", err)
58+
return nil, err
59+
}
60+
61+
return &types.BackupMessage{
62+
Status: "ok",
63+
Size: stat.Size,
64+
}, nil
65+
}

cluster/calcium/create_container.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,7 @@ func (c *calcium) makeContainerOptions(quota map[string]int, specs types.Specs,
634634

635635
// name
636636
suffix := utils.RandomString(6)
637-
containerName := strings.Join([]string{specs.Appname, opts.Entrypoint, suffix}, "_")
637+
containerName := utils.MakeContainerName(specs.Appname, opts.Entrypoint, suffix)
638638

639639
// network mode
640640
networkMode := entry.NetworkMode

cluster/cluster.go

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ type Cluster interface {
2424
UpgradeContainer(ids []string, image string) (chan *types.UpgradeContainerMessage, error)
2525
RemoveContainer(ids []string) (chan *types.RemoveContainerMessage, error)
2626
RemoveImage(podname, nodename string, images []string) (chan *types.RemoveImageMessage, error)
27+
Backup(id, srcPath string) (*types.BackupMessage, error)
2728

2829
// cluster attribute methods
2930
GetZone() string

core.yaml.sample

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ bind: ":5001"
22
agent_port: "12345"
33
appdir: "/home"
44
permdir: "/mnt/mfs/permdirs"
5+
backupdir: "/mnt/mfs/backupdirs"
56
etcd:
67
- "http://127.0.0.1:2379"
78
etcd_lock_prefix: "/eru-core/_lock"

devtools/core_pb2.py

+138-13
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

devtools/upgrade-eru-core.sh

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ then
2020
sudo yum makecache fast
2121
sudo yum remove -y eru-core
2222
sudo yum install -y eru-core
23+
sudo cp /home/liuyifu/eru-core.service /usr/lib/systemd/system/eru-core.service
2324
sudo systemctl daemon-reload
2425
sudo systemctl restart eru-core.service
2526
EOF

eru-core.service

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ After=network.target
55
[Service]
66
Type=simple
77
Environment=GOTRACEBACK=crash
8-
ExecStart=/usr/bin/eru-core --config /etc/eru-core/core.yaml
8+
ExecStart=/usr/bin/eru-core --config /etc/eru-core/core.yaml --log-level DEBUG
99
LimitNOFILE=10485760
1010
LimitNPROC=10485760
1111
LimitCORE=infinity

0 commit comments

Comments
 (0)