this repo has no description
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Fix older tlogs not being added to the cluster in Manager

garrison 7a930793 0319e107

+16 -3
+16 -3
lib/servers/manager.ex
··· 210 210 :ok 211 211 end 212 212 213 - defp on_tlog_ping(%State{} = state, %TLogStatus{}) when state.cluster.status == :normal do 213 + defp on_tlog_ping(%State{} = state, %TLogStatus{} = tlog_status) when state.cluster.status == :normal do 214 + # We keep adding old TLogs back to the cluster as they come back, even if recovery is already complete 215 + # Otherwise the cluster could get stuck as Storage servers might never learn their pids 216 + state = add_tlog_to_cluster(state, tlog_status) 214 217 state 215 218 end 216 219 ··· 218 221 assert state.cluster.status == :recovering 219 222 assert length(state.cluster.tlog_generations) > 0 220 223 224 + state = add_tlog_to_cluster(state, status) 225 + 221 226 %TLogGeneration{} = latest_generation = hd(state.cluster.tlog_generations) 222 227 223 228 case status.id in latest_generation.tlog_ids do ··· 230 235 true -> 231 236 case Enum.any?(state.recovered_tlogs, &(&1.id == status.id)) do 232 237 false -> 233 - server = %Server{type: Hobbes.Servers.TLog, id: status.id, pid: status.pid} 234 - state = put_in(state.cluster.servers[server.id], server) 235 238 %{state | recovered_tlogs: [status | state.recovered_tlogs]} 236 239 |> maybe_start_generation() 237 240 ··· 243 246 244 247 # Old TLog, not needed for recovery 245 248 false -> state 249 + end 250 + end 251 + 252 + defp add_tlog_to_cluster(%State{} = state, %TLogStatus{} = status) do 253 + case Map.has_key?(state.cluster.servers, status.id) do 254 + false -> 255 + server = %Server{type: Hobbes.Servers.TLog, id: status.id, pid: status.pid} 256 + put_in(state.cluster.servers[server.id], server) 257 + 258 + true -> state 246 259 end 247 260 end 248 261