Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
fyakm
jenkins
提交
25084f52
J
jenkins
项目概览
fyakm
/
jenkins
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jenkins
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
25084f52
编写于
3月 13, 2013
作者:
K
Kohsuke Kawaguchi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[FIXED JENKINS-3265]
Made the in-flight build survive the reload from the disk.
上级
a32f2dd3
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
34 addition
and
3 deletion
+34
-3
changelog.html
changelog.html
+3
-0
core/src/main/java/hudson/model/AbstractProject.java
core/src/main/java/hudson/model/AbstractProject.java
+13
-2
core/src/main/java/jenkins/model/Jenkins.java
core/src/main/java/jenkins/model/Jenkins.java
+18
-1
未找到文件。
changelog.html
浏览文件 @
25084f52
...
...
@@ -62,6 +62,9 @@ Upcoming changes</a>
<li
class=
bug
>
an in-progress build was dropped from JSON API when lazy-loading was introduced.
(
<a
href=
"https://issues.jenkins-ci.org/browse/JENKINS-15583"
>
issue 15583
</a>
)
<li
class=
bug
>
In-progress builds now survive the "reload from disk" administrator action.
(
<a
href=
"https://issues.jenkins-ci.org/browse/JENKINS-3265"
>
issue 3265
</a>
)
<li
class=
bug
>
Fixed a bad interaction between Windows symlinks and build record lazy loading.
(
<a
href=
"https://issues.jenkins-ci.org/browse/JENKINS-15587"
>
issue 15587
</a>
)
...
...
core/src/main/java/hudson/model/AbstractProject.java
浏览文件 @
25084f52
...
...
@@ -282,9 +282,20 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A
super
.
onLoad
(
parent
,
name
);
RunMap
<
R
>
builds
=
createBuildRunMap
();
if
(
this
.
builds
!=
null
)
{
RunMap
<
R
>
currentBuilds
=
this
.
builds
;
if
(
currentBuilds
==
null
)
{
// are we overwriting what currently exist?
// this is primarily when Jenkins is getting reloaded
Item
current
=
parent
.
getItem
(
name
);
if
(
current
!=
null
&&
current
.
getClass
()==
getClass
())
{
currentBuilds
=
((
AbstractProject
)
current
).
builds
;
}
}
if
(
currentBuilds
!=
null
)
{
// if we are reloading, keep all those that are still building intact
for
(
R
r
:
this
.
b
uilds
.
getLoadedBuilds
().
values
())
{
for
(
R
r
:
currentB
uilds
.
getLoadedBuilds
().
values
())
{
if
(
r
.
isBuilding
())
builds
.
put
(
r
);
}
...
...
core/src/main/java/jenkins/model/Jenkins.java
浏览文件 @
25084f52
...
...
@@ -2505,6 +2505,8 @@ public class Jenkins extends AbstractCIBase implements ModifiableTopLevelItemGro
}
});
final
Set
<
String
>
loadedNames
=
Collections
.
synchronizedSet
(
new
HashSet
<
String
>());
TaskGraphBuilder
g
=
new
TaskGraphBuilder
();
Handle
loadHudson
=
g
.
requires
(
EXTENSIONS_AUGMENTED
).
attains
(
JOB_LOADED
).
add
(
"Loading global config"
,
new
Executable
()
{
public
void
run
(
Reactor
session
)
throws
Exception
{
...
...
@@ -2527,7 +2529,6 @@ public class Jenkins extends AbstractCIBase implements ModifiableTopLevelItemGro
if
(
slaves
==
null
)
slaves
=
new
NodeList
();
clouds
.
setOwner
(
Jenkins
.
this
);
items
.
clear
();
// JENKINS-8043: re-add the slaves which were not saved into the config file
// and are now missing, but still connected.
...
...
@@ -2550,10 +2551,26 @@ public class Jenkins extends AbstractCIBase implements ModifiableTopLevelItemGro
public
void
run
(
Reactor
session
)
throws
Exception
{
TopLevelItem
item
=
(
TopLevelItem
)
Items
.
load
(
Jenkins
.
this
,
subdir
);
items
.
put
(
item
.
getName
(),
item
);
loadedNames
.
add
(
item
.
getName
());
}
});
}
g
.
requires
(
JOB_LOADED
).
add
(
"Cleaning up old builds"
,
new
Executable
()
{
public
void
run
(
Reactor
reactor
)
throws
Exception
{
// anything we didn't load from disk, throw them away.
// doing this after loading from disk allows newly loaded items
// to inspect what already existed in memory (in case of reloading)
// retainAll doesn't work well because of CopyOnWriteMap implementation, so remove one by one
// hopefully there shouldn't be too many of them.
for
(
String
name
:
items
.
keySet
())
{
if
(!
loadedNames
.
contains
(
name
))
items
.
remove
(
name
);
}
}
});
g
.
requires
(
JOB_LOADED
).
add
(
"Finalizing set up"
,
new
Executable
()
{
public
void
run
(
Reactor
session
)
throws
Exception
{
rebuildDependencyGraph
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录