Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Large in-memory S3 transfers #64

Closed
asylvest opened this issue Jan 3, 2016 · 30 comments
Closed

Large in-memory S3 transfers #64

asylvest opened this issue Jan 3, 2016 · 30 comments
Labels
guidance Question that needs advice or information.

Comments

@asylvest
Copy link

asylvest commented Jan 3, 2016

I've got a suite of applications that produce very large binary buffers that I'd like to be able to intermittently write to and read from S3 with. I'd like to avoid large reallocations and copying of data and instead transfer the buffer directly to/from S3.

The PutObjectRequest wants an IOStream and the GetOjectRequest will allow you to provide a factory that creates an IOStream. So the best workaround I've got so far is to create a StringStream and use pubsetbuf() to override the stream's underlying buffer (in the snippets below, I've got void* buffer and size_t bufferSize).

For the put:

    std::shared_ptr<Aws::StringStream> stream =
            Aws::MakeShared<Aws::StringStream>(ALLOCATION_TAG);

    stream->rdbuf()->pubsetbuf(static_cast<char*>(const_cast<void*>(buffer)),
                               bufferSize);
    stream->rdbuf()->pubseekpos(bufferSize);

    stream->seekg(0);

And for the get:

    request.SetResponseStreamFactory(
            [buffer, bufferSize]()
            {
                std::unique_ptr<Aws::StringStream>
                        stream(Aws::New<Aws::StringStream>(ALLOCATION_TAG));

                stream->rdbuf()->pubsetbuf(static_cast<char*>(buffer),
                                           bufferSize);

                return stream.release();
            });

This appears to work with the testing I've done so far, and as far as I understand streams it seems like this should accomplish what I want in terms of avoiding large allocations or copies. Just wondering if you have any thoughts on an easier/better way to do this or have any plans to add any overrides in the API to make this a little easier.

Also, to confirm, a single PutObjectRequest/GetObjectRequest will automatically do multi-part uploads for large transfers right? And if I don't override the rate limiter, by default it'll use as much network bandwidth as it can get?

Thanks.
-Adam

@JonathanHenson
Copy link
Contributor

Have you looked at aws-sdk-cpp-transfer? It does many of the things you are
trying to do. It will allocate some buffers upfront, but afterwards will
just do copies. It will also do multipart for you automatically if the file
is over 5mb in size.

aws-sdk-cpp is a low-level client. Meaning, it is just an interface for
talking to the s3 service and nothing more.

What you have should work at first glance, hut the transfer manager is
designed for just this purpose.

Also, you are correct that if you dont override the rate limiter, then
everything will he wide open.

We discuss the transfer manager in the video in the readme. Its the last 15
minutes or so.
On Jan 3, 2016 7:49 AM, "Adam Sylvester" notifications@github.com wrote:

I've got a suite of applications that produce very large binary buffers
that I'd like to be able to intermittently write to and read from S3 with.
I'd like to avoid large reallocations and copying of data and instead
transfer the buffer directly to/from S3.

The PutObjectRequest wants an IOStream and the GetOjectRequest will allow
you to provide a factory that creates an IOStream. So the best workaround
I've got so far is to create a StringStream and use pubsetbuf() to
override the stream's underlying buffer (in the snippets below, I've got void*
buffer and size_t bufferSize).

For the put:

std::shared_ptr<Aws::StringStream> stream =
        Aws::MakeShared<Aws::StringStream>(ALLOCATION_TAG);

stream->rdbuf()->pubsetbuf(static_cast<char*>(const_cast<void*>(buffer)),
                           bufferSize);
stream->rdbuf()->pubseekpos(bufferSize);

stream->seekg(0);

And for the get:

request.SetResponseStreamFactory(
        [buffer, bufferSize]()
        {
            std::unique_ptr<Aws::StringStream>
                    stream(Aws::New<Aws::StringStream>(ALLOCATION_TAG));

            stream->rdbuf()->pubsetbuf(static_cast<char*>(buffer),
                                       bufferSize);

            return stream.release();
        });

This appears to work with the testing I've done so far, and as far as I
understand streams it seems like this should accomplish what I want in
terms of avoiding large allocations or copies. Just wondering if you have
any thoughts on an easier/better way to do this or have any plans to add
any overrides in the API to make this a little easier.

Also, to confirm, a single PutObjectRequest/GetObjectRequest will
automatically do multi-part uploads for large transfers right? And if I
don't override the rate limiter, by default it'll use as much network
bandwidth as it can get?

Thanks.
-Adam


Reply to this email directly or view it on GitHub
#64.

@JonathanHenson
Copy link
Contributor

Correction

aws-sdk-cpp-s3* is a low-level client.
On Jan 3, 2016 8:07 AM, "Jonathan Henson" jonathan.michael.henson@gmail.com
wrote:

Have you looked at aws-sdk-cpp-transfer? It does many of the things you
are trying to do. It will allocate some buffers upfront, but afterwards
will just do copies. It will also do multipart for you automatically if the
file is over 5mb in size.

aws-sdk-cpp is a low-level client. Meaning, it is just an interface for
talking to the s3 service and nothing more.

What you have should work at first glance, hut the transfer manager is
designed for just this purpose.

Also, you are correct that if you dont override the rate limiter, then
everything will he wide open.

We discuss the transfer manager in the video in the readme. Its the last
15 minutes or so.
On Jan 3, 2016 7:49 AM, "Adam Sylvester" notifications@github.com wrote:

I've got a suite of applications that produce very large binary buffers
that I'd like to be able to intermittently write to and read from S3 with.
I'd like to avoid large reallocations and copying of data and instead
transfer the buffer directly to/from S3.

The PutObjectRequest wants an IOStream and the GetOjectRequest will allow
you to provide a factory that creates an IOStream. So the best workaround
I've got so far is to create a StringStream and use pubsetbuf() to
override the stream's underlying buffer (in the snippets below, I've got void*
buffer and size_t bufferSize).

For the put:

std::shared_ptr<Aws::StringStream> stream =
        Aws::MakeShared<Aws::StringStream>(ALLOCATION_TAG);

stream->rdbuf()->pubsetbuf(static_cast<char*>(const_cast<void*>(buffer)),
                           bufferSize);
stream->rdbuf()->pubseekpos(bufferSize);

stream->seekg(0);

And for the get:

request.SetResponseStreamFactory(
        [buffer, bufferSize]()
        {
            std::unique_ptr<Aws::StringStream>
                    stream(Aws::New<Aws::StringStream>(ALLOCATION_TAG));

            stream->rdbuf()->pubsetbuf(static_cast<char*>(buffer),
                                       bufferSize);

            return stream.release();
        });

This appears to work with the testing I've done so far, and as far as I
understand streams it seems like this should accomplish what I want in
terms of avoiding large allocations or copies. Just wondering if you have
any thoughts on an easier/better way to do this or have any plans to add
any overrides in the API to make this a little easier.

Also, to confirm, a single PutObjectRequest/GetObjectRequest will
automatically do multi-part uploads for large transfers right? And if I
don't override the rate limiter, by default it'll use as much network
bandwidth as it can get?

Thanks.
-Adam


Reply to this email directly or view it on GitHub
#64.

@asylvest
Copy link
Author

asylvest commented Jan 3, 2016

Thanks - I hadn't noticed that. Looking at TransferClient, I only see an interface for uploading and downloading files from disk by filename... am I missing an API that allows you to do this with in-memory buffers (i.e. I have a void* of a known length that I want to send directly to S3)? That being said, even if TransferClient doesn't support this, I think it will be a very helpful example to help me fine-tune the code I'm working on.

@JonathanHenson
Copy link
Contributor

have a look here and work backwards, you should be able to reuse our resource management interface.

https://github.com/awslabs/aws-sdk-cpp/blob/master/aws-cpp-sdk-transfer/include/aws/transfer/TransferClientDefs.h

@asylvest
Copy link
Author

