<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="137622" data-post-id="137622">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="belaustegui" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/belaustegui/120/36580_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  belaustegui
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I am looking into using Oban in our production project. Some of the background tasks are run using <code>Task.Supervisor.async_stream_nolink</code> and, while it works for now, could be improved a lot and made more reliable by using a proper background library.</p>
<p>I have a branch with Oban in which I am testing it. I have converted a pair of those tasks and now they run into an Oban worker, so far they are running amazingly well <img src="https://forum.elixirforum.com/images/emoji/apple/raised_hands.png?v=15" title=":raised_hands:" class="emoji" alt=":raised_hands:" loading="lazy" width="20" height="20"> . The only remaining doubt is how to report errors that happen into a worker.</p>
<p>Our project uses AppSignal for performance and error metrics, but I found that errors inside Oban workers won’t get reported to AppSignal. Looking at <a href="https://github.com/sorentwo/oban/blob/master/lib/oban/queue/executor.ex#L52" rel="noopener nofollow ugc">the code</a> it looks like Oban <code>rescue</code>s errors to handle them for retries and such, so they never get to AppSignal.</p>
<p>Has anybody faced a similar situation? Any guidance on how should I proceed? I’ve seen that Oban reports certain information using <code>:telemetry</code>, would that be the key point that I am missing?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="137622" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/73">Post #72</a>
	                </div>
	            </div>
              <div id="likers-container-137622" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="137622"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #72"></div>
  </section>
</div>
    <div class="postbit" id="137623" data-post-id="137623">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sorentwo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sorentwo/120/37360_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sorentwo
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Oban Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="belaustegui" data-post="73" data-topic="22449">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/belaustegui/48/36580_2.png" class="avatar"> belaustegui:</div>
<blockquote>
<p>Has anybody faced a similar situation? Any guidance on how should I proceed? I’ve seen that Oban reports certain information using <code>:telemetry</code> , would that be the key point that I am missing?</p>
</blockquote>
</aside>
<p>That is exactly what I would recommend to proceed. There is some documentation around error reporting in the Oban.Telemetry documentation:</p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://oban.hexdocs.pm/Oban.Telemetry.html">
  <header class="source">

      <a href="https://oban.hexdocs.pm/Oban.Telemetry.html" target="_blank" rel="noopener nofollow ugc">oban.hexdocs.pm</a>
  </header>

  <article class="onebox-body">
    

<h3><a href="https://oban.hexdocs.pm/Oban.Telemetry.html" target="_blank" rel="noopener nofollow ugc">Oban.Telemetry — Oban v2.23.0</a></h3>



  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>

<p>It seems like that information, or even that example, should be elevated in the documentation <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="137623" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/74">Post #73</a>
	                </div>
	            </div>
              <div id="likers-container-137623" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="137623"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #73"></div>
  </section>
