Skip to content

cwms-python get_timeseries_identifier endpoint not working in CDA 2026.03-31-d #1776

@jbatterman

Description

@jbatterman

Describe the bug
This endpoint worked in the 2025.09 version of CDA, but stopped working with recent CDA updates. We saw this error in CWBI-Test, and now that we have upgraded our local CDA it is occurring here as well. This endpoint is nice since it's faster to check if a time series exists rather than retrieving the data to check.

This endpoint still exists in Github for cwms-python, but we did find another endpoint that appears to do the same thing (get_timeseries_identifiers). We will try to update our python scripts to use this endpoint in the meantime.

Expected behavior
Expected the endpoint to continue to work after updating CDA.

To Reproduce
In a Python script, run the following chunk of code, and see the error generated.
ts_identifier = cwms.get_timeseries_identifier(ts_id='FTPK.Elev.Inst.1Hour.0.Best-MRBWM', office_id='NWDM')

Logs/Incident Identifier
10-Jun-2026 13:29:10.511 WARNING [https-openssl-nio-<IP>-8243-exec-705] cwms.cda.ApiServlet.lambda$init$8 error on request[e3ec304a-8846-4bf8 -88e8-1b3791b1cf7c]: /nwdm-data/timeseries/identifier-descriptor/FTPK.Elev.Inst.1Hour.0.Best-MRBWM org.jooq.exception.TooManyRowsException: Cursor returned more than one result at org.jooq_3.18.7.ORACLE18C.debug(Unknown Source) at org.jooq_3.18.7.ORACLE18C.debug(Unknown Source) at org.jooq.impl.Tools.fetchOne(Tools.java:2738) at org.jooq.impl.ResultQueryTrait.fetchOne(ResultQueryTrait.java:509) at cwms.cda.data.dao.TimeSeriesIdentifierDescriptorDao.lambda$getTimeSeriesIdentifier$3(TimeSeriesIdentifierDescriptorDao.java:232) at org.jooq.impl.DefaultDSLContext.connectionResult(DefaultDSLContext.java:658) at cwms.cda.data.dao.JooqDao.connectionResult(JooqDao.java:755) at cwms.cda.data.dao.TimeSeriesIdentifierDescriptorDao.getTimeSeriesIdentifier(TimeSeriesIdentifierDescriptorDao.java:227) at cwms.cda.api.TimeSeriesIdentifierDescriptorController.getOne(TimeSeriesIdentifierDescriptorController.java:193) at io.javalin.apibuilder.CrudFunction$2.invoke$lambda-0(CrudHandler.kt:31) at io.javalin.apibuilder.CrudFunctionHandler.handle(CrudHandler.kt) at cwms.cda.security.CdaAccessManager.manage(CdaAccessManager.java:37) at io.javalin.http.JavalinServlet.addHandler$lambda-0(JavalinServlet.kt:96) at io.javalin.http.JavalinServlet$lifecycle$2$1$1.invoke(JavalinServlet.kt:43) at io.javalin.http.JavalinServlet$lifecycle$2$1$1.invoke(JavalinServlet.kt:43) at io.javalin.http.JavalinServletHandler.executeNextTask(JavalinServletHandler.kt:99) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$lambda-1(JavalinServletHandler.kt:85) at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106) at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$javalin(JavalinServletHandler.kt:85) at io.javalin.http.JavalinServletHandler.executeNextTask$lambda-11$lambda-10(JavalinServletHandler.kt:119) at java.base/java.util.concurrent.CompletableFuture.uniApplyNow(CompletableFuture.java:680) at java.base/java.util.concurrent.CompletableFuture.uniApplyStage(CompletableFuture.java:658) at java.base/java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:2094) at io.javalin.http.JavalinServletHandler.executeNextTask(JavalinServletHandler.kt:119) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$lambda-1(JavalinServletHandler.kt:85) at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106) at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$javalin(JavalinServletHandler.kt:85) at io.javalin.http.JavalinServletHandler.executeNextTask$lambda-11$lambda-10(JavalinServletHandler.kt:119) at java.base/java.util.concurrent.CompletableFuture.uniApplyNow(CompletableFuture.java:680) at java.base/java.util.concurrent.CompletableFuture.uniApplyStage(CompletableFuture.java:658) at java.base/java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:2094) at io.javalin.http.JavalinServletHandler.executeNextTask(JavalinServletHandler.kt:119) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$lambda-1(JavalinServletHandler.kt:85) at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106) at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2235) at io.javalin.http.JavalinServletHandler.queueNextTaskOrFinish$javalin(JavalinServletHandler.kt:85) at io.javalin.http.JavalinServlet.service(JavalinServlet.kt:89) at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) at cwms.cda.ApiServlet.service(ApiServlet.java:926) at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:197) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142) at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:129) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142) at org.apache.catalina.filters.CorsFilter.handleNonCORS(CorsFilter.java:334) at org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:161) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:142) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:88) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:596) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:643) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:83) at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:240) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:72) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:398) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:935) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1831) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:973) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:491) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) at java.base/java.lang.Thread.run(Thread.java:834)

CDA Version (please complete the following information):
2026.03.31-d

Additional context
This issue has been occurring for a few months in CWBI-Test. I didn't see an existing issue open about it though - feel free to move this to that issue if one already exists.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions