1. 程式人生 > >Kylin增量cube build的restAPI的時間不準確的BUG

Kylin增量cube build的restAPI的時間不準確的BUG

Kylin1.6增量cube build的restAPI的時間不準確的bug:

描述:使用restAPI:curl -X PUT -u "ADMIN:KYLIN" -H "Content-Type:application/json;charset=utf-8" -d '{"startTime":1508601600000,"endTime":1508688000000,"buildType":"BUILD"}' http://172.17.60.45:7070/kylin/api/cubes/bi_dispatch_waiting_service_cube/rebuild

增量構建時間設定【2017-10-22~2017-10-23】,但是實際時間cube的構建抽取資料時間確比設定時間提前1天(實際上是提前8小時)【2017-10-21~2017-10-22】,但是使用kylinUI構建卻沒有問題,實際檢視kylin原始碼發現,是由於kylin在server端原始碼使用的timezone固定為GMT而非配置的GMT+8,而前端UI會根據配置的timezone對頁面新增的時間進行轉換變GMT+8的時間,然後後端將GMT+8時間在轉化為GMT的時間,所以kylinUI的cube構建時間不會出現錯誤,而使用restAPI構建cube時間不進行timezone轉化就是出現時間不準確差8個小時的問題。

解決方案

1. 呼叫rest API時手動進行時區轉換

2.對kylin程式碼進行修改動態獲取配置的timezone,但是修改code這個範圍很大,前端UI和server端code都需要修改時間

KYLIN程式碼分析:

1. cube segment 的命名硬編碼為使用時區GMT

2.前端UI會獲取時區配置進行轉換:

3.cube構建時間的傳遞的時間戳startTime和endtime都是使用DateFormat按照GMT時區轉化對應的時間格式:

我在檢視KYLIN文件時,沒有看到對該問題的描述,在考慮KYLIN這種設計是想在server遮蔽timezone複雜度,使用同一的gmt時區處理時間,採用前端UI來處理傳參的時間問題,但是忽略restAPI使用者不會出裡這種問題,應該在文件提前說明該問題,否則困擾使用restAPI的使用者,以上皆為本人使用過程中遇到問題,如果錯誤請多謝支援,及時改正。

--------------------- 本文來自 xiaolinzi007 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/xiaolinzi007/article/details/78293061?utm_source=copy