aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/python/grpcio/grpc/_cython/_cygrpc/completion_queue.pyx.pxi
Commit message (Collapse)AuthorAge
* Refactor server deallocationGravatar Eric Gribkoff2018-12-17
|
* Support gRPC Python client-side fork with epoll1Gravatar Eric Gribkoff2018-08-22
| | | | | | | | | | | | | | | | | A process may fork after invoking grpc_init() and use gRPC in the child if and only if the child process first destroys all gRPC resources inherited from the parent process and invokes grpc_shutdown(). Subsequent to this, the child will be able to re-initialize and use gRPC. After fork, the parent process will be able to continue to use existing gRPC resources such as channels and calls without interference from the child process. To facilitate gRPC Python applications meeting the above constraints, gRPC Python will automatically destroy and shutdown all gRPC Core resources in the child's post-fork handler, including cancelling in-flight calls (see detailed design below). From the client's perspective, the child process is now free to create new channels and use gRPC.
* Keep Core memory inside cygrpc.Channel objectsGravatar Nathaniel Manista2018-05-02
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This removes invocation-side completion queues from the _cygrpc API. Invocation-side calls are changed to no longer share the same lifetime as Core calls. Illegal metadata is now detected on invocation rather than at the start of a batch (so passing illegal metadata to a response-streaming method will now raise an exception immediately rather than later on when attempting to read the first response message). It is no longer possible to create a call without immediately starting at least one batch of operations on it. Only tests are affected by this change; there are no real use cases in which one wants to start a call but wait a little while before learning that the server has rejected it. It is now required that code above cygrpc.Channel spend threads on next_event whenever events are pending. A cygrpc.Channel.close method is introduced, but it merely blocks until the cygrpc.Channel's completion queues are drained; it does not itself drain them. Noteworthy here is that we drop the cygrpc.Channel.__dealloc__ method. It is not the same as __del__ (which is not something that can be added to cygrpc.Channel) and there is no guarantee that __dealloc__ will be called at all or that it will be called while the cygrpc.Channel instance's Python attributes are intact (in testing, I saw both in different environments). This commit does not knowingly break any garbage-collection-based memory management working (or "happening to appear to work in some circumstances"), though if it does, the proper remedy is to call grpc.Channel.close... which is the objective towards which this commit builds.
* Elide cygrpc.TimespecGravatar Nathaniel Manista2018-01-10
|
* Reform cygrpc.OperationTag and cygrpc.EventGravatar Nathaniel Manista2017-12-31
| | | | | | Rather than single classes they are now broken up into class families with each class containing only those fields and methods that are needed in the context in which the class is used.
* Elide cygrpc.OperationsGravatar Nathaniel Manista2017-12-08
|
* Streamline metadata in gRPC PythonGravatar Nathaniel Manista2017-12-08
|
* Fix metadata memory leakGravatar Nathaniel Manista2017-09-09
| | | | | | | | | | | | | | | | | | | | | | | | | | | The gRPC Core has two styles for passing metadata: as an integer count along with a grpc_metadata* pointer, which is used for passing metadata into the core, and as a grpc_metadata_array, which is used for passing metadata out of the core. The Cython layer of gRPC Python was using a single data structure wrapping grpc_metadata_array for both purposes, but this was complex because the core manages the slices contained in grpc_metadata_array objects (at least those of which it is aware), so the Cython layer had to keep track of whether or not the core was aware of the slices it was using (and it was also defective, leaking slices). This is solved by realigning with the Cython layer’s intended design of mirroring as closely as possible in Python the gRPC Core API: we use one structure for passing metadata into the core (what is now called cygrpc.Metadata) and second, different structure for receiving metadata out of the core (what was called cygrpc.Metadata but is now cygrpc.MetadataArray, reflecting that it wraps the core’s grpc_metadata_array). All bug fixes should contain added tests preventing regression but this doesn't because I don't know at this time how to write a does-not-leak test for Python that fits well into our existing body of tests. Phooey. Thanks to Dominik Janků (djanku@email.cz) for investigation and an earlier draft of a solution.
* auto-fix most of licensesGravatar Jan Tattermusch2017-06-08
|
* Fix Python interop testsGravatar Ken Payson2017-05-01
|
* Python changesGravatar Sree Kuchibhotla2017-03-22
|
* Python: Completion queue creation API changesGravatar Sree Kuchibhotla2017-03-06
|
* Revert "Revert "Metadata handling rewrite""Gravatar Craig Tiller2017-01-23
| | | | This reverts commit 5e01e2ac977655aa074faf7fde0a74298f5e4c55.
* Revert "Metadata handling rewrite"Gravatar Craig Tiller2017-01-20
|
* Fix Python memory errorsGravatar Masood Malekghassemi2017-01-19
| | | | ... but for real this time.
* Paper-over Python errorsGravatar Masood Malekghassemi2017-01-13
| | | | | | | This reads directly off of the slices rather than ref'ing and unref'ing them. There's likely some silliness w.r.t. interned slices and references to them outliving their associated call objects, but we are just ignoring that for now.
* Switch init/shutdown: lib-wide -> per-objectGravatar siddharthshukla2016-08-05
| | | | Incremental changes towards PyPy support.
* Hold onto the GIL in __dealloc__ functionsGravatar Ken Payson2016-07-11
| | | | | | | When a child thread triggers __dealloc__ as part of a thread being joined, the thread is already considered to be "joined", and so releasing the GIL can allow the main thread to proceed to exit, which introduces shutdown race conditions/memory leaks.
* Added check for signals in poll()Gravatar Ken Payson2016-06-13
| | | | Also removed the unused pluck() function
* Update copyrightsGravatar Craig Tiller2016-03-31
|
* Don't hold the GIL when calling anything in coreGravatar Masood Malekghassemi2016-03-15
|
* Release GIL in queue __dealloc__Gravatar Masood Malekghassemi2016-03-09
|
* Maintain correct queue invariants against coreGravatar Masood Malekghassemi2016-03-02
|
* Fixing copyrights.Gravatar Nicolas "Pixel" Noble2016-03-01
|
* Address some memory hazards in Cython codeGravatar Masood Malekghassemi2016-02-29
| | | | | | Some __dealloc__ methods were calling Python methods, and some references were being dropped on the floor instead of threaded through gRPC core.
* Include core in Python distributionGravatar Masood Malekghassemi2016-01-07