immich icon indicating copy to clipboard operation
immich copied to clipboard

Uploads seemingly continue after remainder reaches zero

Open ZuluWhiskey opened this issue 1 year ago • 21 comments
trafficstars

The bug

After Immich had finished uploading all of my images it is continuing to try and upload images by the looks of it. See video for UX.

https://github.com/immich-app/immich/assets/35011199/bd4ca5b6-ad75-4d91-8ae4-e120bcc48768

The OS that Immich Server is running on

Ubuntu 22.04

Version of Immich Server

V1.100.0

Version of Immich Mobile App

V1.100.0 build 146

Platform with the issue

  • [ ] Server
  • [ ] Web
  • [X] Mobile

Your docker-compose.yml content

version: "3.8"

name: immich

services:
  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
      - /etc/localtime:/etc/localtime:ro
      - /mnt/storage/photos:/mnt/storage/photos:ro
    env_file:
      - .env
    ports:
      - 2283:3001
    depends_on:
      - redis
      - database
    restart: always
    networks:
      - default
      - sso

  immich-microservices:
    container_name: immich_microservices
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    command: ["start.sh", "microservices"]
    volumes:
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
      - /mnt/storage/photos:/mnt/storage/photos:ro
    env_file:
      - .env
    depends_on:
      - redis
      - database
    restart: always
    networks:
      - default

  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
    networks:
      - default

  redis:
    container_name: immich_redis
    image: redis:6.2-alpine
    restart: always
    networks:
      - default

  database:
    container_name: immich_postgres
    image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
    #image: tensorchord/pgvecto-rs:pg14-v0.1.11@sha256:0335a1a22f8c5dd1b697f14f079934f5152eaaa216c09b61e293be285491f8ee
    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
    networks:
      - default

volumes:
  pgdata:
  model-cache:

networks:
  default:
    name: immich
    external: true
  sso:
    name: sso
    external: true

Your .env content

###################################################################################
# Database
###################################################################################

# NOTE: The following four database variables support Docker secrets by adding a *_FILE suffix to the variable name
# See the docker-compose documentation on secrets for additional details: https://docs.docker.com/compose/compose-file/compose-file-v3/#secrets
DB_HOSTNAME=immich_postgres
DB_USERNAME=postgres
DB_PASSWORD=K7v7hnf67JLaUd3x2huDomi7siy6mgyq9JgvzPNcjF4PNXdGLYiaj
DB_DATABASE_NAME=immich

# Optional Database settings:
# DB_PORT=5432

###################################################################################
# Redis
###################################################################################

REDIS_HOSTNAME=immich_redis

# REDIS_URL will be used to pass custom options to ioredis.
# Example for Sentinel
# {"sentinels":[{"host":"redis-sentinel-node-0","port":26379},{"host":"redis-sentinel-node-1","port":26379},{"host":"redis-sentinel-node-2","port":26379}],"name":"redis-sentinel"}
# REDIS_URL=ioredis://eyJzZW50aW5lbHMiOlt7Imhvc3QiOiJyZWRpcy1zZW50aW5lbDEiLCJwb3J0IjoyX0seyJob3N0IjoicmVkaXMtc2VudGluZWwyIiydCI6MjYzNzl9XSwibmFtZSI6Im15bWFzdGVyIn0=

# Optional Redis settings:

# Note: these parameters are not automatically passed to the Redis Container
# to do so, please edit the docker-compose.yml file as well. Redis is not configured
# via environment variables, only redis.conf or the command line

# REDIS_PORT=6379
# REDIS_DBINDEX=0
# REDIS_USERNAME=
# REDIS_PASSWORD=
# REDIS_SOCKET=

###################################################################################
# Upload File Location
#
# This is the location where uploaded files are stored.
###################################################################################

UPLOAD_LOCATION=/mnt/storage/photos/immich-app


