账本验证器相关代码

fabric/core/commiter/txvalidator/v20/validator.go

// Semaphore provides to the validator means for synchronisation 信号量向验证器提供同步方式
type Semaphore interface {
// Acquire implements semaphore-like acquire semantics Acquire() 实现类似信号量的获取语义
Acquire(ctx context.Context) error // Release implements semaphore-like release semantics Release() 实现了类似信号量的释放语义
Release()
}

fabric/common/semaphore/semaphore.go

// Acquire acquires a permit. This call will block until a permit is available
// or the provided context is completed.
// Acquire 获得许可。 在许可可用或提供的上下文完成之前,此调用将阻塞。
//
// If the provided context is completed, the method will return the
// cancellation error.
// 如果提供的上下文完成,该方法将返回取消错误。
func (s Semaphore) Acquire(ctx context.Context) error {
select {
//在goroutine中,使用select调用<-ctx.Done()判断是否要结束,如果接受到值的话,就可以返回结束goroutine了;如果接收不到,就会继续进行监控。
case <-ctx.Done():
return ctx.Err()
// 有时候使用 channel 不需要发送任何的数据,只用来通知子协程(goroutine)执行任务,或只用来控制协程并发度。这种情况下,使用空结构体作为占位符就非常合适了。
case s <- struct{}{}:
return nil
}
}

fabric/core/commiter/txvalidator/v20/validator.go

func (v *TxValidator) Validate(block *common.Block) error {
...
// ensure that we don't have too many concurrent validation workers
// 设置并发数量,以保证验证过程的安全性
v.Semaphore.Acquire(context.Background())
...
}

参考

[1] 理解 golang 中的 context(上下文)包(https://zhuanlan.zhihu.com/p/163529509)

[2] Go语言实战笔记(二十)| Go Context(https://www.flysnow.org/2017/05/12/go-in-action-go-context.html)

fabric peer节点账本验证器相关代码解读的更多相关文章

  1. thinkphp5.1验证器场景验证中传参的方法。

    一个场景:用户保存自己的昵称,如果已经有其他用户用了这个昵称则不允许保存,但是要排除当前用户自己,因为如果用户未作修改,新昵称和老昵称一样,是可以保存的. 因为昵称定义了唯一规则: 'name' =& ...

  2. 5款最好的免费在线网站CSS验证器

    这里是一个名单, 5免费在线CSS验证器的网站.这些网站让你验证你的CSS代码的自由,没有任何麻烦.你可以选择上传文件,验证CSS添加URL,或简单的复制和粘贴完整的CSS代码.好的方面是,这些网站不 ...

  3. 菜鸟系列Fabric源码学习 — peer节点启动

    Fabric 1.4 源码分析peer节点启动 peer模块采用cobra库来实现cli命令. Cobra提供简单的接口来创建强大的现代化CLI接口,比如git与go工具.Cobra同时也是一个程序, ...

  4. Fabric1.4源码解析:Peer节点背书提案过程

    以前从来没有写过博客,从这段时间开始才开始写一些自己的博客,之前总觉得写一篇博客要耗费大量的时间,而且写的还是自己已经学会的,觉得没什么必要.但是当开始用博客记录下来的时候,才发现有些学会的地方只是自 ...

  5. Fabric1.4源码解析:Peer节点启动过程

    看一下Peer节点的启动过程,通常在Fabric网络中,Peer节点的启动方式有两种,通过Docker容器启动,或者是通过执行命令直接启动. 一般情况下,我们都是执行docker-compose -f ...

  6. hyperledger fabric各类节点及其故障分析 摘自https://www.cnblogs.com/preminem/p/8729781.html

    hyperledger fabric各类节点及其故障分析   1.Client节点 client代表由最终用户操作的实体,它必须连接到某一个peer节点或者orderer节点上与区块链网络通信.客户端 ...

  7. Hyperledger Fabric网络节点架构

    Fabric区块链网络的组成  区块链网络结构图 区块链网络组成 组成区块链网络相关的节点 节点是区块链的通信主体,和区块链网络相关的节点有多种类型:客户端(应用).Peer节点.排序服务(Orde ...

  8. hyperledger fabric各类节点及其故障分析

    1.Client节点 client代表由最终用户操作的实体,它必须连接到某一个peer节点或者orderer节点上与区块链网络通信.客户端向endorser提交交易提案,当收集到足够背书后,向排序服务 ...

  9. Hyperledger Fabric Orderer节点启动

    Orderer 节点启动通过 orderer 包下的 main() 方法实现,会进一步调用到 orderer/common/server 包中的 Main() 方法. 核心代码如下所示. // Mai ...

  10. 9、 Struts2验证(声明式验证、自定义验证器)

    1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...

随机推荐

  1. MATLAB R2024b 安装教程

    MATLAB R2024b 安装教程 软件介绍 MATLAB 是由 "Matrix" 和 "Laboratory" 两个词组合而成,意为"矩阵工厂&q ...

  2. Go语言遍历字符串——获取每一个字符串元素

    遍历字符串有下面两种写法. 遍历每一个ASCII字符 遍历 ASCII 字符使用 for 的数值循环进行遍历,直接取每个字符串的下标获取 ASCII 字符,如下面的例子所示. theme := &qu ...

  3. Netty源码—9.性能优化和设计模式

    大纲 1.Netty的两大性能优化工具 2.FastThreadLocal的实现之构造方法 3.FastThreadLocal的实现之get()方法 4.FastThreadLocal的实现之set( ...

  4. JDK7-时间类、时间格式化类--java进阶day07

    1.Date类:表示时间的类 1.Date常用的构造方法 . 2.Date常用的成员方法 1.getTime:返回从时间原点到对象设定的时间之间的时间 2.setTime:将对象的时间设置为setTi ...

  5. 【逆向】修改LightCycler® 96文件Summary日期

    修改LightCycler 96文件Summary日期 零.需求 来自我的一个朋友 她是要准备改某个软件(LightCycler 96)保存的数据(时间和日期),当时得知此意图后心里已经判了8成不能改 ...

  6. C#之json字符串转xml字符串

    留爪参考 using System.Xml; // using System.Text; // using System.Runtime.Serialization.Json; //JsonReade ...

  7. 关于TFDMemtable的使用场景【1】提供快速查询

    建立内存表非常easy.看代码: begin createZipTable; FillZipCodeData; end: procdure CreateZipCodeTable; var Defs, ...

  8. 移除任务栏右端"显示桌面"按钮-AutoIt

    核心代码 $hwnd = WinGetHandle("[CLASS:Shell_TrayWnd]", "") ControlHide($hwnd, " ...

  9. PandasAI:当数据分析遇上自然语言处理

    数据科学的新范式 在数据爆炸的时代,传统的数据分析工具正面临着前所未有的挑战.数据科学家们常常需要花费70%的时间在数据清洗和探索上,而真正的价值创造时间却被大幅压缩.PandasAI的出现,正在改变 ...

  10. verilog利用线性插值实现正弦波生成器(dds)

    verilog实现线性插值实现正弦波生成器 ​ 最近在项目上遇到一个需要在低资源FPGA上实现FFT逻辑的项目,而且要求实现窗函数.对于窗函数来说,莫非是实现正弦波生成器,正弦波生成器可以利用DDS模 ...