We found the following problems in this heap dump.
For each problem where possible we report overhead: how much memory you would save
(in Kbytes and as a percentage of used memory) if you get rid of this problem.
Problem: Thread throwing OutOfMemoryError found
Details
This dump was generated after the thread below threw OutOfMemoryError.
This may be caused by one or more of the following things:
- your heap is too small
- your app wastes memory somewhere
- your app has a memory leak
- your app tries to allocate an array bigger than the JVM limit
See other report sections for more concrete clues and solutions.
Found thread with name: UNKNOWN
For full details, go to
Problem: High percentage of memory is used by instances of some class(es).
Details
Instances of some class(es) take up a big percentage of memory.
That can happen when the number of instances is very high, or their size
is very large (e.g. for arrays). Depending on whether all these instances
are really necessary or not, and also whether they are live or garbage,
this may or may not be a problem. See other report sections for more details
about these objects.
Threshold exceeded for:
  Total size 
 Source 
 539,407Kb (52.9%)
Objects of class String
 416,565Kb (40.8%)
Objects of class io.vertx.core.parsetools.impl.JsonEventImpl
For full details, go to
Problem: High percentage of memory retained by one or more GC roots, or memory leak. Leak candidate(s) found
Details
Some GC root(s) retain a large percentage of memory, and/or there are signs of a memory leak.
When one GC root holds most of the objects, it may be by design, or it may signal that
more objects than expected are accumulated in memory. Alternatively, when a single object,
typically a collection or array, references a very large number of other objects, AND they
take up a lot of memory, it may signal a memory leak. However, we cannot say for sure
that you have a real problem here. You need to inspect carefully the object trees in the
report section below and check whether they match your expectations.
For general discussion of this problem, see this article.
Found leak candidate(s) in Object tree for GC root(s) Java Static [org.folio.oaipmh.processors.MarcWithHoldingsRequestHelper.INSTANCE], Java Local(org.folio.oaipmh.processors.MarcWithHoldingsRequestHelper) [1 object(s)] (1 thread(s))
Threshold exceeded for:
  Total size 
 Source 
 1,004,830Kb (98.5%)
Object tree for GC root(s) Java Static [org.folio.oaipmh.processors.MarcWithHoldingsRequestHelper.INSTANCE], Java Local(org.folio.oaipmh.processors.MarcWithHoldingsRequestHelper) [1 object(s)] (1 thread(s))
For full details, go to
Problem: Memory is wasted due to per-object overhead of instances of some class(es). Overhead 37.5%  ( 382,491Kb )
Details
A big percentage of memory is used by per-object, internal JVM data (object headers).
Each object in the heap has a fixed-size header, where the JVM keeps data such as
a pointer to the object's class, lock bits, etc. In HotSpot JVM, the most common header size
is 12 bytes for an ordinary object and 16 bytes for an array. When the heap size is over 32G,
this becomes 16 bytes and 20 bytes respectively. In Android JVM, object headers are smaller.
When there is a very large number of small objects in the heap, the percentage of memory
used by their headers can become quite big. You need to check whether all these objects
are necessary, or whether they can be combined with other objects to reduce their total number.
For general discussion of this problem, see this article.
Threshold exceeded for:
  Overhead 
 Source 
 156,212Kb (15.3%)
Per-object overhead of io.vertx.core.parsetools.impl.JsonEventImpl
 112,164Kb (11.0%)
Per-object overhead of byte[]
 112,142Kb (11.0%)
Per-object overhead of String
For full details, go to
Problem: Memory is wasted by duplicate strings. Overhead 37.6%  ( 383,345Kb )
Details
There are multiple String instances with the same value, like "yes", "yes", "no", "no", "no".
String duplication often occurs when, for example, an app reads the same common word
such as "yes" from the DB repeatedly, creating a new String instance every time.
See the report section below for concrete findings and suggestions how to fix.
For general discussion of this problem, see this article.
Threshold exceeded for:
  Overhead 
 Source 
 178,516Kb (17.5%)
Copies of string "false"
 89,258Kb (8.7%)
Copies of string "MARC"
For full details, go to
Problem: Memory is wasted by duplicate objects other than Strings. Overhead 11.7%  ( 119,033Kb )
Details
There are some duplicate objects, such as io.vertx.core.parsetools.impl.JsonEventImpl.
That is, there are multiple instances of some class(es) with the same contents.
Object duplication often occurs when, for example, an app reads the same frequently used
piece of data from the DB repeatedly, creating a new Java object for it every time.
See the report section below for concrete findings.
For general discussion of this problem, see this article.
Threshold exceeded for:
  Overhead 
 Source 
 59,508Kb (5.8%)
