文章目录
  1. Hbase源码06_Delete
  2. 1. 代码示例 (kotlin)
  3. 2. 解析
    1. 2.2 服务端

[TOC]

Hbase源码06_Delete

1. 代码示例 (kotlin)

1
2
3
4
5
6
7
8
9
10
11
12
13
@Test
fun testDelete() {
// 创建连接
val connection = ConnectionFactory.createConnection()
// 获取表
val table = connection.getTable(TableName.valueOf("test"))
// delete
val delete = Delete(Bytes.toBytes("row10"))
// delete.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("a"))
table.delete(delete)

connection.close()
}

上来直接看 HTable#delete 的方法,这里简单粗暴,获取到RegionServer信息,直接发起RPC请求。直接看 getStub().mutate(...) 方法。

2. 解析

2.2 服务端

上述的方法调用RPC请求,直接进入 RSRpcServices#mutate 方法。

  • 方法中主要判断类型 append,increment,put,delete,返回执行对应的操作。这里是delete类型,执行 HRegion#delete 方法, 这里面封装的很深,最终执行HRegion#doMiniBatchMutation 方法
  • 方法代码很长,大致步骤如下:
    • 获取行锁,查看是删除一个Row还是一个列族。
    • ====== 执行pre协处理器。
    • 构建WAL日志,但是不同步到WAL。
    • 将delete对象写入到memStore中。
    • 释放锁。
    • 同步WAL日志。
    • 推进mvcc Number,让get和scan可见。
    • ====== 执行post协处理器

大致的步骤比较清晰,但是每个步骤还需要细看。

文章目录
  1. Hbase源码06_Delete
  2. 1. 代码示例 (kotlin)
  3. 2. 解析
    1. 2.2 服务端