# Intermittent ArrayIndexOutOfBoundsException in dissect

**URL:** <https://discuss.elastic.co/t/intermittent-arrayindexoutofboundsexception-in-dissect/104095>\
**Category:** Logstash\
**Created:** [October 16, 2017, 1:37pm UTC](https://discuss.elastic.co/t/intermittent-arrayindexoutofboundsexception-in-dissect/104095 "2017-10-16T13:37:48Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Badger](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/badger/32/25190_2.png) [@Badger](https://discuss.elastic.co/u/Badger)\
**Post date:** [October 16, 2017, 1:37pm UTC](https://discuss.elastic.co/t/intermittent-arrayindexoutofboundsexception-in-dissect/104095/1 "2017-10-16T13:37:48Z")

</div>

I am trying to load UK housing price data in a CSV from [HM land registry](http://prod.publicdata.landregistry.gov.uk.s3-website-eu-west-1.amazonaws.com/pp-1995-part1.csv). Column 4 in that CSV should be the postcode, but sometimes it is empty, and sometimes that causes dissect to throw an ArrayIndexOutOfBoundsException. It typically gets through 10,000 to 20,000 rows before failing. In all simpler test cases that i tried I get a \_dissectfailure when working on a nil field. The obvious 'if [postcode]' does prevent the exception. This is in 6.0.0-rc1

```
input { stdin {} }
output { stdout { codec => dots } }

filter {
  csv {
    columns => [ "id", "price", "date", "postcode", "propertytype",
      "new", "duration", "paon", "saon", "street", "locality",
      "town", "district", "county", "category", "status" ]
    remove_field => ["message", "host"]
  }

  dissect {
    mapping => { "postcode" => "%{postcode1} %{postcode2}" }
  }
}
```

---

<div class="post-metadata">

**Author:** ![Badger](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/badger/32/25190_2.png) [@Badger](https://discuss.elastic.co/u/Badger)\
**Post date:** [October 17, 2017, 5:03pm UTC](https://discuss.elastic.co/t/intermittent-arrayindexoutofboundsexception-in-dissect/104095/2 "2017-10-17T17:03:32Z")

</div>

I forgot the error messages...

There are several of these, which appears to be dissect handling things well.

> [ERROR] 2017-10-17 12:55:27.729 [[main]\>worker0] dissect - Dissect threw an exception {"backtrace"=\>["org.logstash.dissect.ValueResolver.get(ValueResolver.java:18)", "org.logstash.dissect.fields.NormalField.append(NormalField.java:41)", "org.logstash.dissect.Dissector.dissect(Dissector.java:134)", "org.logstash.dissect.JavaDissectorLibrary$RubyDissect.dissect(JavaDissectorLibrary.java:113)", "org.logstash.dissect.JavaDissectorLibrary$RubyDissect.dissect\_multi(JavaDissectorLibrary.java:140)", "org.logstash.dissect.JavaDissectorLibrary$RubyDissect$INVOKER$i$2$0$dissect\_multi.call(JavaDissectorLibrary$RubyDissect$INVOKER$i$2$0$dissect\_multi.gen)", "usr.share.logstash.vendor.bundle.jruby.$2\_dot\_3\_dot\_0.gems.logstash\_minus\_filter\_minus\_dissect\_minus\_1\_dot\_0\_dot\_12.lib.logstash.filters.dissect.invokeOther2:dissect\_multi(/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-filter-dissect-1.0.12/lib/logstash/filters/dissect.rb:182)", "usr.share.logstash.vendor.bundle.jruby.$2\_dot\_3\_dot\_0.gems.logstash\_minus\_filter\_minus\_dissect\_minus\_1\_dot\_0\_dot\_12.lib.logstash.filters.dissect.RUBY$method$multi\_filter$0(/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-filter-dissect-1.0.12/lib/logstash/filters/dissect.rb:182)", "usr.share.logstash.logstash\_minus\_core.lib.logstash.filter\_delegator.invokeOther10:multi\_filter(/usr/share/logstash/logstash-core/lib/logstash/filter\_delegator.rb:48)", "usr.share.logstash.logstash\_minus\_core.lib.logstash.filter\_delegator.RUBY$method$multi\_filter$0(/usr/share/logstash/logstash-core/lib/logstash/filter\_delegator.rb:48)", "usr.share.logstash.logstash\_minus\_core.lib.logstash.pipeline.invokeOther4:filter\_func(/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:504)", "usr.share.logstash.logstash\_minus\_core.lib.logstash.pipeline.RUBY$block$filter\_batch$0(/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:504)", "usr.share.logstash.logstash\_minus\_core.lib.logstash.util.wrapped\_synchronous\_queue.invokeOther1:call(/usr/share/logstash/logstash-core/lib/logstash/util/wrapped\_synchronous\_queue.rb:228)", "usr.share.logstash.logstash\_minus\_core.lib.logstash.util.wrapped\_synchronous\_queue.RUBY$block$each$0(/usr/share/logstash/logstash-core/lib/logstash/util/wrapped\_synchronous\_queue.rb:228)"], "exception"=\>"java.lang.NullPointerException"}

and then this, where the exception occurs at JavaDissectorLibrary.java:130 (cf. JavaDissectorLibrary.java:113 above)

```
[ERROR] 2017-10-17 12:55:36.470 [[main]>worker1] pipeline - Exception in pipelineworker, the pipeline stopped processing new events, please check your filter configuration and restart Logstash.[...]
Exception in thread "[main]>worker1" java.lang.ArrayIndexOutOfBoundsException: 0
        at org.logstash.dissect.DissectorErrorUtils.backtrace(DissectorErrorUtils.java:16)
        at org.logstash.dissect.JavaDissectorLibrary$RubyDissect.logException(JavaDissectorLibrary.java:224)
        at org.logstash.dissect.JavaDissectorLibrary$RubyDissect.dissect(JavaDissectorLibrary.java:130)
        at org.logstash.dissect.JavaDissectorLibrary$RubyDissect.dissect_multi(JavaDissectorLibrary.java:140)
        at org.logstash.dissect.JavaDissectorLibrary$RubyDissect$INVOKER$i$2$0$dissect_multi.call(JavaDissectorLibrary$RubyDissect$INVOKER$i$2$0$dissect_multi.gen)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:193)
        at usr.share.logstash.vendor.bundle.jruby.$2_dot_3_dot_0.gems.logstash_minus_filter_minus_dissect_minus_1_dot_0_dot_12.lib.logstash.filters.dissect.invokeOther2:dissect_multi(/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-filter-dissect-1.0.12/lib/logstash/filters/dissect.rb:182)
        at usr.share.logstash.vendor.bundle.jruby.$2_dot_3_dot_0.gems.logstash_minus_filter_minus_dissect_minus_1_dot_0_dot_12.lib.logstash.filters.dissect.RUBY$method$multi_filter$0(/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-filter-dissect-1.0.12/lib/logstash/filters/dissect.rb:182)
        at org.jruby.internal.runtime.methods.CompiledIRMethod.call(CompiledIRMethod.java:103)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:163)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:200)
        at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:338)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:163)
        at usr.share.logstash.logstash_minus_core.lib.logstash.filter_delegator.invokeOther10:multi_filter(/usr/share/logstash/logstash-core/lib/logstash/filter_delegator.rb:48)
        at usr.share.logstash.logstash_minus_core.lib.logstash.filter_delegator.RUBY$method$multi_filter$0(/usr/share/logstash/logstash-core/lib/logstash/filter_delegator.rb:48)
        at org.jruby.internal.runtime.methods.CompiledIRMethod.call(CompiledIRMethod.java:103)
        at org.jruby.internal.runtime.methods.MixedModeIRMethod.call(MixedModeIRMethod.java:163)
        at org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:200)
        at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:161)
        at org.jruby.ir.interpreter.InterpreterEngine.processCall(InterpreterEngine.java:314)
        at org.jruby.ir.interpreter.StartupInterpreterEngine.interpret(StartupInterpreterEngine.java:73)
        at org.jruby.ir.interpreter.Interpreter.INTERPRET_BLOCK(Interpreter.java:132)
        at org.jruby.runtime.MixedModeIRBlockBody.commonYieldPath(MixedModeIRBlockBody.java:148)
        at org.jruby.runtime.IRBlockBody.call(IRBlockBody.java:73)
        at org.jruby.runtime.Block.call(Block.java:124)
        at org.jruby.RubyProc.call(RubyProc.java:289)
[...]
```

Then it carries on processing for a while until we get the same ArrayIndexOutOfBoundsException in worker0, at which point logstash stops processing, since it has no workers working.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [November 14, 2017, 5:03pm UTC](https://discuss.elastic.co/t/intermittent-arrayindexoutofboundsexception-in-dissect/104095/3 "2017-11-14T17:03:46Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