###################################################################################
# Typesense
###################################################################################
TYPESENSE_API_KEY=gCqNpQ7xvqg98fFA8x55YFsz7LorpX2D8ButyGaDLY7HLfaTi
# TYPESENSE_ENABLED=false
# TYPESENSE_URL uses base64 encoding for the nodes json.
# Example JSON that was used:
# [
#      { 'host': 'typesense-1.example.net', 'port': '443', 'protocol': 'https' },
#      { 'host': 'typesense-2.example.net', 'port': '443', 'protocol': 'https' },
#      { 'host': 'typesense-3.example.net', 'port': '443', 'protocol': 'https' },
#  ]
# TYPESENSE_URL=ha://WwogICAgeyAnaG9zdCc6ICd0eXBlc2Vuc2UtMS5leGFtcGxlLm5ldCcsICdwb3J0JzogJzQ0MycsICdwcm90b2NvbCc6ICdodHRwcycgfSwKICAgIHsgJ2hvc3QnOiAndHlwZXNlbnNlLTIuZXBsZS5uZXQnLCAncG9ydCc6ICc0NDMnLCAncHJvdG9jb2wnOiAnaHR0cHMnIH0sCiAgICB7ICdob3N0JzogJ3R5cGVzZW5zZS0zLmV4UubmV0JywgJ3BvcnQnOiAnNDQzJywgJ3Byb3RvY29sJzogJ2h0dHBzJyB9LApd

###################################################################################
# Reverse Geocoding
#
# Reverse geocoding is done locally which has a small impact on memory usage
# This memory usage can be altered by changing the REVERSE_GEOCODING_PRECISION variable
# This ranges from 0-3 with 3 being the most precise
# 3 - Cities > 500 population: ~200MB RAM
# 2 - Cities > 1000 population: ~150MB RAM
# 1 - Cities > 5000 population: ~80MB RAM
# 0 - Cities > 15000 population: ~40MB RAM
####################################################################################

# DISABLE_REVERSE_GEOCODING=false
# REVERSE_GEOCODING_PRECISION=3

####################################################################################
# WEB - Optional
#
# Custom message on the login page, should be written in HTML form.
# For example:
# PUBLIC_LOGIN_PAGE_MESSAGE="This is a demo instance of Immich.<br><br>Email: <i>[email protected]</i><br>Password: <i>demo</i>"
####################################################################################

PUBLIC_LOGIN_PAGE_MESSAGE="Welcome"

####################################################################################
# Alternative Service Addresses - Optional
#
# This is an advanced feature for users who may be running their immich services on different hosts.
# It will not change which address or port that services bind to within their containers, but it will change where other services look for their peers.
# Note: immich-microservices is bound to 3002, but no references are made
####################################################################################

IMMICH_WEB_URL=http://immich-web:3000
IMMICH_SERVER_URL=http://immich-server:3001
IMMICH_MACHINE_LEARNING_URL=http://immich-machine-learning:3003

####################################################################################
# Alternative API's External Address - Optional
#
# This is an advanced feature used to control the public server endpoint returned to clients during Well-known discovery.
# You should only use this if you want mobile apps to access the immich API over a custom URL. Do not include trailing slash.
# NOTE: At this time, the web app will not be affected by this setting and will continue to use the relative path: /api
# Examples: http://localhost:3001, http://immich-api.example.com, etc
####################################################################################

#IMMICH_API_URL_EXTERNAL=http://localhost:3001

###################################################################################
# Immich Version - Optional
#
# This allows all immich docker images to be pinned to a specific version. By default, 
# the version is "release" but could be a specific version, like "v1.59.0".
###################################################################################

IMMICH_VERSION=v1.100.0

Reproduction steps

Not entirely sure
1. Upload images
2. Uploading continues after remainder reaches zero

Additional information

No response

ZuluWhiskey avatar Mar 29 '24 14:03 ZuluWhiskey

Perhaps some weirdness with iCloud/Shared Album. I'd suggest just let it run until it stops

alextran1502 avatar Mar 29 '24 14:03 alextran1502

Perhaps some weirdness with iCloud/Shared Album. I'd suggest just let it run until it stops

image I did try that but it looks to keep getting stuck on this image now for some reason

ZuluWhiskey avatar Mar 30 '24 12:03 ZuluWhiskey

@ZuluWhiskey Can you track down that image and see if you can move it to a different album to exclude it or see if it is a corrupted file?

alextran1502 avatar Apr 02 '24 03:04 alextran1502

@ZuluWhiskey Can you track down that image and see if you can move it to a different album to exclude it or see if it is a corrupted file?

Have given that a try but it just gets stuck on the next image, then the next image, etc. did it for about 10 images before I stopped deleting pictures.

ZuluWhiskey avatar Apr 02 '24 05:04 ZuluWhiskey

I am experiencing this as well as mentioned in #9827.

coltenkrauter avatar May 28 '24 13:05 coltenkrauter

Having the same issue in 1.114.0

MattKayDev avatar Sep 11 '24 16:09 MattKayDev

Same issue in 1.117.0

