example/KatranSimpleServiceHandler.h (54 lines of code) (raw):
/* Copyright (C) 2018-present, Facebook, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
#include <mutex>
#include <vector>
#include "katran/if/gen-cpp2/KatranService.h"
#include "katran/lib/KatranLb.h"
namespace lb {
namespace katran {
/**
* Simple example of libkatran usage. local thrift RPC endpoint will be
* responsible for handling incoming requests and change the state of load
* balancer's forwarding table.
*/
class KatranSimpleServiceHandler : virtual public KatranServiceSvIf {
public:
KatranSimpleServiceHandler() = delete;
explicit KatranSimpleServiceHandler(const ::katran::KatranConfig& config);
bool changeMac(std::unique_ptr<::lb::katran::Mac> newMac) override;
void getMac(::lb::katran::Mac& _return) override;
bool addVip(std::unique_ptr<::lb::katran::VipMeta> vipMeta) override;
bool delVip(std::unique_ptr<::lb::katran::Vip> vip) override;
void getAllVips(std::vector<::lb::katran::Vip>& _return) override;
bool modifyVip(std::unique_ptr<::lb::katran::VipMeta> vipMeta) override;
bool modifyReal(std::unique_ptr<::lb::katran::RealMeta> realMeta) override;
int64_t getVipFlags(std::unique_ptr<::lb::katran::Vip> vip) override;
bool addRealForVip(
std::unique_ptr<::lb::katran::Real> real,
std::unique_ptr<::lb::katran::Vip> vip) override;
bool delRealForVip(
std::unique_ptr<::lb::katran::Real> real,
std::unique_ptr<::lb::katran::Vip> vip) override;
bool modifyRealsForVip(
::lb::katran::Action action,
std::unique_ptr<::lb::katran::Reals> reals,
std::unique_ptr<::lb::katran::Vip> vip) override;
void getRealsForVip(
::lb::katran::Reals& _return,
std::unique_ptr<::lb::katran::Vip> vip) override;
bool modifyQuicRealsMapping(
::lb::katran::Action action,
std::unique_ptr<::lb::katran::QuicReals> reals) override;
void getQuicRealsMapping(::lb::katran::QuicReals& _return) override;
void getStatsForVip(
::lb::katran::Stats& _return,
std::unique_ptr<::lb::katran::Vip> vip) override;
void getLruStats(::lb::katran::Stats& _return) override;
void getLruMissStats(::lb::katran::Stats& _return) override;
void getLruFallbackStats(::lb::katran::Stats& _return) override;
void getIcmpTooBigStats(::lb::katran::Stats& _return) override;
bool addHealthcheckerDst(
std::unique_ptr<::lb::katran::Healthcheck> healthcheck) override;
bool delHealthcheckerDst(int32_t somark) override;
void getHealthcheckersDst(::lb::katran::hcMap& _return) override;
private:
::katran::KatranLb lb_;
std::mutex giant_;
bool hcForwarding_;
};
} // namespace katran
} // namespace lb