Various fixes after the gRPC secure changes.

vtgateclienttest has to register services in 'OnRun',
instead of right away, as the gRPC server is not created yet.

Various fixes related to socket file. We were wrongly assuming
we needed the gRPC server when a port is specified, forgetting
the unix socket case. Refactoring the unix socket case to be
better aligned with gRPC code.
This commit is contained in:
Alain Jobart 2016-04-04 13:39:47 -07:00
Родитель dfb3dab6e3
Коммит 813b1a8fc7
5 изменённых файлов: 38 добавлений и 20 удалений

Просмотреть файл

@ -27,10 +27,12 @@ func main() {
servenv.Init()
// The implementation chain.
s := services.CreateServices()
for _, f := range vtgate.RegisterVTGates {
f(s)
}
servenv.OnRun(func() {
s := services.CreateServices()
for _, f := range vtgate.RegisterVTGates {
f(s)
}
})
servenv.RunDefault()
}

Просмотреть файл

@ -47,17 +47,31 @@ var (
GRPCServer *grpc.Server
)
// isGRPCEnabled returns true if gRPC server is set
func isGRPCEnabled() bool {
if GRPCPort != nil && *GRPCPort != 0 {
return true
}
if SocketFile != nil && *SocketFile != "" {
return true
}
return false
}
// createGRPCServer create the gRPC server we will be using.
// It has to be called after flags are parsed, but before
// services register themselves.
func createGRPCServer() {
// skip if not registered
if GRPCPort == nil || *GRPCPort == 0 {
if !isGRPCEnabled() {
log.Infof("Skipping gRPC server creation")
return
}
var opts []grpc.ServerOption
if *GRPCCert != "" && *GRPCKey != "" {
if GRPCPort != nil && *GRPCCert != "" && *GRPCKey != "" {
config := &tls.Config{}
// load the server cert and key
@ -120,7 +134,7 @@ func RegisterGRPCFlags() {
func GRPCCheckServiceMap(name string) bool {
// Silently fail individual services if gRPC is not enabled in
// the first place (either on a grpc port or on the socket file)
if (GRPCPort == nil || *GRPCPort == 0) && (SocketFile == nil || *SocketFile == "") {
if !isGRPCEnabled() {
return false
}

Просмотреть файл

@ -22,6 +22,7 @@ func Run(port int) {
createGRPCServer()
onRunHooks.Fire()
serveGRPC()
serveSocketFile()
l, err := proc.Listen(fmt.Sprintf("%v", port))
if err != nil {

Просмотреть файл

@ -13,16 +13,18 @@ import (
)
var (
// The flags used when calling RegisterDefaultSocketFileFlags.
// SocketFile has the flag used when calling
// RegisterDefaultSocketFileFlags.
SocketFile *string
)
// serveSocketFile listen to the named socket and serves RPCs on it.
func serveSocketFile(name string) {
if name == "" {
func serveSocketFile() {
if SocketFile == nil || *SocketFile == "" {
log.Infof("Not listening on socket file")
return
}
name := *SocketFile
// try to delete if file exists
if _, err := os.Stat(name); err == nil {
@ -41,12 +43,7 @@ func serveSocketFile(name string) {
}
// RegisterDefaultSocketFileFlags registers the default flags for listening
// to a socket. It also registers an OnRun callback to enable the listening
// socket.
// This needs to be called before flags are parsed.
// to a socket. This needs to be called before flags are parsed.
func RegisterDefaultSocketFileFlags() {
SocketFile = flag.String("socket_file", "", "Local unix socket file to listen on")
OnRun(func() {
serveSocketFile(*SocketFile)
})
}

Просмотреть файл

@ -597,11 +597,15 @@ class Tablet(object):
mysql_sock = os.path.join(self.tablet_dir, 'mysql.sock')
mysqlctl_sock = os.path.join(self.tablet_dir, 'mysqlctl.sock')
while True:
if os.path.exists(mysql_sock) and os.path.exists(mysqlctl_sock):
wait_for = []
if not os.path.exists(mysql_sock):
wait_for.append(mysql_sock)
if not os.path.exists(mysqlctl_sock):
wait_for.append(mysqlctl_sock)
if not wait_for:
return
timeout = utils.wait_step(
'waiting for mysql and mysqlctl socket files: %s %s' %
(mysql_sock, mysqlctl_sock), timeout)
timeout = utils.wait_step('waiting for socket files: %s' % str(wait_for),
timeout, sleep_time=2.0)
def _add_dbconfigs(self, args, repl_extra_flags=None):
if repl_extra_flags is None: