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] typesense crash after editing people names #5079

Closed
1 of 3 tasks
deiop opened this issue Nov 16, 2023 · 6 comments · Fixed by #3605
Closed
1 of 3 tasks

[BUG] typesense crash after editing people names #5079

deiop opened this issue Nov 16, 2023 · 6 comments · Fixed by #3605
Labels
bug Something isn't working needs triage Bug that needs triage from maintainer

Comments

@deiop
Copy link

deiop commented Nov 16, 2023

The bug

Clean start of stack 12CPU / 12GB RAM
After editing multiple people names and merging faces, typsense crashes with segmenation fault

immich_microservices | [Nest] 7 - 11/16/2023, 9:02:05 AM ERROR [TypesenseRepository] Unable to index documents
immich_typesense | W20231116 09:02:05.731760 358 controller.cpp:1454] SIGINT was installed with 1
immich_typesense | W20231116 09:02:05.731803 358 node.cpp:811] [default_group:172.21.0.4:8107:8108 ] Refusing concurrent configuration changing
immich_typesense | E20231116 09:02:05.731869 375 raft_server.h:62] Peer refresh failed, error: Doing another configuration change
immich_typesense | W20231116 09:02:06.574638 432 index.cpp:5406] Error while removing field embedding from document, message: Label not found
immich_typesense | W20231116 09:02:20.248103 432 index.cpp:5406] Error while removing field embedding from document, message: Label not found
immich_typesense | W20231116 09:02:20.271138 432 index.cpp:5406] Error while removing field embedding from document, message: Label not found
immich_typesense | W20231116 09:02:22.256361 432 index.cpp:5406] Error while removing field embedding from document, message: Label not found
immich_microservices | Request #1700125281084: Request to Node 0 failed due to "ECONNRESET read ECONNRESET"
immich_microservices | Request #1700125281084: Sleeping for 4s and then retrying request...
immich_typesense | W20231116 09:02:28.649591 432 index.cpp:5406] Error while removing field embedding from document, message: Label not found
immich_typesense | W20231116 09:02:29.061244 432 index.cpp:5406] Error while removing field embedding from document, message: Label not found
immich_microservices | Request #1700125271087: Request to Node 0 failed due to "ECONNRESET read ECONNRESET"
immich_microservices | Request #1700125271087: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700125266111: Request to Node 0 failed due to "ECONNRESET read ECONNRESET"
immich_microservices | Request #1700125266111: Sleeping for 4s and then retrying request...
immich_typesense | E20231116 09:02:42.886212 27 backward.hpp:4199] Stack trace (most recent call last) in thread 27:
immich_typesense | E20231116 09:02:42.886250 27 backward.hpp:4199] #11 Object "", at 0xffffffffffffffff, in
immich_typesense | E20231116 09:02:42.886253 27 backward.hpp:4199] #10 Object "/usr/lib/x86_64-linux-gnu/libc.so.6", at 0x7fb715a8abb3, in __clone
immich_typesense | E20231116 09:02:42.886256 27 backward.hpp:4199] #9 Object "/usr/lib/x86_64-linux-gnu/libc.so.6", at 0x7fb7159f9b42, in
immich_typesense | E20231116 09:02:42.886261 27 backward.hpp:4199] #8 Source "../../../../../libstdc++-v3/src/c++11/thread.cc", line 80, in execute_native_thread_routine [0x15126cf]
immich_typesense | E20231116 09:02:42.886265 27 backward.hpp:4199] #7 | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/thread", line 215, in operator()
immich_typesense | E20231116 09:02:42.886268 27 backward.hpp:4199] | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/thread", line 271, in _M_invoke<0>
immich_typesense | E20231116 09:02:42.886271 27 backward.hpp:4199] | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/thread", line 264, in __invoke<ThreadPool::ThreadPool(size_t)::<lambda()> >
immich_typesense | E20231116 09:02:42.886274 27 backward.hpp:4199] | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/bits/invoke.h", line 95, in __invoke_impl<void, ThreadPool::ThreadPool(size_t)::<lambda()> >
immich_typesense | E20231116 09:02:42.886277 27 backward.hpp:4199] | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/bits/invoke.h", line 60, in operator()
immich_typesense | E20231116 09:02:42.886281 27 backward.hpp:4199] | Source "/typesense/include/threadpool.h", line 57, in operator()
immich_typesense | E20231116 09:02:42.886284 27 backward.hpp:4199] Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/future", line 1560, in _M_run [0x520cc4]
immich_typesense | E20231116 09:02:42.886287 27 backward.hpp:4199] #6 | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/future", line 1427, in _M_set_result
immich_typesense | E20231116 09:02:42.886291 27 backward.hpp:4199] | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/future", line 404, in call_once<void (std::__future_base::_State_baseV2::)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()>, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>()>, bool>
immich_typesense | E20231116 09:02:42.886294 27 backward.hpp:4199] | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/mutex", line 729, in __gthread_once
immich_typesense | E20231116 09:02:42.886297 27 backward.hpp:4199] Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/x86_64-linux-gnu/bits/gthr-default.h", line 700, in _M_run [0x60e089]
immich_typesense | E20231116 09:02:42.886301 27 backward.hpp:4199] #5 Object "/usr/lib/x86_64-linux-gnu/libc.so.6", at 0x7fb7159fef67, in
immich_typesense | E20231116 09:02:42.886303 27 backward.hpp:4199] #4 | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/future", line 564, in operator()
immich_typesense | E20231116 09:02:42.886307 27 backward.hpp:4199] Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/bits/std_function.h", line 622, in _M_do_set [0x51e63a]
immich_typesense | E20231116 09:02:42.886322 27 backward.hpp:4199] #3 | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/bits/std_function.h", line 292, in __invoke_r<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<_Fn, _Alloc, _Res(_Args ...)>::_M_run<std::_Bind<Index::index_field_in_memory(const field&, std::vector<index_record>&)::<lambda()>()>, std::allocator, void, {}>::<lambda()>, void>&>
immich_typesense | E20231116 09:02:42.886327 27 backward.hpp:4199] | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/bits/invoke.h", line 113, in __invoke_impl<std::unique_ptr<std::__future_base::_Result, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<_Fn, _Alloc, _Res(_Args ...)>::_M_run<std::_Bind<Index::index_field_in_memory(const field&, std::vector<index_record>&)::<lambda()>()>, std::allocator, void, {}>::<lambda()>, void>&>
immich_typesense | E20231116 09:02:42.886330 27 backward.hpp:4199] Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/bits/invoke.h", line 60, in _M_invoke [0x630242]
immich_typesense | E20231116 09:02:42.886338 27 backward.hpp:4199] #2 | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/future", line 1365, in operator()
immich_typesense | E20231116 09:02:42.886341 27 backward.hpp:4199] | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/future", line 1424, in __invoke_r<void, std::_Bind<Index::index_field_in_memory(const field&, std::vector<index_record>&)::<lambda()>()>&>
immich_typesense | E20231116 09:02:42.886344 27 backward.hpp:4199] | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/bits/invoke.h", line 110, in __invoke_impl<void, std::_Bind<Index::index_field_in_memory(const field&, std::vector<index_record>&)::<lambda()>()>&>
immich_typesense | E20231116 09:02:42.886348 27 backward.hpp:4199] | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/bits/invoke.h", line 60, in operator()<>
immich_typesense | E20231116 09:02:42.886351 27 backward.hpp:4199] | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/functional", line 499, in __call
immich_typesense | E20231116 09:02:42.886355 27 backward.hpp:4199] | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/functional", line 416, in __invoke<Index::index_field_in_memory(const field&, std::vector<index_record>&)::<lambda()>&>
immich_typesense | E20231116 09:02:42.886363 27 backward.hpp:4199] | Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/bits/invoke.h", line 95, in __invoke_impl<void, Index::index_field_in_memory(const field&, std::vector<index_record>&)::<lambda()>&>
immich_typesense | E20231116 09:02:42.886366 27 backward.hpp:4199] Source "/usr/local/gcc-10.1.0/include/c++/10.1.0/bits/invoke.h", line 60, in operator() [0x6301fc]
immich_typesense | E20231116 09:02:42.886369 27 backward.hpp:4199] #1 Source "/typesense/src/index.cpp", line 1014, in operator() [0x6300a9]
immich_typesense | E20231116 09:02:42.886373 27 backward.hpp:4199] #0 Source "/typesense/external-Linux/hnswlib-21de18ffabea1a9d1e8b16b49afc6045d7707e4c/hnswlib/hnswalg.h", line 848, in insertPoint [0x6241fb]
immich_typesense | Segmentation fault (Address not mapped to object [0x8])
immich_typesense | E20231116 09:02:43.508272 27 typesense_server.cpp:102] Typesense 0.24.1 is terminating abruptly.

