kagemomiji / airsonic-advanced

airsonic-advanced
GNU General Public License v3.0
143 stars 13 forks source link

[Bug]: Search3 Implementation Not Working Correctly #333

Closed jeffgt14 closed 6 months ago

jeffgt14 commented 6 months ago

What happened?

Doesn't seem like the new Search3 implementation is working correctly. I have confirmed with Tolriq when trying to sync with Symfonium.

https://support.symfonium.app/t/airsonic-advanced-not-syncing-with-latest-edge-release/2971

Steps to reproduce

  1. Attempt to Sync music using Symfonium client
  2. Sync gathers artists and albums
  3. Sync asks for first 500 songs and returns 0 results

Version

11.1.x (Edge)

Version Detail

11.1.3-SNAPSHOT.20231203152933

Operating System

Docker on OpenSUSE Tumbleweed

Java Version

Docker Container

Database

Mysql 10.x

DB Detail

No response

Configuration paramter

.

Proxy Server

No response

client detail

Symfonium 7.0.0

language

English

Relevant log output

18:30:55.747 P:Verbose T:SubsonicLogger 
--> [425] GET http://xxx:4040/rest/search3.view?query=%22%22&musicFolderId=0&songOffset=0&songCount=500&albumOffset=0&albumCount=0&artistOffset=0&artistCount=0&u=REDACTED&p=REDACTED&v=1.13.0&c=Symfonium&f=json

18:30:56.145 P:Verbose T:SubsonicLogger 
<-- [425] 200  http://xxx:4040/rest/search3.view?query=%22%22&musicFolderId=0&songOffset=0&songCount=500&albumOffset=0&albumCount=0&artistOffset=0&artistCount=0&u=REDACTED&p=REDACTED&v=1.13.0&c=Symfonium&f=json (398ms, 156-byte body)

18:30:56.146 P:Verbose T:SubsonicLogger 
<-- [425] {
   "subsonic-response" : {
      "status" : "ok",
      "version" : "1.15.0",
      "type" : "Airsonic-Advanced",
      "searchResult3" : {
      }
   }
}
kagemomiji commented 6 months ago

@jeffgt14 Airsonic-Advanced uses 1-indexing for musicFolderId, so there should be no musicFolderId=0. Even with musicFolderId=1, would there be no search results returned?

jeffgt14 commented 6 months ago

It appears to be correct and uses 1-index as well. Symfonium is just returning what getMusicFolder provides. musicFolderId=0 seems to have no issues returning artists and albums either. It's only songs that do not return anything.

2023-12-11 18:30:55.746 Verbose/Subsonic: End Insert Album (true): 11598 [25.95s]
2023-12-11 18:30:55.747 Verbose/SubsonicLogger: --> [425] GET http://X.X.X:4040/rest/search3.view?query=%22%22&musicFolderId=0&songOffset=0&songCount=500&albumOffset=0&albumCount=0&artistOffset=0&artistCount=0&u=REDACTED&p=REDACTED&v=1.13.0&c=Symfonium&f=json
2023-12-11 18:30:56.145 Verbose/SubsonicLogger: <-- [425] 200  http://X.X.X:4040/rest/search3.view?query=%22%22&musicFolderId=0&songOffset=0&songCount=500&albumOffset=0&albumCount=0&artistOffset=0&artistCount=0&u=REDACTED&p=REDACTED&v=1.13.0&c=Symfonium&f=json (398ms, 156-byte body)
2023-12-11 18:30:56.146 Verbose/SubsonicLogger: <-- [425] {
   "subsonic-response" : {
      "status" : "ok",
      "version" : "1.15.0",
      "type" : "Airsonic-Advanced",
      "searchResult3" : {
      }
   }
}
2023-12-11 18:30:56.147 Verbose/SubsonicLogger: --> [674] GET http://X.X.X:4040/rest/search3.view?query=%22%22&musicFolderId=1&songOffset=0&songCount=500&albumOffset=0&albumCount=0&artistOffset=0&artistCount=0&u=REDACTED&p=REDACTED&v=1.13.0&c=Symfonium&f=json
2023-12-11 18:30:56.416 Verbose/SubsonicLogger: <-- [674] 200  http://X.X.X:4040/rest/search3.view?query=%22%22&musicFolderId=1&songOffset=0&songCount=500&albumOffset=0&albumCount=0&artistOffset=0&artistCount=0&u=REDACTED&p=REDACTED&v=1.13.0&c=Symfonium&f=json (268ms, 156-byte body)
2023-12-11 18:30:56.418 Verbose/SubsonicLogger: <-- [674] {
   "subsonic-response" : {
      "status" : "ok",
      "version" : "1.15.0",
      "type" : "Airsonic-Advanced",
      "searchResult3" : {
      }
   }
}
2023-12-11 18:30:56.418 Verbose/Subsonic: End Insert Song (true): 0 [0.67s]
Tolriq commented 6 months ago

