Skip to content

Commit 761a319

Browse files
committed
refactor(RM): move install_simple_trigger
Moves `install_simple_trigger` to `exandra` and `ecto` Signed-off-by: Luca Zaninotto <luca.zaninotto@secomind.com>
1 parent d80a3eb commit 761a319

File tree

3 files changed

+53
-41
lines changed

3 files changed

+53
-41
lines changed

apps/astarte_realm_management/lib/astarte_realm_management/astarte/kv_store.ex

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,16 @@ defmodule Astarte.RealmManagement.Astarte.KvStore do
5353
Keyword.t()
5454
) :: :ok | {:error, Exception.t()}
5555
def insert(kv_store_map, opts \\ []) do
56+
{keyspace, opts} = Keyword.pop!(opts, :prefix)
57+
58+
{sql, params} = insert_sql(kv_store_map, keyspace)
59+
60+
with {:ok, _} <- Repo.query(sql, params, opts) do
61+
:ok
62+
end
63+
end
64+
65+
def insert_sql(kv_store_map, keyspace) do
5666
%{
5767
group: group,
5868
key: key,
@@ -69,8 +79,6 @@ defmodule Astarte.RealmManagement.Astarte.KvStore do
6979
:string -> "varcharAsBlob(?)"
7080
end
7181

72-
{keyspace, opts} = Keyword.pop!(opts, :prefix)
73-
7482
sql =
7583
"""
7684
INSERT INTO #{keyspace}.#{@source} (group, key, value)
@@ -79,9 +87,7 @@ defmodule Astarte.RealmManagement.Astarte.KvStore do
7987

8088
params = [group, key, value]
8189

82-
with {:ok, _} <- Repo.query(sql, params, opts) do
83-
:ok
84-
end
90+
{sql, params}
8591
end
8692

8793
@spec fetch_value(String.t(), String.t(), value_type(), Keyword.t()) ::

apps/astarte_realm_management/lib/astarte_realm_management/engine.ex

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,8 @@ defmodule Astarte.RealmManagement.Engine do
508508
t_container = build_trigger_target_container(trigger_target),
509509
:ok <- validate_simple_triggers(realm_name, simple_trigger_maps),
510510
# TODO: these should be batched together
511-
:ok <- install_simple_triggers(client, simple_trigger_maps, trigger_uuid, t_container),
511+
:ok <-
512+
install_simple_triggers(realm_name, simple_trigger_maps, trigger_uuid, t_container),
512513
:ok <- install_trigger_policy_link(client, trigger_uuid, trigger_policy_name, realm_name) do
513514
_ =
514515
Logger.info("Installing trigger.",
@@ -672,7 +673,7 @@ defmodule Astarte.RealmManagement.Engine do
672673
end
673674
end
674675

675-
defp install_simple_triggers(client, simple_trigger_maps, trigger_uuid, trigger_target) do
676+
defp install_simple_triggers(realm_name, simple_trigger_maps, trigger_uuid, trigger_target) do
676677
Enum.reduce_while(simple_trigger_maps, :ok, fn
677678
simple_trigger_map, _acc ->
678679
%{
@@ -683,7 +684,7 @@ defmodule Astarte.RealmManagement.Engine do
683684
} = simple_trigger_map
684685

685686
case Queries.install_simple_trigger(
686-
client,
687+
realm_name,
687688
object_id,
688689
object_type,
689690
trigger_uuid,

apps/astarte_realm_management/lib/astarte_realm_management/queries.ex

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -920,52 +920,57 @@ defmodule Astarte.RealmManagement.Queries do
920920
end
921921

922922
def install_simple_trigger(
923-
client,
923+
realm_name,
924924
object_id,
925925
object_type,
926926
parent_trigger_id,
927927
simple_trigger_id,
928928
simple_trigger,
929929
trigger_target
930930
) do
931+
keyspace = Realm.keyspace_name(realm_name)
932+
931933
insert_simple_trigger_statement = """
932-
INSERT INTO simple_triggers
934+
INSERT INTO #{keyspace}.simple_triggers
933935
(object_id, object_type, parent_trigger_id, simple_trigger_id, trigger_data, trigger_target)
934-
VALUES (:object_id, :object_type, :parent_trigger_id, :simple_trigger_id, :simple_trigger_data, :trigger_target_data);
936+
VALUES (?, ?, ?, ?, ?, ?);
935937
"""
936938

937-
insert_simple_trigger_query =
938-
DatabaseQuery.new()
939-
|> DatabaseQuery.statement(insert_simple_trigger_statement)
940-
|> DatabaseQuery.put(:object_id, object_id)
941-
|> DatabaseQuery.put(:object_type, object_type)
942-
|> DatabaseQuery.put(:parent_trigger_id, parent_trigger_id)
943-
|> DatabaseQuery.put(:simple_trigger_id, simple_trigger_id)
944-
|> DatabaseQuery.put(:simple_trigger_data, SimpleTriggerContainer.encode(simple_trigger))
945-
|> DatabaseQuery.put(:trigger_target_data, TriggerTargetContainer.encode(trigger_target))
946-
947-
astarte_ref = %AstarteReference{
948-
object_type: object_type,
949-
object_uuid: object_id
950-
}
951-
952-
insert_simple_trigger_by_uuid_statement =
953-
"INSERT INTO kv_store (group, key, value) VALUES ('simple-triggers-by-uuid', :simple_trigger_id, :astarte_ref);"
939+
insert_params = [
940+
object_id,
941+
object_type,
942+
parent_trigger_id,
943+
simple_trigger_id,
944+
SimpleTriggerContainer.encode(simple_trigger),
945+
TriggerTargetContainer.encode(trigger_target)
946+
]
954947

955-
insert_simple_trigger_by_uuid_query =
956-
DatabaseQuery.new()
957-
|> DatabaseQuery.statement(insert_simple_trigger_by_uuid_statement)
958-
|> DatabaseQuery.put(:simple_trigger_id, :uuid.uuid_to_string(simple_trigger_id))
959-
|> DatabaseQuery.put(:astarte_ref, AstarteReference.encode(astarte_ref))
948+
astarte_ref =
949+
%AstarteReference{
950+
object_type: object_type,
951+
object_uuid: object_id
952+
}
953+
|> AstarteReference.encode()
954+
955+
simple_trigger_id =
956+
simple_trigger_id
957+
|> :uuid.uuid_to_string()
958+
|> to_string()
959+
960+
kv_insert =
961+
%{
962+
group: "simple-triggers-by-uuid",
963+
key: simple_trigger_id,
964+
value: astarte_ref
965+
}
966+
|> KvStore.insert_sql(keyspace)
960967

961-
with {:ok, _res} <- DatabaseQuery.call(client, insert_simple_trigger_query),
962-
{:ok, _res} <- DatabaseQuery.call(client, insert_simple_trigger_by_uuid_query) do
963-
:ok
964-
else
965-
not_ok ->
966-
_ = Logger.warning("Database error: #{inspect(not_ok)}.", tag: "db_error")
967-
{:error, :cannot_install_simple_trigger}
968-
end
968+
Exandra.execute_batch(
969+
Repo,
970+
%Exandra.Batch{
971+
queries: [{insert_simple_trigger_statement, insert_params}, kv_insert]
972+
}
973+
)
969974
end
970975

971976
def install_trigger_policy_link(_client, _trigger_uuid, nil) do

0 commit comments

Comments
 (0)