Bug 1697704 - Null pointer exception observed while setting up remote data sync on the storage domain
Summary: Null pointer exception observed while setting up remote data sync on the stor...
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Gluster Storage
Classification: Red Hat Storage
Component: rhhi
Version: rhhiv-1.6
Hardware: x86_64
OS: Linux
high
urgent
Target Milestone: ---
: RHHI-V 1.6.z Async Update
Assignee: Sahina Bose
QA Contact: SATHEESARAN
URL:
Whiteboard:
Depends On: 1697706
Blocks: RHHI-V-1-6-Release-Notes
TreeView+ depends on / blocked
 
Reported: 2019-04-09 03:32 UTC by SATHEESARAN
Modified: 2019-11-20 09:00 UTC (History)
5 users (show)

Fixed In Version: ovirt-engine-4.3.4
Doc Type: Known Issue
Doc Text:
In RHHI for Virtualization 1.6, using 'Remote data sync setup' to configure geo-replication for a storage domain that was created automatically during deployment failed. This occurred because the 'GetGeoRepSessionsForStorageDomainQuery' check expected all interfaces to have an IPv4 or IPv6 address, and threw a null pointer exception when this was not the case. This issue did not occur for manually created storage domains. The check has been updated to handle cases where some host interfaces may not have addresses mapped, and this issue no longer occurs.
Clone Of:
: 1697706 (view as bug list)
Environment:
Last Closed: 2019-11-20 09:00:29 UTC
Embargoed:


Attachments (Terms of Use)
engine.log (18.31 MB, application/octet-stream)
2019-04-09 03:39 UTC, SATHEESARAN
no flags Details

Description SATHEESARAN 2019-04-09 03:32:40 UTC
Description of problem:
-----------------------
While setting up the remote data sync setup, NPE is observed in the logs and the window to set remote-sync is actually stuck indefinitely.

Version-Release number of selected component (if applicable):
--------------------------------------------------------------
RHV 4.3.3
RHHI-V 1.6

How reproducible:
-----------------
Always ( 100% )

Steps to Reproduce:
-------------------
1. Complete HC deployment with 3 nodes
2. Create geo-rep session from CLI on one of the node to remote site ( secondary site )
3. Sync the geo-rep session for the corresponding volume in RHV Manager UI -> Storage -> Volumes
4. On the corresponding storage domain, click on 'Remote data sync setup'

Actual results:
---------------
Null Pointer Exception observed in the logs, 'remote data sync setup' window is stuck indefinitely

Expected results:
-----------------
No NPE and allows to setup remote data sync setup.


Additional info:

Comment 1 SATHEESARAN 2019-04-09 03:33:05 UTC
2019-04-09 08:10:00,382+05 ERROR [org.ovirt.engine.core.bll.gluster.GetGeoRepSessionsForStorageDomainQuery] (default task-157) [38a90e40-f083-45e6-b145-b80f24ed0b75] Query 'GetGeoRepSessionsForStorageDomainQuery
' failed: null
2019-04-09 08:10:00,382+05 ERROR [org.ovirt.engine.core.bll.gluster.GetGeoRepSessionsForStorageDomainQuery] (default task-157) [38a90e40-f083-45e6-b145-b80f24ed0b75] Exception: java.lang.NullPointerException
        at org.ovirt.engine.core.bll.gluster.GetGeoRepSessionsForStorageDomainQuery.lambda$null$0(GetGeoRepSessionsForStorageDomainQuery.java:83) [bll.jar:]
        at java.util.stream.MatchOps$1MatchSink.accept(MatchOps.java:90) [rt.jar:1.8.0_201]
        at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1359) [rt.jar:1.8.0_201]
        at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126) [rt.jar:1.8.0_201]
        at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498) [rt.jar:1.8.0_201]
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485) [rt.jar:1.8.0_201]
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) [rt.jar:1.8.0_201]
        at java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:230) [rt.jar:1.8.0_201]
        at java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:196) [rt.jar:1.8.0_201]
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) [rt.jar:1.8.0_201]
        at java.util.stream.ReferencePipeline.anyMatch(ReferencePipeline.java:449) [rt.jar:1.8.0_201]
        at org.ovirt.engine.core.bll.gluster.GetGeoRepSessionsForStorageDomainQuery.lambda$executeQueryCommand$1(GetGeoRepSessionsForStorageDomainQuery.java:83) [bll.jar:]
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174) [rt.jar:1.8.0_201]
        at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1359) [rt.jar:1.8.0_201]
        at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126) [rt.jar:1.8.0_201]
        at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498) [rt.jar:1.8.0_201]
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485) [rt.jar:1.8.0_201]
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) [rt.jar:1.8.0_201]
        at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152) [rt.jar:1.8.0_201]

Comment 2 SATHEESARAN 2019-04-09 03:39:04 UTC
Created attachment 1553778 [details]
engine.log

Comment 3 Sahina Bose 2019-04-09 06:04:28 UTC
Is this an IPv6 setup? 
The code where it throws NPE:
            VDS vds = vdsList.stream()
                    .filter(v -> v.getName().equals(hostName)
                            || interfaceDao.getAllInterfacesForVds(v.getId())
                                    .stream()
                                    .anyMatch(iface -> iface.getIpv4Address().equals(hostAddress)))
                    .findFirst()
                    .orElse(null);

so does the interface have no IPv4 address?

Comment 4 SATHEESARAN 2019-04-09 10:34:24 UTC
(In reply to Sahina Bose from comment #3)
> Is this an IPv6 setup? 
> The code where it throws NPE:
>             VDS vds = vdsList.stream()
>                     .filter(v -> v.getName().equals(hostName)
>                             || interfaceDao.getAllInterfacesForVds(v.getId())
>                                     .stream()
>                                     .anyMatch(iface ->
> iface.getIpv4Address().equals(hostAddress)))
>                     .findFirst()
>                     .orElse(null);
> 
> so does the interface have no IPv4 address?

I found out that this issue because of setting up 'remote data sync setup' on storage domain, 
that is automatically created through RHHI-V deployment and I believe it doesn't
have the relevant gluster volume UUID mapped

Comment 5 SATHEESARAN 2019-04-09 10:37:01 UTC
This bug is the known_issue.

Remote data sync setup can be done only on the Storage Domain that are manually created
and not created automatically using RHHI-V deployment mechanism.

Comment 12 SATHEESARAN 2019-06-10 17:05:59 UTC
Fix for this bug is available with ovirt-engine-4.3.4 and the same is verified

Comment 13 SATHEESARAN 2019-06-11 05:47:58 UTC
Tested with ovirt-engine-4.3.4.3-0.1.el7.noarch and could see no NPE. So moving the bug as verified.

Steps:
=====
1.Deploy HC in 3 POD, with storage domains automatically created
2.Create a geo-replication session between source and destination
3.Click on the "sync" button for the geo-replication volume
4.On the corresponding storage domain click on "Remote Data Sync Setup"

No issues found, and all works smooth

Comment 17 SATHEESARAN 2019-11-20 09:00:29 UTC
CLOSING this bug as the release is already completed


Note You need to log in before you can comment on or make changes to this bug.