</div>
    <div class="postbit" id="137880" data-post-id="137880">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sorentwo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sorentwo/120/37360_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sorentwo
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Oban Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Oban v0.6.0 has been released!</p>
<p>There are a couple of convenient additions, some changes to how the <code>perform/1</code> function is defined, and an important fix for queue polling. As usual, from the <a href="https://github.com/sorentwo/oban/blob/master/CHANGELOG.md#060--2019-07-26" rel="noopener nofollow ugc">CHANGELOG</a> with attribution where possible:</p>
<h3><a name="p-137880-added-1" class="anchor" href="#p-137880-added-1" aria-label="Heading link" rel="nofollow"></a>Added</h3>
<ul>
<li>
<p>[Oban.Query] Added <code>:verbose</code> option to control general query logging. This allows <code>debug</code> query activity within Oban to be silenced during testing and development.</p>
</li>
<li>
<p>[Oban.Testing] Added <code>all_enqueued/1</code> helper for testing. The helper returns a list of jobs matching the provided criteria. This makes it possible to test using pattern matching, which is more flexible than a literal match within the database. <a class="mention" href="/u/luizpvasc" rel="nofollow">@luizpvasc</a></p>
</li>
</ul>
<h3><a name="p-137880-changed-2" class="anchor" href="#p-137880-changed-2" aria-label="Heading link" rel="nofollow"></a>Changed</h3>
<ul>
<li>
<p>[Oban.Config] All passed options are validated. Any unknown options will raise an <code>ArgumentError</code> and halt startup. This prevents misconfiguration through typos and passing unsupported options.</p>
</li>
<li>
<p>[Oban.Worker] The <code>perform/1</code> function now receives an <code>Oban.Job</code> struct as the sole argument, calling <code>perform/1</code> again with only the <code>args</code> map if no clause catches the struct. This allows workers to use any attribute of the job to customize behaviour, e.g. the number of attempts or when a job was inserted into the database.</p>
<p>The implementation is entirely backward compatible, provided workers are defined with the <code>use</code> macro. Workers that implement the <code>Oban.Worker</code> behaviour manually will need to change the signature of <code>perform/1</code> to accept a job struct. <a class="mention" href="/u/andykent" rel="nofollow">@andykent</a></p>
</li>
<li>
<p>[Oban] Child process names are generated from the top level supervisor’s name, i.e. setting the name to “MyOban” on <code>start_link/1</code> will set the notifier’s name to <code>MyOban.Notifier</code>. This improves isolation and allows multiple supervisors to be ran on the same node.</p>
</li>
</ul>
<h3><a name="p-137880-fixed-3" class="anchor" href="#p-137880-fixed-3" aria-label="Heading link" rel="nofollow"></a>Fixed</h3>
<ul>
<li>[Oban.Producer] Remove duplicate polling timers. As part of a botched merge conflict resolution two timers were started for each producer. (Tom Taylor)</li>
</ul>
<p><a href="https://hexdocs.pm/oban/0.6.0/Oban.html" rel="noopener nofollow ugc">v0.6.0 Docs</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="137880" data-batch-url="/posts/batch_likers">
                        11
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/75">Post #74</a>
	                </div>
	            </div>
              <div id="likers-container-137880" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="137880"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #74"></div>
  </section>
</div>
    <div class="postbit" id="137955" data-post-id="137955">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="belaustegui" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/belaustegui/120/36580_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  belaustegui
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Well that example worked wonderfully and errors in background jobs are being reported to Appsignal.</p>
<p>This was the last step into using Oban in production. Thanks! <img src="https://forum.elixirforum.com/images/emoji/apple/raised_hands.png?v=15" title=":raised_hands:" class="emoji" alt=":raised_hands:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="137955" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/76">Post #75</a>
	                </div>
	            </div>
              <div id="likers-container-137955" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="137955"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #75"></div>
  </section>
</div>
    <div class="postbit" id="138296" data-post-id="138296">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="emoragaf" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/emoragaf/120/4384_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  emoragaf
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Do you have any example on how you equeue jobs from python?<br>
Did you write some helper modulen in python/ruby for that? or are you just inserting the jobs directly to the db?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="138296" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/77">Post #76</a>
	                </div>
	            </div>
              <div id="likers-container-138296" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="138296"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #76"></div>
  </section>
</div>
    <div class="postbit" id="138302" data-post-id="138302">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sorentwo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sorentwo/120/37360_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sorentwo
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Oban Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I haven’t done this with Python yet. All you need to do is insert jobs directly into the <code>oban_jobs</code> table with the proper values:</p>
<ul>
<li><code>worker</code> — The name of your worker in Elixir, i.e. <code>MyApp.Worker</code></li>
<li><code>queue</code> — The queue for the job, which must be running in Oban for the job to be ran, i.e. <code>priority</code></li>
<li><code>args</code> — A jsonb map, i.e. <code>{"email":"somebody@example.com"}</code></li>
</ul>
<p>All of the other fields have database defaults, so you don’t need to set anything.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="138302" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/78">Post #77</a>
	                </div>
	            </div>
              <div id="likers-container-138302" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="138302"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #77"></div>
  </section>
</div>
    <div class="postbit" id="139395" data-post-id="139395">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sorentwo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sorentwo/120/37360_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sorentwo
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Oban Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Oban v0.7.0 has been released!</p>
<p>This release includes a few big features and some breaking changes to workers. The somewhat annotated <a href="https://github.com/sorentwo/oban/blob/master/CHANGELOG.md#changelog" rel="noopener nofollow ugc">CHANGELOG</a> follows.</p>
<p>Thanks to everybody who contributed to docs and helped drive these features <img src="https://forum.elixirforum.com/images/emoji/apple/yellow_heart.png?v=15" title=":yellow_heart:" class="emoji" alt=":yellow_heart:" loading="lazy" width="20" height="20"></p>
<h3><a name="p-139395-added-1" class="anchor" href="#p-139395-added-1" aria-label="Heading link" rel="nofollow"></a>Added</h3>
<ul>
<li>
<p>[Oban] Added <code>insert/2</code>, <code>insert!/2</code> and <code>insert/4</code> as a convenient and more powerful way to insert jobs. Features such as unique jobs and prefix support only work with <code>insert</code>.</p>
</li>
<li>
<p>[Oban] Add <code>prefix</code> support. This allows entirely isolated job queues within the same database. <a class="mention" href="/u/anthonator" rel="nofollow">@anthonator</a></p>
</li>
<li>
<p>[Oban.Worker] Compile time validation of all passed options. Catch typos and other invalid options when a worker is compiled rather than when a job is inserted for the first time.</p>
</li>
<li>
<p>[Oban.Worker] Unique job support through the <code>unique</code> option. Set a unique period, and optionally <code>fields</code> and <code>states</code>, to enforce uniqueness within a window of time. For example, to make a job unique by args, queue and worker for 2 minutes:</p>
<p><code>use Oban.Worker, unique: [period: 120, fields: [:args, :queue, :worker]]</code></p>
<p>Note, unique support relies on the use of <code>Oban.insert/2,4</code>.</p>
</li>
</ul>
<h3><a name="p-139395-changed-2" class="anchor" href="#p-139395-changed-2" aria-label="Heading link" rel="nofollow"></a>Changed</h3>
<ul>
<li>
<p>[Oban.Worker] Remove the <code>perform/1</code> callback in favor of <code>perform/2</code>. The new <code>perform/2</code> function receives the job’s args, followed by the complete job struct. This new function signature makes it clear that the args are always available, and the job struct is also there when it is needed. A default <code>perform/2</code> function <em>is not</em> generated automatically by the <code>use</code> macro and <em>must</em> be defined manually.</p>
<p>This is a breaking change and all worker modules will need to be updated.  Thankfully, due to the behaviour change, warnings will be emitted when you compile after the upgrade.</p>
<p>If your perform functions weren’t matching on the <code>Oban.Job</code> struct then you can migrate your workers by adding a second <code>_job</code> argument:</p>
<p><code>def perform(%{"some" =&gt; args}, _job)</code></p>
<p>If you were making use of <code>Oban.Job</code> metadata in <code>perform/1</code> then you can move the job matching to the second argument:</p>
<p><code>def perform(_args, %{attempt: attempt})</code></p>
<p>See <a href="https://github.com/sorentwo/oban/issues/45" rel="noopener nofollow ugc">the issue that suggested this change</a> for more details and discussion.</p>
</li>
<li>
<p>[Oban.Producer] Use <code>send_after/3</code> instead of <code>:timer.send_interval/2</code> to maintain scheduled dispatch. This mechanism is more accurate under system load and it prevents <code>:poll</code> messages from backing up for each producer.</p>
</li>
<li>
<p>[Oban.Migration] Accept a keyword list with <code>:prefix</code> and <code>:version</code> as options rather than a single version string. When a prefix is supplied the migration will create all tables, indexes, functions and triggers within that namespace. For example, to create the jobs table within a “private” prefix:</p>
<p><code>Oban.Migrate.up(prefix: "private")</code>t</p>
</li>
</ul>
<p><a href="https://hexdocs.pm/oban/0.7.0/Oban.html" rel="noopener nofollow ugc">v0.7.0 Docs</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="139395" data-batch-url="/posts/batch_likers">
                        12
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/79">Post #78</a>
	                </div>
	            </div>
              <div id="likers-container-139395" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="139395"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #78"></div>
  </section>
