You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by pv...@apache.org on 2018/11/08 08:36:57 UTC
nifi git commit: NIFI-5800: Do not recursively call hashCode on child
schema for Record Field Types
Repository: nifi
Updated Branches:
refs/heads/master 5cf58b42e -> a9045d54a
NIFI-5800: Do not recursively call hashCode on child schema for Record Field Types
Signed-off-by: Pierre Villard <pi...@gmail.com>
This closes #3157.
Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/a9045d54
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/a9045d54
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/a9045d54
Branch: refs/heads/master
Commit: a9045d54a143dac984c545d0f14627e4151af713
Parents: 5cf58b4
Author: Mark Payne <ma...@hotmail.com>
Authored: Wed Nov 7 17:00:51 2018 -0500
Committer: Pierre Villard <pi...@gmail.com>
Committed: Thu Nov 8 09:36:47 2018 +0100
----------------------------------------------------------------------
.../nifi/serialization/SimpleRecordSchema.java | 8 +++++-
.../record/type/RecordDataType.java | 2 +-
.../serialization/TestSimpleRecordSchema.java | 30 +++++++++++++++++---
3 files changed, 34 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/nifi/blob/a9045d54/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/SimpleRecordSchema.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/SimpleRecordSchema.java b/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/SimpleRecordSchema.java
index ba507e9..7f78448 100644
--- a/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/SimpleRecordSchema.java
+++ b/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/SimpleRecordSchema.java
@@ -40,6 +40,7 @@ public class SimpleRecordSchema implements RecordSchema {
private final SchemaIdentifier schemaIdentifier;
private String schemaName;
private String schemaNamespace;
+ private volatile int hashCode;
public SimpleRecordSchema(final List<RecordField> fields) {
this(fields, createText(fields), null, false, SchemaIdentifier.EMPTY);
@@ -171,7 +172,12 @@ public class SimpleRecordSchema implements RecordSchema {
@Override
public int hashCode() {
- return 143 + 3 * fields.hashCode();
+ int computed = this.hashCode;
+ if (computed == 0) {
+ computed = this.hashCode = 143 + 3 * fields.hashCode();
+ }
+
+ return computed;
}
private static String createText(final List<RecordField> fields) {
http://git-wip-us.apache.org/repos/asf/nifi/blob/a9045d54/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/type/RecordDataType.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/type/RecordDataType.java b/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/type/RecordDataType.java
index fc6993f..f7e9631 100644
--- a/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/type/RecordDataType.java
+++ b/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/type/RecordDataType.java
@@ -42,7 +42,7 @@ public class RecordDataType extends DataType {
@Override
public int hashCode() {
- return 31 + 41 * getFieldType().hashCode() + 41 * (childSchema == null ? 0 : childSchema.hashCode());
+ return 31 + 41 * getFieldType().hashCode();
}
@Override
http://git-wip-us.apache.org/repos/asf/nifi/blob/a9045d54/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/TestSimpleRecordSchema.java
----------------------------------------------------------------------
diff --git a/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/TestSimpleRecordSchema.java b/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/TestSimpleRecordSchema.java
index 5a61275..204cb67 100644
--- a/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/TestSimpleRecordSchema.java
+++ b/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/TestSimpleRecordSchema.java
@@ -17,15 +17,18 @@
package org.apache.nifi.serialization;
+import org.apache.nifi.serialization.record.RecordField;
+import org.apache.nifi.serialization.record.RecordFieldType;
+import org.apache.nifi.serialization.record.SchemaIdentifier;
+import org.junit.Assert;
+import org.junit.Test;
+
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import org.apache.nifi.serialization.record.RecordField;
-import org.apache.nifi.serialization.record.RecordFieldType;
-import org.junit.Assert;
-import org.junit.Test;
+import static org.junit.Assert.assertTrue;
public class TestSimpleRecordSchema {
@@ -68,6 +71,25 @@ public class TestSimpleRecordSchema {
}
}
+ @Test
+ public void testHashCodeAndEqualsWithSelfReferencingSchema() {
+ final SimpleRecordSchema schema = new SimpleRecordSchema(SchemaIdentifier.EMPTY);
+
+ final List<RecordField> personFields = new ArrayList<>();
+ personFields.add(new RecordField("name", RecordFieldType.STRING.getDataType()));
+ personFields.add(new RecordField("sibling", RecordFieldType.RECORD.getRecordDataType(schema)));
+
+ schema.setFields(personFields);
+
+ schema.hashCode();
+ assertTrue(schema.equals(schema));
+
+ final SimpleRecordSchema secondSchema = new SimpleRecordSchema(SchemaIdentifier.EMPTY);
+ secondSchema.setFields(personFields);
+ assertTrue(schema.equals(secondSchema));
+ assertTrue(secondSchema.equals(schema));
+ }
+
private Set<String> set(final String... values) {
final Set<String> set = new HashSet<>();
for (final String value : values) {