cubefs

Форк
0
/
manager_resp.go 
102 строки · 2.6 Кб
1
// Copyright 2018 The CubeFS Authors.
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//     http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
12
// implied. See the License for the specific language governing
13
// permissions and limitations under the License.
14

15
package metanode
16

17
import (
18
	"net"
19

20
	"github.com/cubefs/cubefs/proto"
21
	"github.com/cubefs/cubefs/util/errors"
22
	"github.com/cubefs/cubefs/util/log"
23
)
24

25
// Reply operation results to the master.
26
func (m *metadataManager) respondToMaster(task *proto.AdminTask) (err error) {
27
	// handle panic
28
	defer func() {
29
		if r := recover(); r != nil {
30
			switch data := r.(type) {
31
			case error:
32
				err = data
33
			default:
34
				err = errors.New(data.(string))
35
			}
36
		}
37
	}()
38
	if err = masterClient.NodeAPI().ResponseMetaNodeTask(task); err != nil {
39
		err = errors.Trace(err, "try respondToMaster failed")
40
	}
41
	return
42
}
43

44
// Reply data through tcp connection to the client.
45
func (m *metadataManager) respondToClientWithVer(conn net.Conn, p *Packet) (err error) {
46
	// Handle panic
47
	defer func() {
48
		if r := recover(); r != nil {
49
			switch data := r.(type) {
50
			case error:
51
				err = data
52
			default:
53
				err = errors.New(data.(string))
54
			}
55
		}
56
	}()
57

58
	// process data and send reply though specified tcp connection.
59
	if p.VerSeq > 0 {
60
		p.ExtentType |= proto.MultiVersionFlag
61
	}
62
	err = p.WriteToConn(conn)
63
	if err != nil {
64
		log.LogErrorf("response to client[%s], "+
65
			"request[%s], response packet[%s]",
66
			err.Error(), p.GetOpMsg(), p.GetResultMsg())
67
	}
68
	return
69
}
70

71
// Reply data through tcp connection to the client.
72
func (m *metadataManager) respondToClient(conn net.Conn, p *Packet) (err error) {
73
	// Handle panic
74
	defer func() {
75
		if r := recover(); r != nil {
76
			switch data := r.(type) {
77
			case error:
78
				err = data
79
			default:
80
				err = errors.New(data.(string))
81
			}
82
		}
83
	}()
84

85
	// process data and send reply though specified tcp connection.
86
	err = p.WriteToConn(conn)
87
	if err != nil {
88
		log.LogErrorf("response to client[%s], "+
89
			"request[%s], response packet[%s]",
90
			err.Error(), p.GetOpMsg(), p.GetResultMsg())
91
	}
92
	return
93
}
94

95
func (m *metadataManager) responseAckOKToMaster(conn net.Conn, p *Packet) {
96
	go func() {
97
		p.PacketOkReply()
98
		if err := p.WriteToConn(conn); err != nil {
99
			log.LogErrorf("ack master response: %s", err.Error())
100
		}
101
	}()
102
}
103

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.