ci-queue 0.44.0 → 0.46.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d358486ed352600dfd7852ac73bb78eadb6b1a16590ff9b8a325cac8d6d7eecc
4
- data.tar.gz: 616effbd0c5f6e838a0213d73e9ea3e5ad874c617c7dd5af37150476dc057369
3
+ metadata.gz: ea479767ef84b35f96de1e28bd5e4a79027bb90e7a6d06c101056f6486a63e8b
4
+ data.tar.gz: c932bac995769751c422790553a063685f4690aa5f7ceffb07ce04174e88bfe2
5
5
  SHA512:
6
- metadata.gz: 024057c3cd9e5c3448e6378013d46edd86898f40a582c07736f204aa93d6c233715ff784ecb8c5f9e4917c6267d827dc12e9455e071af0198a377d33c932913b
7
- data.tar.gz: 84bea6fbdb4e8a54ced3a7d42c7a6fe963dd2d1b20cc0281d87d78332944af126275e9200d073de5d6e4caa9b20d787b7afc870315a739b9af0ef921e69a5586
6
+ metadata.gz: bf13fd4ee60aeff7024e2af393986b19315b0b006a233b00c6468758ada80242344c405b0954bd0ecd3b17f9511048b3fe49049ac342d2b9f3743963348c84f9
7
+ data.tar.gz: f0e9933fd3ccff6fb536717cd249cad212d53deaa4c72681fe36ea54247f015c8c9b960870f8b9fd3a1f318e103ae67aeb380c8151c1a3ea121ed7ec49a96b47
@@ -118,6 +118,14 @@ module CI
118
118
  end.inject(:+)
119
119
  end
120
120
 
121
+ def remaining
122
+ redis.llen(key('queue'))
123
+ end
124
+
125
+ def running
126
+ redis.zcard(key('running'))
127
+ end
128
+
121
129
  def to_a
122
130
  redis.multi do |transaction|
123
131
  transaction.lrange(key('queue'), 0, -1)
@@ -63,7 +63,7 @@ module CI
63
63
  end
64
64
 
65
65
  def expired?
66
- (@created_at.to_f TEN_MINUTES) < CI::Queue.time_now.to_f
66
+ (@created_at.to_f + TEN_MINUTES) < CI::Queue.time_now.to_f
67
67
  end
68
68
 
69
69
  def populated?
@@ -78,10 +78,19 @@ module CI
78
78
  @queue.size
79
79
  end
80
80
 
81
+ def remaining
82
+ @queue.size
83
+ end
84
+
85
+ def running
86
+ @reserved_test ? 1 : 0
87
+ end
88
+
81
89
  def poll
82
- while !@shutdown && config.circuit_breakers.none?(&:open?) && !max_test_failed? && test = @queue.shift
83
- yield index.fetch(test)
90
+ while !@shutdown && config.circuit_breakers.none?(&:open?) && !max_test_failed? && @reserved_test = @queue.shift
91
+ yield index.fetch(@reserved_test)
84
92
  end
93
+ @reserved_test = nil
85
94
  end
86
95
 
87
96
  def exhausted?
@@ -2,7 +2,7 @@
2
2
 
3
3
  module CI
4
4
  module Queue
5
- VERSION = '0.44.0'
5
+ VERSION = '0.46.0'
6
6
  DEV_SCRIPTS_ROOT = ::File.expand_path('../../../../../redis', __FILE__)
7
7
  RELEASE_SCRIPTS_ROOT = ::File.expand_path('../redis', __FILE__)
8
8
  end
@@ -86,8 +86,23 @@ module Minitest
86
86
  if queue.rescue_connection_errors { queue.exhausted? }
87
87
  puts green('All tests were ran already')
88
88
  else
89
- load_tests
90
- populate_queue
89
+ # If the job gets (automatically) retried and there are still workers running but not many tests left
90
+ # in the queue, we assume by the time the application is booted the queue is empty and it's faster to no-op.
91
+ if retry?
92
+ remaining = queue.rescue_connection_errors { queue.remaining }.to_i
93
+ running = queue.rescue_connection_errors { queue.running }.to_i
94
+
95
+ puts "#{remaining} tests left and #{running} workers running."
96
+ if remaining <= running
97
+ puts green("Queue almost empty, exiting early...")
98
+ else
99
+ load_tests
100
+ populate_queue
101
+ end
102
+ else
103
+ load_tests
104
+ populate_queue
105
+ end
91
106
  end
92
107
 
93
108
  at_exit {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ci-queue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.44.0
4
+ version: 0.46.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean Boussier
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-30 00:00:00.000000000 Z
11
+ date: 2024-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler