Skip to content

Commit 7e5415c

Browse files
Merge pull request #20419 from smarterclayton/timeout_of_import
Provide a client method to bypass server side timeout on upload
2 parents ef9d5a2 + e73f7b4 commit 7e5415c

File tree

6 files changed

+59
-11
lines changed

6 files changed

+59
-11
lines changed

pkg/image/controller/imagestream_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ func handleImageStream(
265265
ImportPolicy: imageapi.TagImportPolicy{Insecure: insecure},
266266
}
267267
}
268-
result, err := client.ImageStreamImports(stream.Namespace).Create(isi)
268+
result, err := client.ImageStreamImports(stream.Namespace).CreateWithoutTimeout(isi)
269269
if err != nil {
270270
if apierrs.IsNotFound(err) && isStatusErrorKind(err, "imageStream") {
271271
return result, ErrNotImportable

pkg/image/generated/internalclientset/typed/image/internalversion/fake/fake_imagestreamimport_expansion.go

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/image/generated/internalclientset/typed/image/internalversion/generated_expansion.go

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package internalversion
2+
3+
import (
4+
"time"
5+
6+
image "github.com/openshift/origin/pkg/image/apis/image"
7+
)
8+
9+
type ImageStreamImportExpansion interface {
10+
CreateWithoutTimeout(*image.ImageStreamImport) (*image.ImageStreamImport, error)
11+
}
12+
13+
// CreateWithoutTimeout imports the provided images and won't time out after 30 seconds. Use this when you must
14+
// import a large number of images.
15+
func (c *imageStreamImports) CreateWithoutTimeout(imageStreamImport *image.ImageStreamImport) (result *image.ImageStreamImport, err error) {
16+
result = &image.ImageStreamImport{}
17+
err = c.client.Post().
18+
Namespace(c.ns).
19+
Resource("imagestreamimports").
20+
Body(imageStreamImport).
21+
// this instructs the api server to allow our request to take up to an hour - chosen as a high boundary
22+
Timeout(time.Hour).
23+
Do().
24+
Into(result)
25+
return
26+
}

test/integration/imagechange_buildtrigger_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -302,19 +302,19 @@ func runTest(t *testing.T, testname string, projectAdminClientConfig *rest.Confi
302302
if strategy.SourceStrategy.From.Name != registryHostname+"/openshift/test-image-trigger:"+tag {
303303
i, _ := projectAdminImageClient.ImageStreams(testutil.Namespace()).Get(imageStream.Name, metav1.GetOptions{})
304304
bc, _ := projectAdminBuildClient.BuildConfigs(testutil.Namespace()).Get(config.Name, metav1.GetOptions{})
305-
t.Fatalf("Expected build with base image %s, got %s\n, imagerepo is %v\ntrigger is %s\n", registryHostname+"/openshift/test-image-trigger:"+tag, strategy.SourceStrategy.From.Name, i, bc.Spec.Triggers[0].ImageChange)
305+
t.Fatalf("Expected build with base image %s, got %s\n, imagerepo is %v\ntrigger is %#v\n", registryHostname+"/openshift/test-image-trigger:"+tag, strategy.SourceStrategy.From.Name, i, bc.Spec.Triggers[0].ImageChange)
306306
}
307307
case strategy.DockerStrategy != nil:
308308
if strategy.DockerStrategy.From.Name != registryHostname+"/openshift/test-image-trigger:"+tag {
309309
i, _ := projectAdminImageClient.ImageStreams(testutil.Namespace()).Get(imageStream.Name, metav1.GetOptions{})
310310
bc, _ := projectAdminBuildClient.BuildConfigs(testutil.Namespace()).Get(config.Name, metav1.GetOptions{})
311-
t.Fatalf("Expected build with base image %s, got %s\n, imagerepo is %v\ntrigger is %s\n", registryHostname+"/openshift/test-image-trigger:"+tag, strategy.DockerStrategy.From.Name, i, bc.Spec.Triggers[0].ImageChange)
311+
t.Fatalf("Expected build with base image %s, got %s\n, imagerepo is %v\ntrigger is %#v\n", registryHostname+"/openshift/test-image-trigger:"+tag, strategy.DockerStrategy.From.Name, i, bc.Spec.Triggers[0].ImageChange)
312312
}
313313
case strategy.CustomStrategy != nil:
314314
if strategy.CustomStrategy.From.Name != registryHostname+"/openshift/test-image-trigger:"+tag {
315315
i, _ := projectAdminImageClient.ImageStreams(testutil.Namespace()).Get(imageStream.Name, metav1.GetOptions{})
316316
bc, _ := projectAdminBuildClient.BuildConfigs(testutil.Namespace()).Get(config.Name, metav1.GetOptions{})
317-
t.Fatalf("Expected build with base image %s, got %s\n, imagerepo is %v\ntrigger is %s\n", registryHostname+"/openshift/test-image-trigger:"+tag, strategy.CustomStrategy.From.Name, i, bc.Spec.Triggers[0].ImageChange)
317+
t.Fatalf("Expected build with base image %s, got %s\n, imagerepo is %v\ntrigger is %#v\n", registryHostname+"/openshift/test-image-trigger:"+tag, strategy.CustomStrategy.From.Name, i, bc.Spec.Triggers[0].ImageChange)
318318
}
319319
}
320320
event = <-buildWatch.ResultChan()
@@ -376,19 +376,19 @@ func runTest(t *testing.T, testname string, projectAdminClientConfig *rest.Confi
376376
if strategy.SourceStrategy.From.Name != registryHostname+"/openshift/test-image-trigger:ref-2-random" {
377377
i, _ := projectAdminImageClient.ImageStreams(testutil.Namespace()).Get(imageStream.Name, metav1.GetOptions{})
378378
bc, _ := projectAdminBuildClient.BuildConfigs(testutil.Namespace()).Get(config.Name, metav1.GetOptions{})
379-
t.Fatalf("Expected build with base image %s, got %s\n, imagerepo is %v\trigger is %s\n", registryHostname+"/openshift/test-image-trigger:ref-2-random", strategy.SourceStrategy.From.Name, i, bc.Spec.Triggers[3].ImageChange)
379+
t.Fatalf("Expected build with base image %s, got %s\n, imagerepo is %v\trigger is %#v\n", registryHostname+"/openshift/test-image-trigger:ref-2-random", strategy.SourceStrategy.From.Name, i, bc.Spec.Triggers[3].ImageChange)
380380
}
381381
case strategy.DockerStrategy != nil:
382382
if strategy.DockerStrategy.From.Name != registryHostname+"/openshift/test-image-trigger:ref-2-random" {
383383
i, _ := projectAdminImageClient.ImageStreams(testutil.Namespace()).Get(imageStream.Name, metav1.GetOptions{})
384384
bc, _ := projectAdminBuildClient.BuildConfigs(testutil.Namespace()).Get(config.Name, metav1.GetOptions{})
385-
t.Fatalf("Expected build with base image %s, got %s\n, imagerepo is %v\trigger is %s\n", registryHostname+"/openshift/test-image-trigger:ref-2-random", strategy.DockerStrategy.From.Name, i, bc.Spec.Triggers[3].ImageChange)
385+
t.Fatalf("Expected build with base image %s, got %s\n, imagerepo is %v\trigger is %#v\n", registryHostname+"/openshift/test-image-trigger:ref-2-random", strategy.DockerStrategy.From.Name, i, bc.Spec.Triggers[3].ImageChange)
386386
}
387387
case strategy.CustomStrategy != nil:
388388
if strategy.CustomStrategy.From.Name != registryHostname+"/openshift/test-image-trigger:ref-2-random" {
389389
i, _ := projectAdminImageClient.ImageStreams(testutil.Namespace()).Get(imageStream.Name, metav1.GetOptions{})
390390
bc, _ := projectAdminBuildClient.BuildConfigs(testutil.Namespace()).Get(config.Name, metav1.GetOptions{})
391-
t.Fatalf("Expected build with base image %s, got %s\n, imagerepo is %v\trigger is %s\n", registryHostname+"/openshift/test-image-trigger:ref-2-random", strategy.CustomStrategy.From.Name, i, bc.Spec.Triggers[3].ImageChange)
391+
t.Fatalf("Expected build with base image %s, got %s\n, imagerepo is %v\trigger is %#v\n", registryHostname+"/openshift/test-image-trigger:ref-2-random", strategy.CustomStrategy.From.Name, i, bc.Spec.Triggers[3].ImageChange)
392392
}
393393
}
394394

test/integration/imageimporter_test.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ import (
88
"net/url"
99
"reflect"
1010
"strings"
11+
"sync"
1112
"testing"
1213
"time"
1314

1415
"github.com/docker/distribution/registry/api/errcode"
16+
"github.com/golang/glog"
1517
gocontext "golang.org/x/net/context"
1618

1719
"k8s.io/apimachinery/pkg/api/errors"
@@ -654,7 +656,10 @@ func TestImageStreamImportTagsFromRepository(t *testing.T) {
654656
func TestImageStreamImportScheduled(t *testing.T) {
655657
written := make(chan struct{}, 2)
656658
count := 0
659+
var lock sync.Mutex
657660
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
661+
lock.Lock()
662+
defer lock.Unlock()
658663
t.Logf("got %s %s", r.Method, r.URL.Path)
659664
switch r.URL.Path {
660665
case "/v2/":
@@ -663,12 +668,13 @@ func TestImageStreamImportScheduled(t *testing.T) {
663668
case "/v2/test/image/manifests/latest", "/v2/test/image/manifests/" + etcdDigest, "/v2/test/image/manifests/" + phpDigest:
664669
count++
665670
t.Logf("serving %d", count)
671+
glog.Infof("serving request %d for %s", count, r.URL.Path)
666672
var manifest, digest string
667673
switch count {
668674
case 1, 2:
669675
digest = etcdDigest
670676
manifest = etcdManifest
671-
case 3, 4, 5, 6:
677+
case 3, 4, 5:
672678
digest = phpDigest
673679
manifest = phpManifest
674680
default:
@@ -817,7 +823,7 @@ func TestImageStreamImportScheduled(t *testing.T) {
817823
t.Fatalf("expected generation 2 for stream and spec tag: %v %#v", tagGen, change)
818824
}
819825
conditions := change.Status.Tags["latest"].Conditions
820-
if len(conditions) == 0 || conditions[0].Type != imageapi.ImportSuccess || conditions[0].Generation != 3 {
826+
if len(conditions) == 0 || conditions[0].Type != imageapi.ImportSuccess || string(conditions[0].Status) != "False" || conditions[0].Generation != 3 {
821827
t.Fatalf("expected generation 3 for condition and import failed: %#v", conditions)
822828
}
823829

0 commit comments

Comments
 (0)