Comments (2)
@petmat You are right about "trying to read an append blob that is constantly getting more lines in it."
blobURL.download()
will try to download a blob with a HTTP Get request into a stream. When stream unexpected ends due to such as network broken, a retry will resume the stream read from the broken point with a new HTTP Get request.
The second HTTP request will use conditional header IfMatch
with the blob's ETag
returned in first request to make sure the blob doesn't change when the 2nd retry happens. Otherwise, a 412 conditional header doesn't match error will be returned. This strict strategy is used to avoid data integrity issues, such as the blob maybe totally over written by someone others. However, this strategy seems avoiding you from reading a constantly updated log file when a retry happens.
While I don't think it's bug, but we need to make this scenario work for you. There are 2 solutions, please have a try:
1> snapshot the append blob first, and read from the snapshot blob
2> set maxRetryRequests
to 0 in blobURL.download()
options. And download a small range (for example 4MB) every time. This means no conditional retry will happen, so no 412 error either. But the returned stream may not complete when there are network issues. Set a small range will help avoid it. Check the stream length.
from azure-storage-js.
I went with solution number one and I got the snapshot of the blob downloaded with the following code:
// ...
const blobURL = BlobURL.fromContainerURL(containerURL, blobName);
console.log('Downloading blob...');
const snapshotResponse = await blobURL.createSnapshot(Aborter.none);
const snapshotURL = blobURL.withSnapshot(snapshotResponse.snapshot);
const response = await snapshotURL.download(Aborter.none, 0);
console.log('Reading response to string...', snapshotURL.blobContext.length);
const body = await streamToString(response.readableStreamBody);
// ...
Downloading the blob did take some time though. (couple of minutes) But then again the size of the blob is ~140 MB. I didn't explore the solution number two because it seemed a bit contrived. But I'm happy with this
Thank you!
from azure-storage-js.
Related Issues (20)
- This repo is missing important files HOT 1
- high-level samples Abort.timeout duration HOT 2
- can I use this library in a React Native app? HOT 10
- Aborter throws timeout error even though it succeeds on download of BlockBlobUrl HOT 15
- Missing setProperties function for blob HOT 2
- Export RetryPolicyType in index.ts HOT 1
- Unable to set file HTTP headers HOT 1
- Using application/json header for file upload (x-ms-blob-type error) HOT 2
- Support for Angular4 (Typescript < 2.4) HOT 4
- how to handle viewing files that are stored in azure storage with multiple mime types HOT 7
- Cannot find name 'Event' HOT 9
- Aborter does not abort uploads that are in timeout / retrying HOT 2
- Gracefully handle 404 of reading from blob HOT 2
- [Tests] incorrect assert.ok() on result from string.indexof HOT 1
- downloadBlobToBuffer may download error ranges when customize non zero offset with count HOT 1
- Dowloading a blob should not reject on 304 HOT 3
- Question: file service API is so confusing :( :( HOT 2
- [Notice] This Project has been Moved to Azure SDK Central Repository
- How to list blobs from virtual directory in latest nodejs SDK? HOT 2
- How to get Content-MD5 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from azure-storage-js.