本文整理汇总了Golang中github.com/syndtr/goleveldb/leveldb/opt.WriteOptions.HasFlag方法的典型用法代码示例。如果您正苦于以下问题:Golang WriteOptions.HasFlag方法的具体用法?Golang WriteOptions.HasFlag怎么用?Golang WriteOptions.HasFlag使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/syndtr/goleveldb/leveldb/opt.WriteOptions
的用法示例。
在下文中一共展示了WriteOptions.HasFlag方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Write
// Write apply the specified batch to the database.
func (d *DB) Write(b *Batch, wo *opt.WriteOptions) (err error) {
err = d.wok()
if err != nil || b == nil || b.len() == 0 {
return
}
b.init(wo.HasFlag(opt.WFSync))
select {
case d.wqueue <- b:
return <-d.wack
case d.wlock <- struct{}{}:
}
merged := 0
defer func() {
<-d.wlock
for i := 0; i < merged; i++ {
d.wack <- err
}
}()
mem, err := d.flush()
if err != nil {
return
}
// calculate maximum size of the batch
m := 1 << 20
if x := b.size(); x <= 128<<10 {
m = x + (128 << 10)
}
// merge with other batch
drain:
for b.size() <= m && !b.sync {
select {
case nb := <-d.wqueue:
b.append(nb)
merged++
default:
break drain
}
}
// set batch first seq number relative from last seq
b.seq = d.seq + 1
// write log concurrently if it is large enough
if b.size() >= (128 << 10) {
d.lch <- b
b.memReplay(mem)
err = <-d.lack
if err != nil {
b.revertMemReplay(mem)
return
}
} else {
err = d.doWriteLog(b)
if err != nil {
return
}
b.memReplay(mem)
}
// set last seq number
d.addSeq(uint64(b.len()))
return
}