blob: ec834067f2d3fa6cfbcd1e4d1b54e5f5ae778911 [file] [log] [blame]
/**
* 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
*
* 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.
*/
#ifndef SRC_CPP_SVCS_STMGR_SRC_MANAGER_TMASTER_CLIENT_H_
#define SRC_CPP_SVCS_STMGR_SRC_MANAGER_TMASTER_CLIENT_H_
#include <set>
#include <string>
#include <vector>
#include "network/network_error.h"
#include "proto/messages.h"
#include "network/network.h"
#include "basics/basics.h"
namespace heron {
namespace stmgr {
using std::shared_ptr;
class TMasterClient : public Client {
public:
TMasterClient(shared_ptr<EventLoop> eventLoop, const NetworkOptions& _options,
const sp_string& _stmgr_id,
const sp_string& _stmgr_host, sp_int32 _data_port, sp_int32 _local_data_port,
sp_int32 _shell_port,
VCallback<shared_ptr<proto::system::PhysicalPlan>> _pplan_watch,
VCallback<sp_string> _stateful_checkpoint_watch,
VCallback<sp_string, sp_int64> _restore_topology_watch,
VCallback<sp_string> _start_stateful_watch);
virtual ~TMasterClient();
// Told by the upper layer to disconnect and self destruct
void Die();
// Sets the instances that belong to us
void SetInstanceInfo(const std::vector<proto::system::Instance*>& _instances);
// returns the tmaster address "host:port" form.
sp_string getTmasterHostPort();
// Send a InstanceStateStored message to tmaster
void SavedInstanceState(const proto::system::Instance& _instance,
const std::string& _checkpoint_id);
// Send RestoreTopologyStateResponse to tmaster
void SendRestoreTopologyStateResponse(proto::system::StatusCode _status,
const std::string& _checkpoint_id,
sp_int64 _txid);
// Send ResetTopologyState message to tmaster
void SendResetTopologyState(const std::string& _dead_stmgr,
int32_t _dead_instance,
const std::string& _reason);
protected:
virtual void HandleConnect(NetworkErrorCode status);
virtual void HandleClose(NetworkErrorCode status);
private:
void HandleRegisterResponse(void*,
pool_unique_ptr<proto::tmaster::StMgrRegisterResponse> _response,
NetworkErrorCode);
void HandleHeartbeatResponse(void*,
pool_unique_ptr<proto::tmaster::StMgrHeartbeatResponse> response,
NetworkErrorCode);
void HandleNewAssignmentMessage(pool_unique_ptr<proto::stmgr::NewPhysicalPlanMessage> _message);
void HandleStatefulCheckpointMessage(
pool_unique_ptr<proto::ckptmgr::StartStatefulCheckpoint> _message);
void HandleRestoreTopologyStateRequest(
pool_unique_ptr<proto::ckptmgr::RestoreTopologyStateRequest> _message);
void HandleStartStmgrStatefulProcessing(
pool_unique_ptr<proto::ckptmgr::StartStmgrStatefulProcessing> _msg);
void OnReConnectTimer();
void OnHeartbeatTimer();
void SendRegisterRequest();
void SendHeartbeatRequest();
void CleanInstances();
sp_string stmgr_id_;
sp_string stmgr_host_;
sp_int32 data_port_;
sp_int32 local_data_port_;
sp_int32 shell_port_;
// Set of instances to be reported to tmaster
std::set<unique_ptr<proto::system::Instance>> instances_;
bool to_die_;
// We invoke this callback upon a new physical plan from tmaster
VCallback<shared_ptr<proto::system::PhysicalPlan>> pplan_watch_;
// We invoke this callback upon receiving a checkpoint message from tmaster
// passing in the checkpoint id
VCallback<sp_string> stateful_checkpoint_watch_;
// We invoke this callback upon receiving a restore topology message from tmaster
// passing in the checkpoint id and the txid
VCallback<sp_string, sp_int64> restore_topology_watch_;
// We invoke this callback upon receiving a StartStatefulProcessing message from tmaster
// passing in the checkpoint id
VCallback<sp_string> start_stateful_watch_;
// Configs to be read
sp_int32 reconnect_tmaster_interval_sec_;
sp_int32 stream_to_tmaster_heartbeat_interval_sec_;
sp_int64 reconnect_timer_id;
sp_int64 heartbeat_timer_id;
// Counter for reconnect attempts
sp_int32 reconnect_attempts_;
sp_int32 reconnect_max_attempt_;
// Permanent timer callbacks
VCallback<> reconnect_timer_cb;
VCallback<> heartbeat_timer_cb;
};
} // namespace stmgr
} // namespace heron
#endif // SRC_CPP_SVCS_STMGR_SRC_MANAGER_TMASTER_CLIENT_H_