Penurious1 avatar Oct 19 '24 18:10 Penurious1

Same issue server version 1.120.2 mobile client 1.120.2 build 167

ndsharp avatar Nov 18 '24 19:11 ndsharp

Same issue here running 1.121.0 on both server and iOS Mobile App except remainder is staying at 1, to spite all photos being uploaded.

IMG_4728

Shotz5 avatar Dec 03 '24 02:12 Shotz5

I installed latest immich and mobile app iOS. Left the phone with immich mobile app open to do initial sync. After the sync is done I have Reminder: 0 but it still is uploading - from what I see not photos but videos.

After 3 days of trying to finish sync, I gave up.

The background sync is not working - I need to open the immich app - let it run for some time to ,find new photos' and do the sync - which shows that the photos are synced to the server but immich iOS is still uploading constantly (videos) - despite Reminder 0.

I would really like to use immich but lack of background sync as well as constant upload (of I do not know what?!) makes it unusable..

image

teon avatar Dec 26 '24 13:12 teon

Perhaps some weirdness with iCloud/Shared Album. I'd suggest just let it run until it stops

@alextran1502 3 days and uploads constantly. It's not possible to do as you suggest...

teon avatar Dec 26 '24 15:12 teon

@teon i assume you are using dns/reverse proxy or CloudFlare tunnel? If so you probably don't have correct setup for large body size. You can connect to the instance over local IP at the mean time to allow large file size getting uploaded. Otherwise, you can get more help on Discord

alextran1502 avatar Dec 26 '24 15:12 alextran1502

@teon i assume you are using dns/reverse proxy or CloudFlare tunnel? If so you probably don't have correct setup for large body size. You can connect to the instance over local IP at the mean time to allow large file size getting uploaded. Otherwise, you can get more help on Discord

@alextran1502 - No I do not use an external dns/reverse proxy. All is a local setup - but I do have NGINX reverse proxy for SSL termination of the instance. But all on the same local server.

will go through the official docs to tweak the NGINX config - but still if I have a misconfigured body size for my uploads the mobile APP should not report that ll has been successfully uploaded and still continue to upload. This is a bug.

teon avatar Dec 26 '24 16:12 teon

@alextran1502 you are right - I had 120M max upload file size on NGINX, so all the videos >120M were constantly re-uploaded. But as I said, this still is a bug. Will see if increasing the upload body helped and the mobile app will detect and finish all the uploads and if the background upload will work.

teon avatar Dec 26 '24 16:12 teon

@teon I agree with you. However, this often comes from the reverse proxy layer, which isn't configured to send the correct response if the body size limit is reached. Reverse proxy choice and configuration vary based on the user's preference, so we don't have a definite way to catch the error here.

However, we do have recommendations on the reverse proxy settings for the users, which you can find helpful here.

https://immich.app/docs/administration/reverse-proxy#nginx-example-config

alextran1502 avatar Dec 26 '24 16:12 alextran1502

Hi @alextran1502

First I just want to say thanks for this app, which is really amazing.

Noted on the above that the reverse proxy layer is based on the user's preference, and that you don't have a definite way to catch errors. However, since the user may have control over both the server side, and the app preferences, is it possible to specify a max size in the app, and any files over this size would be sent in separate requests and then combined on the server?

deuxglaces avatar Jan 08 '25 09:01 deuxglaces

@deuxglaces hello, not yet possible. There is a feature request for this

alextran1502 avatar Jan 08 '25 13:01 alextran1502

Same here. Pixel 8 pro. Server and mobile Version. 1.34. Server on unraid with tailscale. Had this issue forever.

hueppinr avatar Jun 16 '25 15:06 hueppinr

@hueppinr you can go to App Settings > Advanced > Clear duplicate and then run the upload. The number will match then

alextran1502 avatar Jun 16 '25 17:06 alextran1502

Thanks. That helped. Why do I have so many duplicate assets? And why are they blacklisted by the app?

hueppinr avatar Jun 16 '25 23:06 hueppinr

It is because there were assets on the server already that duplicated with what on the device. The mismatch in counting is because you might have deleted the assets that are marked as duplicated on the device.

Anyway, I am working on a new upload mechanism which will not have the concept of duplicated/blacklist anymore

alextran1502 avatar Jun 16 '25 23:06 alextran1502

Same issue on android. Client is 1.135.1, server is 1.135.3

Image

guillaumearnx avatar Jul 01 '25 18:07 guillaumearnx