Skip to content

Commit 06b6198

Browse files
committedFeb 26, 2021
recify logging system
1 parent b84b401 commit 06b6198

28 files changed

+301
-204
lines changed
 

‎cluster/calcium/build.go

+30-22
Original file line numberDiff line numberDiff line change
@@ -3,62 +3,65 @@ package calcium
33
import (
44
"context"
55
"encoding/json"
6-
"errors"
76
"fmt"
87
"io"
98
"io/ioutil"
109
"os"
1110
"time"
1211

12+
"github.com/pkg/errors"
1313
enginetypes "github.com/projecteru2/core/engine/types"
1414
"github.com/projecteru2/core/log"
1515
"github.com/projecteru2/core/types"
1616
)
1717

1818
// BuildImage will build image
19-
func (c *Calcium) BuildImage(ctx context.Context, opts *types.BuildOptions) (chan *types.BuildImageMessage, error) {
19+
func (c *Calcium) BuildImage(ctx context.Context, opts *types.BuildOptions) (ch chan *types.BuildImageMessage, err error) {
20+
logger := log.WithField("Calcium", "BuildImage").WithField("opts", opts)
2021
// Disable build API if scm not set
2122
if c.source == nil {
22-
return nil, types.ErrSCMNotSet
23+
return nil, logger.Err(errors.WithStack(types.ErrSCMNotSet))
2324
}
2425
// select nodes
2526
node, err := c.selectBuildNode(ctx)
2627
if err != nil {
27-
return nil, err
28+
return nil, logger.Err(errors.WithStack(err))
2829
}
2930
log.Infof("[BuildImage] Building image at pod %s node %s", node.Podname, node.Name)
3031
// get refs
3132
refs := node.Engine.BuildRefs(ctx, opts.Name, opts.Tags)
3233

3334
switch opts.BuildMethod {
3435
case types.BuildFromSCM:
35-
return c.buildFromSCM(ctx, node, refs, opts)
36+
ch, err = c.buildFromSCM(ctx, node, refs, opts)
3637
case types.BuildFromRaw:
37-
return c.buildFromContent(ctx, node, refs, opts.Tar)
38+
ch, err = c.buildFromContent(ctx, node, refs, opts.Tar)
3839
case types.BuildFromExist:
39-
return c.buildFromExist(ctx, refs[0], opts.ExistID)
40+
ch, err = c.buildFromExist(ctx, refs[0], opts.ExistID)
4041
default:
41-
return nil, errors.New("unknown build type")
42+
return nil, logger.Err(errors.WithStack(errors.New("unknown build type")))
4243
}
44+
return ch, logger.Err(errors.WithStack(err))
4345
}
4446

4547
func (c *Calcium) selectBuildNode(ctx context.Context) (*types.Node, error) {
4648
// get pod from config
4749
// TODO can choose multiple pod here for other engine support
4850
if c.config.Docker.BuildPod == "" {
49-
return nil, types.ErrNoBuildPod
51+
return nil, errors.WithStack(types.ErrNoBuildPod)
5052
}
5153

5254
// get node by scheduler
5355
nodes, err := c.ListPodNodes(ctx, c.config.Docker.BuildPod, nil, false)
5456
if err != nil {
55-
return nil, err
57+
return nil, errors.WithStack(err)
5658
}
5759
if len(nodes) == 0 {
58-
return nil, types.ErrInsufficientNodes
60+
return nil, errors.WithStack(types.ErrInsufficientNodes)
5961
}
6062
// get idle max node
61-
return c.scheduler.MaxIdleNode(nodes)
63+
node, err := c.scheduler.MaxIdleNode(nodes)
64+
return node, errors.WithStack(err)
6265
}
6366

6467
func (c *Calcium) buildFromSCM(ctx context.Context, node *types.Node, refs []string, opts *types.BuildOptions) (chan *types.BuildImageMessage, error) {
@@ -70,30 +73,33 @@ func (c *Calcium) buildFromSCM(ctx context.Context, node *types.Node, refs []str
7073
path, content, err := node.Engine.BuildContent(ctx, c.source, buildContentOpts)
7174
defer os.RemoveAll(path)
7275
if err != nil {
73-
return nil, err
76+
return nil, errors.WithStack(err)
7477
}
75-
return c.buildFromContent(ctx, node, refs, content)
78+
ch, err := c.buildFromContent(ctx, node, refs, content)
79+
return ch, errors.WithStack(err)
7680
}
7781

7882
func (c *Calcium) buildFromContent(ctx context.Context, node *types.Node, refs []string, content io.Reader) (chan *types.BuildImageMessage, error) {
7983
resp, err := node.Engine.ImageBuild(ctx, content, refs)
8084
if err != nil {
81-
return nil, err
85+
return nil, errors.WithStack(err)
8286
}
83-
return c.pushImage(ctx, resp, node, refs)
87+
ch, err := c.pushImage(ctx, resp, node, refs)
88+
return ch, errors.WithStack(err)
8489
}
8590

8691
func (c *Calcium) buildFromExist(ctx context.Context, ref, existID string) (chan *types.BuildImageMessage, error) {
92+
logger := log.WithField("Calcium", "buildFromExist").WithField("ref", ref).WithField("existID", existID)
8793
return withImageBuiltChannel(func(ch chan *types.BuildImageMessage) {
8894
node, err := c.getWorkloadNode(ctx, existID)
8995
if err != nil {
90-
ch <- buildErrMsg(err)
96+
ch <- buildErrMsg(logger.Err(err))
9197
return
9298
}
9399

94100
imageID, err := node.Engine.ImageBuildFromExist(ctx, existID, ref)
95101
if err != nil {
96-
ch <- buildErrMsg(err)
102+
ch <- buildErrMsg(logger.Err(err))
97103
return
98104
}
99105
go cleanupNodeImages(node, []string{imageID}, c.config.GlobalTimeout)
@@ -102,6 +108,7 @@ func (c *Calcium) buildFromExist(ctx context.Context, ref, existID string) (chan
102108
}
103109

104110
func (c *Calcium) pushImage(ctx context.Context, resp io.ReadCloser, node *types.Node, tags []string) (chan *types.BuildImageMessage, error) {
111+
logger := log.WithField("Calcium", "pushImage").WithField("node", node).WithField("tags", tags)
105112
return withImageBuiltChannel(func(ch chan *types.BuildImageMessage) {
106113
defer resp.Close()
107114
decoder := json.NewDecoder(resp)
@@ -119,7 +126,7 @@ func (c *Calcium) pushImage(ctx context.Context, resp io.ReadCloser, node *types
119126
break
120127
}
121128
malformed, _ := ioutil.ReadAll(decoder.Buffered()) // TODO err check
122-
log.Errorf("[BuildImage] Decode build image message failed %v, buffered: %v", err, malformed)
129+
logger.Errorf("[BuildImage] Decode build image message failed %+v, buffered: %v", err, malformed)
123130
return
124131
}
125132
ch <- message
@@ -137,7 +144,7 @@ func (c *Calcium) pushImage(ctx context.Context, resp io.ReadCloser, node *types
137144
log.Infof("[BuildImage] Push image %s", tag)
138145
rc, err := node.Engine.ImagePush(ctx, tag)
139146
if err != nil {
140-
ch <- &types.BuildImageMessage{Error: err.Error()}
147+
ch <- &types.BuildImageMessage{Error: logger.Err(err).Error()}
141148
continue
142149
}
143150

@@ -165,15 +172,16 @@ func withImageBuiltChannel(f func(chan *types.BuildImageMessage)) chan *types.Bu
165172
}
166173

167174
func cleanupNodeImages(node *types.Node, ids []string, ttl time.Duration) {
175+
logger := log.WithField("Calcium", "cleanupNodeImages").WithField("node", node).WithField("ids", ids).WithField("ttl", ttl)
168176
ctx, cancel := context.WithTimeout(context.Background(), ttl)
169177
defer cancel()
170178
for _, id := range ids {
171179
if _, err := node.Engine.ImageRemove(ctx, id, false, true); err != nil {
172-
log.Errorf("[BuildImage] Remove image error: %s", err)
180+
logger.Errorf("[BuildImage] Remove image error: %s", errors.WithStack(err))
173181
}
174182
}
175183
if spaceReclaimed, err := node.Engine.ImageBuildCachePrune(ctx, true); err != nil {
176-
log.Errorf("[BuildImage] Remove build image cache error: %s", err)
184+
logger.Errorf("[BuildImage] Remove build image cache error: %s", errors.WithStack(err))
177185
} else {
178186
log.Infof("[BuildImage] Clean cached image and release space %d", spaceReclaimed)
179187
}

‎cluster/calcium/calcium.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package calcium
33
import (
44
"strings"
55

6+
"github.com/pkg/errors"
67
"github.com/projecteru2/core/cluster"
78
"github.com/projecteru2/core/discovery"
89
"github.com/projecteru2/core/discovery/helium"
@@ -29,16 +30,17 @@ type Calcium struct {
2930

3031
// New returns a new cluster config
3132
func New(config types.Config, embeddedStorage bool) (*Calcium, error) {
33+
logger := log.WithField("Calcium", "New").WithField("config", config)
3234
// set store
3335
store, err := etcdv3.New(config, embeddedStorage)
3436
if err != nil {
35-
return nil, err
37+
return nil, logger.Err(errors.WithStack(err))
3638
}
3739

3840
// set scheduler
3941
potassium, err := complexscheduler.New(config)
4042
if err != nil {
41-
return nil, err
43+
return nil, logger.Err(errors.WithStack(err))
4244
}
4345
scheduler.InitSchedulerV1(potassium)
4446

@@ -54,16 +56,16 @@ func New(config types.Config, embeddedStorage bool) (*Calcium, error) {
5456
log.Warn("[Calcium] SCM not set, build API disabled")
5557
}
5658
if err != nil {
57-
log.Errorf("[Calcium] SCAM failed: %v", err)
58-
return nil, err
59+
logger.Errorf("[Calcium] SCAM failed: %+v", err)
60+
return nil, errors.WithStack(err)
5961
}
6062

6163
// set watcher
6264
watcher := helium.New(config.GRPCConfig, store)
6365

6466
cal := &Calcium{store: store, config: config, scheduler: potassium, source: scm, watcher: watcher}
6567
cal.wal, err = newCalciumWAL(cal)
66-
return cal, err
68+
return cal, logger.Err(errors.WithStack(err))
6769
}
6870

6971
// Finalizer use for defer

‎cluster/calcium/capacity.go

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313

1414
// CalculateCapacity calculates capacity
1515
func (c *Calcium) CalculateCapacity(ctx context.Context, opts *types.DeployOptions) (*types.CapacityMessage, error) {
16+
logger := log.WithField("Calcium", "CalculateCapacity").WithField("opts", opts)
1617
var err error
1718
msg := &types.CapacityMessage{
1819
Total: 0,
@@ -21,6 +22,7 @@ func (c *Calcium) CalculateCapacity(ctx context.Context, opts *types.DeployOptio
2122
return msg, c.withNodesLocked(ctx, opts.Podname, opts.Nodenames, nil, false, func(ctx context.Context, nodeMap map[string]*types.Node) error {
2223
if opts.DeployStrategy != strategy.Dummy {
2324
if _, msg.NodeCapacities, err = c.doAllocResource(ctx, nodeMap, opts); err != nil {
25+
logger.Errorf("[Calcium.CalculateCapacity] doAllocResource failed: %+v", err)
2426
return errors.WithStack(err)
2527
}
2628

@@ -31,6 +33,7 @@ func (c *Calcium) CalculateCapacity(ctx context.Context, opts *types.DeployOptio
3133
var infos []strategy.Info
3234
msg.Total, _, infos, err = c.doCalculateCapacity(nodeMap, opts)
3335
if err != nil {
36+
logger.Errorf("[Calcium.CalculateCapacity] doCalculateCapacity failed: %+v", err)
3437
return errors.WithStack(err)
3538
}
3639
for _, info := range infos {

‎cluster/calcium/control.go

+12-10
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"context"
66
"sync"
77

8+
"github.com/pkg/errors"
89
"github.com/projecteru2/core/cluster"
910
"github.com/projecteru2/core/log"
1011
"github.com/projecteru2/core/types"
@@ -13,6 +14,7 @@ import (
1314

1415
// ControlWorkload control workloads status
1516
func (c *Calcium) ControlWorkload(ctx context.Context, ids []string, t string, force bool) (chan *types.ControlWorkloadMessage, error) {
17+
logger := log.WithField("Calcium", "ControlWorkload").WithField("ids", ids).WithField("t", t).WithField("force", force)
1618
ch := make(chan *types.ControlWorkloadMessage)
1719

1820
go func() {
@@ -28,20 +30,20 @@ func (c *Calcium) ControlWorkload(ctx context.Context, ids []string, t string, f
2830
switch t {
2931
case cluster.WorkloadStop:
3032
message, err = c.doStopWorkload(ctx, workload, force)
31-
return err
33+
return errors.WithStack(err)
3234
case cluster.WorkloadStart:
3335
message, err = c.doStartWorkload(ctx, workload, force)
34-
return err
36+
return errors.WithStack(err)
3537
case cluster.WorkloadRestart:
3638
message, err = c.doStopWorkload(ctx, workload, force)
3739
if err != nil {
38-
return err
40+
return errors.WithStack(err)
3941
}
4042
startHook, err := c.doStartWorkload(ctx, workload, force)
4143
message = append(message, startHook...)
42-
return err
44+
return errors.WithStack(err)
4345
}
44-
return types.ErrUnknownControlType
46+
return errors.WithStack(types.ErrUnknownControlType)
4547
})
4648
if err == nil {
4749
log.Infof("[ControlWorkload] Workload %s %s", id, t)
@@ -50,7 +52,7 @@ func (c *Calcium) ControlWorkload(ctx context.Context, ids []string, t string, f
5052
}
5153
ch <- &types.ControlWorkloadMessage{
5254
WorkloadID: id,
53-
Error: err,
55+
Error: logger.Err(err),
5456
Hook: message,
5557
}
5658
}(id)
@@ -63,7 +65,7 @@ func (c *Calcium) ControlWorkload(ctx context.Context, ids []string, t string, f
6365

6466
func (c *Calcium) doStartWorkload(ctx context.Context, workload *types.Workload, force bool) (message []*bytes.Buffer, err error) {
6567
if err = workload.Start(ctx); err != nil {
66-
return message, err
68+
return message, errors.WithStack(err)
6769
}
6870
// TODO healthcheck first
6971
if workload.Hook != nil && len(workload.Hook.AfterStart) > 0 {
@@ -75,7 +77,7 @@ func (c *Calcium) doStartWorkload(ctx context.Context, workload *types.Workload,
7577
force, workload.Engine,
7678
)
7779
}
78-
return message, err
80+
return message, errors.WithStack(err)
7981
}
8082

8183
func (c *Calcium) doStopWorkload(ctx context.Context, workload *types.Workload, force bool) (message []*bytes.Buffer, err error) {
@@ -88,7 +90,7 @@ func (c *Calcium) doStopWorkload(ctx context.Context, workload *types.Workload,
8890
force, workload.Engine,
8991
)
9092
if err != nil {
91-
return message, err
93+
return message, errors.WithStack(err)
9294
}
9395
}
9496

@@ -98,5 +100,5 @@ func (c *Calcium) doStopWorkload(ctx context.Context, workload *types.Workload,
98100
if err = workload.Stop(ctx); err != nil {
99101
message = append(message, bytes.NewBufferString(err.Error()))
100102
}
101-
return message, err
103+
return message, errors.WithStack(err)
102104
}

‎cluster/calcium/copy.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@ import (
44
"context"
55
"sync"
66

7+
"github.com/pkg/errors"
78
"github.com/projecteru2/core/log"
89
"github.com/projecteru2/core/types"
910
)
1011

1112
// Copy uses VirtualizationCopyFrom cp to copy specified things and send to remote
1213
func (c *Calcium) Copy(ctx context.Context, opts *types.CopyOptions) (chan *types.CopyMessage, error) {
14+
logger := log.WithField("Calcium", "Copy").WithField("opts", opts)
1315
if err := opts.Validate(); err != nil {
14-
return nil, err
16+
return nil, logger.Err(errors.WithStack(err))
1517
}
1618
ch := make(chan *types.CopyMessage)
1719
go func() {
@@ -30,7 +32,7 @@ func (c *Calcium) Copy(ctx context.Context, opts *types.CopyOptions) (chan *type
3032
}
3133
return nil
3234
}); err != nil {
33-
ch <- makeCopyMessage(id, "", "", err, nil)
35+
ch <- makeCopyMessage(id, "", "", logger.Err(err), nil)
3436
}
3537
}(id, paths)
3638
}

0 commit comments

Comments
 (0)