win_stat: add explicit error message when file is in use (#27826)
* win_stat: add explicit error message when file is in use * make the lock last a bit longer
This commit is contained in:
parent
3ceeb5124e
commit
107e177658
2 changed files with 32 additions and 2 deletions
|
@ -168,11 +168,19 @@ If (Test-Path -Path $path)
|
||||||
$result.stat.size = $info.Length
|
$result.stat.size = $info.Length
|
||||||
|
|
||||||
If ($get_md5) {
|
If ($get_md5) {
|
||||||
$result.stat.md5 = Get-FileChecksum -path $path -algorithm "md5"
|
try {
|
||||||
|
$result.stat.md5 = Get-FileChecksum -path $path -algorithm "md5"
|
||||||
|
} catch {
|
||||||
|
Fail-Json -obj $result -message "failed to get MD5 hash of file, set get_md5 to False to ignore this error: $($_.Exception.Message)"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
If ($get_checksum) {
|
If ($get_checksum) {
|
||||||
$result.stat.checksum = Get-FileChecksum -path $path -algorithm $checksum_algorithm
|
try {
|
||||||
|
$result.stat.checksum = Get-FileChecksum -path $path -algorithm $checksum_algorithm
|
||||||
|
} catch {
|
||||||
|
Fail-Json -obj $result -message "failed to get hash of file, set get_checksum to False to ignore this error: $($_.Exception.Message)"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -537,7 +537,29 @@
|
||||||
- win_stat_no_args.msg
|
- win_stat_no_args.msg
|
||||||
- not win_stat_no_args|changed
|
- not win_stat_no_args|changed
|
||||||
|
|
||||||
|
- name: ensure file that will be in use is deleted before test
|
||||||
|
win_file:
|
||||||
|
path: '{{win_stat_dir}}\in_use'
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: lock file in the background for next task
|
||||||
|
win_command: powershell.exe "$data = 'abcdefghijklmnopqrstuvwxyz' * 1024; $file = [System.IO.File]::Open('{{win_stat_dir}}\in_use', 'OpenOrCreate', 'ReadWrite', 'None'); $writer = New-Object IO.StreamWriter($file); $start = Get-Date; while (((Get-Date) - $start).TotalSeconds -lt 15) { $writer.WriteLine($data) }; $writer.Close(); $file.Close()"
|
||||||
|
async: 20
|
||||||
|
poll: 0
|
||||||
|
register: a
|
||||||
|
|
||||||
|
- name: fail to get stat of file in use
|
||||||
|
win_stat:
|
||||||
|
path: '{{win_stat_dir}}\in_use'
|
||||||
|
get_md5: False
|
||||||
|
register: fail_file_in_use
|
||||||
|
failed_when: "'failed to get hash of file' not in fail_file_in_use.msg"
|
||||||
|
|
||||||
- name: remove testing folder
|
- name: remove testing folder
|
||||||
win_file:
|
win_file:
|
||||||
path: "{{win_output_dir}}\\win_stat"
|
path: "{{win_output_dir}}\\win_stat"
|
||||||
state: absent
|
state: absent
|
||||||
|
register: cleanup
|
||||||
|
retries: 3 # in case async task is still running, try 3 times
|
||||||
|
delay: 5
|
||||||
|
until: not cleanup|failed
|
||||||
|
|
Loading…
Reference in a new issue