Selaa lähdekoodia

Merge pull request #44719 from vvoland/fix-volume-createdat

Fix volume CreatedAt being altered on initialization
Sebastiaan van Stijn 2 vuotta sitten
vanhempi
commit
fcb52454ac
3 muutettua tiedostoa jossa 18 lisäystä ja 2 poistoa
  1. 16 0
      integration/volume/volume_test.go
  2. 1 1
      volume/local/local_unix.go
  3. 1 1
      volume/local/local_windows.go

+ 16 - 0
integration/volume/volume_test.go

@@ -3,6 +3,7 @@ package volume
 import (
 	"context"
 	"net/http"
+	"os"
 	"path/filepath"
 	"strings"
 	"testing"
@@ -104,6 +105,21 @@ func TestVolumesInspect(t *testing.T) {
 	createdAt, err := time.Parse(time.RFC3339, strings.TrimSpace(inspected.CreatedAt))
 	assert.NilError(t, err)
 	assert.Check(t, createdAt.Unix()-now.Unix() < 60, "CreatedAt (%s) exceeds creation time (%s) 60s", createdAt, now)
+
+	// update atime and mtime for the "_data" directory (which would happen during volume initialization)
+	modifiedAt := time.Now().Local().Add(5 * time.Hour)
+	err = os.Chtimes(inspected.Mountpoint, modifiedAt, modifiedAt)
+	assert.NilError(t, err)
+
+	inspected, err = client.VolumeInspect(ctx, vol.Name)
+	assert.NilError(t, err)
+
+	createdAt2, err := time.Parse(time.RFC3339, strings.TrimSpace(inspected.CreatedAt))
+	assert.NilError(t, err)
+
+	// Check that CreatedAt didn't change after updating atime and mtime of the "_data" directory
+	// Related issue: #38274
+	assert.Equal(t, createdAt, createdAt2)
 }
 
 // TestVolumesInvalidJSON tests that POST endpoints that expect a body return

+ 1 - 1
volume/local/local_unix.go

@@ -164,7 +164,7 @@ func (v *localVolume) unmount() error {
 }
 
 func (v *localVolume) CreatedAt() (time.Time, error) {
-	fileInfo, err := os.Stat(v.path)
+	fileInfo, err := os.Stat(v.rootPath)
 	if err != nil {
 		return time.Time{}, err
 	}

+ 1 - 1
volume/local/local_windows.go

@@ -44,7 +44,7 @@ func (v *localVolume) postMount() error {
 }
 
 func (v *localVolume) CreatedAt() (time.Time, error) {
-	fileInfo, err := os.Stat(v.path)
+	fileInfo, err := os.Stat(v.rootPath)
 	if err != nil {
 		return time.Time{}, err
 	}