@kagemomiji

As jeff says, Symfonium ask Subsonic for the list of folders and does not invent the Ids.


<-- [212] 200  http://xxxx:4040/rest/getMusicFolders.view?u=REDACTED&p=REDACTED&v=1.13.0&c=Symfonium&f=json (273ms, 316-byte body)

<-- [212] {
   "subsonic-response" : {
      "status" : "ok",
      "version" : "1.15.0",
      "type" : "Airsonic-Advanced",
      "musicFolders" : {
         "musicFolder" : [ {
            "id" : 0,
            "name" : "Music"
         }, {
            "id" : 1,
            "name" : "Podcasts"
         } ]
      }
   }
}
kagemomiji commented 6 months ago

@jeffgt14

I have three requests:

  1. Could you please check if the search function in the Web UI works correctly?
  2. Could you provide the logs when the search3 API is requested?
  3. Could you share the settings used for starting the Docker container, excluding any secrets?"
jeffgt14 commented 6 months ago
  1. Search function works fine in WebUI
  2. I don't see anything generated in the logs when I try to sync with Symfonium.
2023-12-14 02:00:36.193 INFO --- o.a.p.s.MediaScannerService : Marking non-present artists.
2023-12-14 02:00:36.196 WARN --- o.h.e.j.spi.SqlExceptionHelper : SQL Warning Code: -1100, SQLState: 02000
2023-12-14 02:00:36.196 WARN --- o.h.e.j.spi.SqlExceptionHelper : no data
2023-12-14 02:00:36.196 INFO --- o.a.p.s.MediaScannerService : Artist persistence complete
2023-12-14 02:00:36.340 INFO --- o.a.p.s.MediaScannerService : Genre persistence successfully complete: true
2023-12-14 02:00:56.047 INFO --- o.a.p.s.MediaScannerService : Marking non-present files.
2023-12-14 02:00:57.429 INFO --- o.a.p.s.MediaScannerService : File marking complete
2023-12-14 02:00:57.429 INFO --- o.a.p.s.MediaScannerService : Completed media library scan.
2023-12-14 02:00:58.438 INFO --- o.a.p.s.MediaScannerService : Media library scan took 57s
2023-12-14 02:00:58.438 INFO --- o.a.p.s.MediaScannerService : Media library scan completed.
2023-12-14 02:00:58.438 INFO --- o.a.p.service.PlaylistService : Starting playlist import.
2023-12-14 02:00:58.439 INFO --- o.a.p.service.PlaylistService : Completed playlist import.
2023-12-14 04:16:17.950 WARN --- c.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=1h16m27s603ms729µs836ns).
2023-12-14 04:23:51.907 INFO --- org.airsonic.player.Application : Starting Application using Java 17.0.5 on ade13a260031 with PID 9 (/app/WEB-INF/classes started by ? in /var)
2023-12-14 04:23:51.911 INFO --- org.airsonic.player.Application : No active profile set, falling back to 1 default profile: "default"
2023-12-14 04:23:57.026 INFO --- o.a.p.service.SettingsService : Java: 17.0.5+8, OS: Linux, Memory (max bytes): 2155872256
2023-12-14 04:23:57.260 INFO --- org.airsonic.player.Application : Detected Tomcat web server
2023-12-14 04:24:07.970 INFO --- l.database.core.HsqlDatabase : Set default schema name to PUBLIC
2023-12-14 04:24:08.164 INFO --- l.l.StandardLockService : Successfully acquired change log lock
2023-12-14 04:24:09.378 INFO --- liquibase.Liquibase : Parsed changelog file 'classpath:liquibase/db-changelog.xml'
2023-12-14 04:24:09.468 INFO --- l.c.StandardChangeLogHistoryService : Reading from PUBLIC.DATABASECHANGELOG
2023-12-14 04:24:09.685 INFO --- l.l.StandardLockService : Successfully released change log lock
2023-12-14 04:24:09.771 INFO --- l.l.StandardLockService : Successfully acquired change log lock
2023-12-14 04:24:10.507 INFO --- l.c.StandardChangeLogHistoryService : Reading from PUBLIC.DATABASECHANGELOG
2023-12-14 04:24:10.639 INFO --- l.c.StandardChangeLogHistoryService : Reading from PUBLIC.DATABASECHANGELOG
2023-12-14 04:24:10.725 INFO --- liquibase.util.ShowSummaryUtil : UPDATE SUMMARY
2023-12-14 04:24:10.726 INFO --- liquibase.util.ShowSummaryUtil : Run: 0
2023-12-14 04:24:10.726 INFO --- liquibase.util.ShowSummaryUtil : Previously run: 302
2023-12-14 04:24:10.726 INFO --- liquibase.util.ShowSummaryUtil : Filtered out: 0
2023-12-14 04:24:10.726 INFO --- liquibase.util.ShowSummaryUtil : -------------------------------
2023-12-14 04:24:10.726 INFO --- liquibase.util.ShowSummaryUtil : Total change sets: 302
2023-12-14 04:24:10.727 INFO --- liquibase.util.ShowSummaryUtil : Update summary generated
2023-12-14 04:24:10.729 INFO --- l.l.StandardLockService : Successfully released change log lock
2023-12-14 04:24:10.732 INFO --- l.l.StandardLockService : Successfully released change log lock
2023-12-14 04:24:10.733 INFO --- liquibase.command.CommandScope : Command execution complete
2023-12-14 04:24:14.609 INFO --- o.a.p.service.DatabaseService : Automatic DB backup disabled
2023-12-14 04:24:14.731 INFO --- o.a.p.s.search.IndexManager : Index was found (index version 19).
2023-12-14 04:24:14.737 INFO --- o.a.p.s.TaskSchedulingService : Task mediascanner-IndexingTask scheduled
2023-12-14 04:24:14.737 INFO --- o.a.p.s.MediaScannerService : Automatic media library scanning scheduled to run every 1 day(s), starting at 2023-12-15T02:00:00.733626602
2023-12-14 04:24:17.119 INFO --- org.airsonic.player.Application : Started Application in 26.457 seconds (JVM running for 27.365)
2023-12-14 04:24:17.143 INFO --- o.a.player.service.PlayerService : Deleting old players
2023-12-14 04:24:17.181 INFO --- o.a.player.service.PlayerService : Complete Deleting old players
2023-12-14 04:24:17.201 INFO --- o.a.p.s.TaskSchedulingService : Task podcast-channel-refresh--1 scheduled
2023-12-14 04:24:17.201 INFO --- o.a.p.s.PodcastManagementService : Automatic default Podcast update scheduled to run every 24 hour(s), starting at 2023-12-14T10:29:17.201195917Z
2023-12-14 04:24:17.202 INFO --- o.a.p.s.TaskSchedulingService : Task remote-playstatus-cleanup scheduled
2023-12-14 04:29:17.201 INFO --- o.a.p.s.PodcastManagementService : Starting scheduled default Podcast refresh.
2023-12-14 04:29:17.205 INFO --- o.a.p.s.PodcastManagementService : Completed scheduled default Podcast refresh.
2023-12-14 04:49:37.555 INFO --- o.a.p.f.BootstrapVerificationFilter : Servlet container: Apache Tomcat/9.0.80
2023-12-14 09:48:09.816 INFO --- o.a.p.service.VersionService : Resolved local Airsonic version to: 11.1.3-SNAPSHOT.20231203152933
jeffgt14 commented 6 months ago

