Uploaded image for project: 'mod-finance'
  1. mod-finance
  2. MODFIN-213

Exchange rates update completes with error

    XMLWordPrintable

Details

    • Bug
    • Status: Closed (View Workflow)
    • P2
    • Resolution: Done
    • None
    • 4.3.1
    • None
    • ACQ Sprint 125
    • 2
    • Thunderjet
    • R3 2021 Bug Fix

    Description

      Purpose/Overview:
      The issue was discovered after invoice approval failed. Retrieving exchane rate data for the first time after module deployment finishes with exceptions:

      Sep 23, 2021 1:25:04 PM org.javamoney.moneta.internal.loader.LoadableResource load
      INFO: Failed to load resource input for IMFRateProvider from https://www.imf.org/external/np/fin/data/rms_five.aspx?tsvflag=Y
      java.net.SocketTimeoutException: Read timed out
      	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
      	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)
      	at java.base/java.net.SocketInputStream.read(SocketInputStream.java:168)
      	at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140)
      	at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:478)
      	at java.base/sun.security.ssl.SSLSocketInputRecord.readHeader(SSLSocketInputRecord.java:472)
      	at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:70)
      	at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1364)
      	at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:973)
      	at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:252)
      	at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:292)
      	at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:351)
      	at java.base/sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:754)
      	at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:689)
      	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1615)
      	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1520)
      	at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:250)
      	at org.javamoney.moneta.internal.loader.LoadableResource.load(LoadableResource.java:347)
      	at org.javamoney.moneta.internal.loader.LoadableResource.loadRemote(LoadableResource.java:228)
      	at org.javamoney.moneta.internal.loader.LoadableResource.shouldReadDataFromFallback(LoadableResource.java:154)
      	at org.javamoney.moneta.internal.loader.LoadableResource.getData(LoadableResource.java:394)
      	at org.javamoney.moneta.internal.loader.LoadableResource.getDataStream(LoadableResource.java:208)
      	at org.javamoney.moneta.internal.loader.LoadRemoteDataLoaderService.execute(LoadRemoteDataLoaderService.java:40)
      	at org.javamoney.moneta.internal.loader.DefaultLoaderServiceFacade.loadDataRemote(DefaultLoaderServiceFacade.java:51)
      	at org.javamoney.moneta.internal.loader.DefaultLoaderService.registerData(DefaultLoaderService.java:165)
      	at org.javamoney.moneta.internal.loader.LoaderConfigurator.initResource(LoaderConfigurator.java:92)
      	at org.javamoney.moneta.internal.loader.LoaderConfigurator.load(LoaderConfigurator.java:59)
      	at org.javamoney.moneta.internal.loader.DefaultLoaderService.initialize(DefaultLoaderService.java:101)
      	at org.javamoney.moneta.internal.loader.DefaultLoaderService.<init>(DefaultLoaderService.java:85)
      	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
      	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
      	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:780)
      	at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:722)
      	at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1395)
      	at org.javamoney.moneta.internal.PriorityAwareServiceProvider.loadServices(PriorityAwareServiceProvider.java:98)
      	at org.javamoney.moneta.internal.PriorityAwareServiceProvider.getServices(PriorityAwareServiceProvider.java:65)
      	at javax.money.spi.Bootstrap.getService(Bootstrap.java:113)
      	at org.javamoney.moneta.convert.imf.IMFRateProvider.<init>(IMFRateProvider.java:59)
      	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
      	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
      	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:780)
      	at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:722)
      	at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1395)
      	at org.javamoney.moneta.internal.PriorityAwareServiceProvider.loadServices(PriorityAwareServiceProvider.java:98)
      	at org.javamoney.moneta.internal.PriorityAwareServiceProvider.getServices(PriorityAwareServiceProvider.java:65)
      	at javax.money.spi.Bootstrap.getServices(Bootstrap.java:102)
      	at org.javamoney.moneta.convert.internal.DefaultMonetaryConversionsSingletonSpi.reload(DefaultMonetaryConversionsSingletonSpi.java:64)
      	at org.javamoney.moneta.convert.internal.DefaultMonetaryConversionsSingletonSpi.<init>(DefaultMonetaryConversionsSingletonSpi.java:56)
      	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
      	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
      	at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:780)
      	at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:722)
      	at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1395)
      	at org.javamoney.moneta.internal.PriorityAwareServiceProvider.loadServices(PriorityAwareServiceProvider.java:98)
      	at org.javamoney.moneta.internal.PriorityAwareServiceProvider.getServices(PriorityAwareServiceProvider.java:65)
      	at javax.money.spi.Bootstrap.getService(Bootstrap.java:113)
      	at javax.money.convert.MonetaryConversions.getMonetaryConversionsSpi(MonetaryConversions.java:59)
      	at javax.money.convert.MonetaryConversions.getExchangeRateProvider(MonetaryConversions.java:169)
      	at javax.money.convert.MonetaryConversions.getExchangeRateProvider(MonetaryConversions.java:197)
      	at org.folio.rest.helper.ExchangeRateHelper.getExchangeRate(ExchangeRateHelper.java:21)
      	at org.folio.rest.impl.ExchangeRateApi.lambda$0(ExchangeRateApi.java:24)
      	at org.folio.completablefuture.FolioVertxCompletableFuture.lambda$supplyBlockingAsync$7(FolioVertxCompletableFuture.java:163)
      	at io.vertx.core.impl.ContextImpl.lambda$null$0(ContextImpl.java:160)
      	at io.vertx.core.impl.AbstractContext.dispatch(AbstractContext.java:96)
      	at io.vertx.core.impl.ContextImpl.lambda$executeBlocking$1(ContextImpl.java:158)
      	at io.vertx.core.impl.TaskQueue.run(TaskQueue.java:76)
      	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
      	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
      	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
      	at java.base/java.lang.Thread.run(Thread.java:829)
      
      

      This issue causes response timeout on UI side, so it makes user think that invoice approval totally failed, but its not.

      Acceptance criteria:

      • the issue fixed

      TestRail: Results

        Attachments

          1. mod-finance-snapshot.log
            116 kB
          2. mod-finance.log
            485 kB
          3. 000000
            15 kB

          Issue Links

            Activity

              People

                siarhei_hrabko Siarhei Hrabko
                siarhei_hrabko Siarhei Hrabko
                Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                  Created:
                  Updated:
                  Resolved:

                  TestRail: Runs

                    TestRail: Cases