Thanks for the pointer. Does the C++ SDK support multipart downloads? I see multipart upload requests in sdk-s3 and examples of them being used both in sdk-s3-integration-tests and sdk-transfer but don't see any reference to multipart downloads anywhere (or an option to specify this in the GetObjectRequest.

Am I just missing this? If not, any guesses as to when the SDK will be updated to support it?

@JonathanHenson
Copy link
Contributor

Each service client supports whatever a given service exposes, they are
generated directly from the service models. As to multi-part download,
http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html

I recommend reading the api docs for s3. Once you determine what low-level
operations you want to do, you can then use the client to perform that
operation.
On Jan 10, 2016 8:46 AM, "Adam Sylvester" notifications@github.com wrote:

Thanks for the pointer. Does the C++ SDK support multipart downloads? I
see multipart upload requests in sdk-s3 and examples of them being used
both in sdk-s3-integration-tests and sdk-transfer but don't see any
reference to multipart downloads anywhere (or an option to specify this in
the GetObjectRequest.

Am I just missing this? If not, any guesses as to when the SDK will be
updated to support it?


Reply to this email directly or view it on GitHub
#64 (comment).

@asylvest
Copy link
Author

Thanks... I should have taken a closer look. I am successfully using the S3Client::SetRange() method and everything is working as expected. In terms of potential future enhancements, it would be a little easier to use the SDK if it supported passing in some type of C++ range object rather than a string, but now that I know how this works it is easy enough for me to wrap this in my own method and build up the string under the hood.

@cugarteblair
Copy link

In your example above with the StringStream for the "get" how do you access the underlying stream?
If I understand this pattern correctly:
Using the lambda you set the output to a StringStream using request.SetResponseStreamFactory.
Then call:
auto getObjectOutcome = Client->GetObject(request);
where the call to GetObject blocks. So how do you read the stream after that?
If I use a file (vice stream) I see I can read the file. But I am having trouble figuring out how to do it with a stream.

Any help would be appreciated.

@asylvest
Copy link
Author

So the cool thing is that you don't need to 'get' the underlying stream at all. When the AWS SDK uses the StringStream to write, it's writing directly into the void* buffer that you provide to the lambda. So, you've got the contents of the S3 object right in buffer... no need to get at the StringStream object itself.

To clarify a bit though, when I want the entire S3 object in memory, I first ask S3 the size of the object, then allocate a buffer / resize a vector to be that size, then pass that pointer to the lambda. buffer has to be at least as large as the S3 object or something bad's going to happen (I guess I'm not sure offhand what'll happen if you did the pubsetbuf() with bufferSize < s3ObjectSize, but I am guessing either the StringStream write would block or something would index OOB).

I've been using this successfully so far but of course would like to get some more miles on it in case there's a shortcoming I haven't run into yet, so let me know if you have any issues with the approach.

@cugarteblair
Copy link

Thanks for the quick reply. Your answer is really helpful.

This seems like it would work when one can read the entire object in memory.
I was hoping to find a way to stream large objects processing them as they are being read without waiting for the entire object to be read into memory. In this way it doesn't matter how big the object is and with a multi-threaded reader one can do parallel reads to several objects at once.
What this will do for me is reduce the latency of the request/response in a streaming server I am writing.
So in short I am trying to figure out how to attach to the underlying stream object so I can de-serialize the google protocol buffer objects being streamed.

@asylvest
Copy link
Author

Sure thing.

Yep - something similar to what you're saying is on my todo list too. You can use S3Client::SetRange() to specify just a portion of the object that you want. The C++ SDK is thread-safe. So you could check up front what the object size is and either allocate one big buffer that all threads share or allocate a per-thread buffer at whatever size you want then kick off a pool of threads that read a desired range of the object (via SetRange() and the pubsetbuf() stuff above) and do whatever processing you need. I haven't had a chance to implement this yet myself but I think all the pieces should play nice together.

@cugarteblair
Copy link

Thanks for your help. I'll look into it. And report back if I have anything of value to add.

But I think I am solving a slightly different problem:
Is there a way to pass in a stream with dynamically allocated memory that the S3 api can write to while my thread reads from it?

I am thinking my server (acting as an s3 client) would be reading several large objects at once streaming them back while processing them and putting the result of the processing on separate dedicated queues that get drained in proper order by a sender thread. This sender thread would be sending responses back to my client.

So it's not necessarily breaking up a large object, but streaming it. And I don't think it would be a problem if the memory is dynamically allocated, that would actually be easier if the stream would handle it as basic IO streams do.

It seems to me the advantage of streaming (in general) is being able to process the head of an arbitrarily sized (and possibly huge) stream at the client side while the server is still sending the tail portion. Since I am processing packets out of the S3 object and sending a set of response messages for each this would reduce the latency of the request/response between my client and server because I don't have to wait until I receive the entire object before sending response messages.
I guess I'm stuck on the notion of reading the object as a dynamic stream. I don't mind the memory allocations.

@asylvest
Copy link
Author

Ahh gotcha... in that case, you should be able to just send the SDK a normal StringStream (without the pubsetbuf()). The SDK would write to the stream and the StringStream would internally dynamically allocate more space as needed. You want to be able to access the stream afterwards, so you create the stream beforehand and make a lambda for SetResponseStreamFactory that just returns a pointer to that stream. You keep the stream in scope and then just access it directly after the SDK call.

@cugarteblair
Copy link

That is what I have been trying to do but to no avail.

here is the compiler output:
../src/mnem_extract_server.cpp: In member function ‘void AwsS3DataMoverPub::processPktFile()’: ../src/mnem_extract_server.cpp:197:17: error: no matching function for call to ‘Aws::S3::Model::GetObjectRequest::SetResponseStreamFactory(AwsS3DataMoverPub::processPktFile()::__lambda4)’ });

For the following code:

This is defined in the class protected data:
std::shared_ptr<Aws::StringStream> s3_stream;

This is in the Ctor of the class:

s3_stream = Aws::MakeShared<Aws::StringStream>(ALLOCATION_TAG);

And finally this is the call to the lambda using a local scope variable:

std::shared_ptr<Aws::StringStream> m_stream = s3_stream;
getObjectRequest.SetResponseStreamFactory(
                          [m_stream,obj_name]()
                          {
                        cout << obj_name << " - lambda called with stream" << endl;
                        return m_stream;
                          });

@asylvest
Copy link
Author

I just skimmed over this, but take a look at the response stream factory signature... I'm pretty sure it wants a raw rather than shared pointer (so change to return m_stream.get()).

@cugarteblair
Copy link

Thanks!
I really appreciate the time you are taking to help me out on this.

I'm wasn't sure if this needed to be a shared pointer or not. I was following the pattern from the other stuff. I'm new to the smart pointer concept.

The following code compiles _but is it ok at runtime?_

I assume I own the stream but how do I know the api thread that is using it is done? What if I want to implement a "cancel" ? It seems that a smart pointer might be needed in this case.
I'm surprised the factory signature uses a raw pointer:

The lamda call:
Aws::StringStream* m_stream = s3_stream; getObjectRequest.SetResponseStreamFactory([m_stream]() { return m_stream; });

In the Ctor:
s3_stream = new Aws::StringStream(ALLOCATION_TAG);

Where s3_stream was defined in protected data as:

Aws::StringStream* s3_stream;

@JonathanHenson
Copy link
Contributor

The memory returned by the reaponsestreamfactory will be deleted when the
result object goes out of scope. Don't pass underlying smart pointer memory
to it.
On Jan 14, 2016 4:39 AM, "Adam Sylvester" notifications@github.com wrote:

I just skimmed over this, but take a look at the response stream factory
signature... I'm pretty sure it wants a raw rather than shared pointer (so
change to return m_stream.get()).


Reply to this email directly or view it on GitHub
#64 (comment).

@cugarteblair
Copy link

@JonathanHenson
A couple of questions:
From the examples I don't see a result object. Is that visible to the user? i.e. can I control the scope. Or are you saying this is a bad idea?