The OS that Immich Server is running on

Ubuntu 22.04.3 LTS

Version of Immich Server

1.86

Version of Immich Mobile App

1.86

Platform with the issue

  • Server
  • Web
  • Mobile

Your docker-compose.yml content

version: "3.8"

services:
  immich-caddy:
    container_name: caddy
    image: caddy:2-alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./caddy/Caddyfile:/etc/caddy/Caddyfile
      - ./caddy/data:/data
      - ./caddy/config:/config
    environment:
      ACME_AGREE: 'true'
      DOMAIN: 'pics.deiop.de'
      EMAIL: 'tobi@deiop.de'

  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    command: [ "start.sh", "immich" ]
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
    env_file:
      - .env
    depends_on:
      - redis
      - database
      - typesense
    restart: always

  immich-microservices:
    container_name: immich_microservices
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    # extends:
    #   file: hwaccel.yml
    #   service: hwaccel
    command: [ "start.sh", "microservices" ]
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
    env_file:
      - .env
    depends_on:
      - redis
      - database
      - typesense
    restart: always

  immich-machine-learning:
    container_name: immich_machine_learning
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always

  immich-web:
    container_name: immich_web
    image: ghcr.io/immich-app/immich-web:${IMMICH_VERSION:-release}
    env_file:
      - .env
    restart: always

  typesense:
    container_name: immich_typesense
    image: typesense/typesense:0.24.1@sha256:X
    environment:
      - TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
      - TYPESENSE_DATA_DIR=/data
      # remove this to get debug messages
      - GLOG_minloglevel=1
    volumes:
      - tsdata:/data
    restart: always

  redis:
    container_name: immich_redis
    image: redis:6.2-alpine@sha256:X
    restart: always

  database:
    container_name: immich_postgres
    image: postgres:14-alpine@sha256:X
    env_file:
      - .env
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
    volumes:
      - pgdata:/var/lib/postgresql/data
    restart: always

  immich-proxy:
    container_name: immich_proxy
    image: ghcr.io/immich-app/immich-proxy:${IMMICH_VERSION:-release}
    environment:
      # Make sure these values get passed through from the env file
      - IMMICH_SERVER_URL
      - IMMICH_WEB_URL
    ports:
      - 2283:8080
    depends_on:
      - immich-server
      - immich-web
    restart: always