Copies of objects with value io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721d08, type : io.vertx.core.parsetools.JsonEventType@d4cd7c50, field : null, value : null)
 59,507Kb (5.8%)
Copies of objects with value io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721cd8, type : io.vertx.core.parsetools.JsonEventType@d4cd7640, field : null, value : null)
For full details, go to
Problem: Memory is wasted by duplicate primitive arrays. Overhead 20.3%  ( 206,854Kb )
Details
There are some duplicate primitive arrays, such as byte[] and int[].
That is, there are multiple arrays with the same elements in the same order.
Duplication of primitive arrays often occurs when, for example, an app reads
the same frequently used piece of data, such as an image, from the DB repeatedly,
creating a new Java array for it every time. See the report section below for
concrete findings.
For general discussion of this problem, see this article.
Threshold exceeded for:
  Overhead 
 Source 
 89,258Kb (8.7%)
Copies of arrays with value byte[5]{'false'}
 44,629Kb (4.4%)
Copies of arrays with value byte[4]{'MARC'}
For full details, go to
Problem: High amount of off-heap memory allocated via java.nio.DirectByteBuffer objects. Overhead 20.3%  ( 207,195Kb )
Details
A considerable off-heap memory is allocated and retained by java.nio.DirectByteBuffer
objects in this app. Depending on whether all these buffers are really necessary or not,
and also whether they are live or garbage, this may or may not be a problem. Note that
a garbage (unreachable) DirectByteBuffer Java object still retains off-heap memory.
That memory area is released only when the GC gets to this Java object and wipes it out.
Sometimes that takes a lot of time. See the report section below for concrete findings.
For general discussion of this problem, see this article.
For full details, go to
Problem: Some potentially humongous objects are found Overhead 5.4%  ( 54,843Kb )
Details
There are some objects bigger than 1MB, such as Object[] and byte[].
Big objects are generally more expensive for the JVM to handle.
This is especially true for the G1 GC, where any object bigger than half a GC region size
is considered a humongous object. Such objects are allocated directly in the
Old Generation into special "humongous regions", that are contiguous sets of ordinary regions.
A humongous allocation often requires extra work from the GC. Collecting humongous objects is
also more expensive than collecting normal objects. Thus if you see any potentially humongous
objects reported for your heap dump, you may want to check your actual GC region size, and
then check your GC log for any records of Humongous object allocations. Normally, G1 region
size is 2MB for heap < 4G, 4MB for heap < 8G, 8MB for heap < 16GB and so on. If there are
many humongous objects, you may need to consider reducing their size, increasing region size,
increasing heap size, or all of the above.
For general discussion of this problem, see this article, "Humongous Objects" section.
Threshold exceeded for:
  Overhead 
 Source 
 52,063Kb (5.1%)
Instances of Object[]
For full details, go to
1. Top-Level Stats
What's this?
Generated by JXRay version 2.8u2
Heap dump mod-oai-pmh.hprof created on Wed Nov 03 08:33:53 EDT 2021
JVM version: 11.0.12
   
  Instances 
  Object arrays 
  Primitive arrays 
 Total 
 Objects
 23,034,620
 23,747
 9,580,924
32,639,291
 Bytes
 645,391Kb (63.3%)
 54,323Kb (5.3%)
 320,527Kb (31.4%)
1,020,242Kb (100.0%)
   
  Live 
  Garbage 
 Total 
 Objects
 32,597,652
 41,639
32,639,291
 Bytes
 1,018,220Kb (99.8%)
 2,021Kb (0.2%)
1,020,242Kb (100.0%)
  Number of classes 
 Number of threads 
 10,730
11
  JVM pointer size 
 Object header size 
 4
12
2. Thread throwing OutOfMemoryError. found
What's this? This dump was created after OutOfMemoryError in the following thread:
Thread name: UNKNOWN, daemon: false java.lang.OutOfMemoryError.<init>(OutOfMemoryError.java:48) java.util.Arrays.copyOf(Arrays.java:3689)   Local variablesObject[13,328,370](element class io.vertx.core.parsetools.impl.JsonEventImpl){(field : "deleted", value : "false", ...), @dbc36fb8, ...}
java.util.ArrayDeque.grow(ArrayDeque.java:150)   Local variablesj.u.ArrayDeque(elements : Object[](size: 13,328,370), head : 11938872, tail : 11938172)
j.u.ArrayDeque(elements : Object[](size: 13,328,370), head : 11938872, tail : 11938172)
The overhead (waste) of all 9,569,486 duplicate strings is 383,345Kb, or 37.6% of used heap.
That's how much memory you could save if all your string values were unique,
i.e. all problematic strings were de-duplicated, for example using the String.intern() call.
Duplicate strings wasting 382,110Kb, or 37.5% of used heap are referenced directly by other objects.
  io.vertx.core.parsetools.impl.JsonEventImpl.value (7,569,071 strings, waste 382,110Kb, or 37.5% of used heap)
