Nikunj Agarwal created HIVE-28603:
-------------------------------------

             Summary: Multiple tests in serde module are flaky
                 Key: HIVE-28603
                 URL: https://issues.apache.org/jira/browse/HIVE-28603
             Project: Hive
          Issue Type: Improvement
      Security Level: Public (Viewable by anyone)
          Components: Serializers/Deserializers, Tests
    Affects Versions: 4.0.1
            Reporter: Nikunj Agarwal
         Attachments: Screenshot 2024-11-02 at 2.48.35 PM.png, Screenshot 
2024-11-02 at 2.54.31 PM.png

There are multiple tests in serde module which are flaky. 
h2. Flakiness in the tests -

A tool called [nondex|https://github.com/TestingResearchIllinois/NonDex] was 
used to identify the flaky tests. NonDex is a tool for detecting and debugging 
wrong assumptions on under-determined Java APIs. 
h2. Steps to reproduce flakiness using nondex -

 
{code:java}
mvn install -pl serde -DskipTests

mvn -pl serde test 
-Dtest=org.apache.hadoop.hive.serde2.objectinspector.TestProtocolBuffersObjectInspectors#testProtocolBuffersObjectInspectors

mvn -pl serde edu.illinois:nondex-maven-plugin:2.1.7:nondex 
-Dtest=org.apache.hadoop.hive.serde2.objectinspector.TestProtocolBuffersObjectInspectors#testProtocolBuffersObjectInspectors
{code}
h3. ERROR logs: 

 
{code:java}
[ERROR] Failures: 
[ERROR]   
TestProtocolBuffersObjectInspectors.testProtocolBuffersObjectInspectors:71 
expected:<test> but was:<[one, two]>{code}
 

 

Similar Errors were found across different test cases across different classes. 
The list of test cases is as follows: 
|org.apache.hadoop.hive.serde2.objectinspector.TestProtocolBuffersObjectInspectors.testProtocolBuffersObjectInspectors|
|org.apache.hadoop.hive.serde2.objectinspector.TestThriftObjectInspectors.testThriftObjectInspectors|
|org.apache.hadoop.hive.serde2.objectinspector.TestReflectionObjectInspectors.testReflectionObjectInspectors|
|org.apache.hadoop.hive.serde2.columnar.TestLazyBinaryColumnarSerDe.testLazyBinaryColumnarSerDeWithEmptyBinary|
|org.apache.hadoop.hive.serde2.columnar.TestLazyBinaryColumnarSerDe.testSerDeInnerNulls|
|org.apache.hadoop.hive.serde2.lazybinary.TestLazyBinarySerDe.testLazyBinarySerDe|
|org.apache.hadoop.hive.serde2.TestStatsSerde.testLazyBinarySerDe|
|org.apache.hadoop.hive.serde2.lazy.TestLazySimpleSerDe#testSerDeParameters|
|org.apache.hadoop.hive.serde2.binarysortable.TestBinarySortableSerDe#testBinarySortableSerDe|

 
h2. Reason for failure : 

The method *_getDeclaredNonStaticFields(Class<?> c)_* in class 
_*ObjectInspectorUtils.java*_ ** uses class.getDeclaredFields() method which is 
nondeterministic as per [java 
docs|https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getDeclaredFields--].
 
{quote} Field[] f = c.getDeclaredFields();
{quote}
As per the test cases, it is assumed that the return order of the fields will 
always be the same, which may not be the case. 

 
h2. Proposed Fix : 

Ideally we should make the getDeclaredNonStaticFields() function deterministic, 
which is not the case as of now. 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to