c67c31e543
In the client's `(*csiHook) Postrun()` method, we make an unpublish RPC that includes a claim in the `CSIVolumeClaimStateUnpublishing` state and using the mode from the client. But then in the `(*CSIVolume) Unpublish` RPC handler, we query the volume from the state store (because we only get an ID from the client). And when we make the client RPC for the node unpublish step, we use the _current volume's_ view of the mode. If the volume's mode has been changed before the old allocations can have their claims released, then we end up making a CSI RPC that will never succeed. Why does this code path get the mode from the volume and not the claim? Because the claim written by the GC job in `(*CoreScheduler) csiVolumeClaimGC` doesn't have a mode. Instead it just writes a claim in the unpublishing state to ensure the volumewatcher detects a "past claim" change and reaps all the claims on the volumes. Fix this by ensuring that the `CSIVolumeDenormalize` creates past claims for all nil allocations with a correct access mode set. |
||
---|---|---|
.. | ||
deploymentwatcher | ||
drainer | ||
mock | ||
state | ||
stream | ||
structs | ||
volumewatcher | ||
acl.go | ||
acl_endpoint.go | ||
acl_endpoint_test.go | ||
acl_test.go | ||
alloc_endpoint.go | ||
alloc_endpoint_test.go | ||
autopilot.go | ||
autopilot_test.go | ||
blocked_evals.go | ||
blocked_evals_stats.go | ||
blocked_evals_stats_test.go | ||
blocked_evals_system.go | ||
blocked_evals_test.go | ||
client_agent_endpoint.go | ||
client_agent_endpoint_test.go | ||
client_alloc_endpoint.go | ||
client_alloc_endpoint_test.go | ||
client_csi_endpoint.go | ||
client_csi_endpoint_test.go | ||
client_fs_endpoint.go | ||
client_fs_endpoint_test.go | ||
client_rpc.go | ||
client_rpc_test.go | ||
client_stats_endpoint.go | ||
client_stats_endpoint_test.go | ||
config.go | ||
consul.go | ||
consul_oss_test.go | ||
consul_policy.go | ||
consul_policy_oss_test.go | ||
consul_policy_test.go | ||
consul_test.go | ||
core_sched.go | ||
core_sched_test.go | ||
csi_endpoint.go | ||
csi_endpoint_test.go | ||
deployment_endpoint.go | ||
deployment_endpoint_test.go | ||
deployment_watcher_shims.go | ||
drainer_int_test.go | ||
drainer_shims.go | ||
endpoints_oss.go | ||
eval_broker.go | ||
eval_broker_test.go | ||
eval_endpoint.go | ||
eval_endpoint_test.go | ||
event_endpoint.go | ||
event_endpoint_test.go | ||
fsm.go | ||
fsm_oss.go | ||
fsm_registry_oss.go | ||
fsm_test.go | ||
heartbeat.go | ||
heartbeat_test.go | ||
job_endpoint.go | ||
job_endpoint_hook_connect.go | ||
job_endpoint_hook_connect_test.go | ||
job_endpoint_hook_expose_check.go | ||
job_endpoint_hook_expose_check_test.go | ||
job_endpoint_hooks.go | ||
job_endpoint_oss.go | ||
job_endpoint_oss_test.go | ||
job_endpoint_test.go | ||
leader.go | ||
leader_oss.go | ||
leader_test.go | ||
merge.go | ||
namespace_endpoint.go | ||
namespace_endpoint_test.go | ||
node_endpoint.go | ||
node_endpoint_test.go | ||
operator_endpoint.go | ||
operator_endpoint_test.go | ||
periodic.go | ||
periodic_endpoint.go | ||
periodic_endpoint_test.go | ||
periodic_test.go | ||
plan_apply.go | ||
plan_apply_oss.go | ||
plan_apply_pool.go | ||
plan_apply_pool_test.go | ||
plan_apply_test.go | ||
plan_endpoint.go | ||
plan_endpoint_test.go | ||
plan_normalization_test.go | ||
plan_queue.go | ||
plan_queue_test.go | ||
raft_rpc.go | ||
regions_endpoint.go | ||
regions_endpoint_test.go | ||
rpc.go | ||
rpc_test.go | ||
scaling_endpoint.go | ||
scaling_endpoint_test.go | ||
search_endpoint.go | ||
search_endpoint_oss.go | ||
search_endpoint_test.go | ||
serf.go | ||
serf_test.go | ||
server.go | ||
server_setup_oss.go | ||
server_test.go | ||
stats_fetcher.go | ||
stats_fetcher_test.go | ||
status_endpoint.go | ||
status_endpoint_test.go | ||
system_endpoint.go | ||
system_endpoint_test.go | ||
testing.go | ||
testing_oss.go | ||
timetable.go | ||
timetable_test.go | ||
util.go | ||
util_test.go | ||
vault.go | ||
vault_test.go | ||
vault_testing.go | ||
worker.go | ||
worker_string_schedulerworkerstatus.go | ||
worker_string_workerstatus.go | ||
worker_test.go |