Skip to main content

dbx_core/grid/
protocol.rs

1//! Grid 통신 멀티플렉싱 프로토콜 정의
2//!
3//! 단일 네트워크 통신망을 통해 복제, 분산 트랜잭션, 분산 락킹 등을
4//! 효율적으로 다중화(Multiplexing)하기 위한 메시지 컨테이너입니다.
5
6use crate::replication::protocol::ReplicationMessage;
7use serde::{Deserialize, Serialize};
8
9/// 단일 QUIC/TCP 전송 계층에서 교환되는 최상위 그리드 통신 메시지
10#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
11pub enum GridMessage {
12    /// 하위 호환 및 기존 마스터-슬레이브 복제용 메시지 래핑
13    Replication(ReplicationMessage),
14
15    /// Network-Aware Lock Manager 제어 메시지
16    Lock(LockMessage),
17}
18
19/// 분산 락(Network Lock) 전용 프로토콜
20#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
21pub enum LockMessage {
22    /// 특정 테이블 및 키에 대한 Lease 획득 요청
23    Acquire {
24        table: String,
25        key: Vec<u8>,
26        lease_ms: u64,
27        node_id: u32,
28        req_id: u64,
29    },
30    /// Lock 획득 요청에 대한 응답
31    AcquireAck {
32        req_id: u64,
33        granted: bool,
34        fencing_token: u64,
35    },
36    /// 성공적으로 사용을 마친 후 Lock 반환
37    Release {
38        table: String,
39        key: Vec<u8>,
40        fencing_token: u64,
41        node_id: u32,
42    },
43    /// 네트워크 단절에 의한 Lock 탈취 방지용 Heartbeat 만료 연장
44    Heartbeat {
45        node_id: u32,
46        fencing_tokens: Vec<u64>,
47    },
48}
49
50impl GridMessage {
51    /// 이 메시지가 Replication 부류인지 검사합니다.
52    pub fn is_replication(&self) -> bool {
53        matches!(self, GridMessage::Replication(_))
54    }
55
56    /// 이 메시지가 Lock 제어 부류인지 검사합니다.
57    pub fn is_lock(&self) -> bool {
58        matches!(self, GridMessage::Lock(_))
59    }
60}