提交 3f3e05fa 编写于 作者: J Jesse Glick

Merge pull request #928 from olivierdagenais/FixRandomHttp404

[FIXED JENKINS-19418] Fix random HTTP 404 when viewing build details
......@@ -498,6 +498,13 @@ public abstract class AbstractLazyLoadRunMap<R> extends AbstractMap<Integer,R> i
}
return getById(idOnDisk.get(lo-1));
case EXACT:
if (hi<=0) return null;
R r = load(idOnDisk.get(hi-1), null);
if (r==null) return null;
int found = getNumberOf(r);
if (found==n)
return r; // exact match
return null;
default:
throw new AssertionError();
......
......@@ -57,6 +57,21 @@ public class AbstractLazyLoadRunMapTest extends Assert {
@Rule
public FakeMapBuilder localBuilder = new FakeMapBuilder();
@Rule
public FakeMapBuilder localExpiredBuilder = new FakeMapBuilder() {
@Override
public FakeMap make() {
assert getDir()!=null;
return new FakeMap(getDir()) {
@Override
protected BuildReference<Build> createReference(Build r) {
return new BuildReference<Build>(getIdOf(r), /* pretend referent expired */ null);
}
};
}
};
@BeforeClass
public static void setUpClass() {
AbstractLazyLoadRunMap.LOGGER.setLevel(Level.OFF);
......@@ -134,6 +149,18 @@ public class AbstractLazyLoadRunMapTest extends Assert {
assertNull(a.search(-99, Direction.DESC));
}
@Test
public void searchExactWhenIndexedButSoftReferenceExpired() throws IOException {
final FakeMap m = localExpiredBuilder.add(1, "A").add(2, "B").make();
// force index creation
m.entrySet();
m.search(1, Direction.EXACT).asserts(1, "A");
assertNull(m.search(3, Direction.EXACT));
assertNull(m.search(0, Direction.EXACT));
}
/**
* If load fails, search needs to gracefully handle it
*/
......
......@@ -39,6 +39,10 @@ import java.io.IOException;
public class FakeMapBuilder implements TestRule {
private File dir;
protected File getDir() {
return dir;
}
public FakeMapBuilder() {
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册