Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

raftstore-v2: support tablet split #13709

Merged
merged 57 commits into from Nov 14, 2022
Merged
Show file tree
Hide file tree
Changes from 49 commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
8b49353
init
SpadeA-Tang Oct 27, 2022
97f1506
update
SpadeA-Tang Oct 27, 2022
8891983
add a test
SpadeA-Tang Oct 27, 2022
070c910
refactor engine factory
SpadeA-Tang Oct 27, 2022
9afc87c
update
SpadeA-Tang Oct 28, 2022
c4bfc02
update
SpadeA-Tang Oct 28, 2022
17d42b4
update
SpadeA-Tang Oct 28, 2022
b9a2c9e
address comment:
SpadeA-Tang Oct 28, 2022
dc35a2c
address comment
SpadeA-Tang Oct 28, 2022
445a721
save
SpadeA-Tang Oct 28, 2022
ee0e104
Merge branch 'split-path' into split-exec
SpadeA-Tang Oct 28, 2022
0f0971f
save
SpadeA-Tang Oct 28, 2022
c8d5e63
Merge branch 'split-path' into split-exec
SpadeA-Tang Oct 28, 2022
16ecbe1
pass test
SpadeA-Tang Oct 28, 2022
11bb7f3
update
SpadeA-Tang Oct 31, 2022
01f6bcf
solve conflict
SpadeA-Tang Oct 31, 2022
7558019
update
SpadeA-Tang Oct 31, 2022
ca2d1bc
add single split
SpadeA-Tang Oct 31, 2022
38ec916
update
SpadeA-Tang Nov 1, 2022
766093f
update
SpadeA-Tang Nov 1, 2022
f78c219
update
SpadeA-Tang Nov 1, 2022
d884c01
update
SpadeA-Tang Nov 1, 2022
ca98abb
update
SpadeA-Tang Nov 1, 2022
f9ccbb9
fmt
SpadeA-Tang Nov 1, 2022
cefa5de
fmt
SpadeA-Tang Nov 1, 2022
c749bd4
Merge branch 'master' into split-exec
SpadeA-Tang Nov 1, 2022
1e212d5
update
SpadeA-Tang Nov 1, 2022
0e1abda
merge conflict
SpadeA-Tang Nov 4, 2022
89dbd09
update
SpadeA-Tang Nov 4, 2022
eeb2270
update
SpadeA-Tang Nov 7, 2022
4e7e9a3
update
SpadeA-Tang Nov 7, 2022
f8291d1
refactor test
SpadeA-Tang Nov 7, 2022
37364a6
update
SpadeA-Tang Nov 7, 2022
33d33ef
update test
SpadeA-Tang Nov 7, 2022
5bcf898
address commment
SpadeA-Tang Nov 8, 2022
da6b98e
update
SpadeA-Tang Nov 8, 2022
e1f1df8
update
SpadeA-Tang Nov 9, 2022
024e51d
update
SpadeA-Tang Nov 9, 2022
b92e91f
update
SpadeA-Tang Nov 9, 2022
2edd674
resolve conflict
SpadeA-Tang Nov 9, 2022
c2c0848
update
SpadeA-Tang Nov 9, 2022
29e87e5
update comment
SpadeA-Tang Nov 9, 2022
ed69983
update
SpadeA-Tang Nov 9, 2022
7ad0739
update
SpadeA-Tang Nov 9, 2022
2629117
update
SpadeA-Tang Nov 9, 2022
a8d5682
address comment
SpadeA-Tang Nov 10, 2022
792ada3
address comment
SpadeA-Tang Nov 10, 2022
0eb8f73
address comment
SpadeA-Tang Nov 10, 2022
e97f1ad
update
SpadeA-Tang Nov 11, 2022
0b4c717
address comment
SpadeA-Tang Nov 11, 2022
ea40391
update
SpadeA-Tang Nov 11, 2022
7e892c2
address comment
SpadeA-Tang Nov 11, 2022
dbdf1ad
address comment
SpadeA-Tang Nov 11, 2022
d7cde7e
resolve merge
SpadeA-Tang Nov 11, 2022
400cf05
address comment
SpadeA-Tang Nov 14, 2022
7a8a31e
merge
SpadeA-Tang Nov 14, 2022
2bc0a98
address comment
SpadeA-Tang Nov 14, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
10 changes: 8 additions & 2 deletions components/raftstore-v2/src/batch/store.rs
Expand Up @@ -14,6 +14,7 @@ use crossbeam::channel::{Sender, TrySendError};
use engine_traits::{Engines, KvEngine, RaftEngine, TabletFactory};
use file_system::{set_io_type, IoType};
use futures::{compat::Future01CompatExt, FutureExt};
use keys::enc_end_key;
tabokie marked this conversation as resolved.
Show resolved Hide resolved
use kvproto::{
metapb::Store,
raft_serverpb::{PeerState, RaftMessage},
Expand Down Expand Up @@ -264,6 +265,7 @@ impl<EK: KvEngine, ER: RaftEngine, T> StorePollerBuilder<EK, ER, T> {
fn init(&self) -> Result<HashMap<u64, SenderFsmPair<EK, ER>>> {
let mut regions = HashMap::default();
let cfg = self.cfg.value();
let mut meta = self.store_meta.lock().unwrap();
self.engine
.for_each_raft_group::<Error, _>(&mut |region_id| {
assert_ne!(region_id, INVALID_ID);
Expand All @@ -277,8 +279,12 @@ impl<EK: KvEngine, ER: RaftEngine, T> StorePollerBuilder<EK, ER, T> {
Some(p) => p,
None => return Ok(()),
};
let pair = PeerFsm::new(&cfg, &*self.tablet_factory, storage)?;
let prev = regions.insert(region_id, pair);
let (sender, peer_fsm) = PeerFsm::new(&cfg, &*self.tablet_factory, storage)?;
let region = peer_fsm.as_ref().peer().region().clone();
tabokie marked this conversation as resolved.
Show resolved Hide resolved
meta.region_read_progress
.insert(region_id, peer_fsm.as_ref().peer().read_progress().clone());

let prev = regions.insert(region_id, (sender, peer_fsm));
if let Some((_, p)) = prev {
return Err(box_err!(
"duplicate region {:?} vs {:?}",
Expand Down
1 change: 1 addition & 0 deletions components/raftstore-v2/src/fsm/peer.rs
Expand Up @@ -220,6 +220,7 @@ impl<'a, EK: KvEngine, ER: RaftEngine, T: Transport> PeerFsmDelegate<'a, EK, ER,
}
PeerMsg::Tick(tick) => self.on_tick(tick),
PeerMsg::ApplyRes(res) => self.fsm.peer.on_apply_res(self.store_ctx, res),
PeerMsg::SplitInit(msg) => self.fsm.peer.on_split_init(self.store_ctx, msg),
PeerMsg::Start => self.on_start(),
PeerMsg::Noop => unimplemented!(),
PeerMsg::Persisted {
Expand Down
25 changes: 23 additions & 2 deletions components/raftstore-v2/src/fsm/store.rs
@@ -1,16 +1,21 @@
// Copyright 2022 TiKV Project Authors. Licensed under Apache-2.0.

use std::time::SystemTime;
use std::{collections::BTreeMap, time::SystemTime};
tabokie marked this conversation as resolved.
Show resolved Hide resolved

use batch_system::Fsm;
use collections::HashMap;
use engine_traits::{KvEngine, RaftEngine};
use raftstore::store::{Config, ReadDelegate};
use kvproto::{metapb::Region, raft_serverpb::RaftMessage};
use raftstore::{
coprocessor::RegionChangeReason,
store::{Config, ReadDelegate, RegionReadProgressRegistry},
};
use slog::{o, Logger};
use tikv_util::mpsc::{self, LooseBoundedSender, Receiver};

use crate::{
batch::StoreContext,
raft::Peer,
router::{StoreMsg, StoreTick},
tablet::CachedTablet,
};
Expand All @@ -24,6 +29,8 @@ where
pub readers: HashMap<u64, ReadDelegate>,
/// region_id -> tablet cache
pub tablet_caches: HashMap<u64, CachedTablet<E>>,
/// region_id -> `RegionReadProgress`
pub region_read_progress: RegionReadProgressRegistry,
}

impl<E> StoreMeta<E>
Expand All @@ -35,8 +42,21 @@ where
store_id: None,
readers: HashMap::default(),
tablet_caches: HashMap::default(),
region_read_progress: RegionReadProgressRegistry::new(),
}
}

#[inline]
pub fn set_region<ER: RaftEngine>(
tabokie marked this conversation as resolved.
Show resolved Hide resolved
&mut self,
region: Region,
peer: &mut Peer<E, ER>,
reason: RegionChangeReason,
tablet_index: u64,
) {
let reader = self.readers.get_mut(&region.get_id()).unwrap();
peer.set_region(reader, region, reason, tablet_index);
}
}

impl<E: KvEngine> Default for StoreMeta<E> {
Expand Down Expand Up @@ -149,6 +169,7 @@ impl<'a, EK: KvEngine, ER: RaftEngine, T> StoreFsmDelegate<'a, EK, ER, T> {
StoreMsg::Start => self.on_start(),
StoreMsg::Tick(tick) => self.on_tick(tick),
StoreMsg::RaftMessage(msg) => self.fsm.store.on_raft_message(self.store_ctx, msg),
StoreMsg::SplitInit(msg) => self.fsm.store.on_split_init(self.store_ctx, msg),
}
}
}
Expand Down
7 changes: 2 additions & 5 deletions components/raftstore-v2/src/operation/command/admin/mod.rs
Expand Up @@ -4,10 +4,7 @@ mod conf_change;
mod split;

use engine_traits::{KvEngine, RaftEngine};
use kvproto::{
raft_cmdpb::{AdminCmdType, AdminRequest, RaftCmdRequest},
raft_serverpb::PeerState,
};
use kvproto::raft_cmdpb::{AdminCmdType, AdminRequest, RaftCmdRequest};
use protobuf::Message;
use raft::prelude::ConfChangeV2;
use raftstore::{
Expand All @@ -20,7 +17,7 @@ use raftstore::{
Result,
};
use slog::info;
pub use split::SplitResult;
pub use split::{SplitInit, SplitResult};
use tikv_util::box_err;

use self::conf_change::ConfChangeResult;
Expand Down