How to fix?
Such strings are usually easy to de-duplicate. Often all you need is insert a String.intern() call in the constructor.
E.g. replace a line like
  this.name = name;
with
  this.name = name.intern();
However, check whether name is updated in other methods.
If so, you will need to add name.intern() there as well.
For detailed information about duplicate strings in this dump, check the tables below.
To learn more about fixing duplicate strings, check this article
  Total objects of types
with duplicates ⓘ 
  Unique objects ⓘ 
  Duplicate values ⓘ 
 Overhead ⓘ 
 13,330,108
 9,521,049
 19
119,033Kb (11.7%)
Types of duplicate objects:
  Overhead ⓘ 
  # objects ⓘ 
  Unique objects ⓘ 
 Class name 
 119,033Kb (11.7%)
 13,330,108
 9,521,049
io.vertx.core.parsetools.impl.JsonEventImpl
Top duplicate objects
  Overhead ⓘ 
  # objects ⓘ 
 Value 
 59,508Kb (5.8%)
 1,904,272
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721d08, type : io.vertx.core.parsetools.JsonEventType@d4cd7c50, field : null, value : null)
 59,507Kb (5.8%)
 1,904,246
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721cd8, type : io.vertx.core.parsetools.JsonEventType@d4cd7640, field : null, value : null)
 6Kb (< 0.1%)
 193
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721d68, type : io.vertx.core.parsetools.JsonEventType@d4cd7c38, field : null, value : null)
 1Kb (< 0.1%)
 39
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721cd8, type : io.vertx.core.parsetools.JsonEventType@d4cd7640, field : "location", value : null)
 896b (< 0.1%)
 29
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721cd8, type : io.vertx.core.parsetools.JsonEventType@d4cd7640, field : "permanentLocation", value : null)
 896b (< 0.1%)
 29
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721cd8, type : io.vertx.core.parsetools.JsonEventType@d4cd7640, field : "callNumber", value : null)
 896b (< 0.1%)
 29
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721cd8, type : io.vertx.core.parsetools.JsonEventType@d4cd7640, field : "temporaryLocation", value : null)
 896b (< 0.1%)
 29
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721d38, type : io.vertx.core.parsetools.JsonEventType@d4cd7658, field : "notes", value : null)
 864b (< 0.1%)
 28
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721d38, type : io.vertx.core.parsetools.JsonEventType@d4cd7658, field : "statisticalCodes", value : null)
 864b (< 0.1%)
 28
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721d38, type : io.vertx.core.parsetools.JsonEventType@d4cd7658, field : "electronicAccess", value : null)
 864b (< 0.1%)
 28
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721eb8, type : io.vertx.core.parsetools.JsonEventType@d4cd7c68, field : "suppressFromDiscovery", value : j.l.Boolean(false))
 576b (< 0.1%)
 19
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721cd8, type : io.vertx.core.parsetools.JsonEventType@d4cd7640, field : "effectiveLocation", value : null)
 544b (< 0.1%)
 18
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721d38, type : io.vertx.core.parsetools.JsonEventType@d4cd7658, field : "natureOfContent", value : null)
 544b (< 0.1%)
 18
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721d38, type : io.vertx.core.parsetools.JsonEventType@d4cd7658, field : "holdingsStatements", value : null)
 544b (< 0.1%)
 18
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721d38, type : io.vertx.core.parsetools.JsonEventType@d4cd7658, field : "holdings", value : null)
 544b (< 0.1%)
 18
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721d38, type : io.vertx.core.parsetools.JsonEventType@d4cd7658, field : "holdingsStatementsForIndexes", value : null)
 544b (< 0.1%)
 18
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721d38, type : io.vertx.core.parsetools.JsonEventType@d4cd7658, field : "holdingsStatementsForSupplements", value : null)
 512b (< 0.1%)
 17
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721d38, type : io.vertx.core.parsetools.JsonEventType@d4cd7658, field : "items", value : null)
 32b (< 0.1%)
 2
