Files
oceanbase/tools/obcdc/src/ob_log_svr_stream.cpp
2022-03-25 18:10:38 +08:00

126 lines
3.0 KiB
C++

/**
* Copyright (c) 2021 OceanBase
* OceanBase CE is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#define USING_LOG_PREFIX OBLOG_FETCHER
#include "ob_log_svr_stream.h"
#include "ob_log_part_fetch_ctx.h" // PartFetchCtx
#include "ob_log_fetch_stream_type.h" // FETCH_STREAM_TYPE_HOT
#include "ob_log_utils.h" // SIZE_TO_STR
namespace oceanbase
{
namespace liboblog
{
SvrStream::SvrStream() :
ddl_stream_(FETCH_STREAM_TYPE_DDL),
hot_stream_(FETCH_STREAM_TYPE_HOT),
cold_stream_(FETCH_STREAM_TYPE_COLD)
{
reset();
}
SvrStream::~SvrStream()
{
reset();
}
void SvrStream::reset()
{
svr_.reset();
ddl_stream_.reset();
hot_stream_.reset();
cold_stream_.reset();
}
void SvrStream::reset(const common::ObAddr &svr,
IObLogRpc &rpc,
IFetchStreamPool &fs_pool,
IObLogSvrFinder &svr_finder,
IObLogFetcherHeartbeatWorker &heartbeater,
IObLogStreamWorker &stream_worker,
IFetchLogARpcResultPool &rpc_result_pool,
PartProgressController &progress_controller)
{
reset();
svr_ = svr;
ddl_stream_.reset(svr,
rpc,
fs_pool,
svr_finder,
heartbeater,
stream_worker,
rpc_result_pool,
progress_controller);
hot_stream_.reset(svr,
rpc,
fs_pool,
svr_finder,
heartbeater,
stream_worker,
rpc_result_pool,
progress_controller);
cold_stream_.reset(svr,
rpc,
fs_pool,
svr_finder,
heartbeater,
stream_worker,
rpc_result_pool,
progress_controller);
}
int SvrStream::dispatch(PartFetchCtx &task)
{
int ret = OB_SUCCESS;
FetchStreamType stype = task.get_fetch_stream_type();
if (FETCH_STREAM_TYPE_HOT == stype) {
if (OB_FAIL(hot_stream_.dispatch(task))) {
LOG_ERROR("dispatch fetch task to fetch stream container fail", KR(ret), K(hot_stream_),
K(task));
}
} else if (FETCH_STREAM_TYPE_COLD == stype) {
if (OB_FAIL(cold_stream_.dispatch(task))) {
LOG_ERROR("dispatch fetch task to fetch stream container fail", KR(ret), K(cold_stream_),
K(task));
}
} else if (FETCH_STREAM_TYPE_DDL == stype) {
if (OB_FAIL(ddl_stream_.dispatch(task))) {
// It is required that the join must be successful and that a DDL stream can hold all the DDL partitions
LOG_ERROR("dispatch fetch task to fetch stream container fail", KR(ret), K(ddl_stream_),
K(task));
}
} else {
LOG_ERROR("invalid stream type", K(stype), K(task));
ret = OB_INVALID_ARGUMENT;
}
return ret;
}
void SvrStream::do_stat()
{
ddl_stream_.do_stat();
hot_stream_.do_stat();
cold_stream_.do_stat();
}
}
}