sentry-arroyo 2.32.0__tar.gz → 2.32.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. {sentry_arroyo-2.32.0/sentry_arroyo.egg-info → sentry_arroyo-2.32.2}/PKG-INFO +1 -1
  2. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/processor.py +1 -1
  3. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/strategies/run_task_with_multiprocessing.py +12 -4
  4. sentry_arroyo-2.32.2/arroyo/utils/metricDefs.json +1 -0
  5. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/utils/metric_defs.py +2 -3
  6. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2/sentry_arroyo.egg-info}/PKG-INFO +1 -1
  7. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/setup.py +1 -1
  8. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/processing/strategies/test_run_task_with_multiprocessing.py +20 -5
  9. sentry_arroyo-2.32.0/arroyo/utils/metricDefs.json +0 -1
  10. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/LICENSE +0 -0
  11. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/MANIFEST.in +0 -0
  12. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/README.md +0 -0
  13. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/__init__.py +0 -0
  14. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/backends/__init__.py +0 -0
  15. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/backends/abstract.py +0 -0
  16. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/backends/kafka/__init__.py +0 -0
  17. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/backends/kafka/commit.py +0 -0
  18. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/backends/kafka/configuration.py +0 -0
  19. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/backends/kafka/consumer.py +0 -0
  20. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/backends/local/__init__.py +0 -0
  21. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/backends/local/backend.py +0 -0
  22. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/backends/local/storages/__init__.py +0 -0
  23. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/backends/local/storages/abstract.py +0 -0
  24. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/backends/local/storages/memory.py +0 -0
  25. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/commit.py +0 -0
  26. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/dlq.py +0 -0
  27. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/errors.py +0 -0
  28. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/__init__.py +0 -0
  29. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/strategies/__init__.py +0 -0
  30. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/strategies/abstract.py +0 -0
  31. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/strategies/batching.py +0 -0
  32. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/strategies/buffer.py +0 -0
  33. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/strategies/commit.py +0 -0
  34. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/strategies/filter.py +0 -0
  35. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/strategies/guard.py +0 -0
  36. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/strategies/healthcheck.py +0 -0
  37. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/strategies/noop.py +0 -0
  38. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/strategies/produce.py +0 -0
  39. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/strategies/reduce.py +0 -0
  40. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/strategies/run_task.py +0 -0
  41. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/strategies/run_task_in_threads.py +0 -0
  42. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/processing/strategies/unfold.py +0 -0
  43. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/py.typed +0 -0
  44. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/types.py +0 -0
  45. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/utils/__init__.py +0 -0
  46. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/utils/clock.py +0 -0
  47. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/utils/codecs.py +0 -0
  48. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/utils/concurrent.py +0 -0
  49. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/utils/logging.py +0 -0
  50. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/utils/metrics.py +0 -0
  51. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/utils/profiler.py +0 -0
  52. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/arroyo/utils/retries.py +0 -0
  53. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/examples/transform_and_produce/__init__.py +0 -0
  54. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/examples/transform_and_produce/batched.py +0 -0
  55. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/examples/transform_and_produce/script.py +0 -0
  56. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/examples/transform_and_produce/simple.py +0 -0
  57. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/requirements.txt +0 -0
  58. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/sentry_arroyo.egg-info/SOURCES.txt +0 -0
  59. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/sentry_arroyo.egg-info/dependency_links.txt +0 -0
  60. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/sentry_arroyo.egg-info/not-zip-safe +0 -0
  61. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/sentry_arroyo.egg-info/requires.txt +0 -0
  62. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/sentry_arroyo.egg-info/top_level.txt +0 -0
  63. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/setup.cfg +0 -0
  64. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/backends/__init__.py +0 -0
  65. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/backends/mixins.py +0 -0
  66. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/backends/test_commit.py +0 -0
  67. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/backends/test_confluent_producer.py +0 -0
  68. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/backends/test_kafka.py +0 -0
  69. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/backends/test_kafka_producer.py +0 -0
  70. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/backends/test_local.py +0 -0
  71. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/processing/__init__.py +0 -0
  72. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/processing/strategies/__init__.py +0 -0
  73. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/processing/strategies/test_all.py +0 -0
  74. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/processing/strategies/test_batching.py +0 -0
  75. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/processing/strategies/test_buffer.py +0 -0
  76. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/processing/strategies/test_commit.py +0 -0
  77. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/processing/strategies/test_filter.py +0 -0
  78. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/processing/strategies/test_guard.py +0 -0
  79. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/processing/strategies/test_noop.py +0 -0
  80. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/processing/strategies/test_produce.py +0 -0
  81. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/processing/strategies/test_reduce.py +0 -0
  82. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/processing/strategies/test_run_task.py +0 -0
  83. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/processing/strategies/test_run_task_in_threads.py +0 -0
  84. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/processing/strategies/test_unfold.py +0 -0
  85. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/processing/test_processor.py +0 -0
  86. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/test_commit.py +0 -0
  87. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/test_dlq.py +0 -0
  88. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/test_kip848_e2e.py +0 -0
  89. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/test_types.py +0 -0
  90. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/utils/__init__.py +0 -0
  91. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/utils/test_concurrent.py +0 -0
  92. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/utils/test_metrics.py +0 -0
  93. {sentry_arroyo-2.32.0 → sentry_arroyo-2.32.2}/tests/utils/test_retries.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sentry-arroyo