io.vertx.core.parsetools.impl.JsonEventImpl(token : com.fasterxml.jackson.core.JsonToken@d4721d38, type : io.vertx.core.parsetools.JsonEventType@d4cd7658, field : "formerIds", value : null)
20. Heap Size Configuration. no significant overhead
What's this?
We estimate that the maximum heap size (-Xmx) is configured properly for your current working set = 1,020,242Kb
21. Very Long (Over 1000 Elements) Reference Chains. not found
What's this?
22. Thread stacks. (number of threads 11 )
What's this? Thread name: UNKNOWN, daemon: false java.lang.OutOfMemoryError.<init>(OutOfMemoryError.java:48) java.util.Arrays.copyOf(Arrays.java:3689) java.util.ArrayDeque.grow(ArrayDeque.java:150) java.util.ArrayDeque.addLast(ArrayDeque.java:308) java.util.ArrayDeque.add(ArrayDeque.java:495) io.vertx.core.parsetools.impl.JsonParserImpl.checkTokens(JsonParserImpl.java:240) io.vertx.core.parsetools.impl.JsonParserImpl.handle(JsonParserImpl.java:151) io.vertx.core.parsetools.impl.JsonParserImpl.handle(JsonParserImpl.java:42) io.vertx.ext.web.codec.impl.JsonStreamBodyCodec$1.write(JsonStreamBodyCodec.java:37) io.vertx.ext.web.codec.impl.JsonStreamBodyCodec$1.write(JsonStreamBodyCodec.java:22) io.vertx.ext.web.codec.impl.StreamingBodyCodec$1.write(StreamingBodyCodec.java:82) io.vertx.ext.web.codec.impl.StreamingBodyCodec$1.write(StreamingBodyCodec.java:60) io.vertx.core.streams.impl.PipeImpl.lambda$to$1(PipeImpl.java:81) io.vertx.core.streams.impl.PipeImpl$$Lambda$520.handle(, line not available) io.vertx.core.impl.AbstractContext.dispatch(AbstractContext.java:96) io.vertx.core.http.impl.HttpEventHandler.handleChunk(HttpEventHandler.java:51) io.vertx.core.http.impl.HttpClientResponseImpl.handleChunk(HttpClientResponseImpl.java:239) io.vertx.core.http.impl.HttpClientRequestBase$$Lambda$509.handle(, line not available) io.vertx.core.http.impl.Http1xClientConnection$StreamImpl.lambda$new$0(Http1xClientConnection.java:380) io.vertx.core.http.impl.Http1xClientConnection$StreamImpl$$Lambda$500.handle(, line not available) io.vertx.core.streams.impl.InboundBuffer.handleEvent(InboundBuffer.java:240) io.vertx.core.streams.impl.InboundBuffer.write(InboundBuffer.java:130) io.vertx.core.http.impl.Http1xClientConnection$StreamImpl.handleChunk(Http1xClientConnection.java:583) io.vertx.core.http.impl.Http1xClientConnection$$Lambda$522.handle(, line not available) io.vertx.core.impl.EventLoopContext.execute(EventLoopContext.java:70) io.vertx.core.impl.ContextImpl.execute(ContextImpl.java:268) io.vertx.core.http.impl.Http1xClientConnection.handleResponseChunk(Http1xClientConnection.java:784) io.vertx.core.http.impl.Http1xClientConnection.handleHttpMessage(Http1xClientConnection.java:682) io.vertx.core.http.impl.Http1xClientConnection.handleMessage(Http1xClientConnection.java:649) io.vertx.core.net.impl.ConnectionBase.read(ConnectionBase.java:155) io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:154) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:311) io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:432) io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) java.lang.Thread.run(Thread.java:829)
Thread name: UNKNOWN, daemon: false io.vertx.sqlclient.impl.pool.SqlConnectionPool.acquire(SqlConnectionPool.java:193) io.vertx.sqlclient.impl.PoolBase.acquire(PoolBase.java:165) io.vertx.sqlclient.impl.PoolBase.getConnection(PoolBase.java:132) org.folio.rest.persist.PostgresClient.getConnection(PostgresClient.java:3464) org.folio.rest.persist.PostgresClient.getConnection(PostgresClient.java:3474) org.folio.oaipmh.processors.MarcWithHoldingsRequestHelper.saveInstances(MarcWithHoldingsRequestHelper.java:806) org.folio.oaipmh.processors.MarcWithHoldingsRequestHelper.saveInstancesIds(MarcWithHoldingsRequestHelper.java:786) org.folio.oaipmh.processors.MarcWithHoldingsRequestHelper.lambda$downloadInstances$9(MarcWithHoldingsRequestHelper.java:285) org.folio.oaipmh.processors.MarcWithHoldingsRequestHelper$$Lambda$643.handle(, line not available) org.folio.oaipmh.helpers.streaming.BatchStreamWrapper.runBatchHandler(BatchStreamWrapper.java:72) org.folio.oaipmh.helpers.streaming.BatchStreamWrapper.write(BatchStreamWrapper.java:59) org.folio.oaipmh.helpers.streaming.BatchStreamWrapper.write(BatchStreamWrapper.java:19) io.vertx.core.streams.impl.PipeImpl.lambda$to$1(PipeImpl.java:81) io.vertx.core.streams.impl.PipeImpl$$Lambda$520.handle(, line not available) io.vertx.core.parsetools.impl.JsonParserImpl.handleEvent(JsonParserImpl.java:141) io.vertx.core.parsetools.impl.JsonParserImpl.lambda$handleEvent$2(JsonParserImpl.java:124) io.vertx.core.parsetools.impl.JsonParserImpl$$Lambda$612.handle(, line not available) io.vertx.core.parsetools.impl.JsonParserImpl$BufferingHandler.handle(JsonParserImpl.java:424) io.vertx.core.parsetools.impl.JsonParserImpl$BufferingHandler.handle(JsonParserImpl.java:390) io.vertx.core.parsetools.impl.JsonParserImpl.checkPending(JsonParserImpl.java:254) io.vertx.core.parsetools.impl.JsonParserImpl.fetch(JsonParserImpl.java:86) io.vertx.core.parsetools.impl.JsonParserImpl.resume(JsonParserImpl.java:76) io.vertx.core.parsetools.impl.JsonParserImpl.resume(JsonParserImpl.java:42) io.vertx.core.streams.impl.PipeImpl.lambda$to$0(PipeImpl.java:79) io.vertx.core.streams.impl.PipeImpl$$Lambda$519.handle(, line not available) org.folio.oaipmh.helpers.streaming.BatchStreamWrapper.invokeDrainHandler(BatchStreamWrapper.java:84) org.folio.oaipmh.processors.MarcWithHoldingsRequestHelper.lambda$saveInstancesIds$35(MarcWithHoldingsRequestHelper.java:793) org.folio.oaipmh.processors.MarcWithHoldingsRequestHelper$$Lambda$654.handle(, line not available) io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:124) io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:62) io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:179) io.vertx.core.impl.future.PromiseImpl.tryComplete(PromiseImpl.java:23) io.vertx.core.Promise.tryComplete(Promise.java:121) io.vertx.core.Promise.complete(Promise.java:77) org.folio.oaipmh.processors.MarcWithHoldingsRequestHelper.lambda$saveInstances$37(MarcWithHoldingsRequestHelper.java:825) org.folio.oaipmh.processors.MarcWithHoldingsRequestHelper$$Lambda$656.handle(, line not available) io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:124) io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:62) io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:179) io.vertx.core.impl.future.PromiseImpl.tryComplete(PromiseImpl.java:23) io.vertx.sqlclient.impl.QueryResultBuilder.tryComplete(QueryResultBuilder.java:102) io.vertx.sqlclient.impl.QueryResultBuilder.tryComplete(QueryResultBuilder.java:35) io.vertx.core.Promise.complete(Promise.java:66) io.vertx.core.Promise.handle(Promise.java:51) io.vertx.core.Promise.handle(Promise.java:29) io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:124) io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:62) io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:179) io.vertx.core.impl.future.PromiseImpl.tryComplete(PromiseImpl.java:23) io.vertx.core.impl.future.PromiseImpl.onSuccess(PromiseImpl.java:49) io.vertx.core.impl.future.PromiseImpl.handle(PromiseImpl.java:41) io.vertx.core.impl.future.PromiseImpl.handle(PromiseImpl.java:23) io.vertx.sqlclient.impl.command.CommandResponse.fire(CommandResponse.java:46) io.vertx.sqlclient.impl.SocketConnectionBase.handleMessage(SocketConnectionBase.java:261) io.vertx.pgclient.impl.PgSocketConnection.handleMessage(PgSocketConnection.java:96) io.vertx.sqlclient.impl.SocketConnectionBase.lambda$init$0(SocketConnectionBase.java:97) io.vertx.sqlclient.impl.SocketConnectionBase$$Lambda$359.handle(, line not available) io.vertx.core.net.impl.NetSocketImpl.lambda$new$1(NetSocketImpl.java:97) io.vertx.core.net.impl.NetSocketImpl$$Lambda$353.handle(, line not available) io.vertx.core.streams.impl.InboundBuffer.handleEvent(InboundBuffer.java:240) io.vertx.core.streams.impl.InboundBuffer.write(InboundBuffer.java:130) io.vertx.core.net.impl.NetSocketImpl.lambda$handleMessage$9(NetSocketImpl.java:390) io.vertx.core.net.impl.NetSocketImpl$$Lambda$364.handle(, line not available) io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:49) io.vertx.core.impl.ContextImpl.emit(ContextImpl.java:275) io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:22) io.vertx.core.net.impl.NetSocketImpl.handleMessage(NetSocketImpl.java:389) io.vertx.core.net.impl.ConnectionBase.read(ConnectionBase.java:155) io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:154) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) io.vertx.pgclient.impl.codec.PgEncoder.lambda$write$0(PgEncoder.java:87) io.vertx.pgclient.impl.codec.PgEncoder$$Lambda$362.handle(, line not available) io.vertx.pgclient.impl.codec.PgCommandCodec.handleReadyForQuery(PgCommandCodec.java:139) io.vertx.pgclient.impl.codec.PgDecoder.decodeReadyForQuery(PgDecoder.java:236) io.vertx.pgclient.impl.codec.PgDecoder.channelRead(PgDecoder.java:95) io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) java.lang.Thread.run(Thread.java:829)
Thread name: UNKNOWN, daemon: false io.vertx.core.parsetools.impl.JsonParserImpl.checkTokens(JsonParserImpl.java:206) io.vertx.core.parsetools.impl.JsonParserImpl.handle(JsonParserImpl.java:151) io.vertx.core.parsetools.impl.JsonParserImpl.handle(JsonParserImpl.java:42) io.vertx.ext.web.codec.impl.JsonStreamBodyCodec$1.write(JsonStreamBodyCodec.java:37) io.vertx.ext.web.codec.impl.JsonStreamBodyCodec$1.write(JsonStreamBodyCodec.java:22) io.vertx.ext.web.codec.impl.StreamingBodyCodec$1.write(StreamingBodyCodec.java:82) io.vertx.ext.web.codec.impl.StreamingBodyCodec$1.write(StreamingBodyCodec.java:60) io.vertx.core.streams.impl.PipeImpl.lambda$to$1(PipeImpl.java:81) io.vertx.core.streams.impl.PipeImpl$$Lambda$520.handle(, line not available) io.vertx.core.impl.AbstractContext.dispatch(AbstractContext.java:96) io.vertx.core.http.impl.HttpEventHandler.handleChunk(HttpEventHandler.java:51) io.vertx.core.http.impl.HttpClientResponseImpl.handleChunk(HttpClientResponseImpl.java:239) io.vertx.core.http.impl.HttpClientRequestBase$$Lambda$509.handle(, line not available) io.vertx.core.http.impl.Http1xClientConnection$StreamImpl.lambda$new$0(Http1xClientConnection.java:380) io.vertx.core.http.impl.Http1xClientConnection$StreamImpl$$Lambda$500.handle(, line not available) io.vertx.core.streams.impl.InboundBuffer.handleEvent(InboundBuffer.java:240) io.vertx.core.streams.impl.InboundBuffer.write(InboundBuffer.java:130) io.vertx.core.http.impl.Http1xClientConnection$StreamImpl.handleChunk(Http1xClientConnection.java:583) io.vertx.core.http.impl.Http1xClientConnection$$Lambda$522.handle(, line not available) io.vertx.core.impl.EventLoopContext.execute(EventLoopContext.java:70) io.vertx.core.impl.ContextImpl.execute(ContextImpl.java:268) io.vertx.core.http.impl.Http1xClientConnection.handleResponseChunk(Http1xClientConnection.java:784) io.vertx.core.http.impl.Http1xClientConnection.handleHttpMessage(Http1xClientConnection.java:682) io.vertx.core.http.impl.Http1xClientConnection.handleMessage(Http1xClientConnection.java:649) io.vertx.core.net.impl.ConnectionBase.read(ConnectionBase.java:155) io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:154) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:311) io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:432) io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) java.lang.Thread.run(Thread.java:829)