iT邦幫忙

2024 iThome 鐵人賽

DAY 8
0
Software Development

每天罵爆一隻 Kafka Pull Request系列 第 8

KAFKA-17520: Align ducktape version in tests/docker/Dockerfile and tests/setup.py

  • 分享至 

  • xImage
  •  

https://github.com/apache/kafka/pull/17240

背景故事

今天我們來聊聊工程師最討厭的事情之一,測試。

Kafka作為一個流行超過14年的分散式系統,測試扮演著功不可沒的角色,足夠的測試確保了Kafka的穩定性,也確保大部分的使用者都可以安心無慮的服用Kafka作為解決方案。不過大家知道Kafka總共有哪些測試嘛?Kafka的測試分成三個體系:

  1. unit test
  2. integration test,整合測試在Kafka的定義裡面是指有啟動完整的Kafka服務的測試
  3. system test,這類型的測試會透過Docker or VM來架設Kafka叢集並且透過公開的函式庫來驗證行為

Kafka在開發流程中會透過 unit test and integration test來確保每個 PR 的品質,同時在每次版本發布的時候,會確保所有的系統測試都能順利通過。講到這裏,大家會不會好奇系統測試究竟是如何運行?這篇文章就帶大家走過一次流程:

確定你的環境有安裝Docker,然後切到Kafka原始碼的位置並輸入以下指令

/bin/bash tests/docker/run_tests.sh

然後大家就會看到螢幕開始噴出一大堆東西,別怕別慌,這個指令其實主要做了兩件事情,首先正如前面提到會用Docker啟動好幾個容器來運行一個完整的Kafka服務,因此該腳本會先建立容器映像檔。映像檔建立完成後,就會使用該映像檔預先啟動14個容器,該些容器內會預先安裝各個版本的Kafka,以便後續系統測試使用。再來該腳本會編譯建制原始碼,產生系統測試時需要的各種jar輸出,這些jar檔也都已經透過指令綁定到容器內了,所以等同於現在容器內有著舊版以及基於原始碼建制的Kafka最新運行版

當上述前置作業都完成後,該腳本接下來就會開始掃描Kafka目錄下的tests,裡面有許多使用python撰寫的系統測試,有許多不同的種類,從基本的producerconsumer,也有connectstreams等測試。同時kafka引以為傲的升級測試也都包含在系統測試的範圍,例如我們會測試從3.0版本一路升級到3.9然後看看讀寫是否有發生問題。

講到這裏,大家會不會好奇這跟標題的ducktape有什麼關係?那就要說回系統測試的過程中,我們常常會需要跟系統互動,例如透過ssh送一些命令並且收集回應,這些很"基礎設施"的功能就是由ducktape來完成,ducktape是由Confluent所開發用來作為系統測試基礎設施的專案,提供了許多方便的指令來加速我們的開發。但只要是軟體自然都會有版本的問題,ducktape也不例外,還記得我們前面提過系統測試不只可以用Docker來開發,為了確保版本在不同測試環境上的一致,Kafka也基於Python的習慣添加了install_requires來指定ducktype的版本,不過這就形成一個問題,ducktype的版本變成在兩個地方都需要指定,一個是dockerfile一個是setup裡面 ...

解決辦法

身為一個好習慣的工程師,如果無法用帥氣的手法讓兩邊自動保持同步,那我們自然只能自己手工手工讓他們一樣,故事就這樣,沒了,感謝收聽

廣告
歡迎訂閱全臺最鬆散的開源社群源來適你,上面不定期會有各種開源的廢文。也歡迎參加全臺最鬆散的開源討論頻道,上面有一群網友一起在刷開源技術


上一篇
KAFKA-17552 Handle LIST_OFFSETS request for max_timestamp when remote storage is enabled
下一篇
KAFKA-17459 Stabalize reassign_partitions_test.py
系列文
每天罵爆一隻 Kafka Pull Request30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言