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

[bug]: Dateien können nicht gelöscht werden #510

Open
1 task done
Bernd9000 opened this issue Dec 24, 2024 · 4 comments
Open
1 task done

[bug]: Dateien können nicht gelöscht werden #510

Bernd9000 opened this issue Dec 24, 2024 · 4 comments
Labels
bug 🐞 Something isn't working

Comments

@Bernd9000
Copy link

Bernd9000 commented Dec 24, 2024

No existing issues.

  • There is no existing issue for my problem.

Describe the bug

IOB ist hier unter Windows 11 installiert.
Beim Versuch mit dem Dateimanager aus vis oder vis-2 irgendeine Datei zu löschen kommt es beim js-controller zum Fehler.
Das selbe passiert wenn ich versuche ein Projekt zu löschen.
Im Editor erscheint die Fehlermeldung Socket Error : Error: websocket error

Auffällig für mich sind folgende Zeilen aus dem IOB Log:
'cfg.f.vis-2.0$%$main/im/Kalender.png/*'
ENOTDIR: not a directory, scandir 'C:\Software\ioBroker\iobroker-data\files\vis-2.0\main\im\Kalender.png'

Wird hier eine Datei mit einem Ordner verwechselt ?
Die Datei existiert wirklich und ich kann Sie auch manuell löschen.
Eventuell sind nur Windows Installationen betroffen?
Im Dateimanager der Admin Oberfläche klappt es mit dem löschen, dort kommt kein Fehler

To Reproduce

1.) Irgendeine Datei mit dem Dateimanager in vis oder vis-2 hochladen
2.) Die Datei wieder löschen

Expected behavior

Datei soll gelöscht werden

Screenshots & Logfiles

1
2

IOB Log:
`

host.Server(SmartHome) 2024-12-24 02:09:19.718 error instance system.adapter.web.0 terminated with code 1 (JS_CONTROLLER_STOPPED)
host.Server(SmartHome) 2024-12-24 02:09:19.718 error Caught by controller[0]: }
host.Server(SmartHome) 2024-12-24 02:09:19.718 error Caught by controller[0]: }
host.Server(SmartHome) 2024-12-24 02:09:19.718 error Caught by controller[0]: ]
host.Server(SmartHome) 2024-12-24 02:09:19.718 error Caught by controller[0]: '250'
host.Server(SmartHome) 2024-12-24 02:09:19.718 error Caught by controller[0]: 'COUNT',
host.Server(SmartHome) 2024-12-24 02:09:19.718 error Caught by controller[0]: 'cfg.f.vis-2.0$%$main/im/Kalender.png/*',
host.Server(SmartHome) 2024-12-24 02:09:19.718 error Caught by controller[0]: 'MATCH',
host.Server(SmartHome) 2024-12-24 02:09:19.718 error Caught by controller[0]: '0',
host.Server(SmartHome) 2024-12-24 02:09:19.718 error Caught by controller[0]: args: [
host.Server(SmartHome) 2024-12-24 02:09:19.718 error Caught by controller[0]: name: 'scan',
host.Server(SmartHome) 2024-12-24 02:09:19.717 error Caught by controller[0]: command: {
host.Server(SmartHome) 2024-12-24 02:09:19.717 error Caught by controller[0]: at parseType (C:\Software\ioBroker\node_modules\redis-parser\lib\parser.js:302:14) {
host.Server(SmartHome) 2024-12-24 02:09:19.717 error Caught by controller[0]: at parseError (C:\Software\ioBroker\node_modules\redis-parser\lib\parser.js:179:12)
host.Server(SmartHome) 2024-12-24 02:09:19.717 error Caught by controller[0]: ReplyError: Error ERROR readDir id=vis-2.0: ENOTDIR: not a directory, scandir 'C:\Software\ioBroker\iobroker-data\files\vis-2.0\main\im\Kalender.png'
web.0 2024-12-24 02:09:19.366 warn setTimeout called, but adapter is shutting down
web.0 2024-12-24 02:09:19.353 error Error ERROR readDir id=vis-2.0: ENOTDIR: not a directory, scandir 'C:\Software\ioBroker\iobroker-data\files\vis-2.0\main\im\Kalender.png'
web.0 2024-12-24 02:09:19.353 error ReplyError: Error ERROR readDir id=vis-2.0: ENOTDIR: not a directory, scandir 'C:\Software\ioBroker\iobroker-data\files\vis-2.0\main\im\Kalender.png' at parseError (C:\Software\ioBroker\node_modules\redis-parser\lib\parser.js:179:12) at parseType (C:\Software\ioBroker\node_modules\redis-parser\lib\parser.js:302:14)
web.0 2024-12-24 02:09:19.353 error uncaught exception: Error ERROR readDir id=vis-2.0: ENOTDIR: not a directory, scandir 'C:\Software\ioBroker\iobroker-data\files\vis-2.0\main\im\Kalender.png'
host.Server(SmartHome) 2024-12-24 02:09:19.341 warn host.Server(SmartHome)-Server Objects 127.0.0.1:57100 Error from InMemDB: Error: ERROR readDir id=vis-2.0: ENOTDIR: not a directory, scandir 'C:\Software\ioBroker\iobroker-data\files\vis-2.0\main\im\Kalender.png' at ObjectsInMemoryServer._handleScanOrKeys (file:///C:/Software/ioBroker/node_modules/@iobroker/db-objects-jsonl/src/lib/objects/objectsInMemServerRedis.js:930:67) at RedisHandler. (file:///C:/Software/ioBroker/node_modules/@iobroker/db-objects-jsonl/src/lib/objects/objectsInMemServerRedis.js:728:25) at RedisHandler.emit (node:events:518:28) at RedisHandler.emit (node:domain:489:12) at Immediate._onImmediate (file:///C:/Software/ioBroker/node_modules/@iobroker/db-base/src/lib/redisHandler.ts:210:37) at processImmediate (node:internal/timers:483:21)
`

