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

workspaces and windows clients: README.md, Readme.md, or readme.md #1755

Closed
r2evans opened this issue Jan 24, 2020 · 3 comments
Closed

workspaces and windows clients: README.md, Readme.md, or readme.md #1755

r2evans opened this issue Jan 24, 2020 · 3 comments

Comments

@r2evans
Copy link
Contributor

r2evans commented Jan 24, 2020

Related issue: #1204, though that suggests (1) specific to the Notes app, and (2) affected by a Veracrypt encrypted volume on the windows side.

Expected behaviour

When using the new Workspaces, a single Readme.md file (in whatever case) is referenced (and the filename case preserved).

Actual behaviour

When a Readme.md file is created on the server, the windows client then requests/syncs all three of README.md , Readme.md, and readme.md. Since windows' filesystem is not case-sensitive, this causes collisions and errors. While this does not prevent syncing of other files/folders, it does produce an error (and notification) every time the client attempts to sync.

Steps to reproduce

  1. Install NC18.
  2. In the web-interface navigate to a directory, click into the workspace area at the top. This causes NC server to create a Readme.md file (regardless of content).
  3. Have a windows client syncing that folder.

Client configuration

Client version: 2.6.2stable-Win64 (build 20191224)

Operating system: win10 (64)

OS language: english

Installation path of client: C:\Program Files\Nextcloud\nextcloud.exe

Server configuration

Nextcloud version: 18.0.0

Storage backend (external storage): none

Logs

