You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2022/05/03 16:10:00 UTC
[jira] [Resolved] (GROOVY-10596) IF-condition evaluation on the non-null object sometimes doesn't return true
[ https://issues.apache.org/jira/browse/GROOVY-10596?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Eric Milles resolved GROOVY-10596.
----------------------------------
Fix Version/s: 5.0.0-alpha-1
Resolution: Fixed
https://github.com/apache/groovy/commit/6b6a3e8a6fec2826f13cc0e6a52dcf1f25b4d74b
> IF-condition evaluation on the non-null object sometimes doesn't return true
> ----------------------------------------------------------------------------
>
> Key: GROOVY-10596
> URL: https://issues.apache.org/jira/browse/GROOVY-10596
> Project: Groovy
> Issue Type: Bug
> Affects Versions: 3.0.10
> Reporter: Pavel Golovenkov
> Assignee: Eric Milles
> Priority: Major
> Fix For: 5.0.0-alpha-1
>
>
> h3. Context
> We use Java 8 (slightly different minor versions on local machines and some ENVs)
> {noformat}
> java version "1.8.0_311"{noformat}
> {noformat}
> java version "1.8.0_321"{noformat}
> Issue started happening after Groovy upgrade from 3.0.9 to 3.0.10
> h3. (Case 1) Test fails when run using "mvn clean install"
> +Tested code sample:+
> {code:java}
> @CompileStatic
> class MetainfoHelper {
> public static final String SCHEMA_KEY_IN_JSON = "\$schema"
> public static final String SCHEMA_KEY_IN_DB = "_\$schema"
> public static void convertSchemaKeyForSavingIntoDB(Document document) {
> String schema = document.getString(SCHEMA_KEY_IN_JSON)
> if (schema) {
> document.remove(SCHEMA_KEY_IN_JSON)
> document.put(SCHEMA_KEY_IN_DB, schema)
> }
> }
> public static void convertSchemaKeyAfterReadingFromDB(Document document) {
> String schema = document.getString(SCHEMA_KEY_IN_DB)
> if (schema) {
> document.remove(SCHEMA_KEY_IN_DB)
> document.put(SCHEMA_KEY_IN_JSON, schema)
> }
> document.remove(ID_IN_DB)
> }
> } {code}
>
> +Test sample:+
> {code:java}
> @CompileStatic
> @ExtendWith(MockitoExtension.class)
> class MetainfoHelperTest {
> @Test
> void convertSchemaKeyForSavingIntoDBTest() {
> Document document = new Document(MetainfoHelper.SCHEMA_KEY_IN_JSON, "http://json-schema.org/draft-04/schema#")
> MetainfoHelper.convertSchemaKeyForSavingIntoDB(document)
> assertThat(document.get(MetainfoHelper.SCHEMA_KEY_IN_JSON)).isNull()
> assertThat(document.get(MetainfoHelper.SCHEMA_KEY_IN_DB)).isNotNull()
> }
> @Test
> void convertSchemaKeyBackFromDB() {
> Document document = new Document(MetainfoHelper.SCHEMA_KEY_IN_DB, "http://json-schema.org/draft-04/schema#")
> MetainfoHelper.convertSchemaKeyAfterReadingFromDB(document)
> assertThat(document.get(MetainfoHelper.SCHEMA_KEY_IN_DB)).isNull()
> assertThat(document.get(MetainfoHelper.SCHEMA_KEY_IN_JSON)).isNotNull()
> }
> } {code}
>
> h3. (Case 2) At some point of time during the runtime the condition with non-null object reference started to be evaluated as false
> +Affected code part sample:+
> {code:java}
> @CompileStatic
> class DbAcquisitionService implements IDistributedAcquisitionService {
> @Override
> <T extends Acquirable> T tryAcquire(Class<T> clazz, Map<String, ?> filter, String ownerKey, String ownerInstance, boolean createIfMissing = false) { {
> final updated = dao.findAndModify(query, updateOperations) as T
> systemLogger.debug("tryAcquire - find and modify completed, updated is [$updated]")
> if (updated) {
> systemLogger.debug("tryAcquire - updated is true")
> return updated
> } else {
> systemLogger.debug("tryAcquire - updated is not true, can't acquire")
> return null
> }
> }
> } {code}
>
> +Logs at the time of issue:+
> {noformat}
> 2022-04-22 06:23:46.487 - DEBUG - [scheduling-pool-3][80] - c.c.k.c.d.DbAcquisitionService - [] : tryAcquire - find and modify completed, updated is [BpmReceivedTask(bpKey:kmc, taskId:a422a3f0-d37d-4579-81bf-38d7a758ee79)]
> 2022-04-22 06:23:46.487 - DEBUG - [scheduling-pool-3][80] - c.c.k.c.d.DbAcquisitionService - [] : tryAcquire - updated is not true, can't acquire{noformat}
> h3. Fix we made to resolve the issue
> In both cases in order to fix the issue the next change was made:
> {code:java}
> if (object) {
> }{code}
> ==>
> {code:java}
> if (object != null) {
> }{code}
>
>
> Do you have any ideas or suggestions why that could happen?
--
This message was sent by Atlassian Jira
(v8.20.7#820007)