Change in asterixdb[master]: ErrorCode Map Initialization Needs To Be Thread Safe

2017-03-13 Thread Michael Blow (Code Review)
Michael Blow has submitted this change and it was merged.

Change subject: ErrorCode Map Initialization Needs To Be Thread Safe
..


ErrorCode Map Initialization Needs To Be Thread Safe

Reworked deferred initialization of error message map to be thread safe

Change-Id: I78c0df172038bb1a97297837ff7c82b2727f8556
Reviewed-on: https://asterix-gerrit.ics.uci.edu/1571
Sonar-Qube: Jenkins 
Tested-by: Jenkins 
Integration-Tests: Jenkins 
Reviewed-by: abdullah alamoudi 
---
M 
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
M 
hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
2 files changed, 26 insertions(+), 14 deletions(-)

Approvals:
  abdullah alamoudi: Looks good to me, approved
  Jenkins: Verified; No violations found; Verified

Objections:
  Jenkins: Violations found



diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
index 517e243..8f859c7 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
@@ -165,21 +165,27 @@
 public static final int UTIL_LOCAL_FILE_SYSTEM_UTILS_PATH_NOT_FOUND = 3077;
 public static final int UTIL_HDFS_UTILS_CANNOT_OBTAIN_HDFS_SCHEDULER = 
3078;
 
-// Loads the map that maps error codes to error message templates.
-private static Map errorMessageMap = null;
-
 private ErrorCode() {
 }
 
