hetio / hetionet

Hetionet: an integrative network of disease
https://neo4j.het.io
264 stars 69 forks source link

Cannot map non-existing file #51

Closed franklinhe closed 1 year ago

franklinhe commented 1 year ago

Hi, I run the docker container as described in readme, but got the following error:

WARN [o.n.k.NeoStoreDataSource] Exception occurred while starting the datasource. Attempting to close things down. Component 'org.neo4j.kernel.impl.storageengine.impl.recordstorage.RecordStorageEngine@595f4da5' failed to initialize. Please see the attached cause exception "/data/databases/graph.db/neostore.labelscanstore.db: Cannot map non-existing file".
org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.kernel.impl.storageengine.impl.recordstorage.RecordStorageEngine@595f4da5' failed to initialize. Please see the attached cause exception "/data/databases/graph.db/neostore.labelscanstore.db: Cannot map non-existing file".

Is the database match with the version of neo4j?

dhimmel commented 1 year ago

The key part of the error is likely "labelscanstore.db: Cannot map non-existing file". So perhaps there is some file that is expected and not available.

Can you provide a bit more detail? Exactly what command did you run? What operating system and version of docker?

franklinhe commented 1 year ago

I pull the image using the command docker pull dhimmel/hetionet in docker desktop version4.18.0 under macos12.6, and also latest docker version under centos7.9. After finished downloading, then command:

docker run \
  --name=hetionet-container \
  --rm \
  --publish=7474:7474 \
  --publish=7687:7687 \
  --volume=$HOME/neo4j/hetionet-data:/data \
  --volume=$HOME/neo4j/hetionet-logs:/logs \
  dhimmel/hetionet

got the same error.

dhimmel commented 1 year ago

I'm able to run that command without the error on Docker version 20.10.21, build 20.10.21-0ubuntu1~22.04.2 (according to docker --version). Are you running Docker 23.0.5 (the latest according to these release notes)?

Advice from ChatGPT:

The error message suggests that Neo4j is unable to find or map the neostore.labelscanstore.db file within the /data/databases/graph.db/ directory. There might be several reasons for this issue:

  1. Missing or corrupted data: Ensure that the $HOME/neo4j/hetionet-data directory on your host machine contains the necessary Neo4j data files, including neostore.labelscanstore.db. If the files are missing or corrupted, you may need to redownload the data or restore it from a backup.

  2. Incorrect permissions: Verify that the user running the Docker container has read and write permissions for the $HOME/neo4j/hetionet-data directory and all its contents. If necessary, change the permissions using chmod and/or chown commands.

Here's what I see when I do ls -lh $HOME/neo4j (header for reference):

perm   links  owner group  size day tm/y     filename
drwxr-xr-x 5 165636 165636 4.0K Jul 27  2022 hetionet-data
drwxr-xr-x 2 165636 165636 4.0K Jul 27  2022 hetionet-logs

Let's make sure your $HOME/neo4j and $HOME/neo4j/hetionet-data directories are getting created.

Also here are the details of the image I'm running (via docker images dhimmel/hetionet):

REPOSITORY         TAG                          IMAGE ID       CREATED        SIZE
dhimmel/hetionet   hetionet-v1.0_neo4j-3.5.12   7b96e85421c4   3 years ago    386MB
dhimmel/hetionet   latest                       7b96e85421c4   3 years ago    386MB

You should be running the same image id (don't see why that would differ).

franklinhe commented 1 year ago

Thanks! The possible problem is network error in my work environment. The downloaded zip file is not complete, So always part of the files are not inclueded after uncompressing files. Here the logs printed:

Downloading and extracting database

bzip2: Compressed file ends unexpectedly; perhaps it is corrupted? Possible reason follows. bzip2: Inappropriate ioctl for device Input file = (stdin), output file = (stdout)

It is possible that the compressed file(s) have become corrupted. You can use the -tvv option to test integrity of such files.

You can use the `bzip2recover' program to attempt to recover data from undamaged sections of corrupted files.

tar: Child returned status 2 tar: Error is not recoverable: exiting now Active database: graph.db Directories in use: home: /var/lib/neo4j config: /var/lib/neo4j/conf logs: /logs plugins: /var/lib/neo4j/plugins import: /var/lib/neo4j/import data: /var/lib/neo4j/data certificates: /ssl run: /var/lib/neo4j/run Starting Neo4j. 2023-05-05 09:27:59.293+0000 WARN dbms.active_database is deprecated. 2023-05-05 09:27:59.304+0000 INFO ======== Neo4j 3.5.12 ======== 2023-05-05 09:27:59.311+0000 INFO Starting... 2023-05-05 09:28:01.084+0000 ERROR Failed to start Neo4j: Starting Neo4j failed: Component 'org.neo4j.server.database.LifecycleManagingDatabase@3c818ac4' was successfully initialized, but failed to start. Please see the attached cause exception "/data/databases/graph.db/neostore.labelscanstore.db: Cannot map non-existing file". Starting Neo4j failed: Component 'org.neo4j.server.database.LifecycleManagingDatabase@3c818ac4' was successfully initialized, but failed to start. Please see the attached cause exception "/data/databases/graph.db/neostore.labelscanstore.db: Cannot map non-existing file". org.neo4j.server.ServerStartupException: Starting Neo4j failed: Component 'org.neo4j.server.database.LifecycleManagingDatabase@3c818ac4' was successfully initialized, but failed to start. Please see the attached cause exception "/data/databases/graph.db/neostore.labelscanstore.db: Cannot map non-existing file". at org.neo4j.server.exception.ServerStartupErrors.translateToServerStartupError(ServerStartupErrors.java:45) at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:187) at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:124) at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:91) at org.neo4j.server.CommunityEntryPoint.main(CommunityEntryPoint.java:32)

But It's so rediculous that every time I run docker, it got the same error, enven in different machine in different network.

I have installed a neo4j-3.5.12 server directly on my machine, and dump the data, it works.

dhimmel commented 1 year ago

Awesome! Glad you were able to figure it out.