Packages

An Elixir framework to build your own in-house PaaS (Platform as a Service).

Current section

Files

Jump to
antikythera core executor_pool id.ex
Raw

core/executor_pool/id.ex

# Copyright(c) 2015-2018 ACCESS CO., LTD. All rights reserved.
use Croma
defmodule AntikytheraCore.ExecutorPool.Id do
alias Antikythera.{Env, GearName, TenantId}
alias Antikythera.ExecutorPool.Id, as: EPoolId
@type reason :: {:invalid_executor_pool, EPoolId.t} | {:unavailable_tenant, TenantId.t}
defun validate_association(epool_id :: v[EPoolId.t], gear_name :: v[GearName.t]) :: {:ok, EPoolId.t} | {:error, reason} do
case epool_id do
{:gear, ^gear_name} -> {:ok, epool_id}
{:tenant, tenant_id} -> find_tenant_executor_pool_id(tenant_id, gear_name)
_ -> {:error, {:invalid_executor_pool, epool_id}}
end
end
if Env.compiling_for_release?() do
defp find_tenant_executor_pool_id(tenant_id, gear_name) do
alias AntikytheraCore.Ets.TenantToGearsMapping
if TenantToGearsMapping.associated?(tenant_id, gear_name) do
{:ok, {:tenant, tenant_id}}
else
{:error, {:unavailable_tenant, tenant_id}}
end
end
else
# If not for release, fall back to gear executor pool (since correctly setting-up tenant executor pools is hard)
defp find_tenant_executor_pool_id(_tenant_id, gear_name), do: {:ok, {:gear, gear_name}}
end
end