Below is my docker compose. I do build my own image but I'm only adding installations of sox, flac, and wavpack into the dockerfile and symlinking them in the entry.sh file.

version: '3.8'
services:
  airsonic:
    image: jeffgt14/airsonic
    container_name: airsonic
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/Chicago
      - JAVA_OPTS=-Xmx2056m
    user: 1000:1000
    ports:
      - 4040:4040
      - 4041:4041
    volumes:
      - /home/jeff/Music:/var/music
      - ./airsonic/playlists:/var/airsonic/playlists
      - ./airsonic/data:/var/airsonic
kagemomiji commented 6 months ago

@jeffgt14 From your logs and docker-compose.yml, it appears that the actual database in use is HSQLDB. I was a bit confused, but if you are using HSQLDB instead of MySQL, then an musicFolder index of 0 is correct.

The search3 API uses the same mechanism as the Web UI's Search. If the search results include songs, it likely means there isn't an issue with the Search functionality itself.

  1. If the search results of the Web UI do not include songs, you may want to try running a library scan to see if this resolves the issue.
  2. The user making the API request might not have access rights to the target MusicFolder. This is the case if the desired music folder is not included in the response when requesting the getMusicFolders API.
  3. The library might be in the midst of its initial scan upon startup, and indexes have not yet been created. In this case, please wait until the scan is complete.
