relay icon indicating copy to clipboard operation
relay copied to clipboard

Relay and Watchmen synchronization fail outright on Linux

Open snelzing opened this issue 1 year ago • 1 comments

I am having issues with a yarn and React Native project and getting Relay and Watchmen to behave. So I made another example project to isolate it down to just watchmen, relay, and the bare minimum of what else was needed to have a project that runs. 

https://github.com/snelzing/Relay-and-Watchman-Practice-project

Even in this simple project, Watchmen fails to run and gets the same error. Here is the error (sorry it is long and gnarly, but I figured I needed to show the complete error)

This happens on Debian Bookworm, Linux Mint Una, and Ubuntu focal.

yarn run v1.22.22  
$ relay-compiler --watch  
[INFO] Querying files to compile...  
[ERROR] Watchman error: The watchman server reported an error: "watchman::QueryExecError: query failed: synchronization failed: ", while executing command: QueryRequest(  
    "query",  
    "/workspaces/Relay-and-Watchman-Practice-project",  
    QueryRequestCommon {  
        glob: None,  
        glob_noescape: false,  
        glob_includedotfiles: false,  
        path: Some(  
            [  
                RecursivePath(  
                    "",  
                ),  
            ],  
        ),  
        suffix: None,  
        since: None,  
        relative_root: None,  
        expression: Some(  
            All(  
                [  
                    FileType(  
                        Regular,  
                    ),  
                    Any(  
                        [  
                            All(  
                                [  
                                    All(  
                                        [  
                                            DirName(  
                                                DirNameTerm {  
                                                    path: "src",  
                                                    depth: None,  
                                                },  
                                            ),  
                                            Suffix(  
                                                [  
                                                    "js",  
                                                    "jsx",  
                                                ],  
                                            ),  
                                        ],  
                                    ),  
                                    Not(  
                                        Any(  
                                            [  
                                                Match(  
                                                    MatchTerm {  
                                                        glob: "**/node_modules/**",  
                                                        wholename: true,  
                                                        include_dot_files: false,  
                                                        no_escape: false,  
                                                    },  
                                                ),  
                                                Match(  
                                                    MatchTerm {  
                                                        glob: "**/__mocks__/**",  
                                                        wholename: true,  
                                                        include_dot_files: false,  
                                                        no_escape: false,  
                                                    },  
                                                ),  
                                                Match(  
                                                    MatchTerm {  
                                                        glob: "**/__generated__/**",  
                                                        wholename: true,  
                                                        include_dot_files: false,  
                                                        no_escape: false,  
                                                    },  
                                                ),  
                                            ],  
                                        ),  
                                    ),  
                                ],  
                            ),  
                            Name(  
                                NameTerm {  
                                    paths: [  
                                        "schema.graphql",  
                                    ],  
                                    wholename: true,  
                                },  
                            ),  
                        ],  
                    ),  
                ],  
            ),  
        ),  
        fields: [  
            "name",  
            "exists",  
        ],  
        empty_on_fresh_instance: false,  
        omit_changed_files: false,  
        fail_if_no_saved_state: false,  
        case_sensitive: false,  
        sync_timeout: Default,  
        settle_period: None,  
        settle_timeout: None,  
        dedup_results: false,  
        lock_timeout: None,  
        request_id: None,  
        always_include_directories: false,  
    },  
)  
[ERROR] Compilation failed.  
[ERROR] Unable to run relay compiler. Error details:  
Watchman { source: WatchmanServerError { message: "watchman::QueryExecError: query failed: synchronization failed: ", command: "QueryRequest(\n \"query\",\n \"/workspaces/Relay-and-Watchman-Practice-project\",\n QueryRequestCommon {\n glob: None,\n glob_noescape: false,\n glob_includedotfiles: false,\n path: Some(\n [\n RecursivePath(\n \"\",\n ),\n ],\n ),\n suffix: None,\n since: None,\n relative_root: None,\n expression: Some(\n All(\n [\n FileType(\n Regular,\n ),\n Any(\n [\n All(\n [\n All(\n [\n DirName(\n DirNameTerm {\n path: \"src\",\n depth: None,\n },\n ),\n Suffix(\n [\n \"js\",\n \"jsx\",\n ],\n ),\n ],\n ),\n Not(\n Any(\n [\n Match(\n MatchTerm {\n glob: \"**/node_modules/**\",\n wholename: true,\n include_dot_files: false,\n no_escape: false,\n },\n ),\n Match(\n MatchTerm {\n glob: \"**/__mocks__/**\",\n wholename: true,\n include_dot_files: false,\n no_escape: false,\n },\n ),\n Match(\n MatchTerm {\n glob: \"**/__generated__/**\",\n wholename: true,\n include_dot_files: false,\n no_escape: false,\n },\n ),\n ],\n ),\n ),\n ],\n ),\n Name(\n NameTerm {\n paths: [\n \"schema.graphql\",\n ],\n wholename: true,\n },\n ),\n ],\n ),\n ],\n ),\n ),\n fields: [\n \"name\",\n \"exists\",\n ],\n empty_on_fresh_instance: false,\n omit_changed_files: false,\n fail_if_no_saved_state: false,\n case_sensitive: false,\n sync_timeout: Default,\n settle_period: None,\n settle_timeout: None,\n dedup_results: false,\n lock_timeout: None,\n request_id: None,\n always_include_directories: false,\n },\n)" } }  
error Command failed with exit code 1.  
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

 

I tried increasing the file watcher limit with 

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p but no difference is made

I also tried watchman watch-del-all to no avail. Has anyone had similar issues with Relay and Watchmen on Linux?

I am also wondering if it is related to this issue at all, which I sometimes get:

https://github.com/facebook/relay/issues/3674

snelzing avatar Feb 06 '25 17:02 snelzing

thanks for alerting, we added a task to fix it internally when we get around to it, but would love to get contributions from OSS if anyone is interested in taking it on

lynnshaoyu avatar Feb 10 '25 19:02 lynnshaoyu