Skip to content

Commit

Permalink
handle nil release version data
Browse files Browse the repository at this point in the history
  • Loading branch information
danielspofford committed Sep 3, 2024
1 parent 4315608 commit 564cb68
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 19 deletions.
75 changes: 61 additions & 14 deletions lib/peridiod/release.ex
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,22 @@ defmodule Peridiod.Release do

defimpl Jason.Encoder, for: Release do
def encode(%Release{} = release_metadata, opts) do
version =
case release_metadata.version do
nil -> nil
version -> Version.to_string(version)
end

version_requirement =
case release_metadata.version_requirement do
nil -> nil
version_requirement -> version_requirement.source
end

release_metadata
|> Map.take([:prn, :name, :version_requirement, :bundle_prn])
|> Map.put(:version, Version.to_string(release_metadata.version))
|> Map.put(:version_requirement, release_metadata.version_requirement.source)
|> Map.put(:version, version)
|> Map.put(:version_requirement, version_requirement)
|> Jason.Encode.map(opts)
end
end
Expand Down Expand Up @@ -69,16 +81,22 @@ defmodule Peridiod.Release do
end

def metadata_from_map(release_metadata) do
version =
case release_metadata["version"] do
nil -> nil
version -> Version.parse!(version)
end

version_requirement =
case Version.parse_requirement(release_metadata["version_requirement"]) do
{:ok, version_requirement} -> version_requirement
_ -> ""
case release_metadata["version_requirement"] do
nil -> nil
version_requirement -> Version.parse_requirement!(version_requirement)
end

%__MODULE__{
prn: release_metadata["prn"],
name: release_metadata["name"],
version: Version.parse!(release_metadata["version"]),
version: version,
version_requirement: version_requirement,
bundle_prn: release_metadata["bundle_prn"]
}
Expand All @@ -93,12 +111,24 @@ defmodule Peridiod.Release do
"manifest" => binaries,
"bundle" => bundle
}) do
version =
case release_metadata["version"] do
nil -> nil
version -> Version.parse!(version)
end

version_requirement =
case release_metadata["version_requirement"] do
nil -> nil
version_requirement -> Version.parse_requirement!(version_requirement)
end

{:ok,
%__MODULE__{
prn: release_metadata["prn"],
name: release_metadata["name"],
version: Version.parse!(release_metadata["version"]),
version_requirement: Version.parse_requirement!(release_metadata["version_requirement"]),
version: version,
version_requirement: version_requirement,
bundle_prn: bundle["prn"],
binaries: Enum.map(binaries, &Binary.metadata_from_manifest/1)
}}
Expand Down Expand Up @@ -160,27 +190,44 @@ defmodule Peridiod.Release do
Enum.filter(binaries, &(&1.target in [nil, "" | targets]))
end

def kv_progress(kv_pid \\ KV, %__MODULE__{} = release_metadata) do
def kv_progress(kv_pid \\ KV, %__MODULE__{prn: prn} = release_metadata) when not is_nil(prn) do
version =
case release_metadata.version do
nil -> ""
version -> Version.to_string(version)
end

KV.put_map(kv_pid, %{
"peridio_rel_progress" => release_metadata.prn,
"peridio_vsn_progress" => Version.to_string(release_metadata.version)
"peridio_vsn_progress" => version
})
end