3
- Version: 2.32.0
3
+ Version: 2.32.2
4
4
  Summary: Arroyo is a Python library for working with streaming data.
5
5
  Home-page: https://github.com/getsentry/arroyo
6
6
  Author: Sentry
@@ -497,7 +497,7 @@ class StreamProcessor(Generic[TStrategyPayload]):
497
497
  all_partitions,
498
498
  paused_partitions
499
499
  )
500
- assert self.__consumer.poll(0.1) is None
500
+ assert maybe_message is None
501
501
  else:
502
502
  time.sleep(0.01)
503
503
 
@@ -424,13 +424,16 @@ class RunTaskWithMultiprocessing(
424
424
  point.
425
425
 
426
426
  The metric ``arroyo.strategies.run_task_with_multiprocessing.processes``
427
- shows how many processes arroyo was configured with.
427
+ shows the total number of available processes in the pool. This is recorded
428
+ as a gauge alongside ``batches_in_progress`` so you can calculate the ratio
429
+ of processes in use to total available processes.
428
430
 
429
431
  If those two metrics don't line up, your consumer is not bottlenecked on
430
432
  number of processes. That's a good thing, you want to have some reserve
431
433
  capacity. But it means that increasing ``num_processes`` will not make your
432
434
  consumer faster.
433
435
 
436
+
434
437
  Batching
435
438
  ~~~~~~~~
436
439
 
@@ -602,9 +605,6 @@ class RunTaskWithMultiprocessing(
602
605
  )
603
606
  self.__pool_waiting_time: Optional[float] = None
604
607
  self.__pool_waiting_log_time: Optional[float] = None
605
- self.__metrics.gauge(
606
- "arroyo.strategies.run_task_with_multiprocessing.processes", num_processes
607
- )
608
608
 
609
609
  self.__closed = False
610
610
 
@@ -641,6 +641,10 @@ class RunTaskWithMultiprocessing(
641
641
  end_time - start_time,
642
642
  )
643
643
  self.__batches_in_progress.increment()
644
+ self.__metrics.gauge(
645
+ "arroyo.strategies.run_task_with_multiprocessing.processes",
646
+ self.__pool.num_processes,
647
+ )
644
648
  self.__metrics.timing(
645
649
  "arroyo.strategies.run_task_with_multiprocessing.batch.size.msg", len(batch)
646
650
  )
@@ -835,6 +839,10 @@ class RunTaskWithMultiprocessing(
835
839
  self.__input_blocks.append(new_input_block)
836
840
  self.__output_blocks.append(new_output_block)
837
841
  self.__batches_in_progress.decrement()
842
+ self.__metrics.gauge(
843
+ "arroyo.strategies.run_task_with_multiprocessing.processes",
844
+ self.__pool.num_processes,
845
+ )
838
846
 
839
847
  del self.__processes[0]
840
848
 
@@ -0,0 +1 @@
1
+ {"arroyo.strategies.run_task_with_multiprocessing.batch.size.msg": {"name": "arroyo.strategies.run_task_with_multiprocessing.batch.size.msg", "type": "Time", "description": "Number of messages in a multiprocessing batch"}, "arroyo.strategies.run_task_with_multiprocessing.batch.size.bytes": {"name": "arroyo.strategies.run_task_with_multiprocessing.batch.size.bytes", "type": "Time", "description": "Number of bytes in a multiprocessing batch"}, "arroyo.strategies.run_task_with_multiprocessing.batch.submit.time": {"name": "arroyo.strategies.run_task_with_multiprocessing.batch.submit.time", "type": "Time", "description": "How long it took to submit a batch to multiprocessing"}, "arroyo.strategies.run_task_with_multiprocessing.output_batch.size.msg": {"name": "arroyo.strategies.run_task_with_multiprocessing.output_batch.size.msg", "type": "Time", "description": "Number of messages in a multiprocessing batch after the message transformation"}, "arroyo.strategies.run_task_with_multiprocessing.output_batch.size.bytes": {"name": "arroyo.strategies.run_task_with_multiprocessing.output_batch.size.bytes", "type": "Time", "description": "Number of bytes in a multiprocessing batch after the message transformation"}, "arroyo.consumer.run.count": {"name": "arroyo.consumer.run.count", "type": "Counter", "description": "Number of times the consumer is spinning"}, "arroyo.consumer.invalid_message.count": {"name": "arroyo.consumer.invalid_message.count", "type": "Counter", "description": "Number of times the consumer encountered an invalid message."}, "arroyo.strategies.reduce.batch_time": {"name": "arroyo.strategies.reduce.batch_time", "type": "Time", "description": "How long it took the Reduce step to fill up a batch"}, "arroyo.strategies.run_task_with_multiprocessing.batch.backpressure": {"name": "arroyo.strategies.run_task_with_multiprocessing.batch.backpressure", "type": "Counter", "description": "Incremented when a strategy after multiprocessing applies\nbackpressure to multiprocessing. May be a reason why CPU cannot be\nsaturated."}, "arroyo.strategies.run_task_with_multiprocessing.batch.input.overflow": {"name": "arroyo.strategies.run_task_with_multiprocessing.batch.input.overflow", "type": "Counter", "description": "Incremented when multiprocessing cannot fill the input batch\nbecause not enough memory was allocated. This results in batches smaller\nthan configured. Increase `input_block_size` to fix."}, "arroyo.strategies.run_task_with_multiprocessing.batch.output.overflow": {"name": "arroyo.strategies.run_task_with_multiprocessing.batch.output.overflow", "type": "Counter", "description": "Incremented when multiprocessing cannot pull results in batches\nequal to the input batch size, because not enough memory was allocated.\nThis can be devastating for throughput. Increase `output_block_size` to\nfix."}, "arroyo.strategies.run_task_with_multiprocessing.batch.input.resize": {"name": "arroyo.strategies.run_task_with_multiprocessing.batch.input.resize", "type": "Counter", "description": "Arroyo has decided to re-allocate a block in order to combat input\nbuffer overflow. This behavior can be disabled by explicitly setting\n`input_block_size` to a not-None value in `RunTaskWithMultiprocessing`."}, "arroyo.strategies.run_task_with_multiprocessing.batch.output.resize": {"name": "arroyo.strategies.run_task_with_multiprocessing.batch.output.resize", "type": "Counter", "description": "Arroyo has decided to re-allocate a block in order to combat output\nbuffer overflow. This behavior can be disabled by explicitly setting\n`output_block_size` to a not-None value in `RunTaskWithMultiprocessing`."}, "arroyo.strategies.run_task_with_multiprocessing.batches_in_progress": {"name": "arroyo.strategies.run_task_with_multiprocessing.batches_in_progress", "type": "Gauge", "description": "How many batches are being processed in parallel by multiprocessing."}, "arroyo.strategies.run_task_with_multiprocessing.processes": {"name": "arroyo.strategies.run_task_with_multiprocessing.processes", "type": "Gauge", "description": "Shows the total number of available processes in the pool."}, "arroyo.strategies.run_task_with_multiprocessing.pool.create": {"name": "arroyo.strategies.run_task_with_multiprocessing.pool.create", "type": "Counter", "description": "A subprocess by multiprocessing unexpectedly died.\n\"sigchld.detected\",\nCounter: Incremented when the multiprocessing pool is created (or re-created)."}, "arroyo.consumer.poll.time": {"name": "arroyo.consumer.poll.time", "type": "Time", "description": "(unitless) spent polling librdkafka for new messages."}, "arroyo.consumer.processing.time": {"name": "arroyo.consumer.processing.time", "type": "Time", "description": "(unitless) spent in strategies (blocking in strategy.submit or\nstrategy.poll)"}, "arroyo.consumer.backpressure.time": {"name": "arroyo.consumer.backpressure.time", "type": "Time", "description": "(unitless) spent pausing the consumer due to backpressure (MessageRejected)"}, "arroyo.consumer.dlq.time": {"name": "arroyo.consumer.dlq.time", "type": "Time", "description": "(unitless) spent in handling `InvalidMessage` exceptions and sending\nmessages to the the DLQ."}, "arroyo.consumer.join.time": {"name": "arroyo.consumer.join.time", "type": "Time", "description": "(unitless) spent in waiting for the strategy to exit, such as during\nshutdown or rebalancing."}, "arroyo.consumer.callback.time": {"name": "arroyo.consumer.callback.time", "type": "Time", "description": "(unitless) spent in librdkafka callbacks. This metric's timings\noverlap other timings, and might spike at the same time."}, "arroyo.consumer.shutdown.time": {"name": "arroyo.consumer.shutdown.time", "type": "Time", "description": "(unitless) spent in shutting down the consumer. This metric's\ntimings overlap other timings, and might spike at the same time."}, "arroyo.consumer.run.callback": {"name": "arroyo.consumer.run.callback", "type": "Time", "description": "A regular duration metric where each datapoint is measuring the time it\ntook to execute a single callback. This metric is distinct from the\narroyo.consumer.*.time metrics as it does not attempt to accumulate time\nspent per second in an attempt to keep monitoring overhead low.\nThe metric is tagged by the name of the internal callback function being\nexecuted, as 'callback_name'. Possible values are on_partitions_assigned\nand on_partitions_revoked."}, "arroyo.consumer.run.close_strategy": {"name": "arroyo.consumer.run.close_strategy", "type": "Time", "description": "Duration metric measuring the time it took to flush in-flight messages\nand shut down the strategies."}, "arroyo.consumer.run.create_strategy": {"name": "arroyo.consumer.run.create_strategy", "type": "Time", "description": "Duration metric measuring the time it took to create the processing strategy."}, "arroyo.consumer.partitions_revoked.count": {"name": "arroyo.consumer.partitions_revoked.count", "type": "Counter", "description": "How many partitions have been revoked just now."}, "arroyo.consumer.partitions_assigned.count": {"name": "arroyo.consumer.partitions_assigned.count", "type": "Counter", "description": "How many partitions have been assigned just now."}, "arroyo.consumer.latency": {"name": "arroyo.consumer.latency", "type": "Time", "description": "Consumer latency in seconds. Recorded by the commit offsets strategy."}, "arroyo.consumer.pause": {"name": "arroyo.consumer.pause", "type": "Counter", "description": "Metric for when the underlying rdkafka consumer is being paused.\nThis flushes internal prefetch buffers."}, "arroyo.consumer.resume": {"name": "arroyo.consumer.resume", "type": "Counter", "description": "Metric for when the underlying rdkafka consumer is being resumed.\nThis might cause increased network usage as messages are being re-fetched."}, "arroyo.consumer.librdkafka.total_queue_size": {"name": "arroyo.consumer.librdkafka.total_queue_size", "type": "Gauge", "description": "Queue size of background queue that librdkafka uses to prefetch messages."}, "arroyo.processing.strategies.healthcheck.touch": {"name": "arroyo.processing.strategies.healthcheck.touch", "type": "Counter", "description": "Counter metric to measure how often the healthcheck file has been touched."}, "arroyo.strategies.filter.dropped_messages": {"name": "arroyo.strategies.filter.dropped_messages", "type": "Counter", "description": "Number of messages dropped in the FilterStep strategy"}, "arroyo.consumer.dlq.dropped_messages": {"name": "arroyo.consumer.dlq.dropped_messages", "type": "Counter", "description": "how many messages are dropped due to errors producing to the dlq"}, "arroyo.consumer.dlq_buffer.len": {"name": "arroyo.consumer.dlq_buffer.len", "type": "Gauge", "description": "Current length of the DLQ buffer deque"}, "arroyo.consumer.dlq_buffer.exceeded": {"name": "arroyo.consumer.dlq_buffer.exceeded", "type": "Counter", "description": "Number of times the DLQ buffer size has been exceeded, causing messages to be dropped"}, "arroyo.consumer.dlq_buffer.assigned_partitions": {"name": "arroyo.consumer.dlq_buffer.assigned_partitions", "type": "Gauge", "description": "Number of partitions being tracked in the DLQ buffer"}, "arroyo.producer.librdkafka.p99_int_latency": {"name": "arroyo.producer.librdkafka.p99_int_latency", "type": "Time", "description": "Internal producer queue latency from librdkafka statistics.\nTagged by broker_id."}, "arroyo.producer.librdkafka.p99_outbuf_latency": {"name": "arroyo.producer.librdkafka.p99_outbuf_latency", "type": "Time", "description": "Output buffer latency from librdkafka statistics.\nTagged by broker_id."}, "arroyo.producer.librdkafka.p99_rtt": {"name": "arroyo.producer.librdkafka.p99_rtt", "type": "Time", "description": "Round-trip time to brokers from librdkafka statistics.\nTagged by broker_id."}, "arroyo.producer.librdkafka.avg_int_latency": {"name": "arroyo.producer.librdkafka.avg_int_latency", "type": "Time", "description": "Average internal producer queue latency from librdkafka statistics.\nTagged by broker_id."}, "arroyo.producer.librdkafka.avg_outbuf_latency": {"name": "arroyo.producer.librdkafka.avg_outbuf_latency", "type": "Time", "description": "Average output buffer latency from librdkafka statistics.\nTagged by broker_id."}, "arroyo.producer.librdkafka.avg_rtt": {"name": "arroyo.producer.librdkafka.avg_rtt", "type": "Time", "description": "Average round-trip time to brokers from librdkafka statistics.\nTagged by broker_id."}, "arroyo.producer.produce_status": {"name": "arroyo.producer.produce_status", "type": "Counter", "description": "Number of times the produce strategy failed to produce a message"}, "arroyo.producer.librdkafka.message_count": {"name": "arroyo.producer.librdkafka.message_count", "type": "Gauge", "description": "Producer message count metric from librdkafka statistics\nTagged by producer_name"}, "arroyo.producer.librdkafka.message_count_max": {"name": "arroyo.producer.librdkafka.message_count_max", "type": "Gauge", "description": "Maximum producer message count from librdkafka statistics\nTagged by producer_name"}, "arroyo.producer.librdkafka.message_size": {"name": "arroyo.producer.librdkafka.message_size", "type": "Gauge", "description": "Producer message size from librdkafka statistics\nTagged by producer_name"}, "arroyo.producer.librdkafka.message_size_max": {"name": "arroyo.producer.librdkafka.message_size_max", "type": "Gauge", "description": "Maximum producer message size from librdkafka statistics\nTagged by producer_name"}, "arroyo.producer.librdkafka.txmsgs": {"name": "arroyo.producer.librdkafka.txmsgs", "type": "Gauge", "description": "Total number of messages transmitted from librdkafka statistics\nTagged by producer_name"}, "arroyo.producer.librdkafka.broker_tx": {"name": "arroyo.producer.librdkafka.broker_tx", "type": "Gauge", "description": "Total number of transmission requests from librdkafka statistics\nTagged by broker_id, producer_name"}, "arroyo.producer.librdkafka.broker_txbytes": {"name": "arroyo.producer.librdkafka.broker_txbytes", "type": "Gauge", "description": "Total number of bytes transmitted from librdkafka statistics\nTagged by broker_id, producer_name"}, "arroyo.producer.librdkafka.broker_outbuf_requests": {"name": "arroyo.producer.librdkafka.broker_outbuf_requests", "type": "Gauge", "description": "Number of requests awaiting transmission to broker from librdkafka statistics\nTagged by broker_id, producer_name"}, "arroyo.producer.librdkafka.broker_outbuf_messages": {"name": "arroyo.producer.librdkafka.broker_outbuf_messages", "type": "Gauge", "description": "Number of messages awaiting transmission to broker from librdkafka statistics\nTagged by broker_id, producer_name"}, "arroyo.producer.librdkafka.broker_connects": {"name": "arroyo.producer.librdkafka.broker_connects", "type": "Gauge", "description": "Number of connection attempts to broker from librdkafka statistics\nTagged by broker_id, producer_name"}, "arroyo.producer.librdkafka.broker_disconnects": {"name": "arroyo.producer.librdkafka.broker_disconnects", "type": "Gauge", "description": "Number of disconnections from broker from librdkafka statistics\nTagged by broker_id, producer_name"}, "arroyo.producer.librdkafka.broker_txerrs": {"name": "arroyo.producer.librdkafka.broker_txerrs", "type": "Gauge", "description": "Total number of transmission errors from librdkafka statistics\nTagged by broker_id, producer_name"}, "arroyo.producer.librdkafka.broker_txretries": {"name": "arroyo.producer.librdkafka.broker_txretries", "type": "Gauge", "description": "Total number of request retries from librdkafka statistics\nTagged by broker_id, producer_name"}}
@@ -40,11 +40,10 @@ MetricName = Literal[
40
40
  "arroyo.strategies.run_task_with_multiprocessing.batch.output.resize",
41
41
  # Gauge: How many batches are being processed in parallel by multiprocessing.
42
42
  "arroyo.strategies.run_task_with_multiprocessing.batches_in_progress",
43
+ # Gauge: Shows the total number of available processes in the pool.
44
+ "arroyo.strategies.run_task_with_multiprocessing.processes",
43
45
  # Counter: A subprocess by multiprocessing unexpectedly died.
44
46
  "sigchld.detected",
45
- # Gauge: Shows how many processes the multiprocessing strategy is
46
- # configured with.
47
- "arroyo.strategies.run_task_with_multiprocessing.processes",
48
47
  # Counter: Incremented when the multiprocessing pool is created (or re-created).
49
48
  "arroyo.strategies.run_task_with_multiprocessing.pool.create",
50
49
  # Time: (unitless) spent polling librdkafka for new messages.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sentry-arroyo
3
- Version: 2.32.0
3
+ Version: 2.32.2
4
4
  Summary: Arroyo is a Python library for working with streaming data.
5
5
  Home-page: https://github.com/getsentry/arroyo
6
6
  Author: Sentry
@@ -10,7 +10,7 @@ def get_requirements() -> Sequence[str]:
10
10
 
11
11
  setup(
12
12
  name="sentry-arroyo",
13
- version="2.32.0",
13
+ version="2.32.2",
14
14
  author="Sentry",
15
15
  author_email="oss@sentry.io",
16
16
  license="Apache-2.0",
@@ -176,11 +176,6 @@ def test_parallel_transform_step() -> None:
176
176
  0.0,
177
177
  tags=None,
178
178
  ),
179
- GaugeCall(
180
- "arroyo.strategies.run_task_with_multiprocessing.processes",
181
- 2.0,
182
- tags=None,
183
- ),
184
179
  IncrementCall(
185
180
  name="arroyo.strategies.run_task_with_multiprocessing.batch.input.overflow",
186
181
  value=1,
@@ -191,6 +186,11 @@ def test_parallel_transform_step() -> None:
191
186
  1.0,
192
187
  tags=None,
193
188
  ),
189
+ GaugeCall(
190
+ "arroyo.strategies.run_task_with_multiprocessing.processes",
191
+ 2.0,
192
+ tags=None,
193
+ ),
194
194
  TimingCall(
195
195
  "arroyo.strategies.run_task_with_multiprocessing.batch.size.msg",
196
196
  3,
@@ -206,6 +206,11 @@ def test_parallel_transform_step() -> None:
206
206
  2.0,
207
207
  tags=None,
208
208
  ),
209
+ GaugeCall(
210
+ "arroyo.strategies.run_task_with_multiprocessing.processes",
211
+ 2.0,
212
+ tags=None,
213
+ ),
209
214
  TimingCall(
210
215
  "arroyo.strategies.run_task_with_multiprocessing.batch.size.msg",
211
216
  1,
@@ -275,6 +280,11 @@ def test_parallel_transform_step() -> None:
275
280
  1.0,
276
281
  tags=None,
277
282
  ),
283
+ GaugeCall(
284
+ "arroyo.strategies.run_task_with_multiprocessing.processes",
285
+ 2.0,
286
+ tags=None,
287
+ ),
278
288
  TimingCall(
279
289
  name="arroyo.strategies.run_task_with_multiprocessing.output_batch.size.msg",
280
290
  value=1,
@@ -290,6 +300,11 @@ def test_parallel_transform_step() -> None:
290
300
  0.0,
291
301
  tags=None,
292
302
  ),
303
+ GaugeCall(
304
+ "arroyo.strategies.run_task_with_multiprocessing.processes",
305
+ 2.0,
306
+ tags=None,
307
+ ),
293
308
  ],
294
309
  ):
295
310
  transform_step.join()
@@ -1 +0,0 @@
1
- {"arroyo.strategies.run_task_with_multiprocessing.batch.size.msg": {"name": "arroyo.strategies.run_task_with_multiprocessing.batch.size.msg", "type": "Time", "description": "Number of messages in a multiprocessing batch"}, "arroyo.strategies.run_task_with_multiprocessing.batch.size.bytes": {"name": "arroyo.strategies.run_task_with_multiprocessing.batch.size.bytes", "type": "Time", "description": "Number of bytes in a multiprocessing batch"}, "arroyo.strategies.run_task_with_multiprocessing.batch.submit.time": {"name": "arroyo.strategies.run_task_with_multiprocessing.batch.submit.time", "type": "Time", "description": "How long it took to submit a batch to multiprocessing"}, "arroyo.strategies.run_task_with_multiprocessing.output_batch.size.msg": {"name": "arroyo.strategies.run_task_with_multiprocessing.output_batch.size.msg", "type": "Time", "description": "Number of messages in a multiprocessing batch after the message transformation"}, "arroyo.strategies.run_task_with_multiprocessing.output_batch.size.bytes": {"name": "arroyo.strategies.run_task_with_multiprocessing.output_batch.size.bytes", "type": "Time", "description": "Number of bytes in a multiprocessing batch after the message transformation"}, "arroyo.consumer.run.count": {"name": "arroyo.consumer.run.count", "type": "Counter", "description": "Number of times the consumer is spinning"}, "arroyo.consumer.invalid_message.count": {"name": "arroyo.consumer.invalid_message.count", "type": "Counter", "description": "Number of times the consumer encountered an invalid message."}, "arroyo.strategies.reduce.batch_time": {"name": "arroyo.strategies.reduce.batch_time", "type": "Time", "description": "How long it took the Reduce step to fill up a batch"}, "arroyo.strategies.run_task_with_multiprocessing.batch.backpressure": {"name": "arroyo.strategies.run_task_with_multiprocessing.batch.backpressure", "type": "Counter", "description": "Incremented when a strategy after multiprocessing applies\nbackpressure to multiprocessing. May be a reason why CPU cannot be\nsaturated."}, "arroyo.strategies.run_task_with_multiprocessing.batch.input.overflow": {"name": "arroyo.strategies.run_task_with_multiprocessing.batch.input.overflow", "type": "Counter", "description": "Incremented when multiprocessing cannot fill the input batch\nbecause not enough memory was allocated. This results in batches smaller\nthan configured. Increase `input_block_size` to fix."}, "arroyo.strategies.run_task_with_multiprocessing.batch.output.overflow": {"name": "arroyo.strategies.run_task_with_multiprocessing.batch.output.overflow", "type": "Counter", "description": "Incremented when multiprocessing cannot pull results in batches\nequal to the input batch size, because not enough memory was allocated.\nThis can be devastating for throughput. Increase `output_block_size` to\nfix."}, "arroyo.strategies.run_task_with_multiprocessing.batch.input.resize": {"name": "arroyo.strategies.run_task_with_multiprocessing.batch.input.resize", "type": "Counter", "description": "Arroyo has decided to re-allocate a block in order to combat input\nbuffer overflow. This behavior can be disabled by explicitly setting\n`input_block_size` to a not-None value in `RunTaskWithMultiprocessing`."}, "arroyo.strategies.run_task_with_multiprocessing.batch.output.resize": {"name": "arroyo.strategies.run_task_with_multiprocessing.batch.output.resize", "type": "Counter", "description": "Arroyo has decided to re-allocate a block in order to combat output\nbuffer overflow. This behavior can be disabled by explicitly setting\n`output_block_size` to a not-None value in `RunTaskWithMultiprocessing`."}, "arroyo.strategies.run_task_with_multiprocessing.batches_in_progress": {"name": "arroyo.strategies.run_task_with_multiprocessing.batches_in_progress", "type": "Gauge", "description": "How many batches are being processed in parallel by multiprocessing."}, "arroyo.strategies.run_task_with_multiprocessing.processes": {"name": "arroyo.strategies.run_task_with_multiprocessing.processes", "type": "Counter", "description": "A subprocess by multiprocessing unexpectedly died.\n\"sigchld.detected\",\nGauge: Shows how many processes the multiprocessing strategy is\nconfigured with."}, "arroyo.strategies.run_task_with_multiprocessing.pool.create": {"name": "arroyo.strategies.run_task_with_multiprocessing.pool.create", "type": "Counter", "description": "Incremented when the multiprocessing pool is created (or re-created)."}, "arroyo.consumer.poll.time": {"name": "arroyo.consumer.poll.time", "type": "Time", "description": "(unitless) spent polling librdkafka for new messages."}, "arroyo.consumer.processing.time": {"name": "arroyo.consumer.processing.time", "type": "Time", "description": "(unitless) spent in strategies (blocking in strategy.submit or\nstrategy.poll)"}, "arroyo.consumer.backpressure.time": {"name": "arroyo.consumer.backpressure.time", "type": "Time", "description": "(unitless) spent pausing the consumer due to backpressure (MessageRejected)"}, "arroyo.consumer.dlq.time": {"name": "arroyo.consumer.dlq.time", "type": "Time", "description": "(unitless) spent in handling `InvalidMessage` exceptions and sending\nmessages to the the DLQ."}, "arroyo.consumer.join.time": {"name": "arroyo.consumer.join.time", "type": "Time", "description": "(unitless) spent in waiting for the strategy to exit, such as during\nshutdown or rebalancing."}, "arroyo.consumer.callback.time": {"name": "arroyo.consumer.callback.time", "type": "Time", "description": "(unitless) spent in librdkafka callbacks. This metric's timings\noverlap other timings, and might spike at the same time."}, "arroyo.consumer.shutdown.time": {"name": "arroyo.consumer.shutdown.time", "type": "Time", "description": "(unitless) spent in shutting down the consumer. This metric's\ntimings overlap other timings, and might spike at the same time."}, "arroyo.consumer.run.callback": {"name": "arroyo.consumer.run.callback", "type": "Time", "description": "A regular duration metric where each datapoint is measuring the time it\ntook to execute a single callback. This metric is distinct from the\narroyo.consumer.*.time metrics as it does not attempt to accumulate time\nspent per second in an attempt to keep monitoring overhead low.\nThe metric is tagged by the name of the internal callback function being\nexecuted, as 'callback_name'. Possible values are on_partitions_assigned\nand on_partitions_revoked."}, "arroyo.consumer.run.close_strategy": {"name": "arroyo.consumer.run.close_strategy", "type": "Time", "description": "Duration metric measuring the time it took to flush in-flight messages\nand shut down the strategies."}, "arroyo.consumer.run.create_strategy": {"name": "arroyo.consumer.run.create_strategy", "type": "Time", "description": "Duration metric measuring the time it took to create the processing strategy."}, "arroyo.consumer.partitions_revoked.count": {"name": "arroyo.consumer.partitions_revoked.count", "type": "Counter", "description": "How many partitions have been revoked just now."}, "arroyo.consumer.partitions_assigned.count": {"name": "arroyo.consumer.partitions_assigned.count", "type": "Counter", "description": "How many partitions have been assigned just now."}, "arroyo.consumer.latency": {"name": "arroyo.consumer.latency", "type": "Time", "description": "Consumer latency in seconds. Recorded by the commit offsets strategy."}, "arroyo.consumer.pause": {"name": "arroyo.consumer.pause", "type": "Counter", "description": "Metric for when the underlying rdkafka consumer is being paused.\nThis flushes internal prefetch buffers."}, "arroyo.consumer.resume": {"name": "arroyo.consumer.resume", "type": "Counter", "description": "Metric for when the underlying rdkafka consumer is being resumed.\nThis might cause increased network usage as messages are being re-fetched."}, "arroyo.consumer.librdkafka.total_queue_size": {"name": "arroyo.consumer.librdkafka.total_queue_size", "type": "Gauge", "description": "Queue size of background queue that librdkafka uses to prefetch messages."}, "arroyo.processing.strategies.healthcheck.touch": {"name": "arroyo.processing.strategies.healthcheck.touch", "type": "Counter", "description": "Counter metric to measure how often the healthcheck file has been touched."}, "arroyo.strategies.filter.dropped_messages": {"name": "arroyo.strategies.filter.dropped_messages", "type": "Counter", "description": "Number of messages dropped in the FilterStep strategy"}, "arroyo.consumer.dlq.dropped_messages": {"name": "arroyo.consumer.dlq.dropped_messages", "type": "Counter", "description": "how many messages are dropped due to errors producing to the dlq"}, "arroyo.consumer.dlq_buffer.len": {"name": "arroyo.consumer.dlq_buffer.len", "type": "Gauge", "description": "Current length of the DLQ buffer deque"}, "arroyo.consumer.dlq_buffer.exceeded": {"name": "arroyo.consumer.dlq_buffer.exceeded", "type": "Counter", "description": "Number of times the DLQ buffer size has been exceeded, causing messages to be dropped"}, "arroyo.consumer.dlq_buffer.assigned_partitions": {"name": "arroyo.consumer.dlq_buffer.assigned_partitions", "type": "Gauge", "description": "Number of partitions being tracked in the DLQ buffer"}, "arroyo.producer.librdkafka.p99_int_latency": {"name": "arroyo.producer.librdkafka.p99_int_latency", "type": "Time", "description": "Internal producer queue latency from librdkafka statistics.\nTagged by broker_id."}, "arroyo.producer.librdkafka.p99_outbuf_latency": {"name": "arroyo.producer.librdkafka.p99_outbuf_latency", "type": "Time", "description": "Output buffer latency from librdkafka statistics.\nTagged by broker_id."}, "arroyo.producer.librdkafka.p99_rtt": {"name": "arroyo.producer.librdkafka.p99_rtt", "type": "Time", "description": "Round-trip time to brokers from librdkafka statistics.\nTagged by broker_id."}, "arroyo.producer.librdkafka.avg_int_latency": {"name": "arroyo.producer.librdkafka.avg_int_latency", "type": "Time", "description": "Average internal producer queue latency from librdkafka statistics.\nTagged by broker_id."}, "arroyo.producer.librdkafka.avg_outbuf_latency": {"name": "arroyo.producer.librdkafka.avg_outbuf_latency", "type": "Time", "description": "Average output buffer latency from librdkafka statistics.\nTagged by broker_id."}, "arroyo.producer.librdkafka.avg_rtt": {"name": "arroyo.producer.librdkafka.avg_rtt", "type": "Time", "description": "Average round-trip time to brokers from librdkafka statistics.\nTagged by broker_id."}, "arroyo.producer.produce_status": {"name": "arroyo.producer.produce_status", "type": "Counter", "description": "Number of times the produce strategy failed to produce a message"}, "arroyo.producer.librdkafka.message_count": {"name": "arroyo.producer.librdkafka.message_count", "type": "Gauge", "description": "Producer message count metric from librdkafka statistics\nTagged by producer_name"}, "arroyo.producer.librdkafka.message_count_max": {"name": "arroyo.producer.librdkafka.message_count_max", "type": "Gauge", "description": "Maximum producer message count from librdkafka statistics\nTagged by producer_name"}, "arroyo.producer.librdkafka.message_size": {"name": "arroyo.producer.librdkafka.message_size", "type": "Gauge", "description": "Producer message size from librdkafka statistics\nTagged by producer_name"}, "arroyo.producer.librdkafka.message_size_max": {"name": "arroyo.producer.librdkafka.message_size_max", "type": "Gauge", "description": "Maximum producer message size from librdkafka statistics\nTagged by producer_name"}, "arroyo.producer.librdkafka.txmsgs": {"name": "arroyo.producer.librdkafka.txmsgs", "type": "Gauge", "description": "Total number of messages transmitted from librdkafka statistics\nTagged by producer_name"}, "arroyo.producer.librdkafka.broker_tx": {"name": "arroyo.producer.librdkafka.broker_tx", "type": "Gauge", "description": "Total number of transmission requests from librdkafka statistics\nTagged by broker_id, producer_name"}, "arroyo.producer.librdkafka.broker_txbytes": {"name": "arroyo.producer.librdkafka.broker_txbytes", "type": "Gauge", "description": "Total number of bytes transmitted from librdkafka statistics\nTagged by broker_id, producer_name"}, "arroyo.producer.librdkafka.broker_outbuf_requests": {"name": "arroyo.producer.librdkafka.broker_outbuf_requests", "type": "Gauge", "description": "Number of requests awaiting transmission to broker from librdkafka statistics\nTagged by broker_id, producer_name"}, "arroyo.producer.librdkafka.broker_outbuf_messages": {"name": "arroyo.producer.librdkafka.broker_outbuf_messages", "type": "Gauge", "description": "Number of messages awaiting transmission to broker from librdkafka statistics\nTagged by broker_id, producer_name"}, "arroyo.producer.librdkafka.broker_connects": {"name": "arroyo.producer.librdkafka.broker_connects", "type": "Gauge", "description": "Number of connection attempts to broker from librdkafka statistics\nTagged by broker_id, producer_name"}, "arroyo.producer.librdkafka.broker_disconnects": {"name": "arroyo.producer.librdkafka.broker_disconnects", "type": "Gauge", "description": "Number of disconnections from broker from librdkafka statistics\nTagged by broker_id, producer_name"}, "arroyo.producer.librdkafka.broker_txerrs": {"name": "arroyo.producer.librdkafka.broker_txerrs", "type": "Gauge", "description": "Total number of transmission errors from librdkafka statistics\nTagged by broker_id, producer_name"}, "arroyo.producer.librdkafka.broker_txretries": {"name": "arroyo.producer.librdkafka.broker_txretries", "type": "Gauge", "description": "Total number of request retries from librdkafka statistics\nTagged by broker_id, producer_name"}}
File without changes
File without changes
File without changes