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.
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.