From the example:

GetObjectRequest getObjectRequest;
getObjectRequest.SetBucket(fullBucketName);
getObjectRequest.SetKey(keyName);
getObjectRequest.SetResponseStreamFactory([](){ 
   return Aws::New<Aws::FStream>(ALLOCATION_TAG,DOWNLOADED_FILENAME, std::ios_base::out ); 
                                 });
auto getObjectOutcome = s3Client->GetObject(getObjectRequest);

If I understand this correctly GetObject blocks until the transfer is complete.
Is there anyway to interface to this API asynchronously so I can initiate a transfer into a stream and in a separate thread read data out of the stream? This way I can process data immediatly

@JonathanHenson
Copy link
Contributor

Result object is inside the outcome. e.g. getObjectOutcome.GetResult();

You can take ownership of the Result via move semantics. In that scenario, the memory is yours once you call GetResultWithOwnership();

All low-level api calls have async and future variants. So you can always use those.

krzysztof-trzepla pushed a commit to krzysztof-trzepla/aws-sdk-cpp that referenced this issue May 21, 2016
…er to develop

# By Konrad Zemek
# Via Konrad Zemek
* commit '4e815bc37e1c9bd9a0108a598565b3cc6e769455':
  chown logs better.
krzysztof-trzepla added a commit to krzysztof-trzepla/aws-sdk-cpp that referenced this issue May 21, 2016
6280b36 Add open function overload that takes flags as integer.
b4fd726 Merge pull request aws#160 in VFS/helpers from feature/VFS-1529-autodetect-available-storages-in to develop
300baca Merge pull request aws#166 in VFS/helpers from feature/VFS-1621-oneclient-package-docker-plan-at to develop
a25e655 Releasing new version 2.0.1
fc63cff Merge branch 'develop' of ssh://git.plgrid.pl:7999/vfs/helpers into feature/VFS-1529-autodetect-available-storages-in
f14c519 Merge commit '18d7abee1407a200a85913d9588c4202969a3bab' into feature/VFS-1621-oneclient-package-docker-plan-at
18d7abe Squashed 'bamboos/' changes from ccb41c3..a30c6f2
96db294 Merge branch 'develop' of ssh://git.plgrid.pl:7999/vfs/helpers into feature/VFS-1621-oneclient-package-docker-plan-at
8c89871 Merge pull request aws#157 in VFS/helpers from feature/VFS-1525-oneclient-opens-files-before-read-writes to develop
c1e52f6 VFS-1529 Remove unnecessary capture.
bbc7df5 VFS-1525 Refactor for loop
a487e47 VFS-1529 Change logging level in storage helpers. Use glog for logging unordered maps.
b27da4a VFS-1525 Remove openFile method from helpers
130d1d6 VFS-1525 Parsing flags in IStorageHelper
32e5f0a VFS-1529 Add logs in case of raw helper context cast failure.
ec39595 Squashed 'bamboos/' changes from ca613bd..ccb41c3
35a79cc Merge commit 'ec39595c37033057fce6be09f0eb546a5213dcb6' into feature/VFS-1621-oneclient-package-docker-plan-at
d879dd7 Merge pull request aws#162 in VFS/helpers from feature/VFS-1608-integrate-ember-gui-production-build to develop
1247e61 VFS-1529 Return new helper context if raw context cast fails.
b92d950 Merge commit 'a61ce189983d1c3b6c96ce4605174b5d299c40d9' into feature/VFS-1529-autodetect-available-storages-in
a61ce18 Squashed 'clproto/' changes from a860fe1..a982eb9
3e3a042 Merge commit 'c4162767e912534d47a46fd5ff857aecaa099069' into feature/VFS-1608-integrate-ember-gui-production-build
c416276 Squashed 'appmock/' changes from 2f5d162..68aaf01
5b45a4a Merge commit 'db705cb3f5e23f2178dd6c5af46f1863427e0a63' into feature/VFS-1608-integrate-ember-gui-production-build
db705cb Squashed 'bamboos/' changes from 8e869b3..2f522cc
d17fbf9 Merge branch 'develop' of ssh://git.plgrid.pl:7999/vfs/helpers into feature/VFS-1529-autodetect-available-storages-in
58c5f06 Merge commit '05d800615c88635213e452411abd0c8e8a576f32' into feature/VFS-1529-autodetect-available-storages-in
05d8006 Squashed 'clproto/' changes from 85adaf8..a860fe1
aea2c4e Merge commit 'aab4a7aa6bb6efb90ca367e6651040b8cd080edb' into feature/VFS-1608-integrate-ember-gui-production-build
aab4a7a Squashed 'appmock/' changes from 0999c5d..2f5d162
2bc1d01 Squashed 'bamboos/' changes from ca613bd..8e869b3
a2c1622 Merge commit '2bc1d01226ae228ed3c1ae568bfe148fbb97ce8a' into feature/VFS-1608-integrate-ember-gui-production-build
da581c3 Merge pull request aws#161 in VFS/helpers from feature/VFS-1571-speed-up-compilation-through-caching to develop
53f3f4e Squashed 'bamboos/' changes from f0eb1c2..ca613bd
a84ba85 Merge commit '53f3f4e33ee0f70c4a1ddb8c05e10b9946f4c8a8' into feature/VFS-1571-speed-up-compilation-through-caching
d7525b3 Merge commit '0de736692e1bfb439c5a9d1f1d81c0da15e6b8e7' into feature/VFS-1571-speed-up-compilation-through-caching
0de7366 Squashed 'appmock/' changes from 0e1718a..0999c5d
29dd11b Releasing new version 2.0.0
e81f3ca Delete ReleaseNotes
5660da3 VFS-1525 Make flag translation public for use in open.
ee56cc2 Merge pull request aws#159 in VFS/helpers from feature/VFS-1522-file-block-invalidation to develop
fc94f83 VFS-1525 Update sh_open with FlagsSet
32a6ae0 Merge branch 'develop' into feature/VFS-1525-oneclient-opens-files-before-read-writes
517b81f VFS-1529 Remove code duplication in S3 storage helper.
2f80783 VFS-1529 Throw exception in storage helper factory if helper name doesn't match.
02032da Merge commit '41dcd1ed10fad162f488220744d14cb3c24689b8' into feature/VFS-1529-autodetect-available-storages-in
41dcd1e Squashed 'clproto/' changes from 74839e4..85adaf8
85fdaad VFS-1529 Add mechanism for automatic detection of directly accessible storages.
7c64a2d Merge branch 'develop' into feature/VFS-1522-file-block-invalidation
f5e1777 Merge commit '4d2e84b125eafd8d0a566e5cd161a9a0bc2dc420' into feature/VFS-1522-file-block-invalidation
4d2e84b Squashed 'clproto/' changes from 8dd55d1..fa290fc
92a0605 Merge commit '6629b62f4e50c74f28837d5445610f600f7169ab' into feature/VFS-1529-autodetect-available-storages-in
6629b62 Squashed 'clproto/' changes from 029c696..74839e4
d98a97d Merge pull request aws#156 in VFS/helpers from feature/merge-storage-helpers-functionality to develop
9d30f8f Merge commit '063878aab71f2eb6efedd9a988b529eb5d1971be' into feature/VFS-1522-file-block-invalidation
063878a Squashed 'clproto/' changes from 9fc119c..8dd55d1
3954cb7 Merge branch 'develop' of ssh://git.plgrid.pl:7999/vfs/helpers into feature/merge-storage-helpers-functionality
de91cbc Merge branch 'develop' of ssh://git.plgrid.pl:7999/vfs/helpers into feature/merge-storage-helpers-functionality
1940bfb Merge pull request aws#154 in VFS/helpers from feature/VFS-1450-3-acl-improvements to develop
b6bc3e5 Merge branch 'develop' into feature/VFS-1450-3-acl-improvements
5e72838 Merge pull request aws#158 in VFS/helpers from bugfix/fix-integration-tests to develop
1ac6141 Fix integration tests.
e90f30f Squashed 'bamboos/' changes from b146078..f0eb1c2
7adc9a9 Merge commit 'e90f30f645452d8b8deb9a3cabe3a2fac30ec037' into develop
26941d1 Change flags container from vector to unordered set.
b2d2b32 VFS-1525 Synchronous version of open and release methods
648169c VFS-1450 Remove unused import.
8295e12 VFS-1450 Additional merge changes.
5ff1c94 Squashed 'clproto/' changes from 10384fc..9fc119c
3854ab1 Merge commit '5ff1c9491e62a5ff28a7f6b3369d98a5223dc37b' into feature/VFS-1450-3-acl-improvements
0c0e653 Merge branch 'develop' into feature/VFS-1450-3-acl-improvements
4815130 VFS-1450 Add permission_changed_event.
179c192 VFS-1450 Apply clang-format.
e4d1cfa VFS-1450 Adjust tests to new helper interface.
ae81389 Merge commit 'e39f71962e05fa32629c75fcabc85cca6e15112b' into feature/VFS-1450-acl-improvements
60546a5 VFS-1450 Add fileUuid argument to read and write operations in IStorageHelper.
5b34cdc VFS-1450 Remove storage_id from get_helper_args message
149b44a VFS-1450 Update clproto.
5049adf Merge commit '52fc8c5e28c809bdef6303f3091a319bdf1a61e9' into feature/VFS-1450-acl-improvements
3483f26 VFS-1398 Change ProxyIORequest.space_id to ProxyIORequest.file_uuid.
721b621 VFS-1376 Change subscriptions processing on handshake. Add subscription container wrapper.
f7aeda4 Merge branch 'develop' of ssh://git.plgrid.pl:7999/vfs/oneclient into feature/VFS-1376-acceptance-tests-for-events
10384fc Merge pull request aws#99 in VFS/clproto from feature/VFS-1398-cdmi-metadata to develop
0856cbb Merge pull request aws#97 in VFS/clproto from feature/VFS-1371-clusterproxy-storage-helper to develop
d6915d1 Merge commit '9a0454281fcd3fecd189fc4798a9bea2c7d33b7d' into feature/VFS-1371-clusterproxy-storage-helper
4ebb492 Merge remote-tracking branch 'origin/develop' into feature/VFS-1371-clusterproxy-storage-helper
8afb7e1 VFS-1371 Add SpaceId to GetHelperParams and FileLocation.
2e82140 VFS-1371 Add space_id to ProxyIORequest.
e095c2e Merge remote-tracking branch 'origin/feature/VFS-1371-clusterproxy-storage-helper_merge' into feature/VFS-1371-clusterproxy-storage-helper
aa81caa Merge remote-tracking branch 'origin/develop' into feature/VFS-1371-clusterproxy-storage-helper
dd0b1a6 VFS-1376 Fix spinlock in TypedStream and client hang when unmounting in the foreground.
d1bfbca VFS-1398 Rename xattr.key to xattr.name.
b38ccbb Merge commit '9b37f4c643fd7a22cbb9f98be676c4f93e0a9289' into feature/VFS-1376-acceptance-tests-for-events
6b4c704 VFS-1398 Add xattr messages to possible fuse messages.
4a969b5 Merge branch 'feature/VFS-1407-client-get-subscriptions-on-handshake' into feature/VFS-1398-cdmi-metadata
e640bcc VFS-1398 Add xattr messages.
8ac886e VFS-1407 Getting subscriptions on handshake response.
7689bb6 VFS-1407 Getting subscriptions on handshake response.
a68b34f Merge remote-tracking branch 'origin/develop' into feature/VFS-1371-clusterproxy-storage-helper
5bae72d VFS-1371 Remove SpaceID from ProxyIO arguments.
9689405 Merge commit '3000ff39ed9e607e583d0411fea900332242eb1a' into feature/VFS-1371-clusterproxy-storage-helper
7e5d95b VFS-1371 Add POSIX error codes.
a9da5c4 VFS-1289 Enable NIF library build.
4b9a5e0 VFS-1289 Fix compilation errors of NIF libs.
277fd05 Merge branch 'feature/VFS-1371-clusterproxy-storage-helper_merge' into feature/VFS-1371-clusterproxy-storage-helper
2d49007 VFS-1371 Add protocol messages for ProxyIO helper.
b11995b Merge pull request aws#96 in VFS/clproto from feature/VFS-1289-event-manager-for-one-client-v.3.0 to develop
a10c6f5 Merge commit '65470c82c12f8a2644f2509a330a6be4387ba4f0' into feature/VFS-1289-event-manager-for-one-client-v.3.0
e78734c VFS-1289 Add message that can carry multiple events of the same type.
00e73be Merge pull request aws#95 in VFS/clproto from feature/VFS-1289-event-manager-for-one-client-v.3.0 to develop
d2b074b Merge commit '4412137cb52755a79d4ae9f2714c771417c6d620' into feature/VFS-1361-rebase-build-dockers-on-ubuntu-15.10
3b15520 Merge commit '347fc6b6b2e6b4676a8eb00f45805823ff9f6fe9' into feature/VFS-1289-event-manager-for-one-client-v.3.0
f7f9162 VFS-1289 Make stream ID optional in MessageStreamReset message.
863b0ca VFS-1289 Change type of subscription ID from unsigned to signed integer.
409c062 VFS-1289 Add stream ID to stream reset message.
6498a3f VFS-1289 Change name of 'oneof' constructions in event messages.
7456587 VFS-1289 Enable NIF library build.
197b171 VFS-1289 New events multilayer architecture. Unit and integration tests extension.
e547efc VFS-1289 New events multilayer architecture. Unit and integration tests extension.
2bfbbfd Merge commit '53600cf9070a265d32ddb20a03b348efe37cb1c3' into bugfix/VFS-1255-onedata-packages-is-green-on-bamboo
cc6d274 Merge commit 'bfa0f14acf0ebe4ae00ef0d2b8885b3a8c7a89a2' into feature/VFS-1289-event-manager-for-one-client-v.3.0
24bc3db VFS-1289 Fix compilation errors of NIF libs.
a47f9c5 Merge commit '550e45ccae7d729e6325d6f80986a112ac012791' into feature/VFS-1289-event-manager-for-one-client-v.3.0
33b7776 Merge commit '1a1105c65d9a2e13d99effa9d9f331beb6ba93b1' into feature/VFS-1289-event-manager-for-one-client-v.3.0
93e9422 Implement sequencer tests.
1219ed3 Merge commit '34caa7f1ce287843c8f7db7d8fc31e5efacd8140' into feature/VFS-1289-event-manager-for-one-client-v.3.0
6891efe VFS-1289 Implement sequencer behaviour.
fa07703 VFS-1289 Implement sequencer behaviour.
dac645c Merge branch 'develop' of ssh://git.plgrid.pl:7999/vfs/oneclient into feature/VFS-1289-event-manager-for-one-client-v.3.0
41907e7 VFS-1289 Refactor events framework. Extend unit tests. Fix integration tests.
a52d053 Merge remote-tracking branch 'origin/develop' into feature/VFS-1235-operations-on-files-at-the-client
d606115 Merge pull request aws#93 in VFS/clproto from feature/VFS-1235-operations-on-files-at-the-client to develop
875ebb3 Merge remote-tracking branch 'origin/develop' into feature/VFS-1235-operations-on-files-at-the-client
1eac08d Merge remote-tracking branch 'origin/develop' into feature/VFS-1235-operations-on-files-at-the-client
5ef8fe0 VFS-1235 Implement PushListener.
164b577 Merge pull request aws#89 in VFS/clproto from feature/VFS-1223-implementation-of-macaroons-for to develop
4af31f8 VFS-1235 Implement truncate.
20b8d05 VFS-1235 Implement truncate.
993efc6 VFS-1235 Implement truncate.
b075ea2 VFS-1235 Implement read.
e5ffe9b VFS-1235 Introduce cache classes.
dcf3adb VFS-1223 Add a refreshing macaroons capability.
446bef1 VFS-1223 Add a refreshing macaroons capability.
4dbd2e5 Merge pull request aws#88 in VFS/clproto from feature/VFS-1217-optimization-of-development-environment to develop
4239d9d VFS-1217 Generate clproto erl files only if not yet generated.
f9d0890 Merge remote-tracking branch 'origin/feature/VFS-1223-implementation-of-macaroons-for_merge' into feature/VFS-1223-implementation-of-macaroons-for
d0fdb94 VFS-1217 Clear environment compilation flags.
49787dd Merge remote-tracking branch 'origin/develop' into feature/VFS-1217-optimization-of-development-environment
b3f0853 VFS-1223 Add a refreshing macaroons capability.
3c2855a VFS-1223 Add a refreshing macaroons capability.
968a835 VFS-1235 Change protocol to support file operations.
ba7a1b5 VFS-1235 Change protocol to support file operations.
a6247e7 VFS-1235 Change protocol to support file operations.
1b2d59c Merge commit '597c423bbe1ab1785a5c856c38b277b4bd6793bb' into feature/VFS-1235-operations-on-files-at-the-client
d69169c VFS-1235 Add protocol for operations on regular files.
055870f VFS-1217 Build messages NIF through CMake.
44e3dfe Merge pull request aws#87 in VFS/clproto from feature/VFS-1147-first-operations-on-directories to develop
3d6a3d3 VFS-1153 Fix handshake logic.
356c182 Merge commit 'f72777be3be31deba0be6061685167b4a6f4a446' into feature/VFS-1153-first-operations-on-directories
8db7fab VFS-1153 Add Rename and ChangeMode messages.
0d9f35f VFS-1153 Add Rename and ChangeMode messages.
e204df8 VFS-1153 Add Rename and ChangeMode messages.
ed31a3b Merge commit '44a307c1b92d6fa3e1c500d977dcc6cc868a2168' into bugfix/VFS-1160-fix-communicator-integration-tests
b974f01 VFS-1160 Fix unit tests.
c8554b2 Merge commit '4dc99eb2ade9497b73ef16b916010bb2f2c403e9' into bugfix/VFS-1160-fix-communicator-integration-tests
6513820 VFS-1160 Pull in erlang-tls.
305846f VFS-1160 Pull in erlang-tls.
77ad057 VFS-1153 Catch constructor exceptions in communication translator.
bba3d3e Merge commit '1ae96d4603f4459624d3020cd03f093404713d0f' into feature/VFS-1153-first-operations-on-directories
6d2e402 VFS-1153 Update clproto.
88e184d Merge branch 'feature/VFS-1161-reduce-dependencies-on-experimental' into feature/VFS-1153-first-operations-on-directories
cadf9b1 Merge commit 'e5c358514c60260f8a0b56fb9ad5eb0a91f13681' into feature/VFS-1161-reduce-dependencies-on-experimental
5a79af5 add ChangeMode and Rename messages
647b045 VFS-1147 fix ambiguous file entry
cb6d5f3 Merge remote-tracking branch 'origin/develop' into feature/VFS-1147-first-operations-on-directories
f06106b Merge pull request aws#86 in VFS/clproto from feature/VFS-1145-ssl2-integrated-with-oneprovider to develop
354be43 VFS-1147 Fix compilation.
c322a9b Merge commit '054e6f18025dc858eb15cfb2f4f6be67c2af0653' into feature/VFS-1153-first-operations-on-directories
3ab63b5 VFS-1147 Change FileChildren message structure.
68da8d5 Merge branch 'feature/VFS-1147-first-operations-on-directories_merge' of ssh://git.plgrid.pl:7999/vfs/clproto into feature/VFS-1147-first-operations-on-directories
4de7561 VFS-1153 Add new FUSE messages domain objects.
85b8d0e VFS-1153 Add new FUSE messages domain objects.
158ec3b VFS-1147 Add name to FileAttr message.
acdd6ee VFS-1153 Reformat helper files.
94c553f Merge commit '1c75eae2fb93d17e9fb4fcb571a4f8068c7e18ec' into feature/VFS-1153-first-operations-on-directories
2f770d5 VFS-1147 Change FileChildren message format.
61ab98b VFS-1147 Add UUID to file attr.
39844f5 VFS-1147 Using parent UUID for directory creation.
38e2cff Fix oneclient compilation on OS X.
b7b0939 Merge commit '2acc59538ffb708736554de8d56b17a1809a4212' into feature/VFS-1127-performance-test-framework-for-client
c5f4a1a Merge branch 'feature/VFS-1142-client-packages' of ssh://git.plgrid.pl:7999/vfs/oneclient into feature/VFS-1127-performance-test-framework-for-client
30da1e5 VFS-1142 Take glog from system.
fd62e27 VFS-1142 Move cmake scripts to cmake/ dir.
46b5639 VFS-1147 Add communication protocol between FUSE client and the server.
7766498 VFS-1145 Remove oneproxy messages.
534ceb6 VFS-1142 Add missing cmake dependencies.
3439428 Merge commit '1c56de6208ccb274c198f6dca20e28d44e4ff407' into feature/VFS-1127-performance-test-framework-for-client
1d5c47a Merge pull request aws#85 in VFS/clproto from feature/VFS-1129-packages-deb-and-rpm to develop
90a4037 Merge commit '85ead06cc1a22386d9534f6e53a2a7dbf7492991' into feature/VFS-1127-performance-test-framework-for-client
62ea25f VFS-1129 Revert gpb update, do not delete priv/vsn.git during clean.
007acd1 VFS-1129 Update gpb.
47e5289 Merge commit '908734e934b8fa3c007f4d814a43cb0f19ebe454' into feature/VFS-1127-performance-test-framework-for-client
c1f591b Merge commit '8004ab7405cc878574b030c964ccdccfea301706' into feature/VFS-1127-performance-test-framework-for-client
fefdeb3 Merge commit '61ab02e72781719e793a5a9c410096826f2c4b9f' into feature/VFS-1127-performance-test-framework-for-client
281c0f3 Merge pull request aws#84 in VFS/clproto from feature/VFS-1115-rpm-packages to develop
010fc07 VFS-1115 Update gpb.
8c38886 Merge commit 'f7841aacbba540583eefa18fea19957abb7f943a' into feature/VFS-1072-fuse-callback-mock
6d2523e Merge pull request aws#83 in VFS/clproto from feature/VFS-1111-communication-layer-unit-tests to develop
8820963 Merge remote-tracking branch 'origin/develop' into feature/VFS-1111-communication-layer-unit-tests
f2a7fb9 Merge commit 'dcc8030bc023ed90d8f6b2c8bbcc79bf3434e001' into feature/VFS-1072-fuse-callback-mock
4b1749d Merge branch 'develop' of ssh://git.plgrid.pl:7999/vfs/oneclient into feature/VFS-1072-fuse-callback-mock
8ab110b VFS-1111 Implement Translator layer tests.
e738d82 VFS-1110 Propagate errors on first connection in client.
40def9b Merge commit '450fcbafc1ad1c5bb018cc42defbab15d51d0021' into feature/VFS-1110-propagate-errors-on-first-oc-handshake
ae65b73 VFS-1072 Fix client compilation error.
7408c67 Merge commit '4e36a21b7fe71989db405f708099c45887e02dc1' into feature/VFS-1072-fuse-callback-mock
b0c0a2d VFS-1072 Implement unit tests for aggregators and streams.
9a0e805 Merge commit 'fd560a82a3bf1333bf0a2ffe07daf34076a44504' into feature/VFS-1072-fuse-callback-mock
9e6c458 VFS-1072 Add unit tests for events.
96409d9 VFS-1072 More asynchronous events.
3a59bc2 Merge commit '6eacd168e35c3a0cb8a9e2552ab5e1c23c603217' into feature/VFS-1093-improve-futures-in-communication
c2a64c9 Merge branch 'develop' of ssh://git.plgrid.pl:7999/vfs/oneclient into feature/VFS-1034-oc-protocol-integration-and-tests
8d93933 VFS-1072 Add handlers for server messages concerning events.
e388ef5 Merge commit '510d229ba5e5274dd810e71ba8333a0f08d13325' into feature/VFS-1072-fuse-callback-mock
bb2e0e2 Merge branch 'feature/VFS-1034-oc-protocol-integration-and-tests' of ssh://git.plgrid.pl:7999/vfs/oneclient into feature/VFS-1072-fuse-callback-mock
ddd9ae9 Merge branch 'develop' of ssh://git.plgrid.pl:7999/vfs/oneclient into feature/VFS-1072-fuse-callback-mock
920f916 Merge commit '07b7972cb15a1a77b7640da6b1ddca4ad8e5275a' into feature/VFS-1034-oc-protocol-integration-and-tests
a11937a Merge commit 'd93cb991c7f69cb22ce018321013c6753c31ba89' into feature/VFS-1056-several-improvements-to-docker-scripts
42d8e36 Merge commit '6179f299ff599d9d1a2efaf271655ad2afd68b6b' into feature/VFS-1034-oc-protocol-integration-and-tests
d36e0f4 Merge commit '356da66a3e2302de252d1944d416142596098fe1' into feature/VFS-1034-oc-protocol-integration-and-tests
38f669d Merge branch 'develop' of ssh://git.plgrid.pl:7999/vfs/oneclient into feature/VFS-1034-oc-protocol-integration-and-tests
c20cead Merge commit '3762404702239e1bbf8eb88e1025ec2b1501204e' into merge_helpers
8385906 Merge commit 'bc24de354ab4cf7a845480229c0536010f399b46' into feature/VFS-1016-new-messages-handling-with-streaming
1b807c3 Merge pull request aws#82 in VFS/clproto from feature/VFS-1098-dialyzer-works-for-gr to develop
d67ad39 VFS-1098 Apply recommended changes.
100ef2f Merge branch 'feature/VFS-1016-new-messages-handling-with-streaming' of ssh://git.plgrid.pl:7999/vfs/oneclient into feature/VFS-1034-oc-protocol-integration-and-tests
433c7cd Merge commit '3a8ce283460a415eeccadd039f781bbf4fab3e64' into feature/VFS-1016-new-messages-handling-with-streaming
36d56fe VFS-1098 Generating Erlang NIFs.
6268a5f VFS-1098 Add oneproxy messages.
d657d2e VFS-1098 Change Protocol Buffers compiler.
0b8a612 VFS-1098 Create rebar application.
1861cd4 Merge pull request aws#80 in VFS/clproto from feature/VFS-1016-new-messages-handling-with-streaming to develop
905419b Merge commit 'f50b65662ff4840c849b11bf677b22ff3ef25b81' into feature/VFS-1034-oc-protocol-integration-and-tests
e5f6435 VFS-1016 Add new communication stack to oneclient.
90fadd2 Merge commit 'bc4d705dafd1d6eb7cc79a4e14f1ab5ea60b500f' into feature/VFS-1016-new-messages-handling-with-streaming
d4ea68b Merge commit '5369641d1ca1b989f1d9594768f5fefae0566332' into feature/VFS-1016-new-messages-handling-with-streaming
ccd8e29 Merge commit '0af6986221cf900ce030273c87e6c0ef23ca4751' into feature/VFS-1016-new-messages-handling-with-streaming
bb9954e Merge remote-tracking branch 'origin/feature/VFS-1034-oc-protocol-integration' into feature/VFS-1016-new-messages-handling-with-streaming
2c3dbba VFS-1034 Merge develop.
a5acf7c Merge pull request aws#78 in VFS/clproto from VFS-1035-Add-CMakeLists-to-protocol to develop
690de64 Merge pull request aws#79 in VFS/clproto from feature/VFS-1037-op-communicator-performance-test to develop
3800374 VFS-1037 naming changes
d1ba29d VFS-1037 doc
292f02e VFS-1037 repair invalid imports
845b3b6 VFS-1037 protocol version messages added as oneof client/server message
c03a2a5 VFS-1037 rename ping_messages to diagnostic_messages,add 'GetProtocolVersion' message
b8393dd VFS-1037 rename ping_messages to diagnostic_messages,add 'GetProtocolVersion' message
9899db7 VFS-1037 doc update
7a1ea8f VFS-1016 Improve protocol.
684ad1b Merge pull request aws#77 in VFS/clproto from VFS-1035-Add-CMakeLists-to-protocol to feature/VFS-1034-oc-protocol-integration
4d96944 Merge commit 'e3e9754d912132968285e58286f3f5436c48600d' as 'helpers'
be6f29f VFS-1035 Rewrite CMakeLists to allow building helpers as subproject.
f53a2c5 VFS-1034 Fix protocol compilation.
803f77a VFS-1037 Data message
cafd2cc ping messages
c421abf Merge pull request aws#76 in VFS/clproto from feature/VFS-1009-op-new-protocol-handler to develop
33a8317 beautify protocol v2
4c8508a beautify protocol
8584c8a VFS-997 Add stream message and descriptions + refactoring.
4b27927 change type od message_id from uint64 to bytes
9423229 change handshake message
e63b893 certificate msg extended
5f3db6c remove header
6f2b815 remove HandshakeAcknowledgement
2d2761d typo fix
2e5237e new handshake messages
2ea50b8 VFS-997 Extend protocol messages.
cbe54db Merge branch 'feature/VFS-1009-op-new-protocol-handler' of ssh://git.plgrid.pl:7999/vfs/clproto into feature/VFS-1005-new-protocol-oc-op
2b37656 rename 'oneof' messages
0069f68 add new proto file aggregating server and client messages
cfb51b4 remove HandshakeRequest data
2b72803 VFS-997 Add communication messages.
5ecbf14 Merge pull request aws#75 in VFS/clproto from feature/VFS-1005-new-protocol-oc-op to develop
fcd7b8b VFS-1005 Apply recommended changes.
b73c8bd VFS-1005 Minor fix for ServerMessage.
27bde46 VFS-1005 Change wrapping message structure.
613c3a8 VFs-1005 Add partial message mechanism.
50e3537 VFS-1005 Fix Erlang compilation errors.
6260815 VFS-1005 New protocol first implementation.
4bf6ec3 Merge pull request aws#68 in VFS/clproto from feature/VFS-960-access-to-fiemaps to develop
cbdfa01 GetFileBlockMap change uuid to logical name
a61592d GetFileBlockMap and FileBlockMap messages
d5e2d40 Merge pull request aws#67 in VFS/clproto from feature/VFS-936-async-update-for-file-attributes to develop
c84f2f9 VFS-936 add uuid field to file attributes
6607496 Merge pull request aws#66 in VFS/clproto from feature/VFS-931-fsmap-integration-in-fuse-client to develop
7d8a5eb Merge branch 'develop' of ssh://git.plgrid.pl:7999/vfs/clproto into feature/VFS-931-fsmap-integration-in-fuse-client
5d9b1b7 Merge pull request aws#65 in VFS/clproto from feature/VFS-932-block-info-in-events to develop
924cd10 VFS-931 Update BlocksAvailable message.
85b835c VFS-931 Add UpdateFileBlockMap message.
7e352e4 VFS-932 Change event message.
d30494b VFS-932 Change event message.
6df0c5b VFS-932 Change event message.
b1dbeec VFS-932 Add block properties to event message.
8f9daaa Merge pull request aws#64 in VFS/clproto from feature/VFS-921-rtransfer-goes-to-fslogic to develop
8cffa61 remove relative truncate
aae8331 add size_relative flag to FileTruncated message
a3614af typo fix
b129904 FileTruncated message
527ce4e FileBlockModified message
97fb9d7 SynchronizeFileBlock message
fbf1457 Merge pull request aws#59 in VFS/clproto from feature/VFS-888-map-files-to-blocks-for-fuse-and to develop
9e59d72 Merge remote-tracking branch 'origin/develop' into feature/VFS-888-map-files-to-blocks-for-fuse-and
68c7f87 VFS-888 Set 'blocks' as a repeated field.
eec028d Merge pull request aws#58 in VFS/veilprotocol from feature/VFS-858-new-cdmi-features-user-requirements to develop
4ecf392 VFS-888 Change identification fields of RequestFileBlock.
606de6b VFS-888 Add block-related messages and message fields.
96e3bfa Merge branch 'develop' into feature/VFS-858-new-cdmi-features-user-requirements
320d88c add acl flag
a8bc820 Merge pull request aws#57 in VFS/veilprotocol from feature/VFS-837-veil-to-onedata to develop
98fd52a VFS-837 Final renaming.
1351802 Merge pull request aws#56 in VFS/veilprotocol from feature/VFS-837-veil-to-onedata to develop
8fec391 VFS-837 Make onedata start with an uppercase letter.
d77f98f VFS-837 Refactor readme.
d7ea703 VFS-837 Rename namespace.
0a96244 VFS-837 Change from 'veil' to 'onedata'.
6751fe1 children count messages
21b6448 new acl messages
b7ad0a7 Merge pull request aws#54 in VFS/veilprotocol from feature/VFS-830-dokladne-przejrzenie-dokumentacji to develop
947a614 Merge branch 'develop' into feature/VFS-830-dokladne-przejrzenie-dokumentacji
cd83847 turn back develop changes
6ffbe83 Merge pull request aws#53 in VFS/veilprotocol from feature/VFS-828-zmiana-sposobu-uwierzytelnienia-tokenem to develop
2c2fe29 Merge pull request aws#50 in VFS/veilprotocol from feature/VFS-829-move-between-providers to develop
c1958c5 Merge pull request aws#51 in VFS/veilprotocol from master to develop
bbbbbaa VFS-828 Remove identity field in HandshakeRequest.
d6c8b3a VFS-829: fix typo
52aeab3 revert newest develop changes
b8a16f8 extended Attrs api
f1a5e5c Merge pull request aws#49 in VFS/veilprotocol from feature/VFS-829-move-between-providers to develop
278cec8 Merge pull request aws#48 in VFS/veilprotocol from feature/VFS-820-zastapic-obecne-checki-uprawnien to develop
2c6199a Merge pull request aws#47 in VFS/veilprotocol from feature/VFS-781-uwierzytelnienie-klienta-przy-pomocy to develop
ab8da14 VFS-829: fix compile
b0a4b59 VFS-829: fix compile
d1bc237 VFS-829: add DirEntry to protocol
57ef0e7 VFS-829: add DirEntry to protocol
61faf51 VFS-820, change message name
a8472c1 Merge branch 'feature/VFS-781-uwierzytelnienie-klienta-przy-pomocy' of ssh://git.plgrid.pl:7999/vfs/veilprotocol into feature/VFS-820-zastapic-obecne-checki-uprawnien
9cb05c4 VFS-820, add CheckPerms message
bdf9d21 VFS-781 Fix protocol.
2202298 Merge remote-tracking branch 'origin/develop' into feature/VFS-781-uwierzytelnienie-klienta-przy-pomocy
e0922ca Merge pull request aws#46 in VFS/veilprotocol from feature/VFS-784-obsuga-cdmi_capabilities to develop
4cd3381 VFS-781 Add an identity field for handshake request.
9440a98 GetFileUuid and FileUuid messages added
8dcf62c Merge pull request aws#45 in VFS/veilprotocol from feature/VFS-754-dostep-zdalny-do-innego-providera to develop
8590cc1 VFS-754: add cluster proxy getattr
47b8904 VFS-754: add cluster proxy getattr
0de5be7 Merge remote-tracking branch 'origin/develop' into feature/VFS-754-dostep-zdalny-do-innego-providera
cfbaf77 VFS-754: add message decoder to answer message
ef27ce5 Merge pull request aws#40 in VFS/veilprotocol from release-1.0 to develop
a03f86a Merge pull request aws#39 in VFS/veilprotocol from release-1.0 to master
939895c Merge pull request aws#38 in VFS/veilprotocol from bugfix/VFS-751-release-1.5-wypuszczony to release-1.0
e4dc26e Release notes updatd
8670fb4 Merge pull request aws#37 in VFS/veilprotocol from bugfix/VFS-751-release-1.5-wypuszczony to release-1.0
b77373b Release notes added
f1355db Merge pull request aws#36 in VFS/veilprotocol from feature/VFS-749-clusterproxy-uzywany-gdy-brak-accessu to develop
4dc1ed0 VFS-754: add global user id to cluster message
84322ed VFS-754: add ProviderMsg
f5394d9 VFS-754: add access tokent to cluster message
4d44532 Merge branch 'feature/VFS-749-clusterproxy-uzywany-gdy-brak-accessu' into feature/VFS-754-dostep-zdalny-do-innego-providera
944861f VFS-754: make space_id optional
0f61799 VFS-749: add ClusterProxy context info
d17ccb8 VFS-754: add space_id to RFM
76c5dff Merge pull request aws#35 in VFS/veilprotocol from feature/gui_release_to_develop to develop
b41dd32 Merge branch 'release-1.0' into feature/gui_release_to_develop
41d9a76 Merge pull request aws#34 in VFS/veilprotocol from feature/VFS-731-wysyanie-poziomu-uprawnien-pliku to release-1.0
184b766 add mode to CreateFile message
25188df Merge pull request aws#33 in VFS/veilprotocol from release-1.0 to develop
37b1a8d Merge pull request aws#32 in VFS/veilprotocol from bugfix/VFS-592-dostep-do-pliku-niezgodny-z-ustawionym to release-1.0
68962ce default open_mode msg changed from "none" to ""
fe42fe9 Merge branch 'release-1.0' into bugfix/VFS-592-dostep-do-pliku-niezgodny-z-ustawionym
74f49cb Merge pull request aws#31 in VFS/veilprotocol from bugfix/VFS-608-niemozliwosc-zarejestrowania-DN to release-1.0
681cdfe open_mode optional parameter added to GetFileLocation msg
e5424af VFS-608, fix naming
194e6d0 VFS-608, add fields to proto to handle cert verification
d1395fb VFS-608, add error description field to Answer record
a459825 Merge pull request aws#30 in VFS/veilprotocol from VFS-555 to develop
5677ce6 [VFS-555] typo fix
0862a00 [VFS-555] EventStreamConfig extended
e420048 Merge pull request aws#27 in VFS/veilprotocol from VFS-489 to master
ee7b249 VFS-489 Message fix.
2263e19 VFS-489 Make some message fields required.
af6e6b8 VFS-489 Create more specific storage test messages.
e86b601 VFS-489 Direct IO storage message refactored.
ceaedf2 VFS-489 Direct IO storage message added.
ec8208e VFS-489 Storage test messages refactored.
fdf35b6 VFS-489 Storage test messages added.
4db85aa Merge pull request aws#26 in VFS/veilprotocol from VFS-482 to master
b07e7bd Merge branch 'VFS-482' of ssh://git.plgrid.pl:7999/vfs/veilprotocol into VFS-482
abc677e Generic event message added
f517338 Merge pull request aws#24 in VFS/veilprotocol from VFS-443-centralny-logger-dla-clientow to master
81fd5c1 Merge pull request aws#25 in VFS/veilprotocol from VFS-441 to master
680c66c [VFS-441] comment added
c71b9ea VFS-443 Add logging protocol.
ecae432 [VFS-441] EventTransformer added
cf0ed2e Merge pull request aws#23 in VFS/veilprotocol from VFS-441 to master
26e569e [VFS-441] pushmessage message removed
578c1e9 [VFS-441] Comments for EventStreamConfig
dd4be71 [VFS-441] eventaggregatorconfig message extended
37c9a41 [VFS-441] client fetch event producer configuration on startup
06caeb6 [VFS-441] protocol buffer messages for events improved
ce371ef [VFS-413] messages for events subscription added
9d289fd Merge pull request aws#22 in VFS/veilprotocol from VFS-442 to master
e0b9ed9 VFS-442 Add answer field to StatFSInfo message.
b001a78 Merge pull request aws#21 in VFS/veilprotocol from VFS-442 to master
aef57ff VFS-442 Merge veilprotocol messages.
7e36203 VFS-442 GetFilesSize and FilesSizeInfo messages added.
0aa0848 VFS-442 GetQuota and QuotaInfo messages added.
1e45be5 Merge pull request aws#20 in VFS/veilprotocol from VFS-435-problem-z-wyswietlaniem-duzych-plikow to master
32aaf5e another changes in size type from int32 to int64
45b786e size type changed from int32 to int64
87ac2f6 Merge pull request aws#19 in VFS/veilprotocol from VFS-240 to master
995da9b [VFS-240] Message CreateFileAck changed
66c68e3 [VFS-240] CreateFileAck message added
8548237 Merge pull request aws#18 in VFS/veilprotocol from VFS-356 to master
8a2eb34 ChangePermsAtStorage message added
ec4d3e4 Merge pull request aws#17 in VFS/veilprotocol from VFS-211 to master
1402c88 VFS-211 Links field to files attribute added.
e808f04 Merge pull request aws#16 in VFS/veilprotocol from VFS-264 to master
58d5334 Merge pull request aws#15 in VFS/veilprotocol from VFS-252 to master
d11ae1d Merge pull request aws#13 in VFS/veilprotocol from VFS-260 to master
2645d9b Merge pull request aws#12 in VFS/veilprotocol from VFS-167 to master
34bba96 Merge pull request aws#11 in VFS/veilprotocol from VFS-162 to master
5f631d2 Merge pull request aws#10 in VFS/veilprotocol from VFS-159 to master
b77991a Merge pull request aws#9 in VFS/veilprotocol from VFS-162 to master
b1578ab Merge pull request aws#8 in VFS/veilprotocol from VFS-156 to master
41bc0be Merge pull request aws#7 in VFS/veilprotocol from VFS-127 to master
4781952 Merge pull request aws#6 in VFS/veilprotocol from VFS-113 to master
11d5d1a Merge pull request aws#5 in VFS/veilprotocol from VFS-101 to master
72bf94c fuse messages updated
1956dbb Merge pull request aws#4 from VFS-80,85 to master
9b65f25 FileChildren fix
1ff7d28 Merge pull request aws#3 from VFS-80 to master
cb54b30 decoder fields corrected
4048cfb Merge branch 'VFS-80' of ssh://git.plgrid.pl:7999/VFS/veilprotocol into VFS-80
b9a67a5 Added decoder_name and messages for directory creation and location validity info
9f660cf Added decoder_name and messages for directory creation and location validity info
1b7b40b Merge pull request aws#1 from VFS-80 to master
295be28 fuse messages
e85f681 fuse messages
6dcc3aa Initial Commit

git-subtree-dir: helpers
git-subtree-split: 6280b36aa0a8fc1277758cd33077ac0b35df1398
@chebz
Copy link

chebz commented Jun 20, 2016

I can't get this to work... I have a char* array with some eof characters (.png file, but I would like not use FStream), I can't figure out how to send it. I can't use StringStream, because of eof. The solution that was originally suggested by OP doesn't work for me, I just get timeout error.

I've also tried creating IOStream like described here: http://stackoverflow.com/questions/7781898/get-an-istream-from-a-char

But that doesn't work either.

@JonathanHenson
Copy link
Contributor

This is currently being reviewed internally, but I'd love your thoughts while we're at it:

https://s3.amazonaws.com/aws-sdk-cpp-demos/transferRewrite.diff

Notes:

Deleted TransferClient and everything related to it. Added a simpler interface, TransferManager. TransferHandle is the other half of the control interface which is what the user would use to control their transfers. I added a few utilities to core to support the changes. Largely a generic queue locker, and a std::stream_buf that runs off of a preallocated buffer.

Later I'll be adding parallel downloads (harder to pull off), and directory synchronization, but this has feature parity with the original TransferClient.

Major performance differences:
All stream memory is preallocated (so no more allocation during the transfer)
Threading model is simplified.
No busy waits

