GRPCManagerServiceImpl.java 2.7 KB
Newer Older
1
/*
wu-sheng's avatar
wu-sheng 已提交
2 3 4 5 6 7
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
8 9 10 11 12 13 14 15 16 17 18
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

19 20

package org.apache.skywalking.apm.collector.grpc.manager.service;
21

22 23 24
import org.apache.skywalking.apm.collector.server.Server;
import org.apache.skywalking.apm.collector.server.ServerException;
import org.apache.skywalking.apm.collector.server.grpc.GRPCServer;
25 26
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
27

28 29 30
import java.io.File;
import java.util.Map;

31 32 33
/**
 * @author peng-yongsheng
 */
34
public class GRPCManagerServiceImpl implements GRPCManagerService {
35

36 37 38 39 40 41 42
    private final Logger logger = LoggerFactory.getLogger(GRPCManagerServiceImpl.class);

    private final Map<String, GRPCServer> servers;

    public GRPCManagerServiceImpl(Map<String, GRPCServer> servers) {
        this.servers = servers;
    }
43

44 45 46 47 48 49 50 51 52 53 54
    @Override
    public Server createIfAbsent(String host, int port) throws ServerCanNotBeCreatedException {
        return createOrChooseServer(host, port, new GRPCServer(host, port));
    }

    @Override
    public Server createIfAbsent(String host, int port, File certChainFile, File privateKeyFile) throws ServerCanNotBeCreatedException {
        return createOrChooseServer(host, port, new GRPCServer(host, port, certChainFile, privateKeyFile));
    }

    private Server createOrChooseServer(String host, int port, GRPCServer newServer) throws ServerCanNotBeCreatedException {
55
        String id = host + String.valueOf(port);
56 57 58 59 60 61 62
        GRPCServer existServer = servers.get(id);
        if (existServer != null) {
            if (existServer.isStatusEqual(newServer)) {
                return existServer;
            } else {
                throw new ServerCanNotBeCreatedException("Can't create server with same port but different setting. SSL setting must equal too.");
            }
63
        } else {
64
            try {
65
                newServer.initialize();
66 67 68
            } catch (ServerException e) {
                logger.error(e.getMessage(), e);
            }
69 70
            servers.put(id, newServer);
            return newServer;
71 72 73
        }
    }
}