You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by "hanahmily (via GitHub)" <gi...@apache.org> on 2025/12/08 01:13:36 UTC

Re: [I] [BYDB-Replica] Add integration test for BanyanDB replication resilience [skywalking]

hanahmily commented on issue #13229:
URL: https://github.com/apache/skywalking/issues/13229#issuecomment-3624046526

   You need to create a new integration test that verifies data replication works correctly when a data node fails. This involves defining a group with `replication > 1`, writing data using existing helpers, and managing the cluster lifecycle to simulate a node failure.
   
   Here is the detailed implementation guide:
   
   ### 1\. Define a Group with Replication \> 1
   
   Existing test groups in `pkg/test/stream/testdata` and `pkg/test/measure/testdata/groups` likely use the default replication (usually 1). You need to create a new group definition file (or modify an existing one for this specific test) that explicitly sets the replication factor.
   
     * **Location:** Create a new YAML file, for example `pkg/test/measure/testdata/groups/replicated.yaml` (or `stream` equivalent).
     * **Content:** Add the `replica_num` field under `resource_opts`.
   
   <!-- end list -->
   
   ```yaml
   # Example: pkg/test/measure/testdata/groups/replicated.yaml
   metadata:
     name: "replicated_group"
   catalog: MEASURE # or STREAM
   resource_opts:
     shard_num: 2
     segment_interval:
       unit: UNIT_DAY
       num: 1
     ttl:
       unit: UNIT_DAY
       num: 7
     # This is the key change required by the issue
     replica_num: 2 
   ```
   
   ### 2\. Reuse `init.go` to Write Data
   
   The file `test/cases/init.go` likely contains helper functions to load these YAML definitions and write sample data to the server. You should leverage these functions to avoid rewriting data ingestion logic.
   
     * **Import the package:** `github.com/apache/skywalking-banyandb/test/cases`
     * **Usage:** Look for a function signature like `cases.Write(conn, "path/to/testdata")`
     * **Implementation:** In your test, after the cluster is up, call this function pointing to your new `replicated_group` data.
   
   <!-- end list -->
   
   ### 3\. Implement the Integration Test (Start Cluster & Stop Node)
   
   Create a new test file (e.g., `test/integration/replication/replication_test.go`). You should use `test/integration/handoff/handoff_suite_test.go` as your template because it already handles cluster bootstrapping.
   
   **Key Steps in the Test:**
   
   1.  **Bootstrap Cluster:** Start a BanyanDB cluster with **3 Data Nodes**. You need 3 nodes to safely stop 1 and still have a majority/quorum or at least enough nodes to hold the 2 replicas.
   2.  **Create Resources:** Apply the group schema created in Step 1.
   3.  **Write Data:** Use the helper from Step 2.
   4.  **Simulate Failure:** Stop one of the data nodes programmatically.
   5.  **Verification:** Query the data to ensure it is still available from the remaining nodes.
   
   
   
   To implement this, you could refer to https://github.com/apache/skywalking-banyandb/blob/main/test/integration/handoff/handoff_suite_test.go. 
   
   ### 4\. Directory Structure
   
   Create the following folder structure:
   
   ```text
   skywalking-banyandb/
   └── test/
       └── integration/
           └── distributed/
               └── replication/
                   ├── replication_suite_test.go
                   └── replication_test.go
   ```
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@skywalking.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org