volumes:
  pgdata:
  model-cache:
  tsdata:

Your .env content

# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=./data

# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release

# Connection secrets for postgres and typesense. You should change these to random passwords
TYPESENSE_API_KEY=X
DB_PASSWORD=X

# The values below this line do not need to be changed
###################################################################################
DB_HOSTNAME=immich_postgres
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

REDIS_HOSTNAME=immich_redis

Reproduction steps

1.docker compose up -d
2.Wait for starting
3.Open Webfrontend
4.Edit multiple faces / persons' names
5.Merge several faces
6.Typesense crashes
...

Additional information

No response

@deiop deiop added bug Something isn't working needs triage Bug that needs triage from maintainer labels Nov 16, 2023
@alextran1502
Copy link
Contributor

I think we have an unoptimized Typesense operation that lead to this issue that many people are facing

@deiop
Copy link
Author

deiop commented Nov 16, 2023

Microservice crashes a couple of minutes later ....
Always happens if you rename / tag several persons etc. "at once"

immich_microservices | Request #1700150947546: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700150947546: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700151087896: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700151087896: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700151102896: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700151102896: Sleeping for 4s and then retrying request...
immich_microservices | [Nest] 7 - 11/16/2023, 4:11:52 PM ERROR [JobService] Unable to run job handler (search/search-index-faces): Error: timeout of 10000ms exceeded
immich_microservices | [Nest] 7 - 11/16/2023, 4:11:52 PM ERROR [JobService] Error: timeout of 10000ms exceeded
immich_microservices | at createError (/usr/src/app/node_modules/typesense/node_modules/axios/lib/core/createError.js:16:15)
immich_microservices | at RedirectableRequest.handleRequestTimeout (/usr/src/app/node_modules/typesense/node_modules/axios/lib/adapters/http.js:369:16)
immich_microservices | at RedirectableRequest.emit (node:events:514:28)
immich_microservices | at Timeout. (/usr/src/app/node_modules/follow-redirects/index.js:179:12)
immich_microservices | at listOnTimeout (node:internal/timers:573:17)
immich_microservices | at process.processTimers (node:internal/timers:514:7)
immich_microservices | [Nest] 7 - 11/16/2023, 4:11:52 PM ERROR [JobService] Object:
immich_microservices | {}
immich_microservices |
immich_microservices | Request #1700150962548: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700150962548: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700150892536: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700150892536: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700151032715: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700151032715: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700150977548: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700150977548: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700150907538: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700150907538: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700151047892: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700151047892: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700150992550: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700150992550: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700150922543: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700150922543: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700151062894: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700151062894: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700151007551: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700151007551: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700150937544: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700150937544: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700151077896: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700151077896: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700151022714: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700151022714: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700150952547: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700150952547: Sleeping for 4s and then retrying request...
immich_microservices | Request #1700151092897: Request to Node 0 failed due to "ECONNABORTED timeout of 10000ms exceeded"
immich_microservices | Request #1700151092897: Sleeping for 4s and then retrying request...
immich_microservices |
immich_microservices | <--- Last few GCs --->
immich_microservices |
immich_microservices | [7:0x2fbe8310000] 23880476 ms: Scavenge (reduce) 2043.3 (2083.0) -> 2042.6 (2083.2) MB, 4.89 / 0.00 ms (average mu = 0.174, current mu = 0.004) allocation failure;
immich_microservices | [7:0x2fbe8310000] 23882807 ms: Mark-Compact (reduce) 2043.4 (2083.2) -> 2042.5 (2083.2) MB, 2324.66 / 0.00 ms (average mu = 0.101, current mu = 0.013) allocation failure; scavenge might not succeed
immich_microservices |
immich_microservices |
immich_microservices | <--- JS stacktrace --->
immich_microservices |
immich_microservices | FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
immich_microservices | 1: 0xc99960 node::Abort() [immich_microservices]
immich_microservices | 2: 0xb6ffcb [immich_microservices]
immich_microservices | 3: 0xebe910 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, v8::OOMDetails const&) [immich_microservices]
immich_microservices | 4: 0xebebf7 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, v8::OOMDetails const&) [immich_microservices]
immich_microservices | 5: 0x10d06a5 [immich_microservices]
immich_microservices | 6: 0x10d0c34 v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector) [immich_microservices]
immich_microservices | 7: 0x10e7b24 v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::internal::GarbageCollectionReason, char const*) [immich_microservices]
immich_microservices | 8: 0x10e833c v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [immich_microservices]
immich_microservices | 9: 0x10be641 v8::internal::HeapAllocator::AllocateRawWithLightRetrySlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [immich_microservices]
immich_microservices | 10: 0x10bf7d5 v8::internal::HeapAllocator::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [immich_microservices]
immich_microservices | 11: 0x109cd46 v8::internal::Factory::NewFillerObject(int, v8::internal::AllocationAlignment, v8::internal::AllocationType, v8::internal::AllocationOrigin) [immich_microservices]
immich_microservices | 12: 0x14f7b76 v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [immich_microservices]
immich_microservices | 13: 0x7fcdaf419ef6
immich_redis | 1:M 16 Nov 2023 16:13:03.084 * 100 changes in 300 seconds. Saving...
immich_redis | 1:M 16 Nov 2023 16:13:03.084 * Background saving started by pid 101
immich_redis | 101:C 16 Nov 2023 16:13:03.097 * DB saved on disk
immich_redis | 101:C 16 Nov 2023 16:13:03.098 * RDB: 0 MB of memory used by copy-on-write
immich_microservices exited with code 0
immich_redis | 1:M 16 Nov 2023 16:13:03.185 * Background saving terminated with success

@supermamon
Copy link

Also getting the same error and the server doesn't cone up. Any way to break out of the error?

@mertalev mertalev linked a pull request Nov 23, 2023 that will close this issue
16 tasks
@mertalev mertalev mentioned this issue Nov 23, 2023
16 tasks
@jimOnAir
Copy link

I have the same issue. What Can I do to make server works?

@stephenjamieson
Copy link

stephenjamieson commented Nov 23, 2023

I'm not sure if everyone is encountering the same error. I had a similar error however it was resolved by updating my docker-compose to use the latest typesense version in the current github compose file

@jimOnAir
Copy link

Indeed. Thanks @stephenjamieson. I've updated typesense image to latest version and after some time server was started.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working needs triage Bug that needs triage from maintainer
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants