---
# System prepended metadata

title: Setup environment

---

# Setup environment

- Các loại DB dùng để test:

  - `StrCounter64`

  - `ZaloFeedUser` (DB List)

    - Riêng DB List test với config:

    ```
    no_sort
    allow_dup
    push_back
    ```

  - `ZaloFeedItem`

- Đưa 3 DB gốc vào folder `/zserver/apps/<domain_name>/`. VD: `/zserver/apps/quanhn2/`

- Setup Environment:

  - Master - `10.30.80.136`:
    - Run `dbmigrserverd`
  - Replica - `10.103.62.102`
    - Run `dbmigrserverd`
  - Đưa app automation testing (branch [develop/dbmigration-automation-testing](https://zalogit2.zing.vn/zbe/zgddb/-/commits/develop/dbmigration-automation-testing)) lên server master và run theo document của app.

# Flow Test

1. Client put vào server master.
2. Khi đang thực hiện lệnh put, gọi **migrate** data.
3. Sau khi **migrate** xong, client vẫn put trong 1 khoảng thời gian nữa rồi mới dừng hẳn.
4. Verify data:
   1. **KC**: Get toàn bộ key ở master và replica để verify data 2 bên.
      1. Trường hợp replica có mở CML test 2 trường hợp.
         1. Không restart replica, giữ nguyên Icache để get data.
         2. Tắt cml và restart replica để get data từ dưới KC để verify.
   2. **CML**: đếm số log record ở master và replica.
   3. **BM**: đếm số log record ở master và replica.

# Test case

- Các case test là tổ hợp của các config:

```
nf_workers: 1/4
kc: on/off
cml: on/off
bm: on/off
kc_distrib: contiguous/uniform/ranged
kc_partitions: 1//8/32
```

- Test với các trường hợp request rate `500/1000/2000/4000` để optimize những chỗ bottle-neck.
- Flow KC Migration V2 có thêm flow dành cho các DB **cho phép duplicate** **command** như: `ZiDB`, `ZaloFeedItem`...

# Các bug điển hình về flow

## Duplicated data (flow KC migration V1)

- Phát hiện khi test với DB List command `PutEntry` (`ZaloFeedUser`).
- Nguyên nhân: remote dirty put key-value không phải put command nên bị duplicated trên cùng 1 key. Nói cách khác việc block dirty queue chỉ block put key-value, không phải block command nên có khả năng bị dup những command sau).
- Đã fix với flow KC migration V2.

## Duplicated CML

- Phát hiện khi test với request rate cao (Queue sẽ không kịp xả).
- Nguyên nhân: Migrate CML trước khi xả hết Queue -> gây ra duplicate trên CML.
- Đã fix nhưng phải block async-queue quá lâu gây ảnh hưởng tới master.

## Migrate BM bị thiếu request

- Phát hiện khi test với DB List command `PutEntry` (`ZaloFeedUser`)
- BM trên memory bên phía Replica bị sai -> nên stop replica trong toàn bộ quá trình migrate BM và start lại để có được BM đúng.