wait for DLO segments to show up when Close()ing the writer

Not just when Commit()ing the result. This fixes some errors I observed
when the layer (i.e. the DLO) is Stat()ed immediately after closing,
and reports the wrong file size because the container listing is not
yet up-to-date.

Signed-off-by: Stefan Majewsky <stefan.majewsky@sap.com>
This commit is contained in:
Stefan Majewsky 2016-04-19 13:48:08 +02:00 committed by Richard Scothern
parent 775d0968cc
commit 3330cc567e

View file

@ -698,6 +698,9 @@ func (w *writer) Close() error {
if err := w.driver.createManifest(w.path, w.driver.Container+"/"+w.segmentsPath); err != nil { if err := w.driver.createManifest(w.path, w.driver.Container+"/"+w.segmentsPath); err != nil {
return err return err
} }
if err := w.waitForSegmentsToShowUp(); err != nil {
return err
}
} }
w.closed = true w.closed = true
@ -732,10 +735,14 @@ func (w *writer) Commit() error {
} }
w.committed = true w.committed = true
return w.waitForSegmentsToShowUp()
}
func (w *writer) waitForSegmentsToShowUp() error {
var err error var err error
waitingTime := readAfterWriteWait waitingTime := readAfterWriteWait
endTime := time.Now().Add(readAfterWriteTimeout) endTime := time.Now().Add(readAfterWriteTimeout)
for { for {
var info swift.Object var info swift.Object
if info, _, err = w.driver.Conn.Object(w.driver.Container, w.driver.swiftPath(w.path)); err == nil { if info, _, err = w.driver.Conn.Object(w.driver.Container, w.driver.swiftPath(w.path)); err == nil {