Commit Graph

17 Commits

Author SHA1 Message Date
Ryan Nowak b00c02f320
Throw DaprException for errors in DaprClient (#561)
* Unify DaprException classes

We have two classes called DaprException.

It makes way more sense for us to have DaprException in the Dapr.Client
project, and it also makes sense for Dapr.Actors to reference
Dapr.Client (it did not for some reason).

There's some additional cleanup of code related to
JsonSerializerOptions. The Actors code was not referencing the 5.0.0
version of the package, and so it's now got access to some new stuff,
so we could remove a polyfill.

* Throw DaprException for errors

Fixes: #516

This updates all of the locations in DaprClient that handle networking
or serialization to throw DaprException instead of the underlying
exception type. This allows for simpler error handling.

* Add one more unit test
2021-01-26 20:05:17 -08:00
Ryan Nowak 9ca4a43cc7
Remove automatic protobuf conversion (#557)
Fixes: #442

We're making it absolutely clear which methods do JSON (most of them)
and which do gRPC. We have the ability to do both 'raw' functionality
and optimized paths for JSON+HTTP and gRPC+Protobuf for invoke. We're
not going to add 'raw' or Protobuf support for other building blocks
until there's a specific use case.

For the most part the functionality that's being removed here isn't used
anymore since that was part of the invoke changes.
2021-01-22 17:05:04 -08:00
Ryan Nowak 9748ca0a82
Simplify service invocation APIs (#555)
Fixes: #549

This change mixes up the service invocation APIs to reflect some changes
that are coming down the pipe in dapr/dapr#2683.

We're now using HTTP's semantics and JSON for the main functionality in
`InvokeMethodAsync`. This means that the error handling is simplified
and base on HTTP's status codes rather than trying to abstract over HTTP
and gRPC's different error models. This also means that we're free to
expose HttpRequestMessage and related types in the API because it's no
longer an abstraction.

You can still use `InvokeMethodAsync` to invoke gRPC services, but you
will get a status code in the response, and it will expect JSON, etc,
similar to how gRPC gateway works.

In addition to that we're added `InvokeMethodGrpcAsync` for cases where
you really want *gRPC's* semantics. These methods do Protobuf
serialization, as is a natural choice for gRPC. I do not recommend using
this approach to invoke HTTP services.

---

I also mad updates and improvments to various infrastructure where
necessary (like InvocationException). Also, the gRPC sample in the repo
now uses the new `InvokeMethodGrpcAsync` APIs.
2021-01-22 16:28:20 -08:00
vinayada1 3ab5e7cde3
handle empty etag (#553)
* handle empty etag

Co-authored-by: Ryan Nowak <nowakra@gmail.com>
2021-01-22 10:24:06 -08:00
Carlos Mendible 1a51570aa6
DaprClient: Implementing GetBulkSecretAsync (#511) 2021-01-21 15:35:24 -08:00
vinayada1 7799c9f130
do not swallow all exceptions (#531)
* do not swallow all exceptions



Co-authored-by: Ryan Nowak <nowakra@gmail.com>
Co-authored-by: Per Ökvist <perokvist@users.noreply.github.com>
Co-authored-by: Sander Molenkamp <a.molenkamp@gmail.com>
2021-01-14 10:59:49 -08:00
Per Ökvist 50dec32e8a
state operation overload with meta #412 (#470)
* state operation overload with meta #412

* added metadata to bulk state

* getStateAndEtag with metadata test

* an -> a keyvalue pair

* Added GetBulkStateAsync_ValidateRequest

* update

* update

* removed backup files

* metadata docs

* state store metadata docs

Co-authored-by: Ryan Nowak <nowakra@gmail.com>
2021-01-08 11:45:34 -08:00
Ryan Nowak 776156298e
Apply linting suggestions (#492)
We've had a list of linting-related messages piling up for a while now.
This change bulk-applies these suggestions with usually relate to
simplification or use or newer language features like ??=

The only changes I did manually here are:

    Removing some usage of Task.GetAwaiter().GetResult() where it was
    just laziness
    Removing some dead code in methods and parameters of internal APIs.
2021-01-04 17:35:57 -08:00
vinayada1 80f2319fe4
Handle rpc exception thrown for operation cancellation (#455)
* Handle cancelled cancellation token

* add UTs

* add secrets UT

* fix review comments

* invoke and await in one call

* fix await

* Add test for multiple calls to UseActors (#459)

Fixes: #411

The bug was actually addressed in PR #453 - this change adds a test that
verifies that we actually fixed it.

Co-authored-by: vinayada1 <28875764+vinayada1@users.noreply.github.com>

* use grpcChannelOptions ThrowOperationCanceledOnCancellation

* Add doc

* add link to doc

Co-authored-by: Ryan Nowak <nowakra@gmail.com>
2020-11-19 11:22:33 -08:00
Ryan Nowak aa682eb462
Remove async void in tests (#447)
Fixes: #446

`async void` is almost always a bug in server-side programming. If these
tests were doing any networking then they would encounter concurrency
bugs or crash in the event of an exception.

Co-authored-by: vinayada1 <28875764+vinayada1@users.noreply.github.com>
2020-10-29 15:54:17 -07:00
vinayada1 e93357cb9d
State Transaction API changes (#385)
* State Transaction API changes
* Add the optional fields as per API reference
* Fix review comments
* Added transactional state api to sample
2020-09-17 16:12:50 -07:00
Yaron Schneider 6671ab020c
Add bulk get to client (#372)
* Add bulk get to client

* change params, return type, class to struct

* change IList to IReadOnlyList, make parallelism nullable

* change GetBulkItem to BulkStateItem
2020-08-17 09:24:35 -07:00
Aman Bhardwaj b6329539bc
Remove retry options from state apis. (#361)
* Removing retry options for state apis.

* getting latest proto from dapr/dapr
2020-08-04 14:32:16 -07:00
Christian Kaps fdf17b7dbb
Use protobuf packaging for the Any type (#358)
* Use protobuf packaging for the Any type

This pull request implements two converters which help with the type conversion between arbitrary types and the protobuf `Any` type. The C# protobuf library provides a mechanism to pack or unpack protobuf messages to `Any`. It provides the methods `Any.Pack` and `Any.Unpack` to serialize/deserialize messages based on `Google.Protobuf.IMessage`. For types that are not based on `Google.Protobuf.IMessage`, the existing JSON serialization/deserialization will be used.

I've also cleaned the existing codebase a little bit.

Fixes #268

* Fix suggested changes
2020-08-03 10:15:23 -07:00
Sander Molenkamp f3b5c7db81
Update client to latest proto files (#315)
* Update client to latest proto files

* Update PublishEventApiTest.cs

Merge conflict.

Co-authored-by: Leon Mai <lemai@microsoft.com>
2020-05-29 10:35:53 -07:00
Leon Mai 44ca6496d8
Move to new invoke proto, specify contenttype in response to the dapr… (#295)
* Move to new invoke proto, specify contenttype in response to the dapr/config message, clarify sample

* Update for additional proto changes

* cr

Co-authored-by: LM <lemai>
2020-04-30 11:47:29 -07:00
Aman Bhardwaj 51fc48fb74
Adding & enhancing client apis over gRPC (#244)
* adding IDAprClient interface

* Adding DaprClientBuilder and adding methods for Publish

* updating the method name for publish

* Adding unit tests for publishevent api

* Removing individual clients for publish

* Renaming base class to DaprClient and implementation calss to DparClientGrpc

* Moving State api to grpc and adding helpers to unittest grpc calls.

* More DaprClient logic

* metadata, etag, options, etc are optional

* Revert "metadata, etag, options, etc are optional"

This reverts commit ea5dc12c5d.

* Default params, 2 new Try- methods, overload refactor for InvokeMethodAsync

* Move some classes/enums to different files.  Documentation

* Code refactor and changing tests to use grpc

* Adding tests with state options

* Adding test for getting etag and state

* More refactoring and adding INvokeBinding test

* Fixing tests and tidying up things.

* Updating solutions for renamed project

* Updating projects for rename.

* Oneclient secret (#245)

* ADding Secret Apis

* Using Task for secret

* Format (#242)

* Updating samples.slm

* awaint the call to grpc in common method so that common error handling can be done there.

* Addressing review comments

* fixing test.sln

* updating prod.sln

* Addressing review comments from James.

* Add doc and example for method invocation on http app

* Updating arg validation.

* Updating example.

Co-authored-by: LM <lemai>
Co-authored-by: Carlos Mendible <cmendible@gmail.com>
2020-03-09 20:52:12 -07:00