sapling/eden/fs/takeover/TakeoverServer.h
Genevieve Helsel 8bb3b33f8a add fault injection to TakeoverServer
Summary: This allows for fault injection into the TakeoverServer, which will be helpful when trying to mock a failed "ready" handshake (this will be used by injecting an error, not a timeout).

Reviewed By: simpkins

Differential Revision: D20527046

fbshipit-source-id: 24d493fdac620c759c98b050b6cec6b88587789a
2020-04-07 09:52:21 -07:00

64 lines
1.5 KiB
C++

/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This software may be used and distributed according to the terms of the
* GNU General Public License version 2.
*/
#pragma once
#include <folly/io/async/AsyncServerSocket.h>
#include <memory>
#include "eden/fs/utils/FaultInjector.h"
#include "eden/fs/utils/PathFuncs.h"
namespace facebook {
namespace eden {
class TakeoverData;
class TakeoverHandler;
/**
* A helper class that listens on a unix domain socket for clients that
* wish to perform graceful takeover of this EdenServer's mount points.
*/
class TakeoverServer : private folly::AsyncServerSocket::AcceptCallback {
public:
explicit TakeoverServer(
folly::EventBase* eventBase,
AbsolutePathPiece socketPath,
TakeoverHandler* handler,
FaultInjector* FOLLY_NONNULL faultInjector);
virtual ~TakeoverServer() override;
void start();
TakeoverHandler* getTakeoverHandler() const {
return handler_;
}
private:
class ConnHandler;
folly::EventBase* getEventBase() const {
return eventBase_;
}
// AcceptCallback methods
void connectionAccepted(
folly::NetworkSocket fdNetworkSocket,
const folly::SocketAddress& clientAddr) noexcept override;
void acceptError(const std::exception& ex) noexcept override;
void connectionDone(ConnHandler* handler);
folly::EventBase* eventBase_{nullptr};
TakeoverHandler* handler_{nullptr};
AbsolutePath socketPath_;
folly::AsyncServerSocket::UniquePtr socket_;
FaultInjector& faultInjector_;
};
} // namespace eden
} // namespace facebook