def kv_advance(kv_pid \\ KV) do
KV.get_all_and_update(kv_pid, fn kv ->
rel_progress = Map.get(kv, "peridio_rel_progress")
vsn_progress = Map.get(kv, "peridio_vsn_progress")

vsn_progress =
case Map.get(kv, "peridio_vsn_progress") do
"" -> nil
vsn_progress -> vsn_progress
end

rel_current = Map.get(kv, "peridio_rel_current")
vsn_current = Map.get(kv, "peridio_vsn_current")

vsn_current =
case Map.get(kv, "peridio_vsn_current") do
"" -> nil
vsn_current -> vsn_current
end

kv
|> Map.put("peridio_rel_previous", rel_current)
|> Map.put("peridio_vsn_previous", vsn_current)
|> Map.put("peridio_rel_current", rel_progress)
|> Map.put("peridio_vsn_current", vsn_progress)
|> Map.put("peridio_rel_progress", "")
|> Map.put("peridio_vsn_progress", "")
|> Map.put("peridio_rel_progress", nil)
|> Map.put("peridio_vsn_progress", nil)
end)
end
end
28 changes: 24 additions & 4 deletions lib/peridiod/release/server.ex
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,23 @@ defmodule Peridiod.Release.Server do
poll_interval = config.release_poll_interval || @update_poll_interval
progress_message_interval = @progress_message_interval

current_release_prn = KV.get("peridio_rel_current") || ""
current_release_version = KV.get("peridio_vsn_current") || ""
progress_release_prn = KV.get("peridio_rel_progress")
current_release_prn =
case KV.get("peridio_rel_current") do
"" -> nil
peridio_rel_current -> peridio_rel_current
end

current_release_version =
case KV.get("peridio_vsn_current") do
"" -> nil
peridio_vsn_current -> peridio_vsn_current
end

progress_release_prn =
case KV.get("peridio_rel_progress") do
"" -> nil
peridio_rel_progress -> peridio_rel_progress
end

current_release = load_release_metadata_from_cache(current_release_prn, cache_pid)
progress_release = load_release_metadata_from_cache(progress_release_prn, cache_pid)
Expand Down Expand Up @@ -546,10 +560,16 @@ defmodule Peridiod.Release.Server do
Release.stamp_installed(state.cache_pid, release_metadata)
Release.kv_advance(state.kv_pid)

version =
case release_metadata.version do
nil -> nil
version -> Version.to_string(version)
end

sdk_client =
state.sdk_client
|> Map.put(:release_prn, release_metadata.prn)
|> Map.put(:release_version, Version.to_string(release_metadata.version))
|> Map.put(:release_version, version)

try_send(callback, {__MODULE__, :install, release_metadata.prn, :complete})

Expand Down
2 changes: 1 addition & 1 deletion mix.lock
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"},
"parse_trans": {:hex, :parse_trans, "3.4.1", "6e6aa8167cb44cc8f39441d05193be6e6f4e7c2946cb2759f015f8c56b76e5ff", [:rebar3], [], "hexpm", "620a406ce75dada827b82e453c19cf06776be266f5a67cff34e1ef2cbb60e49a"},
"peridio_rat": {:git, "https://github.com/peridio/peridio-rat.git", "6ed7b060710c4c59ae732c8d709d4a6ffee9a402", [branch: "main"]},
"peridio_sdk": {:git, "https://github.com/peridio/peridio-elixir.git", "3a83f3b05a0358b54f7a70ef5e7e35bb9ef0d4ef", [branch: "main"]},
"peridio_sdk": {:git, "https://github.com/peridio/peridio-elixir.git", "9879551099b990071b9592c2547b01aabdfa14ba", [branch: "main"]},
"peridiod_persistence": {:git, "https://github.com/peridio/peridiod-persistence.git", "54ae22de2c78d8832f6cb6c447da135008918f8c", [branch: "main"]},
"plug": {:hex, :plug, "1.16.1", "40c74619c12f82736d2214557dedec2e9762029b2438d6d175c5074c933edc9d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a13ff6b9006b03d7e33874945b2755253841b238c34071ed85b0e86057f8cddc"},
"plug_cowboy": {:hex, :plug_cowboy, "2.7.1", "87677ffe3b765bc96a89be7960f81703223fe2e21efa42c125fcd0127dd9d6b2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "02dbd5f9ab571b864ae39418db7811618506256f6d13b4a45037e5fe78dc5de3"},
Expand Down

0 comments on commit 564cb68

Please sign in to comment.