hyperoceanic
ECSx Component.search confusion/bug?
Had a great day or so coding against the EXSx framework - love the
Systems model to divide up the work. I’m having a bit of a moment with Component.search returning Components that I’m certain I’ve already removed. I’ve extracted the code into its own method, below.
def get_live_assignments(worker_id) do
dbg AssignmentWorker.search(worker_id)
|> Enum.filter(&AssignmentWorker.exists?(&1) )
end
I would expect search to not return records that would fail the exists? test, but that’s not what I’m seeing.
First - before removing any assignments:
[lib/taiichi/systems/worker_assignment_balancer.ex:14: Taiichi.Systems.WorkerAssignmentBalancer.get_live_assignments/1]
AssignmentWorker.search(worker_id) #=> ["9205100f-1308-4671-b8ea-a1601fc9275c", "a1399542-8bd1-4470-8892-4d4981a9a6b4"]
|> Enum.filter(&AssignmentWorker.exists?(&1)) #=> ["9205100f-1308-4671-b8ea-a1601fc9275c", "a1399542-8bd1-4470-8892-4d4981a9a6b4"]
All is good - the exists? filter returns both records returned by search. However, when I remove one of the assignments (in another System), there’s a mismatch:
[lib/taiichi/systems/worker_assignment_balancer.ex:14: Taiichi.Systems.WorkerAssignmentBalancer.get_live_assignments/1]
AssignmentWorker.search(worker_id) #=> ["9205100f-1308-4671-b8ea-a1601fc9275c", "a1399542-8bd1-4470-8892-4d4981a9a6b4"]
|> Enum.filter(&AssignmentWorker.exists?(&1)) #=> ["a1399542-8bd1-4470-8892-4d4981a9a6b4"]
Search is returning two records, while only one exists.
Here’s the definition for the Component, for reference:
defmodule Taiichi.Components.AssignmentWorker do
@moduledoc """
Tracks the worker who is on the assignment.
key = assignment_id, value = worker_id.
"""
use ECSx.Component,
value: :binary,
index: true
end
Besides that, I love the clarity and productivity that elixir and ECSx are bringing. I’ve built something where I can assign many people to a task, have them contribute to getting the work on the task done according to their own productivity, balance their assignments across many tasks and unassign them from completed tasks in just a few lines of code.
Any thoughts? I can always pipe calls to search into exists? but I’m worried I’m missing something obvious.
Trending in Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #elixirconf-us
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #hex
- #performance










First 5 of 5 Posts
APB9785
Hi again Mark, thanks for the kind words. Very happy to hear about your experience with Elixir + ECSx.
The issue you’re seeing appears to be a bug with ECSx.Component
:indexfeature. Should be a simple fix, but just to confirm, could you try the same steps again but withindex: falseon that component?hyperoceanic
Hi Andy - yes that solved it!
APB9785
Thanks for testing! I see the issue and should have the fix done later today or tomorrow.
APB9785
@hyperoceanic I just released v0.5.2 with the fix for this issue. Thanks for reporting it!
hyperoceanic
Many thanks, @APB9785!