Leaf關鍵原始碼解析

2021-09-27 07:59:42 字數 3192 閱讀 7450

欄位名稱

字段描述

biz_tag

業務標識

max_id

號段最大值

step

號段最小步長

description

描述資訊

update_time

號段切換時間

logger.

info

("update cache from db");

stopwatch sw =

newslf4jstopwatch()

;try

list

cachetags =

newarraylist

(cache.

keyset()

);list

inserttags =

newarraylist

(dbtags)

; list

removetags =

newarraylist

(cachetags)

;//db中新加的tags灌進cache

inserttags.

removeall

(cachetags)

;for

(string tag : inserttags)

from db to idcache, segmentbuffer {}"

, tag, buffer);}

//cache中已失效的tags從cache刪除

removetags.

removeall

(dbtags)

;for

(string tag : removetags)

from idcache"

, tag);}

}catch

(exception e)

finally

stopwatch sw =

newslf4jstopwatch()

;segmentbuffer buffer = segment.

getbuffer()

;leafalloc leafalloc;if(

!buffer.

isinitok()

)else

if(buffer.

getupdatetimestamp()

==0)else

else

}else

if(duration < segment_duration *2)

else

logger.

info

("leafkey[{}], step[{}], duration[{}mins], nextstep[{}]"

, key, buffer.

getstep()

, string.

format

("%.2f",(

(double

)duration /

(1000*60

))), nextstep)

;// 根據最新步長,更新最大值

leafalloc temp =

newleafalloc()

; temp.

setkey

(key)

; temp.

setstep

(nextstep)

; leafalloc = dao.

updatemaxidbycustomstepandgetleafalloc

(temp)

;// 設定號段切換時間

buffer.

setupdatetimestamp

(system.

currenttimemillis()

);// 設定最新步長

buffer.

setstep

(nextstep)

; buffer.

setminstep

(leafalloc.

getstep()

);}// 計算號段起始值

long value = leafalloc.

getmaxid()

- buffer.

getstep()

;// 設定號段起始值、最大值及步長

segment.

getvalue()

.set

(value)

;segment.

setmax

(leafalloc.

getmaxid()

);segment.

setstep

(buffer.

getstep()

);sw.stop

("updatesegmentfromdb"

, key +

" "+ segment)

;

1)從當前號段取值
try

}finally

2)下一號段準備
segment next = buffer.

getsegments()

[buffer.

nextpos()

];// 獲取下一號段

boolean updateok =

false

;// 判斷下一號段是否準備好

try from db {}"

, buffer.

getkey()

, next);}

catch

(exception e)

finally

else

}

3)號段切換
// 自旋並休眠等待下一號段準備

waitandsleep

(buffer)

;try

// 判斷下一號段是否準備好

if(buffer.

isnextready()

)else

are not ready!"

, buffer)

;return

newresult

(exception_id_two_segments_are_null, status.exception);}

}finally

Fabric 原始碼解析 原始碼目錄解析

這裡對重要的一些目錄進行說明 bccsp 與密碼學 加密 簽名 證書等等 相關的加密服務 將fabric中用到的密碼學相關的函式抽象成了一組介面,便於拓展。bddtests 一種新型的軟體開發模式 行為驅動開 需求 開發 common 一些公共庫 錯誤處理 日誌處理 賬本儲存 策略以及各種工具等等 ...

Spring原始碼解析之 Aop原始碼解析(2)

spring aop 更多的是oop開發模式的乙個補充,幫助oop以更好的方式來解決對於需要解決業務功能模組之上統一管理 的功能 以一副圖來做為aop功能的說明更直觀些。對於類似系統的安全檢查,系統日誌,事務管理等相關功能,物件導向的開發方法並沒有更好的解決方法 aop引入了一些概念。更多的是spr...

Integer原始碼解析

public class test else integer i3 200 integer i4 200 if i3 i4 else 結果為 原因integer 類會快取 128 到 127 之間的整數 但是如果new interger的話就是不同的物件了 源 分析 如果是在 128到正的127之間...