Things I'm not happy about:
Mutex heavy
I discovered that we aren't handling Http/Continue correctly on Windows while testing. however, this isn't a regression from the previous code base so I'll add it to the backlog.
For multi-part uploads, we only update the transfer progress for each part because it was too complicated to back out updates if a part fails.

Testing notes:
all unit tests, and integration tests pass.
Uploads saturate the nic (which was my goal)
Downloads, since they aren't in parallel, still need work from a performance standpoint.

@hailbird
Copy link

hailbird commented Dec 6, 2016

S3Client has no member named "SetRange", right?

error: 'class Aws::S3::S3Client' has no member named 'SetRange'
  context->client->SetRange(range.str());
                   ^

@JonathanHenson
Copy link
Contributor

JonathanHenson commented Dec 6, 2016 via email

@hailbird
Copy link

hailbird commented Dec 7, 2016

I tried it before I asked the question, but failed. See issue-366 for detail. I checked the signature is correct by enhancing libs3 and do the same thing. The enhaced libs3 with v4 support can get the range of the object.

JonathanHenson added a commit that referenced this issue Dec 22, 2016
Added redirection js and a generator script to be run at doc gen time.
@RPCPP
Copy link

RPCPP commented Jan 20, 2017

Hi,

In advance sorry if this is not the right thread for my question.

