本文整理汇总了Golang中github.com/FactomProject/factomd/state.State.GetAndLockDB方法的典型用法代码示例。如果您正苦于以下问题:Golang State.GetAndLockDB方法的具体用法?Golang State.GetAndLockDB怎么用?Golang State.GetAndLockDB使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/FactomProject/factomd/state.State
的用法示例。
在下文中一共展示了State.GetAndLockDB方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: main
func main() {
fmt.Println("Usage:")
fmt.Println("ReceiptGenerator level/bolt [EntryID-To-Extract]")
fmt.Println("Leave out the last one to export all entries")
if len(os.Args) < 1 {
fmt.Println("\nNot enough arguments passed")
os.Exit(1)
}
if len(os.Args) > 2 {
fmt.Println("\nToo many arguments passed")
os.Exit(1)
}
levelBolt := os.Args[1]
if levelBolt != level && levelBolt != bolt {
fmt.Println("\nFirst argument should be `level` or `bolt`")
os.Exit(1)
}
entryID := ""
if len(os.Args) == 3 {
entryID = os.Args[2]
}
state := new(state.State)
state.Cfg = util.ReadConfig("")
if levelBolt == level {
err := state.InitLevelDB()
if err != nil {
panic(err)
}
}
if levelBolt == bolt {
err := state.InitBoltDB()
if err != nil {
panic(err)
}
}
dbo := state.GetAndLockDB()
defer state.UnlockDB()
if entryID != "" {
err := ExportEntryReceipt(entryID, dbo)
if err != nil {
panic(err)
}
} else {
err := ExportAllEntryReceipts(dbo)
if err != nil {
panic(err)
}
}
}
示例2: main
func main() {
fmt.Println("Usage:")
fmt.Println("BlockExtractor level/bolt [ChainID-To-Extract]")
fmt.Println("Leave out the last one to export basic chains (A, D, EC, F)")
if len(os.Args) < 1 {
fmt.Println("\nNot enough arguments passed")
os.Exit(1)
}
if len(os.Args) > 2 {
fmt.Println("\nToo many arguments passed")
os.Exit(1)
}
levelBolt := os.Args[1]
if levelBolt != level && levelBolt != bolt {
fmt.Println("\nFirst argument should be `level` or `bolt`")
os.Exit(1)
}
chainID := ""
if len(os.Args) == 3 {
chainID = os.Args[2]
}
be := new(BlockExtractor)
state := new(state.State)
state.Cfg = util.ReadConfig("")
if levelBolt == level {
err := state.InitLevelDB()
if err != nil {
panic(err)
}
}
if levelBolt == bolt {
err := state.InitBoltDB()
if err != nil {
panic(err)
}
}
dbo := state.GetAndLockDB()
defer state.UnlockDB()
if chainID != "" {
err := be.ExportEChain(chainID, dbo)
if err != nil {
panic(err)
}
} else {
err := be.ExportDChain(dbo)
if err != nil {
panic(err)
}
err = be.ExportECChain(dbo)
if err != nil {
panic(err)
}
err = be.ExportAChain(dbo)
if err != nil {
panic(err)
}
err = be.ExportFctChain(dbo)
if err != nil {
panic(err)
}
err = be.ExportDirBlockInfo(dbo)
if err != nil {
panic(err)
}
}
}
示例3: searchDB
func searchDB(searchitem string, st state.State) (bool, string) {
if len(searchitem) < 32 {
heightInt, err := strconv.Atoi(searchitem)
if err != nil {
return false, ""
}
height := uint32(heightInt)
if height < DisplayState.CurrentNodeHeight {
dbase := StatePointer.GetAndLockDB()
dBlock, err := dbase.FetchDBlockByHeight(height)
StatePointer.UnlockDB()
if err != nil {
return false, ""
}
resp := `{"Type":"dblockHeight","item":"` + dBlock.GetKeyMR().String() + `"}`
return true, resp
}
return false, ""
}
switch searchitem[:2] {
case "EC":
hash := base58.Decode(searchitem)
if len(hash) < 34 {
return false, ""
}
var fixed [32]byte
copy(fixed[:], hash[2:34])
bal := fmt.Sprintf("%d", st.FactoidState.GetECBalance(fixed))
return true, `{"Type":"EC","item":` + bal + "}"
case "FA":
hash := base58.Decode(searchitem)
if len(hash) < 34 {
return false, ""
}
var fixed [32]byte
copy(fixed[:], hash[2:34])
bal := fmt.Sprintf("%.8f", float64(st.FactoidState.GetFactoidBalance(fixed))/1e8)
return true, `{"Type":"FA","item":` + bal + "}"
}
if len(searchitem) == 64 {
hash, err := primitives.HexToHash(searchitem)
if err != nil {
return false, ""
}
// Must unlock manually when returining. Function continues to wsapi, who needs the dbase
dbase := st.GetAndLockDB()
// Search for Entry
if entry, err := dbase.FetchEntry(hash); err == nil && entry != nil {
resp := newSearchResponse("entry", entry)
if len(resp) > 1 {
st.UnlockDB()
return true, resp
}
}
// Search for Chain
if mr, err := dbase.FetchHeadIndexByChainID(hash); err == nil && mr != nil {
resp := newSearchResponse("chainhead", mr)
if len(resp) > 1 {
st.UnlockDB()
return true, resp
}
}
// Search for EBlock
if eBlock, err := dbase.FetchEBlockByPrimary(hash); err == nil && eBlock != nil {
resp := newSearchResponse("eblock", eBlock)
if len(resp) > 1 {
st.UnlockDB()
return true, resp
}
}
// Search for DBlock
if dBlock, err := dbase.FetchDBlockByPrimary(hash); err == nil && dBlock != nil {
resp := newSearchResponse("dblock", dBlock)
if len(resp) > 1 {
st.UnlockDB()
return true, resp
}
}
// Search for ABlock
if aBlock, err := dbase.FetchABlock(hash); err == nil && aBlock != nil {
resp := newSearchResponse("ablock", aBlock)
if len(resp) > 1 {
st.UnlockDB()
return true, resp
}
}
// Search for Factoid Block
if fBlock, err := dbase.FetchFBlock(hash); err == nil && fBlock != nil {
resp := newSearchResponse("fblock", fBlock)
if len(resp) > 1 {
st.UnlockDB()
return true, resp
}
}
// Search for Entry Credit Block
if ecBlock, err := dbase.FetchECBlock(hash); err == nil && ecBlock != nil {
resp := newSearchResponse("ecblock", ecBlock)
if len(resp) > 1 {
//.........这里部分代码省略.........