Backend error when uploading package

I face the following backend error when uploading a package.
Note that I am using a custom image with openjdk 24.0.1.

The odd thing is that despite the error (appearing both in the frontend and backend), the package is added to the repository. Yet I am unsure if it is actually valid or a broken entry (didn’t attempt a download yet since I am having other unrelated issues with accessing the public repo).

 2025-06-02 08:17:53.625 825860 [http-nio-8080-exec-8] ERROR traceId=6227306d-0516-407c-ad35-247b18d51174 e.o.r.b.a.v.c.ApiV2ErrorController : RequestURI: /server/api/v2/manager/r/submissions                                     │
│ 2025-06-02 08:17:53.625 825860 [http-nio-8080-exec-8] ERROR traceId=6227306d-0516-407c-ad35-247b18d51174 e.o.r.b.a.v.c.ApiV2ErrorController : Query parameters: repository=test&generateManual=true&replace=false&binary=false     │
│ 2025-06-02 08:17:53.627 825862 [http-nio-8080-exec-8] ERROR traceId=6227306d-0516-407c-ad35-247b18d51174 e.o.r.b.a.v.c.ApiV2ErrorController : Exception: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Exp │
│     at com.google.gson.Gson.fromJson(Gson.java:1238)                                                                                                                                                                               │
│     at com.google.gson.Gson.fromJson(Gson.java:1137)                                                                                                                                                                               │
│     at com.google.gson.Gson.fromJson(Gson.java:1047)                                                                                                                                                                               │
│     at com.google.gson.Gson.fromJson(Gson.java:982)                                                                                                                                                                                │
│     at eu.openanalytics.rdepot.r.synchronization.RRepositorySynchronizer.getRemoteState(RRepositorySynchronizer.java:151)                                                                                                          │
│     at eu.openanalytics.rdepot.r.synchronization.RRepositorySynchronizer.synchronizeRepository(RRepositorySynchronizer.java:183)                                                                                                   │
│     at eu.openanalytics.rdepot.r.synchronization.RRepositorySynchronizer.storeRepositoryOnRemoteServer(RRepositorySynchronizer.java:125)                                                                                           │
│     at eu.openanalytics.rdepot.r.synchronization.RRepositorySynchronizer.storeRepositoryOnRemoteServer(RRepositorySynchronizer.java:103)                                                                                           │
│     at eu.openanalytics.rdepot.r.synchronization.RRepositorySynchronizer.storeRepositoryOnRemoteServer(RRepositorySynchronizer.java:58)                                                                                            │
│     at eu.openanalytics.rdepot.base.synchronization.RepositorySynchronizer.storeRepositoryOnRemoteServer(RepositorySynchronizer.java:50)                                                                                           │
│     at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)                                                                                                                       │
│     at java.base/java.lang.reflect.Method.invoke(Method.java:565)

Hi @pat-s,

Can you share your manager and repo config?
Do you still have the logs somewhere? It looks like part of the trace was cut off (third line ending in Exp looks like there should be more.

Best,
Daan

@dseynaeve

I only copied what I assumed are the relevant log parts. Everything else seemed like an unhelpful Java backtrace.
I can reproduce it at anytime, but again, not sure what you’re actually looking for :slight_smile:

Can you share your manager and repo config?

Here’s the complete application.yml:

allowed-origin: "*"

api-token:
  secret: ${API_TOKEN_SECRET}
  issuer: RDepot
  audience:
    - RDepot
  lifetime: 5000

access-token:
  lifetime-default: 30
  lifetime-configurable: true
  length: 32
  allowed-characters: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

generate-manuals: true

declarative: false
deleting:
  repositories:
    enabled: true
  packages:
    enabled: true

repository-snapshots: false

default-user-configuration:
  language: en-US
  theme: light
  page-size: 10
  supported-languages:
    - en-US
  supported-themes:
    - light
    - dark

replacing:
  packages:
    enabled: true

logging:
  file:
    name: /opt/rdepot/logs/rdepot.log
    max-size: 10MB
    max-history: 10
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss.SSS} %-4r [%t] %5p traceId=%X{traceIdMDC} %c{1} : %m %n"
    file: "%d{yyyy-MM-dd HH:mm:ss.SSS} %-4r [%t] %5p traceId=%X{traceIdMDC} %c{1} : %m %n"
  level:
    root: INFO
    eu:
      openanalytics:
        rdepot: INFO
    liquibase:
      parser: INFO
    org:
      springframework:
        web:
          filter:
            CommonsRequestLoggingFilter: INFO

# Email related properties
email:
  enabled: false
  password: 
  username: 
  from: 
  smtp:
    host: 
    port: 
    auth: 
    starttls: 

# Authentication related properties
app:
  authentication: simple
  simple:
    users:
      - login: admin
        password: ${PASSWORD}
        name: First Last
    default:
      admins:
        - admin

server:
  servlet:
    context-path: /server

message:
  source:
    basename: i18n/messages

entitymanager:
  packages:
    to:
      scan:
        - eu.openanalytics.rdepot.base.entities
        - eu.openanalytics.rdepot.r.entities
        - eu.openanalytics.rdepot.python.entities

package:
  version:
    max-numbers: 10
  upload:
    dir: /opt/rdepot
  rVersions:
    - 4.2
    - 4.3
    - 4.4
    - 4.5
  architectures:
    - x86_64
    - arm64
  distributions:
    - centos8
    - rhel9
    - opensuse155
    - focal
    - jammy
    - noble
    - bullseye
    - bookworm
  python:
    hashFunctions:
      - md5
      - sha1
      - sha224
      - sha256
      - sha384
      - sha512
  repository:
    generation:
      dir: /opt/rdepot/generated
    validation-name-regex:
      general: ".+"
      technology:
        python: "[A-Za-z0-9\\-_.~]+"
        r: "[A-Za-z0-9 \\-_.]+"

error:
  whitelabel:
    enabled: false

management:
  endpoints:
    enabled-by-default: false
    web:
      exposure:
        include: "health"
  endpoint:
    health:
      enabled: true
  metrics:
    web:
      server:
        request:
          autotime:
            enabled: false

springdoc:
  pathsToMatch: /api/v2/**
  api-docs:
    path: /v2/api-docs
  swagger-ui:
    path: /docs/api.html
    disable-swagger-default-url: true
    url: /v2/api-docs
    display-query-params: true
  default-produces-media-type: application/json

#storage related properties
local-storage:
  max-request-size: 10

storage:
  implementation: local

# Database related properties
db:
  driver: org.postgresql.Driver
  url: jdbc:postgresql://rdepot-pgbouncer.rdepot.svc.cluster.local:5432/rdepot
  username: rdepot
  password: ${DB_PASSWORD}

# Hibernate related properties
hibernate:
  show_sql: false
  default_schema: public

# Liquibase related properties
spring:
  liquibase:
    url: jdbc:postgresql://rdepot-pgbouncer.rdepot.svc.cluster.local:5432/rdepot
    user: rdepot
    password: ${DB_PASSWORD}
    default-schema: public
    enabled: truerdepot-backend-78dd7f884d-6zjtq