jeffgt14 commented 6 months ago

IDK, all 3 of those check out on my end. Only thing I can think of is some disconnect between Airsonic-Advanced and Symfonium. Search functions fine in Web UI and DSub.

Tolriq commented 6 months ago

Symfonium use search3 with empty query, you added support at some point. Depending on the DB you may need to force a sort by ID to avoid indeterminate result of the queries. This works properly with all servers that joined OpenSubsonic.

jeffgt14 commented 6 months ago

Not sure if it helps but I've removed all media, cleaned database, and performed a full sync and I'm at least getting some log output now when trying to sync with Symfonium. As for the DB I'm using, I am only using what comes as default with the docker image.

           : Completed playlist import.
2023-12-18 11:18:57.749  INFO --- o.a.p.s.TaskSchedulingService            : Task mediascanner-IndexingTask scheduled
2023-12-18 11:18:57.749  INFO --- o.a.p.s.MediaScannerService              : Automatic media library scanning scheduled to run every 1 day(s), starting at 2023-12-19T02:00:00.748341039
2023-12-18 11:25:01.908  WARN --- o.a.player.service.LastFmService         : Failed to find similar artists for Phil Lynott

de.umass.lastfm.CallException: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file.
    at de.umass.lastfm.Caller.call(Caller.java:268) ~[lastfm-java-0.1.2.jar:na]
    at de.umass.lastfm.Caller.call(Caller.java:189) ~[lastfm-java-0.1.2.jar:na]
    at de.umass.lastfm.Caller.call(Caller.java:185) ~[lastfm-java-0.1.2.jar:na]
    at de.umass.lastfm.Artist.getSimilar(Artist.java:144) ~[lastfm-java-0.1.2.jar:na]
    at de.umass.lastfm.Artist.getSimilar(Artist.java:132) ~[lastfm-java-0.1.2.jar:na]
    at org.airsonic.player.service.LastFmService.getSimilarArtists_aroundBody2(LastFmService.java:146) ~[classes/:na]
    at org.airsonic.player.service.LastFmService$AjcClosure3.run(LastFmService.java:1) ~[classes/:na]
    at org.springframework.transaction.aspectj.AbstractTransactionAspect.ajc$around$org_springframework_transaction_aspectj_AbstractTransactionAspect$1$2a73e96cproceed(AbstractTransactionAspect.aj:67) ~[spring-aspects-5.3.30.jar:5.3.30]
    at org.springframework.transaction.aspectj.AbstractTransactionAspect$AbstractTransactionAspect$1.proceedWithInvocation(AbstractTransactionAspect.aj:73) ~[spring-aspects-5.3.30.jar:5.3.30]
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.30.jar:5.3.30]
    at org.springframework.transaction.aspectj.AbstractTransactionAspect.ajc$around$org_springframework_transaction_aspectj_AbstractTransactionAspect$1$2a73e96c(AbstractTransactionAspect.aj:71) ~[spring-aspects-5.3.30.jar:5.3.30]
    at org.airsonic.player.service.LastFmService.getSimilarArtists(LastFmService.java:137) ~[classes/:na]
    at org.airsonic.player.controller.SubsonicRESTController.getArtistInfo2(SubsonicRESTController.java:489) ~[classes/:na]
    at jdk.internal.reflect.GeneratedMethodAccessor284.invoke(Unknown Source) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Unknown Source) ~[na:na]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.30.jar:5.3.30]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.30.jar:5.3.30]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.30.jar:5.3.30]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.30.jar:5.3.30]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.30.jar:5.3.30]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.30.jar:5.3.30]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.30.jar:5.3.30]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.30.jar:5.3.30]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.30.jar:5.3.30]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.30.jar:5.3.30]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:497) ~[jakarta.servlet-api-4.0.4.jar:4.0.4]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.30.jar:5.3.30]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:584) ~[jakarta.servlet-api-4.0.4.jar:4.0.4]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.airsonic.player.filter.MetricsFilter.doFilter(MetricsFilter.java:30) ~[classes/:na]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.airsonic.player.filter.RequestEncodingFilter.doFilter(RequestEncodingFilter.java:45) ~[classes/:na]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.airsonic.player.filter.RESTFilter.doFilter(RESTFilter.java:49) ~[classes/:na]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.airsonic.player.filter.ParameterDecodingFilter.doFilter(ParameterDecodingFilter.java:64) ~[classes/:na]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.airsonic.player.filter.BootstrapVerificationFilter.doFilter(BootstrapVerificationFilter.java:63) ~[classes/:na]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:337) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:106) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:97) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.airsonic.player.security.RESTRequestParameterProcessingFilter.successfulAuthentication(RESTRequestParameterProcessingFilter.java:136) ~[classes/:na]
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:237) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:164) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.30.jar:5.3.30]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:223) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:117) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.30.jar:5.3.30]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) ~[spring-web-5.3.30.jar:5.3.30]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.30.jar:5.3.30]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.30.jar:5.3.30]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:112) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:82) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.30.jar:5.3.30]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.30.jar:5.3.30]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:346) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:221) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:186) ~[spring-security-web-5.7.11.jar:5.7.11]
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.30.jar:5.3.30]
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.30.jar:5.3.30]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.30.jar:5.3.30]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.30.jar:5.3.30]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.30.jar:5.3.30]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.30.jar:5.3.30]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:94) ~[spring-web-5.3.30.jar:5.3.30]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.30.jar:5.3.30]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) ~[spring-boot-actuator-2.7.16.jar:2.7.16]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.30.jar:5.3.30]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.30.jar:5.3.30]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.30.jar:5.3.30]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1790) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.80.jar:9.0.80]
    at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]
Caused by: org.xml.sax.SAXParseException: Premature end of file.
    at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) ~[na:na]
    at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) ~[na:na]
    at de.umass.lastfm.Caller.createResultFromInputStream(Caller.java:324) ~[lastfm-java-0.1.2.jar:na]
    at de.umass.lastfm.Caller.call(Caller.java:256) ~[lastfm-java-0.1.2.jar:na]
    ... 141 common frames omitted
kagemomiji commented 6 months ago

@jeffgt14 Could you try ghcr.io/kagemomiji/airsonic-advanced:pr-338 image.

I have changed search3 logic.

jeffgt14 commented 6 months ago

Seems to be working now