I have a question about TransferManager UploadFile function. I am able to transfer 5Mb file, but when I tried to upload bigger file 7MB or more. I get "[WARN]AWSErrorMarshaller [72860] Encountered Unknown AWSError
XML_ERROR_MISMATCHED_ELEMENT
Unable to generate a proper httpResponse from the response stream. Response code: 503:" error.

What does this error means?

@AcidLeroy
Copy link

I am having similar problems with the AwsTransfer library, particularly on the "DownloadFile" function. Ideally, I do not want to write to a file and then have to read the contents back into memory. Your integration tests here: https://github.com/aws/aws-sdk-cpp/blob/master/aws-cpp-sdk-transfer-tests/TransferTests.cpp#L194-L235 check the uploaded file by downloading to an FStream. I am able to successfully do this; however, I have not been able to successfully implement the this to an std::stringstream. For small transfers (less than 20MB) I don't seem to have problems, but when I increase the size to 21MB, I no longer get the entire file. Here is my attempt:


std::shared_ptr<std::stringstream> AwsTransfer::SyncDownload(const std::string& bucket, const std::string& key) {
    std::shared_ptr<std::stringstream> contents = std::make_shared<std::stringstream>();
    std::shared_ptr<TransferHandle> request = m_transfer->DownloadFile(bucket, key, [&contents]() {
        std::iostream* out = Aws::New<std::iostream>(allocationTag, contents->rdbuf());
        return out;
    });

    request->WaitUntilFinished();

    return contents;
}

Do I need to preallocate the size of the stringstream before passing?

@taddygrrr
Copy link

The answer to the original question isn't correct or helpful (ie, use transfer manager). In my experience, you cannot use stringstream to upload binary data; at least, not in the way documented above, with pubsetbuf, pubseekpos and seekg(0).

Use boost bufferstream. See #533

@JonathanHenson
Copy link
Contributor

we're about to kill of std::iostream usage in favor of a simpler interface. Iostream will be supported but wrapped. Hopefully this will make the whole issue go away.

@JonathanHenson
Copy link
Contributor

kill off*

@taddygrrr
Copy link

So, checking back; is there a simpler interface? Seems like people were still having same problem in January 18. See #785.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
guidance Question that needs advice or information.
Projects
None yet
Development

No branches or pull requests