keith-turner opened a new pull request, #3435:
URL: https://github.com/apache/accumulo/pull/3435
Adds a test for misnormalized files in the metadata table. The test
currently does not run because splits do not handle misnormalized files. The
split code will duplicate files in the existing tablet when it tries to update
the estimated size. Surprisingly the duplicated files causes the tserver to
crash on tablet assignment.
Seeing the following error when the tserver tries to load a tablet with
duplicated files entries (multiple entries that normalize to the same path).
```
2023-05-26T17:56:22,089 [tserver.AssignmentHandler] WARN : Failed to verify
tablet 1<;row_0000050000
java.lang.IllegalArgumentException: Multiple entries with same key:
file:/home/keith/git/accumulo/test/target/mini-tests/org.apache.accumulo.test.functional.FileNormalizationIT_SharedMiniClusterBase/accumulo/tables/1/defa
ult_tablet/F000003x.rf=24146 4802 and
file:/home/keith/git/accumulo/test/target/mini-tests/org.apache.accumulo.test.functional.FileNormalizationIT_SharedMiniClusterBase/accumulo/tables/1/default_tablet/F000003x.rf=24146
4
802
at
com.google.common.collect.ImmutableMap.conflictException(ImmutableMap.java:377)
~[guava-31.1-jre.jar:?]
at
com.google.common.collect.ImmutableMap.checkNoConflict(ImmutableMap.java:371)
~[guava-31.1-jre.jar:?]
at
com.google.common.collect.RegularImmutableMap.checkNoConflictInKeyBucket(RegularImmutableMap.java:241)
~[guava-31.1-jre.jar:?]
at
com.google.common.collect.RegularImmutableMap.fromEntryArrayCheckingBucketOverflow(RegularImmutableMap.java:132)
~[guava-31.1-jre.jar:?]
at
com.google.common.collect.RegularImmutableMap.fromEntryArray(RegularImmutableMap.java:94)
~[guava-31.1-jre.jar:?]
at
com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:573)
~[guava-31.1-jre.jar:?]
at
com.google.common.collect.ImmutableMap$Builder.buildOrThrow(ImmutableMap.java:601)
~[guava-31.1-jre.jar:?]
at
com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:588)
~[guava-31.1-jre.jar:?]
at
org.apache.accumulo.core.metadata.schema.TabletMetadata.convertRow(TabletMetadata.java:500)
~[classes/:?]
at
org.apache.accumulo.core.metadata.schema.TabletsMetadata$Builder.lambda$buildNonRoot$8(TabletsMetadata.java:217)
~[classes/:?]
at
com.google.common.collect.Iterators$6.transform(Iterators.java:829)
~[guava-31.1-jre.jar:?]
at
com.google.common.collect.TransformedIterator.next(TransformedIterator.java:52)
~[guava-31.1-jre.jar:?]
at
com.google.common.collect.Iterators$5.computeNext(Iterators.java:672)
~[guava-31.1-jre.jar:?]
at
com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:146)
~[guava-31.1-jre.jar:?]
at
com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:141)
~[guava-31.1-jre.jar:?]
at java.util.Iterator.forEachRemaining(Iterator.java:132) ~[?:?]
at
java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
~[?:?]
at
java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[?:?]
at
java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
~[?:?]
at
java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
~[?:?]
at
java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
at
java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[?:?]
at
org.apache.accumulo.core.metadata.schema.AmpleImpl.readTablet(AmpleImpl.java:48)
~[classes/:?]
at
org.apache.accumulo.core.metadata.schema.Ample.readTablet(Ample.java:144)
~[classes/:?]
at
org.apache.accumulo.tserver.AssignmentHandler.run(AssignmentHandler.java:110)
[classes/:?]
at
org.apache.accumulo.tserver.ActiveAssignmentRunnable.run(ActiveAssignmentRunnable.java:63)
[classes/:?]
at
org.apache.accumulo.core.trace.TraceWrappedRunnable.run(TraceWrappedRunnable.java:52)
[classes/:?]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[?:?]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[?:?]
at
org.apache.accumulo.core.trace.TraceWrappedRunnable.run(TraceWrappedRunnable.java:52)
[classes/:?]
at java.lang.Thread.run(Thread.java:829) [?:?]
2023-05-26T17:56:22,090 [threads.AccumuloUncaughtExceptionHandler] ERROR:
Caught an Exception in Thread[tablet assignment-Worker-4,5,main]. Thread is
dead.
java.lang.RuntimeException: java.lang.IllegalArgumentException: Multiple
entries with same key:
file:/home/keith/git/accumulo/test/target/mini-tests/org.apache.accumulo.test.functional.FileNormalizationIT_SharedMiniCluste
rBase/accumulo/tables/1/default_tablet/F000003x.rf=24146 4802 and
file:/home/keith/git/accumulo/test/target/mini-tests/org.apache.accumulo.test.functional.FileNormalizationIT_SharedMiniClusterBase/accumulo/tables/1/defaul
t_tablet/F000003x.rf=24146 4802
at
org.apache.accumulo.tserver.AssignmentHandler.run(AssignmentHandler.java:142)
~[classes/:?]
at
org.apache.accumulo.tserver.ActiveAssignmentRunnable.run(ActiveAssignmentRunnable.java:63)
~[classes/:?]
at
org.apache.accumulo.core.trace.TraceWrappedRunnable.run(TraceWrappedRunnable.java:52)
~[classes/:?]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
~[?:?]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
~[?:?]
at
org.apache.accumulo.core.trace.TraceWrappedRunnable.run(TraceWrappedRunnable.java:52)
~[classes/:?]
at java.lang.Thread.run(Thread.java:829) [?:?]
```
The above needs investigation of its own, should an exception in the
assignment handler kill the tserver?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]