2012-12-21 24 views
25

Wie lange dauert es, bis eine Datei in Google Cloud Storage geändert wird?Google Cloud Storage-Weitergabe

Ich habe dieses sehr frustrierende Problem, wo ich den Inhalt einer Datei ändern und es über gsutil erneut hochladen, aber die Änderung wird nicht für mehrere Stunden angezeigt. Gibt es eine Möglichkeit, eine geänderte Datei zu zwingen, alles sofort zu verbreiten?

Wenn ich die Datei in der Google Cloud Storage-Konsole anschaue, sieht sie die neue Datei, aber wenn ich die öffentliche URL ankreuze, handelt es sich um eine alte Version und in einigen Fällen um 2 Versionen.

Gibt es eine Kopfzeile, die ich nicht einstelle?

EDIT:

Ich versuchte gsutil -h "Cache-Control: no-cache" cp -a public-read MyFile und es hilft nicht, aber vielleicht die alte Datei muss ablaufen, bevor die neue No-Cache-Version übernimmt?

habe ich eine Locke -I auf die Datei und erhalten diese zurück:

HTTP/1.1 200 OK 
Server: HTTP Upload Server Built on Dec 12 2012 15:53:08 (1355356388) 
Expires: Fri, 21 Dec 2012 19:58:39 GMT 
Date: Fri, 21 Dec 2012 18:58:39 GMT 
Last-Modified: Fri, 21 Dec 2012 18:53:41 GMT 
ETag: "66d820174d6de17a278b327e4c3e9b4e" 
x-goog-sequence-number: 3 
x-goog-generation: 1356116021512000 
x-goog-metageneration: 1 
Content-Type: application/octet-stream 
Content-Language: en 
Accept-Ranges: bytes 
Content-Length: 160 
Cache-Control: public, max-age=3600, no-transform 
Age: 3449 

Welche es ablaufen wird in einer Stunde, trotz der No-Cache, um anzuzeigen scheint.

Antwort

33

Google Cloud Storage bietet eine hohe Datenkonsistenz: Sobald ein Schreibvorgang abgeschlossen ist, erhält ein Lesevorgang von jedem Ort der Welt die neuesten Daten.

Wenn Sie jedoch das Caching aktivieren (was standardmäßig für jedes öffentlich lesbare Objekt gilt), können Lesevorgänge für dieses Objekt eine Version des Objekts anzeigen, die so alt ist wie das für das Objekt angegebene Cache-Control-Alter. Wenn Sie zum Beispiel die Datei wie folgt hochgeladen:

gsutil cp -a public-read file gs://my_bucket/file 

können Sie sehen, dass die max-age 1 Stunde (3600 Sekunden):

gsutil ls -L gs://my_bucket/file 
gs://my_bucket/file: 
    Creation time: Fri, 21 Dec 2012 19:59:57 GMT 
    Cache-Control: public, max-age=3600, no-transform 
    Content-Length: 1065 
    Content-Type: text/plain 
    ETag:  eb3fb83beedf1efffe5b8e32e8d6a65a 
    ... 

Wenn Sie einen öffentlich lesbar verhindern wollen Objekt von Ihnen tun können zwischengespeichert werden:

gsutil setmeta -h Cache-Control:no-cache gs://my_bucket/file 

Alternativ können Sie eine kürzere max-age auf dem Objekt festgelegt:

gsutil setmeta -h 'Cache-Control:public, max-age=600, no-transform' 

Mike Schwartz, Google Cloud Storage-Team

+1

Ich aktualisierte meine Fragen zu, dass ich No-Cache ausprobiert habe, aber ich sehe immer noch die maximale Alter = 3600. Muss die alte Datei ablaufen, bevor die neue No-Cache-Datei übernommen wird? –

+0

OK, es scheint so zu sein, dass Sie warten müssen, bis die alte zwischengespeicherte Version abläuft, bevor die No-Cache-Version übernimmt. Jetzt, da es abgelaufen ist, wird die No-Cache-Version korrekt angezeigt. –

+3

@mike wäre es schön, eine Funktion zum Ungültigmachen/Leeren des Caches wie auf CDN zu haben. – themihai