[ 
https://issues.apache.org/jira/browse/GEODE-9268?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17493492#comment-17493492
 ] 

ASF subversion and git services commented on GEODE-9268:
--------------------------------------------------------

Commit 7873837eeec67c9ae85d32f7165a7753d0c0cd27 in geode-native's branch 
refs/heads/develop from Mario Salazar de Torres
[ https://gitbox.apache.org/repos/asf?p=geode-native.git;h=7873837 ]

GEODE-9268: Fix PdxInstance handling after cluster restart (#806)

* GEODE-9268: Fix PdxInstance handling after restart

 - In scenarios where an PdxInstance is obtained and later used, it
   might happen a coredump if the PdxTypeRegistry is cleaned up after the
   PdxInstance is obtained. This happens on those scenarios where
   redundancy is completly lost.
 - This change refactors PdxInstance handling so in all cases, the PdxType
   used is the one owned by the PdxInstance.
   Whenever the PdxInstance is to be written, a check is executed to
   ensure the cluster is aware of the PdxType and if not, register it.
 - Removed PdxInstance serialization retries, as with the new approach
   is not needed anymore.
 - Removed UnknownPdxTypeException exception. Instead whenever a PdxType
   is requested and not present, an IllegalStateException exception is
   thrown, as it happens in the Java client.
 - Now PdxInstance is not serialized whenever created. Instead, it's PDX
   byte stream is generated on-demand. Note that the PdxInstance will be
   serialized before being put into a server, as it was done before this
   change.
 - Fixed TcrMessage deserialization whenever a PdxType is requested by
   its ID and no PdxType was found.
 - Fixed incPdxInstanceCreations so it's incremented strictly whenver a
   PdxInstance is created, and not whenever a PdxInstance is
   deserialized.
 - Fixed IT PdxTypeRegistry cleanupOnClusterRestart logic and renamed to
   cleanupOnClusterRestartAndPut. This test was supposed to verify that
   if a PdxInstance is created, and after that the cluster is restarted,
   there is no coredump while writting it to a region. Instead it was
   creating a PdxInstance before and after the cluster, but it has been
   fixed to work as initially intended.
 - Created a new IT PdxTypeRegistry cleanupOnClusterRestartAndFetchFields
   to verify the issue described in the first bullet is not causing a coredump.
 - Removed old IT testThinClientPdxInstance TS as there is a equivalent new
   IT TS named PdxInstanceTest.
 - Fixed some ITs to work accordingly the the new code.
 - Fixed PdxInstanceImplTest.updatePdxStream to work accordingly with
   the code changes.

* GEODE-9268: Revision 1

 - Refactored member attributes for NestedPdxObject classes in order to
   follow style guidelines.
 - Refactored member attributes for PdxInstanceImpl class in order to
 follow style guidelines.
 - Moved default bytes variables from static to constants inside an anon
   namespace within PdxInstanceImpl cpp file.
 - Renamed 'pft' variables to 'field' inside PdxInstanceImpl in order to
   make the code more readable.
 - Changed return of PdxLocalWriter::getPdxStream to use the explicit
   constructor of std::vector<uint8_t>
 - Solved PdxInstanceTest.testNestedPdxInstance asserts description
   mismatch.
 - Used binary_semaphore inside PdxTypeRegistryTest insteda of an
   in-place CacheListener in order to listener for cluster start/stop
   events.
 - Revert back changes to the OQL used inside
   PdxTypeRegistryTest.cleanupOnClusterRestartAndPut
 - Added test descriptions for both tests inside PdxTypeRegistryTest.

* GEODE-9268: Revision 2

 - Addressed several others assert descriptions mismatch.

> Fix coredump whenever getFieldNames is called after a cluster restart
> ---------------------------------------------------------------------
>
>                 Key: GEODE-9268
>                 URL: https://issues.apache.org/jira/browse/GEODE-9268
>             Project: Geode
>          Issue Type: Bug
>          Components: native client
>            Reporter: Mario Salazar de Torres
>            Assignee: Mario Salazar de Torres
>            Priority: Major
>              Labels: pull-request-available
>
> *WHEN* A PdxInstance is fetched from a region
>  *AND* The whole cluster is restarted, triggering PdxTypeRegistry cleanup.
>  *AND* getFieldNames is called on the PdxInstance created just before
>  *THEN* a coredump happens.
> —
> *Additional information:*
> Callstack:
> {noformat}
> [ERROR 2021/05/05 12:57:12.781834 CEST main (139683590957120)] Segmentation 
> fault happened
>  0# handler(int) at nc-pdx/main.cpp:225
>  1# 0x00007F0A9F5F13C0 in /lib/x86_64-linux-gnu/libpthread.so.0
>  2# apache::geode::client::PdxType::getPdxFieldTypes() const at 
> cppcache/src/PdxType.hpp:181
>  3# apache::geode::client::PdxInstanceImpl::getFieldNames() at 
> cppcache/src/PdxInstanceImpl.cpp:1383
>  4# main at nc-pdx/main.cpp:374
>  5# __libc_start_main in /lib/x86_64-linux-gnu/libc.so.6
>  6# _start in build/pdx{noformat}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to