-public static String getErrorMessage(int errorCode) {
-if (errorMessageMap == null) {
+private static class Holder {
+private static final Map errorMessageMap;
+
+static {
+// Loads the map that maps error codes to error message templates.
 try (InputStream resourceStream = 
ErrorCode.class.getClassLoader().getResourceAsStream(RESOURCE_PATH)) {
 errorMessageMap = 
ErrorMessageUtil.loadErrorMap(resourceStream);
 } catch (Exception e) {
 throw new IllegalStateException(e);
 }
 }
-String msg = errorMessageMap.get(errorCode);
+
+private Holder() {
+}
+}
+
+public static String getErrorMessage(int errorCode) {
+String msg = Holder.errorMessageMap.get(errorCode);
 if (msg == null) {
 throw new IllegalStateException("Undefined error code: " + 
errorCode);
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
index 333b1df..401103b 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
@@ -64,21 +64,27 @@
 // Compilation error codes.
 public static final int RULECOLLECTION_NOT_INSTANCE_OF_LIST = 10001;
 
-// Loads the map that maps error codes to error message templates.
-private static Map errorMessageMap = null;
+private static class Holder {
+private static final Map errorMessageMap;
 
-private ErrorCode() {
-}
-
-public static String getErrorMessage(int errorCode) {
-if (errorMessageMap == null) {
+static {
+// Loads the map that maps error codes to error message templates.
 try (InputStream resourceStream = 
ErrorCode.class.getClassLoader().getResourceAsStream(RESOURCE_PATH)) {
 errorMessageMap = 
ErrorMessageUtil.loadErrorMap(resourceStream);
 } catch (Exception e) {
 throw new IllegalStateException(e);
 }
 }
-String msg = errorMessageMap.get(errorCode);
+
+private Holder() {
+}
+}
+
+private ErrorCode() {
+}
+
+public static String getErrorMessage(int errorCode) {
+String msg = Holder.errorMessageMap.get(errorCode);
 if (msg == null) {
 throw new IllegalStateException("Undefined error code: " + 
errorCode);
 }

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1571
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I78c0df172038bb1a97297837ff7c82b2727f8556
Gerrit-PatchSet: 2
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Michael Blow 
Gerrit-Reviewer: Jenkins 

Change in asterixdb[master]: ErrorCode Map Initialization Needs To Be Thread Safe

2017-03-13 Thread abdullah alamoudi (Code Review)
abdullah alamoudi has posted comments on this change.

Change subject: ErrorCode Map Initialization Needs To Be Thread Safe
..


Patch Set 1: Code-Review+2

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1571
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I78c0df172038bb1a97297837ff7c82b2727f8556
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Michael Blow 
Gerrit-Reviewer: Jenkins 
Gerrit-Reviewer: Till Westmann 
Gerrit-Reviewer: Yingyi Bu 
Gerrit-Reviewer: abdullah alamoudi 
Gerrit-HasComments: No


Change in asterixdb[master]: ErrorCode Map Initialization Needs To Be Thread Safe

2017-03-12 Thread Jenkins (Code Review)
Jenkins has posted comments on this change.

Change subject: ErrorCode Map Initialization Needs To Be Thread Safe
..


Patch Set 1: Integration-Tests+1

Integration Tests Successful

https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-integration-tests/2166/ 
: SUCCESS

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1571
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I78c0df172038bb1a97297837ff7c82b2727f8556
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Michael Blow 
Gerrit-Reviewer: Jenkins 
Gerrit-Reviewer: Till Westmann 
Gerrit-Reviewer: Yingyi Bu 
Gerrit-HasComments: No


Change in asterixdb[master]: ErrorCode Map Initialization Needs To Be Thread Safe

2017-03-12 Thread Jenkins (Code Review)
Jenkins has posted comments on this change.

Change subject: ErrorCode Map Initialization Needs To Be Thread Safe
..


Patch Set 1: BAD-1

BAD Compatibility Tests Failed

https://asterix-jenkins.ics.uci.edu/job/asterixbad-compat/777/ : UNSTABLE

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1571
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I78c0df172038bb1a97297837ff7c82b2727f8556
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Michael Blow 
Gerrit-Reviewer: Jenkins 
Gerrit-Reviewer: Till Westmann 
Gerrit-Reviewer: Yingyi Bu 
Gerrit-HasComments: No


Change in asterixdb[master]: ErrorCode Map Initialization Needs To Be Thread Safe

2017-03-12 Thread Jenkins (Code Review)
Jenkins has posted comments on this change.

Change subject: ErrorCode Map Initialization Needs To Be Thread Safe
..


Patch Set 1:

BAD Compatibility Tests Started 
https://asterix-jenkins.ics.uci.edu/job/asterixbad-compat/777/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1571
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I78c0df172038bb1a97297837ff7c82b2727f8556
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Michael Blow 
Gerrit-Reviewer: Jenkins 
Gerrit-Reviewer: Till Westmann 
Gerrit-Reviewer: Yingyi Bu 
Gerrit-HasComments: No


Change in asterixdb[master]: ErrorCode Map Initialization Needs To Be Thread Safe

2017-03-12 Thread Jenkins (Code Review)
Jenkins has posted comments on this change.

Change subject: ErrorCode Map Initialization Needs To Be Thread Safe
..


Patch Set 1:

Integration Tests Started 
https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-integration-tests/2166/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1571
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I78c0df172038bb1a97297837ff7c82b2727f8556
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Michael Blow 
Gerrit-Reviewer: Jenkins 
Gerrit-Reviewer: Till Westmann 
Gerrit-Reviewer: Yingyi Bu 
Gerrit-HasComments: No


Change in asterixdb[master]: ErrorCode Map Initialization Needs To Be Thread Safe

2017-03-12 Thread Jenkins (Code Review)
Jenkins has posted comments on this change.

Change subject: ErrorCode Map Initialization Needs To Be Thread Safe
..


Patch Set 1:

Build Started 
https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-notopic/4643/

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1571
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I78c0df172038bb1a97297837ff7c82b2727f8556
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Michael Blow 
Gerrit-Reviewer: Jenkins 
Gerrit-Reviewer: Till Westmann 
Gerrit-Reviewer: Yingyi Bu 
Gerrit-HasComments: No


Change in asterixdb[master]: ErrorCode Map Initialization Needs To Be Thread Safe

2017-03-12 Thread Michael Blow (Code Review)
Michael Blow has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/1571

Change subject: ErrorCode Map Initialization Needs To Be Thread Safe
..

ErrorCode Map Initialization Needs To Be Thread Safe

Reworked deferred initialization of error message map to be thread safe

Change-Id: I78c0df172038bb1a97297837ff7c82b2727f8556
---
M 
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
M 
hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
2 files changed, 26 insertions(+), 14 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/71/1571/1

diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
index 517e243..8f859c7 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
@@ -165,21 +165,27 @@
 public static final int UTIL_LOCAL_FILE_SYSTEM_UTILS_PATH_NOT_FOUND = 3077;
 public static final int UTIL_HDFS_UTILS_CANNOT_OBTAIN_HDFS_SCHEDULER = 
3078;
 
-// Loads the map that maps error codes to error message templates.
-private static Map errorMessageMap = null;
-
 private ErrorCode() {
 }
 
-public static String getErrorMessage(int errorCode) {
-if (errorMessageMap == null) {
+private static class Holder {
+private static final Map errorMessageMap;
+
+static {
+// Loads the map that maps error codes to error message templates.
 try (InputStream resourceStream = 
ErrorCode.class.getClassLoader().getResourceAsStream(RESOURCE_PATH)) {
 errorMessageMap = 
ErrorMessageUtil.loadErrorMap(resourceStream);
 } catch (Exception e) {
 throw new IllegalStateException(e);
 }
 }
-String msg = errorMessageMap.get(errorCode);
+
+private Holder() {
+}
+}
+
+public static String getErrorMessage(int errorCode) {
+String msg = Holder.errorMessageMap.get(errorCode);
 if (msg == null) {
 throw new IllegalStateException("Undefined error code: " + 
errorCode);
 }
diff --git 
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
index 333b1df..401103b 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
@@ -64,21 +64,27 @@
 // Compilation error codes.
 public static final int RULECOLLECTION_NOT_INSTANCE_OF_LIST = 10001;
 
-// Loads the map that maps error codes to error message templates.
-private static Map errorMessageMap = null;
+private static class Holder {
+private static final Map errorMessageMap;
 
-private ErrorCode() {
-}
-
-public static String getErrorMessage(int errorCode) {
-if (errorMessageMap == null) {
+static {
+// Loads the map that maps error codes to error message templates.
 try (InputStream resourceStream = 
ErrorCode.class.getClassLoader().getResourceAsStream(RESOURCE_PATH)) {
 errorMessageMap = 
ErrorMessageUtil.loadErrorMap(resourceStream);
 } catch (Exception e) {
 throw new IllegalStateException(e);
 }
 }
-String msg = errorMessageMap.get(errorCode);
+
+private Holder() {
+}
+}
+
+private ErrorCode() {
+}
+
+public static String getErrorMessage(int errorCode) {
+String msg = Holder.errorMessageMap.get(errorCode);
 if (msg == null) {
 throw new IllegalStateException("Undefined error code: " + 
errorCode);
 }

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1571
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I78c0df172038bb1a97297837ff7c82b2727f8556
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Michael Blow