You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by ma...@apache.org on 2020/08/01 04:06:27 UTC
[incubator-pinot] branch master updated: Add missing null check
before closing reader context. (#5785)
This is an automated email from the ASF dual-hosted git repository.
mayanks pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/master by this push:
new e286991 Add missing null check before closing reader context. (#5785)
e286991 is described below
commit e2869915bb2e951516b74988b672b681e1881902
Author: Mayank Shrivastava <ma...@apache.org>
AuthorDate: Fri Jul 31 21:06:08 2020 -0700
Add missing null check before closing reader context. (#5785)
With lazy initialization, the ForwardIndexReaderContext can be null. The close()
method is not called today, but if/when it will be, this could lead to NPE.
- Adding NULL check to fix this potential problem.
- Also, assigned getContext() to local variable for readability.
---
.../org/apache/pinot/core/common/DataFetcher.java | 78 ++++++++++++----------
1 file changed, 43 insertions(+), 35 deletions(-)
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/common/DataFetcher.java b/pinot-core/src/main/java/org/apache/pinot/core/common/DataFetcher.java
index 0a9013e..9ba8acd 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/common/DataFetcher.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/common/DataFetcher.java
@@ -273,35 +273,36 @@ public class DataFetcher {
}
void readIntValues(int[] docIds, int length, int[] valueBuffer) {
+ ForwardIndexReaderContext readerContext = getReaderContext();
if (_dictionary != null) {
int[] dictIdBuffer = THREAD_LOCAL_DICT_IDS.get();
- _reader.readDictIds(docIds, length, dictIdBuffer, getReaderContext());
+ _reader.readDictIds(docIds, length, dictIdBuffer, readerContext);
_dictionary.readIntValues(dictIdBuffer, length, valueBuffer);
} else {
switch (_reader.getValueType()) {
case INT:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = _reader.getInt(docIds[i], getReaderContext());
+ valueBuffer[i] = _reader.getInt(docIds[i], readerContext);
}
break;
case LONG:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = (int) _reader.getLong(docIds[i], getReaderContext());
+ valueBuffer[i] = (int) _reader.getLong(docIds[i], readerContext);
}
break;
case FLOAT:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = (int) _reader.getFloat(docIds[i], getReaderContext());
+ valueBuffer[i] = (int) _reader.getFloat(docIds[i], readerContext);
}
break;
case DOUBLE:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = (int) _reader.getDouble(docIds[i], getReaderContext());
+ valueBuffer[i] = (int) _reader.getDouble(docIds[i], readerContext);
}
break;
case STRING:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = Integer.parseInt(_reader.getString(docIds[i], getReaderContext()));
+ valueBuffer[i] = Integer.parseInt(_reader.getString(docIds[i], readerContext));
}
break;
default:
@@ -311,35 +312,36 @@ public class DataFetcher {
}
void readLongValues(int[] docIds, int length, long[] valueBuffer) {
+ ForwardIndexReaderContext readerContext = getReaderContext();
if (_dictionary != null) {
int[] dictIdBuffer = THREAD_LOCAL_DICT_IDS.get();
- _reader.readDictIds(docIds, length, dictIdBuffer, getReaderContext());
+ _reader.readDictIds(docIds, length, dictIdBuffer, readerContext);
_dictionary.readLongValues(dictIdBuffer, length, valueBuffer);
} else {
switch (_reader.getValueType()) {
case INT:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = _reader.getInt(docIds[i], getReaderContext());
+ valueBuffer[i] = _reader.getInt(docIds[i], readerContext);
}
break;
case LONG:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = _reader.getLong(docIds[i], getReaderContext());
+ valueBuffer[i] = _reader.getLong(docIds[i], readerContext);
}
break;
case FLOAT:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = (long) _reader.getFloat(docIds[i], getReaderContext());
+ valueBuffer[i] = (long) _reader.getFloat(docIds[i], readerContext);
}
break;
case DOUBLE:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = (long) _reader.getDouble(docIds[i], getReaderContext());
+ valueBuffer[i] = (long) _reader.getDouble(docIds[i], readerContext);
}
break;
case STRING:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = Long.parseLong(_reader.getString(docIds[i], getReaderContext()));
+ valueBuffer[i] = Long.parseLong(_reader.getString(docIds[i], readerContext));
}
break;
default:
@@ -349,35 +351,36 @@ public class DataFetcher {
}
void readFloatValues(int[] docIds, int length, float[] valueBuffer) {
+ ForwardIndexReaderContext readerContext = getReaderContext();
if (_dictionary != null) {
int[] dictIdBuffer = THREAD_LOCAL_DICT_IDS.get();
- _reader.readDictIds(docIds, length, dictIdBuffer, getReaderContext());
+ _reader.readDictIds(docIds, length, dictIdBuffer, readerContext);
_dictionary.readFloatValues(dictIdBuffer, length, valueBuffer);
} else {
switch (_reader.getValueType()) {
case INT:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = _reader.getInt(docIds[i], getReaderContext());
+ valueBuffer[i] = _reader.getInt(docIds[i], readerContext);
}
break;
case LONG:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = _reader.getLong(docIds[i], getReaderContext());
+ valueBuffer[i] = _reader.getLong(docIds[i], readerContext);
}
break;
case FLOAT:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = _reader.getFloat(docIds[i], getReaderContext());
+ valueBuffer[i] = _reader.getFloat(docIds[i], readerContext);
}
break;
case DOUBLE:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = (float) _reader.getDouble(docIds[i], getReaderContext());
+ valueBuffer[i] = (float) _reader.getDouble(docIds[i], readerContext);
}
break;
case STRING:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = Float.parseFloat(_reader.getString(docIds[i], getReaderContext()));
+ valueBuffer[i] = Float.parseFloat(_reader.getString(docIds[i], readerContext));
}
break;
default:
@@ -387,35 +390,36 @@ public class DataFetcher {
}
void readDoubleValues(int[] docIds, int length, double[] valueBuffer) {
+ ForwardIndexReaderContext readerContext = getReaderContext();
if (_dictionary != null) {
int[] dictIdBuffer = THREAD_LOCAL_DICT_IDS.get();
- _reader.readDictIds(docIds, length, dictIdBuffer, getReaderContext());
+ _reader.readDictIds(docIds, length, dictIdBuffer, readerContext);
_dictionary.readDoubleValues(dictIdBuffer, length, valueBuffer);
} else {
switch (_reader.getValueType()) {
case INT:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = _reader.getInt(docIds[i], getReaderContext());
+ valueBuffer[i] = _reader.getInt(docIds[i], readerContext);
}
break;
case LONG:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = _reader.getLong(docIds[i], getReaderContext());
+ valueBuffer[i] = _reader.getLong(docIds[i], readerContext);
}
break;
case FLOAT:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = _reader.getFloat(docIds[i], getReaderContext());
+ valueBuffer[i] = _reader.getFloat(docIds[i], readerContext);
}
break;
case DOUBLE:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = _reader.getDouble(docIds[i], getReaderContext());
+ valueBuffer[i] = _reader.getDouble(docIds[i], readerContext);
}
break;
case STRING:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = Double.parseDouble(_reader.getString(docIds[i], getReaderContext()));
+ valueBuffer[i] = Double.parseDouble(_reader.getString(docIds[i], readerContext));
}
break;
default:
@@ -425,40 +429,41 @@ public class DataFetcher {
}
void readStringValues(int[] docIds, int length, String[] valueBuffer) {
+ ForwardIndexReaderContext readerContext = getReaderContext();
if (_dictionary != null) {
int[] dictIdBuffer = THREAD_LOCAL_DICT_IDS.get();
- _reader.readDictIds(docIds, length, dictIdBuffer, getReaderContext());
+ _reader.readDictIds(docIds, length, dictIdBuffer, readerContext);
_dictionary.readStringValues(dictIdBuffer, length, valueBuffer);
} else {
switch (_reader.getValueType()) {
case INT:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = Integer.toString(_reader.getInt(docIds[i], getReaderContext()));
+ valueBuffer[i] = Integer.toString(_reader.getInt(docIds[i], readerContext));
}
break;
case LONG:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = Long.toString(_reader.getLong(docIds[i], getReaderContext()));
+ valueBuffer[i] = Long.toString(_reader.getLong(docIds[i], readerContext));
}
break;
case FLOAT:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = Float.toString(_reader.getFloat(docIds[i], getReaderContext()));
+ valueBuffer[i] = Float.toString(_reader.getFloat(docIds[i], readerContext));
}
break;
case DOUBLE:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = Double.toString(_reader.getDouble(docIds[i], getReaderContext()));
+ valueBuffer[i] = Double.toString(_reader.getDouble(docIds[i], readerContext));
}
break;
case STRING:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = _reader.getString(docIds[i], getReaderContext());
+ valueBuffer[i] = _reader.getString(docIds[i], readerContext);
}
break;
case BYTES:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = BytesUtils.toHexString(_reader.getBytes(docIds[i], getReaderContext()));
+ valueBuffer[i] = BytesUtils.toHexString(_reader.getBytes(docIds[i], readerContext));
}
break;
default:
@@ -468,20 +473,21 @@ public class DataFetcher {
}
void readBytesValues(int[] docIds, int length, byte[][] valueBuffer) {
+ ForwardIndexReaderContext readerContext = getReaderContext();
if (_dictionary != null) {
int[] dictIdBuffer = THREAD_LOCAL_DICT_IDS.get();
- _reader.readDictIds(docIds, length, dictIdBuffer, getReaderContext());
+ _reader.readDictIds(docIds, length, dictIdBuffer, readerContext);
_dictionary.readBytesValues(dictIdBuffer, length, valueBuffer);
} else {
switch (_reader.getValueType()) {
case STRING:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = BytesUtils.toBytes(_reader.getString(docIds[i], getReaderContext()));
+ valueBuffer[i] = BytesUtils.toBytes(_reader.getString(docIds[i], readerContext));
}
break;
case BYTES:
for (int i = 0; i < length; i++) {
- valueBuffer[i] = _reader.getBytes(docIds[i], getReaderContext());
+ valueBuffer[i] = _reader.getBytes(docIds[i], readerContext);
}
break;
default:
@@ -551,7 +557,9 @@ public class DataFetcher {
@Override
public void close()
throws IOException {
- _readerContext.close();
+ if (_readerContext != null) {
+ _readerContext.close();
+ }
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org