1. Client logfile:
[OCC::FolderMan::scheduleFolderNext 	Schedule folder  "2"  to sync! Front-of-queue.
[OCC::ownCloudGui::slotSyncStateChange 	Sync state changed for folder  "https://oc.mydomain.com/subdir/remote.php/webdav/" :  "Not yet Started"
[OCC::AccessManager::createRequest 	2 "" "https://oc.mydomain.com/subdir/ocs/v2.php/apps/notifications/api/v2/notifications?format=json" has X-Request-ID "f445827a-267f-414f-9209-9f59666845d7"
[OCC::AbstractNetworkJob::start 	OCC::JsonApiJob created for "https://oc.mydomain.com/oc" + "ocs/v2.php/apps/notifications/api/v2/notifications" "OCC::ServerNotificationHandler"
[OCC::FolderMan::startScheduledSyncSoon 	Starting the next scheduled sync in 0 seconds
[OCC::SocketListener::sendMessage 	Sending SocketAPI message --> "STATUS:OK:C:\\Users\\r2\\oc\\somedir" to QLocalSocket(0x280793a0150)
[OCC::SocketListener::sendMessage 	Sending SocketAPI message --> "UPDATE_VIEW:C:\\Users\\r2\\oc\\somedir" to QLocalSocket(0x280793a0150)
[OCC::SocketListener::sendMessage 	Sending SocketAPI message --> "UPDATE_VIEW:C:\\Users\\r2\\oc\\somedir" to QLocalSocket(0x280793a0210)
[OCC::ownCloudGui::slotSyncStateChange 	Sync state changed for folder  "https://oc.mydomain.com/subdir/remote.php/webdav/" :  "SyncPrepare"
[OCC::Folder::startSync 	*** Start syncing  "https://oc.mydomain.com/subdir/remote.php/webdav/"  - client version 2.6.2stable-Win64 (build 20191224)
[OCC::Folder::startSync 	Allowing local discovery to read from the database
[OCC::FolderMan::slotFolderSyncStarted 	>========== Sync started for folder [oc\somedir] of account [[email protected]] with remote [https://oc.mydomain.com/subdir/remote.php/webdav/]
[OCC::SyncEngine::startSync 	There are 175545999360 bytes available at "C:/Users/r2/subdir/somedir/"
[OCC::SyncEngine::startSync 	Sync with existing sync journal
[OCC::SyncEngine::startSync 	"Using Qt 5.12.5 SSL library OpenSSL 1.1.1d  10 Sep 2019 on Windows 10 (10.0)"
[OCC::SyncEngine::startSync 	Using Selective Sync
[OCC::SyncEngine::startSync 	#### Discovery start ####################################################
[OCC::SyncEngine::startSync 	Server "18.0.0.10" 
[csync_update 	## Starting local discovery ##
[fill_tree_from_db 	2807 entries read below path  from db.
[csync_update 	Update detection for local replica took 0.019 seconds walking 2807 files
[csync_update 	## Starting remote discovery ##
[OCC::AccessManager::createRequest 	6 "PROPFIND" "https://oc.mydomain.com/subdir/remote.php/webdav/" has X-Request-ID "36cd03b9-113d-44c0-b307-22bc2592bac2"
[OCC::AbstractNetworkJob::start 	OCC::LsColJob created for "https://oc.mydomain.com/oc" + "" "OCC::DiscoverySingleDirectoryJob"
[OCC::WebFlowCredentials::slotFinished 	request finished
[OCC::JsonApiJob::finished 	JsonApiJob of QUrl("https://oc.mydomain.com/subdir/ocs/v2.php/apps/notifications/api/v2/notifications?format=json") FINISHED WITH STATUS "OK"
[OCC::JsonApiJob::finished 	Nothing changed so nothing to retrieve - status code:  304
[OCC::ServerNotificationHandler::slotNotificationsReceived 	Status code  304  Not Modified - No new notifications.
[OCC::WebFlowCredentials::slotFinished 	request finished
[OCC::LsColJob::finished 	LSCOL of QUrl("https://oc.mydomain.com/subdir/remote.php/webdav/") FINISHED WITH STATUS "OK"
...
[fill_tree_from_db 	13 entries read below path local from db.
[_csync_detect_update 	Database entry found for r2, compare: 1579890418 <-> 1579890379, etag: 5e2b36f26d87a <-> 5e2b36cbd66c6, inode: 0 <-> 9814, size: 0 <-> 0, perms: fd <-> fd, checksum:  <->  , ignore: 0,  e2e: 
[_csync_detect_update 	file: r2, instruction: INSTRUCTION_EVAL <<=
[OCC::AccessManager::createRequest 	6 "PROPFIND" "https://oc.mydomain.com/subdir/remote.php/webdav/r2" has X-Request-ID "5f79f151-905f-4752-af33-35a20bb9875a"
[OCC::AbstractNetworkJob::start 	OCC::LsColJob created for "https://oc.mydomain.com/oc" + "/r2" "OCC::DiscoverySingleDirectoryJob"
[OCC::WebFlowCredentials::slotFinished 	request finished
[OCC::LsColJob::finished 	LSCOL of QUrl("https://oc.mydomain.com/subdir/remote.php/webdav/r2") FINISHED WITH STATUS "OK"
...
[_csync_detect_update 	Checking for rename based on fileid 0008595750d74b05873f4
[_csync_detect_update 	file: r2/readme.md, instruction: INSTRUCTION_NEW <<=
...
[csync_ftw 	 <= Closing walk for r2 with read_from_db 0
[_csync_detect_update 	Database entry found for readme.md, compare: 1579798661 <-> 1579798661, etag: c94050313f85215ee1b3664f9d4613de <-> c94050313f85215ee1b3664f9d4613de, inode: 0 <-> 40955, size: 1 <-> 1, perms: 9f <-> 9f, checksum:  <->  , ignore: 0,  e2e: 
[_csync_detect_update 	file: readme.md, instruction: INSTRUCTION_NONE <<=
...
[csync_ftw 	 <= Closing walk for  with read_from_db 0
[csync_update 	Update detection for remote replica took 0.406 seconds walking 2810 files
[OCC::SyncEngine::slotDiscoveryJobFinished 	#### Discovery end ####################################################  451 ms
[csync_reconcile 	Reconciliation for local replica took  0 seconds visiting  2807  files.
[_csync_merge_algorithm_visitor 	INSTRUCTION_NEW                server file: r2/Readme.md
[_csync_merge_algorithm_visitor 	INSTRUCTION_UPDATE_METADATA    server dir:  r2
[_csync_merge_algorithm_visitor 	INSTRUCTION_NEW                server file: r2/README.md
[_csync_merge_algorithm_visitor 	INSTRUCTION_NEW                server file: r2/readme.md
[csync_reconcile 	Reconciliation for remote replica took  0.001 seconds visiting  2810  files.
[OCC::SyncEngine::slotDiscoveryJobFinished 	#### Reconcile end ####################################################  455 ms
[OCC::SyncEngine::slotDiscoveryJobFinished 	Permissions of the root folder:  "DNVCKR"
[OCC::SocketListener::sendMessage 	Sending SocketAPI message --> "STATUS:OK:C:\\Users\\r2\\oc\\somedir\\r2" to QLocalSocket(0x280793a0150)
[OCC::SocketListener::sendMessage 	Sending SocketAPI message --> "STATUS:SYNC:C:\\Users\\r2\\oc\\somedir\\r2" to QLocalSocket(0x280793a0150)
[OCC::SocketListener::sendMessage 	Sending SocketAPI message --> "STATUS:SYNC:C:\\Users\\r2\\oc\\somedir" to QLocalSocket(0x280793a0150)
[OCC::SocketListener::sendMessage 	Sending SocketAPI message --> "STATUS:SYNC:C:\\Users\\r2\\oc\\somedir" to QLocalSocket(0x280793a0150)
[OCC::SyncEngine::slotDiscoveryJobFinished 	#### Post-Reconcile end ####################################################  467 ms
[OCC::Folder::slotSyncStarted 	#### Propagation start ####################################################
[OCC::ownCloudGui::slotSyncStateChange 	Sync state changed for folder  "https://oc.mydomain.com/subdir/remote.php/webdav/" :  "Sync Running"
[OCC::PropagateItemJob::scheduleSelfOrChild 	Starting INSTRUCTION_NEW propagation of "r2/README.md" by OCC::PropagateDownloadFile(0x28009b3bf90)
[OCC::AccessManager::createRequest 	2 "" "https://oc.mydomain.com/subdir/remote.php/webdav/r2/README.md" has X-Request-ID "744c5832-b365-427d-abf2-67ad47a5cde7"
[OCC::AbstractNetworkJob::start 	OCC::GETFileJob created for "https://oc.mydomain.com/oc" + "/r2/README.md" "OCC::PropagateDownloadFile"
[OCC::PropagateItemJob::scheduleSelfOrChild 	Starting INSTRUCTION_NEW propagation of "r2/Readme.md" by OCC::PropagateDownloadFile(0x28009b3b270)
[OCC::AccessManager::createRequest 	2 "" "https://oc.mydomain.com/subdir/remote.php/webdav/r2/Readme.md" has X-Request-ID "f870b08a-1737-4512-84c2-75081cd69fbc"
[OCC::AbstractNetworkJob::start 	OCC::GETFileJob created for "https://oc.mydomain.com/oc" + "/r2/Readme.md" "OCC::PropagateDownloadFile"
[OCC::PropagateItemJob::scheduleSelfOrChild 	Starting INSTRUCTION_NEW propagation of "r2/readme.md" by OCC::PropagateDownloadFile(0x28009b3bae0)
[OCC::AccessManager::createRequest 	2 "" "https://oc.mydomain.com/subdir/remote.php/webdav/r2/readme.md" has X-Request-ID "eaeeff35-96a2-4761-b9df-cb1fc4c2806a"
[OCC::AbstractNetworkJob::start 	OCC::GETFileJob created for "https://oc.mydomain.com/oc" + "/r2/readme.md" "OCC::PropagateDownloadFile"
[OCC::WebFlowCredentials::slotFinished 	request finished
[OCC::ComputeChecksum::start 	Computing "SHA1" checksum of "C:/Users/r2/subdir/somedir/r2/.README.md.~50c5" in a thread
[OCC::WebFlowCredentials::slotFinished 	request finished
[OCC::ComputeChecksum::start 	Computing "SHA1" checksum of "C:/Users/r2/subdir/somedir/r2/.Readme.md.~528b" in a thread
[OCC::SyncJournalDb::setFileRecord 	Updating file record for path: "r2/README.md" inode: 23990 modtime: 1579890405 type: 0 etag: "ae03daa2bbbcb9f035db62036ab540b3" fileId: "0008595650d74b05873f4" remotePerm: "WDNVR" fileSize: 4 checksum: "SHA1:3da541559918a808c2402bba5012f6c60b27661c" e2eMangledName: ""
[OCC::PropagateItemJob::done 	Completed propagation of "r2/README.md" by OCC::PropagateDownloadFile(0x28009b3bf90) with status 4
[OCC::ActivityWidget::slotItemCompleted 	Item  "r2/README.md"  retrieved resulted in  ""
[OCC::ActivityWidget::slotItemCompleted 	Item  "r2/README.md"  retrieved successfully.
[OCC::ActivityListModel::addSyncFileItemToActivityList 	Successfully added to the activity list:  ""
[OCC::OwncloudPropagator::localFileNameClash 	Detected case clash between "C:/Users/r2/subdir/somedir/r2/Readme.md" and "README.md"
[OCC::PropagateItemJob::done 	Could not complete propagation of "r2/Readme.md" by OCC::PropagateDownloadFile(0x28009b3b270) with status 2 and error: "File r2\\Readme.md cannot be saved because of a local file name clash!"
[OCC::SocketListener::sendMessage 	Sending SocketAPI message --> "STATUS:SYNC:C:\\Users\\r2\\oc\\somedir" to QLocalSocket(0x280793a0150)
[OCC::SocketListener::sendMessage 	Sending SocketAPI message --> "STATUS:SYNC:C:\\Users\\r2\\oc\\somedir\\r2" to QLocalSocket(0x280793a0150)
[OCC::ActivityWidget::slotItemCompleted 	Item  "r2/Readme.md"  retrieved resulted in  "File r2\\Readme.md cannot be saved because of a local file name clash!"
[OCC::ActivityWidget::slotItemCompleted 	Item  "r2/Readme.md"  retrieved resulted in error  "File r2\\Readme.md cannot be saved because of a local file name clash!"
[OCC::ActivityListModel::addErrorToActivityList 	Error successfully added to the notification list:  "File r2\\Readme.md cannot be saved because of a local file name clash!"
[OCC::FolderWatcher::changeDetected 	Detected changes in paths: QSet("C:/Users/r2/subdir/somedir/r2/README.md")
...
[OCC::FolderMan::slotFolderSyncFinished 	<========== Sync finished for folder [oc\somedir] of account [[email protected]] with remote [https://oc.mydomain.com/subdir/remote.php/webdav/]
2. Web server error log:
50.196.183.81 - myuser [24/Jan/2020:10:27:02 -0800] "PROPFIND /subdir/remote.php/webdav/ HTTP/1.1" 207 18642 "-" "Mozilla/5.0 (Windows) mirall/2.6.2stable-Win64 (build 20191224) (Nextcloud)"
50.196.183.81 - myuser [24/Jan/2020:10:27:02 -0800] "PROPFIND /subdir/remote.php/webdav/r2 HTTP/1.1" 207 16225 "-" "Mozilla/5.0 (Windows) mirall/2.6.2stable-Win64 (build 20191224) (Nextcloud)"
50.196.183.81 - myuser [24/Jan/2020:10:27:02 -0800] "GET /subdir/remote.php/webdav/r2/README.md HTTP/1.1" 200 917 "-" "Mozilla/5.0 (Windows) mirall/2.6.2stable-Win64 (build 20191224) (Nextcloud)"
50.196.183.81 - myuser [24/Jan/2020:10:27:02 -0800] "GET /subdir/remote.php/webdav/r2/Readme.md HTTP/1.1" 200 917 "-" "Mozilla/5.0 (Windows) mirall/2.6.2stable-Win64 (build 20191224) (Nextcloud)"
50.196.183.81 - myuser [24/Jan/2020:10:27:02 -0800] "GET /subdir/remote.php/webdav/r2/readme.md HTTP/1.1" 200 1070 "-" "Mozilla/5.0 (Windows) mirall/2.6.2stable-Win64 (build 20191224) (Nextcloud)"
  1. Server logfile: nothing for that time (or within 2 minutes) in nextcloud.log
@r2evans
Copy link
Contributor Author

r2evans commented Jan 24, 2020

Loosely related to nextcloud/text#586.

@r2evans
Copy link
Contributor Author

r2evans commented Jan 24, 2020

Found one culprit:

https://github.com/nextcloud/text/blob/master/lib/Service/WorkspaceService.php contains

	private const SUPPORTED_STATIC_FILENAMES = [
		'README.md',
		'Readme.md',
		'readme.md'
	];

Perhaps this is neither server nor desktop but solely a nextcloud/text issue?

@r2evans
Copy link
Contributor Author

r2evans commented Jan 24, 2020

Mea culpa, the real culprit was that I was running nextcloud on a linux box but (this is what I forgot) the data directory was a Synology SMB export, which defaults to the windows way of filename case-insensitivity.

As suggested on a synology forum, the fix was to force Synology to edit /etc/samba/smb.conf and append case sensitive = yes in the [global] section.

@r2evans r2evans closed this as completed Jan 24, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant