Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Do polling based file watching for NFS on linux #2171

Merged
merged 1 commit into from Sep 26, 2018

Conversation

Projects
None yet
3 participants
@vasporig
Copy link
Contributor

vasporig commented Jul 31, 2018

Add the ability to detect changes to the opened database if it's on NFS ( linux only ).

@jsachs referred to this fix

Description

Only on linux: before opening a database, check the type of the filesystem and if it's NFS use a polling FileSystemWatcher instead of the (default) inotify based one to detect changes.

Motivation and context

I'm running KeePassXC in an NFS environment.

How has this been tested?

Manually.

Screenshots (if appropriate):

Types of changes

  • Bug fix (non-breaking change which fixes an issue)

Checklist:

  • I have read the CONTRIBUTING document. [REQUIRED]
  • My code follows the code style of this project. [REQUIRED]
  • All new and existing tests passed. [REQUIRED]
  • I have compiled and verified my code with -DWITH_ASAN=ON. [REQUIRED]

@droidmonkey droidmonkey requested review from droidmonkey and phoerious Aug 1, 2018

@phoerious
Copy link
Member

phoerious left a comment

Thanks for your contribution. Please see attached comments.

@@ -1215,6 +1215,21 @@ void DatabaseWidget::updateFilePath(const QString& filePath)
m_fileWatcher.removePath(m_filePath);
}

#if defined(__linux) || defined(__linux__) || defined(linux)

This comment has been minimized.

Copy link
@phoerious

phoerious Aug 2, 2018

Member

Please use the Q_OS_LINUX def that Qt provides or Q_OS_UNIX if this also applies to other *nixes.

This comment has been minimized.

Copy link
@vasporig

vasporig Aug 3, 2018

Author Contributor

I will change it to Q_OS_LINUX as statfs is only available on linux.

@@ -24,6 +24,10 @@
#include <QStackedWidget>
#include <QTimer>

#if defined(__linux) || defined(__linux__) || defined(linux)

This comment has been minimized.

Copy link
@phoerious

phoerious Aug 2, 2018

Member

See above. Is this header available on other *nix platforms? If not, are there alternatives?

@vasporig vasporig force-pushed the vasporig:feature/nfs-polling branch from b86f14b to c9208ee Aug 3, 2018

@vasporig

This comment has been minimized.

Copy link
Contributor Author

vasporig commented Aug 8, 2018

The Windows implementation of the QFilesystemWatcher is based on FindFirstChangeNotification, which has the same problem:
"Notifications may not be returned when calling FindFirstChangeNotification for a remote file system" (MSDN)
It is easy to do the check with PathIsNetworkPath() and enable polling when needed.

I will add this as well.

@droidmonkey

This comment has been minimized.

Copy link
Member

droidmonkey commented Sep 19, 2018

@phoerious please update your review

@droidmonkey droidmonkey changed the title Do polling based file watching for NFS on linux, resolves #1799 Do polling based file watching for NFS on linux Sep 19, 2018

@droidmonkey droidmonkey force-pushed the vasporig:feature/nfs-polling branch from c9208ee to 443bbef Sep 19, 2018

@droidmonkey droidmonkey force-pushed the vasporig:feature/nfs-polling branch from 443bbef to 8a25d4d Sep 26, 2018

@droidmonkey droidmonkey merged commit 61d7e6b into keepassxreboot:develop Sep 26, 2018

1 of 2 checks passed

Ubuntu Linux (KeepassXC) TeamCity build started
Details
CodeFactor No issues found.
Details

droidmonkey added a commit that referenced this pull request Mar 19, 2019

Release 2.4.0
- New Database Wizard [#1952]
- Advanced Search [#1797]
- Automatic update checker [#2648]
- KeeShare database synchronization [#2109, #1992, #2738, #2742, #2746, #2739]
- Improve favicon fetching; transition to Duck-Duck-Go [#2795, #2011, #2439]
- Remove KeePassHttp support [#1752]
- CLI: output info to stderr for easier scripting [#2558]
- CLI: Add --quiet option [#2507]
- CLI: Add create command [#2540]
- CLI: Add recursive listing of entries [#2345]
- CLI: Fix stdin/stdout encoding on Windows [#2425]
- SSH Agent: Support OpenSSH for Windows [#1994]
- macOS: TouchID Quick Unlock [#1851]
- macOS: Multiple improvements; include CLI in DMG [#2165, #2331, #2583]
- Linux: Prevent Klipper from storing secrets in clipboard [#1969]
- Linux: Use polling based file watching for NFS [#2171]
- Linux: Enable use of browser plugin in Snap build [#2802]
- TOTP QR Code Generator [#1167]
- High-DPI Scaling for 4k screens [#2404]
- Make keyboard shortcuts more consistent [#2431]
- Warn user if deleting referenced entries [#1744]
- Allow toolbar to be hidden and repositioned [#1819, #2357]
- Increase max allowed database timeout to 12 hours [#2173]
- Password generator uses existing password length by default [#2318]
- Improve alert message box button labels [#2376]
- Show message when a database merge makes no changes [#2551]
- Browser Integration Enhancements [#1497, #2253, #1904, #2232, #1850, #2218, #2391, #2396, #2542, #2622, #2637, #2790]
- Overall Code Improvements [#2316, #2284, #2351, #2402, #2410, #2419, #2422, #2443, #2491, #2506, #2610, #2667, #2709, #2731]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.