</div>
    <div class="postbit" id="140212" data-post-id="140212">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sorentwo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sorentwo/120/37360_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sorentwo
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Oban Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’ve released Oban v0.7.1 with some <em>important</em> bug fixes. This is a minor release, but I recommend everybody upgrade (especially if you’re using a hosted database that doesn’t allow</p>
<p>From the <a href="https://github.com/sorentwo/oban/blob/master/CHANGELOG.md#071--2019-08-15" rel="noopener nofollow ugc">CHANGELOG</a>:</p>
<h3><a name="p-140212-fixed-1" class="anchor" href="#p-140212-fixed-1" aria-label="Heading link" rel="nofollow"></a>Fixed</h3>
<ul>
<li>
<p>[Oban.Query] Release advisory locks in batches rather than individually after a job finishes execution. By tracking unlockable jobs and repeatedly attempting to unlock them for each connection we ensure that eventually all advisory locks are released.</p>
<p>The previous unlocking system leaked advisory locks at a rate proportional to the number of connections in the db pool. The more connections, the more locks that wouldn’t release. With a default value of 64 for <code>max_locks_per_transaction</code> the database would raise “ERROR:  53200: out of shared memory” after it hit a threshold (11,937 exactly, in my testing). <a class="mention" href="/u/speeddragon" rel="nofollow">@speeddragon</a></p>
</li>
<li>
<p>[Oban.Worker] Allow <code>max_attempts</code> to be 1 or more. This used to be possible and was broken unintentionally by compile time validations. <a class="mention" href="/u/antonielcm" rel="nofollow">@antonielcm</a></p>
</li>
</ul> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="140212" data-batch-url="/posts/batch_likers">
                        5
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/80">Post #79</a>
	                </div>
	            </div>
              <div id="likers-container-140212" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="140212"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #79"></div>
  </section>
</div>
    <div class="postbit" id="140213" data-post-id="140213">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="benwilson512" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/benwilson512/120/1457_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  benwilson512
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Author of Craft GraphQL APIs in Elixir with Absinthe</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="sorentwo" data-post="33" data-topic="22449">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sorentwo/48/37360_2.png" class="avatar"> sorentwo:</div>
<blockquote>
<p>I eschewed that in favor of advisory locks and pubsub to simply bookkeeping.</p>
</blockquote>
</aside>
<p>Any interest in revisiting orphaned job tracking methods that don’t use advisory locks?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="140213" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/81">Post #80</a>
	                </div>
	            </div>
              <div id="likers-container-140213" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="140213"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #80"></div>
  </section>
</div>
    <div class="postbit" id="140215" data-post-id="140215">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sorentwo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sorentwo/120/37360_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sorentwo
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Oban Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="benwilson512" data-post="81" data-topic="22449">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/benwilson512/48/1457_2.png" class="avatar"> benwilson512:</div>
<blockquote>
<p>Any interest in revisiting orphaned job tracking methods that don’t use advisory locks?</p>
</blockquote>
</aside>
<p>I had a feeling you might ask something about that. The moment I added unlocked job id tracking in producers I thought about that discussion.</p>
<p>An alternative that doesn’t generate a lot of garbage (dead tuples) and automatically cleans up on disconnect would be fantastic. Neither of those seem possible purely with userland tables. Maybe the garbage wouldn’t be that big an issue, though. I would need to benchmark to find out.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="140215" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/oban-reliable-and-observable-job-processing/22449/82">Post #81</a>
	                </div>
	            </div>
              <div id="likers-container-140215" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="140215"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #81"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/22449/load_more?page=9">Load more posts (231 remaining)</a>
</div></template></turbo-stream>