语境
公共存储库中的可重用工作流程可以通过附加引用来调用,该引用可以是 SHA、发布标签或分支名称,例如:
{owner}/{repo}/.github/workflows/{filename}@{ref}
Github文档指出:
当调用者工作流触发可重用工作流时,github 上下文始终与调用者工作流关联。
问题
由于 github 上下文始终与调用者工作流关联,因此可重用工作流无法访问引用,例如 tag v1.0.0。但是,当可重用工作流需要签出存储库以便使用复合操作时,了解引用非常重要。
例子
假设调用者工作流正在分支内执行,并调用可重用工作流的main引用:v1.0.0.
name: Caller workflow
on:
workflow_dispatch:
jobs:
caller:
uses: owner/public-repo/.github/workflows/reusable-workflow.yml@v1.0.0
Run Code Online (Sandbox Code Playgroud)
以下是使用复合操作的可重用工作流程:
name: reusable workflows
on:
workflow_call:
jobs:
first-job:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
with:
repository: owner/public-repo
ref: ${{ github.ref_name }}
- name: composite action
uses: ./actions/my-composite-action
Run Code Online (Sandbox Code Playgroud)
在上面的代码片段中,${{ github.ref_name }}是main而不是v1.0.0因为 github 上下文始终与调用者工作流程相关联。因此,复合动作代码是基于main而不是基于v1.0.0. 然而,打电话的人想要v1.0.0。因此我的问题是:可重用工作流程如何能够访问调用者给出的引用?
我想要计算我的文档的所有关键字(包括嵌入式文档).首先我写了一个Java客户端来解决这个问题.显示结果只需不到4秒.然后我写了一个map/reduce函数.结果很好,但运行该功能花了30多秒!我认为map/reduce函数会更快,因为它是在服务器端执行的.Java客户端需要从服务器获取每个文档,但速度要快得多.为什么会这样?
//这是我的地图功能:
map = function(){
for(var key in this) {
emit(key, {count:1});
if(isNestedObject(this[key])){
m_sub(key, this[key]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
//这是我的reduce函数:
reduce = function (key, emits) {
total = 0;
for (var i in emits) {
total += emits[i].count;
}
return {count:total};
}
Run Code Online (Sandbox Code Playgroud)
//这是对mapreduce的调用:
mr = db.runCommand({"mapreduce":"keyword", "map" : map, "reduce" : reduce,
"scope":{
isNestedObject : function (v) {
return v && typeof v === "object";
},
m_sub : function(base, value) {
for(var key in value) {
emit(base + "." + key, …Run Code Online (Sandbox Code Playgroud) 我在mongodb的文档中找不到默认的写入问题以及如何定义“已确认的写入”。似乎在不同的mongodb版本中这已经改变,例如v3.2文档所示:
在3.2.6之前的3.2版本中,w:“多数”表示j:如果启用日记功能,则为true。对于早期版本的MongoDB,“ w:大多数”并不意味着日记。
要么:
在版本3.0中进行了更改:在MongoDB 3.0之前,w:“多数”是指副本集成员的大多数。
要么:
在2.6版中进行了更改:在主/从部署中,MongoDB将w:“多数”等同于w:1.在MongoDB的早期版本中,w:“多数”在主/从部署中产生错误。
另外,我想知道“多数”是指v3.2文档中的所有投票节点:
请求确认写入操作已传播到大多数投票节点[1],包括主要节点。
这是否意味着即使仲裁员也可以计数,因为他们是投票节点?因此,例如,如果我有一个由2个数据承载节点加上1个仲裁器组成的replSet,则即使有1个数据承载节点发生故障,因为剩余的数据承载节点已确认该写入,所以具有写关注“多数”的写操作将成功和仲裁人,因此占多数?