|
18 | 18 | package core |
19 | 19 |
|
20 | 20 | import ( |
21 | | - "github.com/yandex-cloud/geesefs/core/cfg" |
22 | | - |
23 | 21 | "bufio" |
24 | 22 | "bytes" |
| 23 | + "context" |
25 | 24 | "fmt" |
26 | 25 | "io" |
27 | 26 | "net" |
28 | 27 | "os" |
29 | 28 | "os/user" |
| 29 | + "runtime/debug" |
30 | 30 | "sort" |
31 | 31 | "strconv" |
32 | 32 | "strings" |
| 33 | + "sync/atomic" |
33 | 34 | "syscall" |
34 | 35 | "time" |
35 | 36 |
|
36 | | - "context" |
37 | | - |
38 | | - "github.com/aws/aws-sdk-go/aws" |
39 | | - "github.com/aws/aws-sdk-go/aws/awserr" |
40 | | - "github.com/aws/aws-sdk-go/aws/corehandlers" |
41 | | - |
42 | 37 | "github.com/Azure/azure-storage-blob-go/azblob" |
43 | 38 | "github.com/Azure/go-autorest/autorest" |
44 | 39 | "github.com/Azure/go-autorest/autorest/azure" |
45 | 40 | azureauth "github.com/Azure/go-autorest/autorest/azure/auth" |
46 | | - |
| 41 | + "github.com/aws/aws-sdk-go/aws" |
| 42 | + "github.com/aws/aws-sdk-go/aws/awserr" |
| 43 | + "github.com/aws/aws-sdk-go/aws/corehandlers" |
47 | 44 | "github.com/sirupsen/logrus" |
48 | | - |
| 45 | + "github.com/yandex-cloud/geesefs/core/cfg" |
49 | 46 | . "gopkg.in/check.v1" |
50 | | - "runtime/debug" |
51 | 47 | ) |
52 | 48 |
|
53 | 49 | // so I don't get complains about unused imports |
@@ -98,6 +94,9 @@ type GoofysTest struct { |
98 | 94 | env map[string]*string |
99 | 95 |
|
100 | 96 | timeout chan int |
| 97 | + |
| 98 | + isTigris bool |
| 99 | + isLocalTigris bool |
101 | 100 | } |
102 | 101 |
|
103 | 102 | var _ = Suite(&GoofysTest{}) |
@@ -282,6 +281,10 @@ func (s *GoofysTest) waitForEmulator(t *C, addr string) { |
282 | 281 |
|
283 | 282 | func (s *GoofysTest) deleteBucket(cloud StorageBackend) error { |
284 | 283 | var err error |
| 284 | + // FIXME: Tigris returns 500 for RemoveBucket. Skip it for now. |
| 285 | + if s.isLocalTigris { |
| 286 | + return nil |
| 287 | + } |
285 | 288 | for i := 0; i < 5; i++ { |
286 | 289 | param := &ListBlobsInput{} |
287 | 290 |
|
@@ -327,7 +330,7 @@ func (s *GoofysTest) deleteBucket(cloud StorageBackend) error { |
327 | 330 |
|
328 | 331 | _, err = cloud.RemoveBucket(&RemoveBucketInput{}) |
329 | 332 | if awsErr, ok := err.(awserr.Error); ok { |
330 | | - if awsErr.Code() == "BucketNotEmpty" { |
| 333 | + if awsErr.Code() == "BucketNotEmpty" || awsErr.Code() == "InternalError" { |
331 | 334 | log.Warnf("Retrying delete") |
332 | 335 | continue |
333 | 336 | } else if awsErr.Code() == "BucketNotExists" || awsErr.Code() == "NoSuchBucket" { |
@@ -373,7 +376,7 @@ func (s *GoofysTest) setupBlobs(cloud StorageBackend, t *C, env map[string]*stri |
373 | 376 | throttler := make(semaphore, concurrency) |
374 | 377 | throttler.P(concurrency) |
375 | 378 |
|
376 | | - var globalErr error |
| 379 | + var globalErr atomic.Value |
377 | 380 | for path, c := range env { |
378 | 381 | throttler.V(1) |
379 | 382 | go func(path string, content *string) { |
@@ -402,15 +405,15 @@ func (s *GoofysTest) setupBlobs(cloud StorageBackend, t *C, env map[string]*stri |
402 | 405 |
|
403 | 406 | _, err := cloud.PutBlob(params) |
404 | 407 | if err != nil { |
405 | | - globalErr = err |
| 408 | + globalErr.Store(err) |
406 | 409 | } |
407 | 410 | t.Assert(err, IsNil) |
408 | 411 | }(path, c) |
409 | 412 | } |
410 | 413 | throttler.V(concurrency) |
411 | 414 | throttler = make(semaphore, concurrency) |
412 | 415 | throttler.P(concurrency) |
413 | | - t.Assert(globalErr, IsNil) |
| 416 | + t.Assert(globalErr.Load(), IsNil) |
414 | 417 |
|
415 | 418 | // double check, except on AWS S3, because there we sometimes |
416 | 419 | // hit 404 NoSuchBucket and there's no way to distinguish that |
@@ -440,7 +443,7 @@ func (s *GoofysTest) setupBlobs(cloud StorageBackend, t *C, env map[string]*stri |
440 | 443 | }(path, c) |
441 | 444 | } |
442 | 445 | throttler.V(concurrency) |
443 | | - t.Assert(globalErr, IsNil) |
| 446 | + t.Assert(globalErr.Load(), IsNil) |
444 | 447 | } |
445 | 448 | } |
446 | 449 |
|
@@ -534,7 +537,7 @@ func (s *GoofysTest) SetUpTest(t *C) { |
534 | 537 | s.cloud = NewS3BucketEventualConsistency(s3) |
535 | 538 | } |
536 | 539 |
|
537 | | - if s.emulator { |
| 540 | + if s.emulator && !TigrisDetected(flags) { |
538 | 541 | s3.Handlers.Sign.Clear() |
539 | 542 | s3.Handlers.Sign.PushBack(SignV2) |
540 | 543 | s3.Handlers.Sign.PushBackNamed(corehandlers.BuildContentLengthHandler) |
@@ -653,6 +656,14 @@ func (s *GoofysTest) SetUpTest(t *C) { |
653 | 656 | t.Fatal("Unsupported backend") |
654 | 657 | } |
655 | 658 |
|
| 659 | + s.isTigris = TigrisDetected(flags) |
| 660 | + s.isLocalTigris = LocalTigrisDetected(flags) |
| 661 | + log.Infof("Tigris detected: %v, local: %v", s.isTigris, s.isLocalTigris) |
| 662 | + |
| 663 | + if s.isLocalTigris { |
| 664 | + s.emulator = true |
| 665 | + } |
| 666 | + |
656 | 667 | if createBucket { |
657 | 668 | _, err := s.cloud.MakeBucket(&MakeBucketInput{}) |
658 | 669 | t.Assert(err, IsNil) |
|
0 commit comments