Page or affected widget

No response

Adapter version

2.11.1

js-controller version

7.0.6

Node version

v20.18.1

Operating system

Windows 11

Additional context

No response

@Bernd9000 Bernd9000 added the bug 🐞 Something isn't working label Dec 24, 2024
@Gaspode69
Copy link

Gaspode69 commented Dec 26, 2024

Aus dem entsprechenden Forum Thread:
Die Funktion _handleScanOrKeys in objectsInMemServerRedis.js wird zunächst mit dem Such-Pattern cfg.f.vis-2.0$%$test/* aufgerufen. Das ist wohl auch so in Ordnung. Allerdings wird sie anschließend nochmal mit dem Pattern cfg.f.vis-2.0$%$test/vis-user.css/* aufgerufen, was zu dem Fehler führt und hier einen Fehler wirft.
Wenn ich jetzt testweise den Fehler unterdrücke, dann wird die Funktion anschließend nochmal mit dem Pattern cfg.f.vis-2.0$%$test/vis-views.json/* aufgerufen (was auch zum Fehler führen würde, den ich testweise auch unterdrücke) und das Löschen funktioniert.
Es scheint also, dass Vis2 (oder eine andere Komponente?) in diesem Fall für alle Dateien im Projektordner die Funktion _handleScanOrKeys aufruft, was eigentlich keinen Sinn ergibt.
Was mich allerdings wundert ist, dass das Problem anscheinend nur unter Windows auftritt.

@Gaspode69
Copy link

Weitere Info:
Die Funktion wird unter Linux ebenso wie unter Windows aufgerufen, allerdings wirft der enthaltene Aufruf von _readDir eine selbst definierte Exception utils.ERRORS.ERROR_NOT_FOUND.

Unter Windows wird die System Exception ENOTDIR geworfen.

Das liegt daran, dass fs.existsSync für einen existierenden Dateinamen mit nachgestelltem / unter Linux false liefert, wenn es sich bei der Datei nicht um ein Directory handelt, unter Windows hingegen liefert sie in diesem Fall true. Im weiteren Verlauf wird kein Fehler geworfen, wenn Exception utils.ERRORS.ERROR_NOT_FOUND aufgetreten ist (Linux), ansonsten schon (Windows).

Mögliche Lösung:
Zusätzliche Prüfung hier in _readdir, ob es sich bei der Datei um ein Directory handelt, wenn nicht auch Exception utils.ERRORS.ERROR_NOT_FOUND werfen. Dann wäre das Verhalten unter Linux und Windows identisch.

@Bernd9000
Copy link
Author

Super, Danke
Ist dann bestimmt mit der nächsten js-controller Version behoben.

@Bernd9000
Copy link
Author

Reopen da im Adapter korrigiert werden soll.
Link

@Bernd9000 Bernd9000 reopened this Dec 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug 🐞 Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants