Alex Behm has posted comments on this change.

Change subject: IMPALA-5881: Use native allocation while building catalog 
updates
......................................................................


Patch Set 13:

(8 comments)

Still looking at tests.

http://gerrit.cloudera.org:8080/#/c/7955/13/be/src/catalog/catalog.cc
File be/src/catalog/catalog.cc:

Line 171:     LOG(ERROR) << "Failed to free buffers. Leaked memory of size: "
Failed to free buffer. (singular buffer)


http://gerrit.cloudera.org:8080/#/c/7955/13/fe/src/main/java/org/apache/impala/service/JniCatalog.java
File fe/src/main/java/org/apache/impala/service/JniCatalog.java:

Line 155:         FileUtils.byteCountToDisplaySize(
We have a PrintUtils.printBytes(), use that for consistency. Maybe we should 
eventually remove that in favor of  FileUtils.byteCountToDisplaySize() but not 
in this patch.


http://gerrit.cloudera.org:8080/#/c/7955/13/fe/src/main/java/org/apache/impala/thrift/NativeAllocator.java
File fe/src/main/java/org/apache/impala/thrift/NativeAllocator.java:

Line 23:  * methods.
Mention that we have this wrapper so we can override the methods for a testing.


Line 29:   public long allocate(long bufferPtr, long size) {
reallocate()


http://gerrit.cloudera.org:8080/#/c/7955/13/fe/src/main/java/org/apache/impala/thrift/NativeByteArrayOutputStream.java
File fe/src/main/java/org/apache/impala/thrift/NativeByteArrayOutputStream.java:

Line 92:   public  NativeByteArrayOutputStream() { this(new NativeAllocator()); 
}
extra space after public


Line 103:       if (len <= 0) {
Is this dead code? Not sure we can ever get here (how would we write a test to 
cover this code path?)


PS13, Line 100: private void tryAllocate(long len) {
              :     Preconditions.checkState(bufferPtr_ >= 0);
              :     try {
              :       if (len <= 0) {
              :         throw new 
IllegalArgumentException(INVALID_BUFFER_LEN_MSG + ": " + len);
              :       }
              :       if (len >= BUFFER_MAX_SIZE_LIMIT) {
              :         throw new 
IllegalArgumentException(BUFFER_LIMIT_EXCEEDED_MSG + ": " + len);
              :       }
              :       long newBufferPtr = nativeAllocator_.allocate(bufferPtr_, 
len);
              :       if (newBufferPtr == 0) {
              :         throw new IllegalStateException(ALLOCATION_FAILED_MSG + 
": " + len
              :             + " Is realloc: " + (bufferPtr_ > 0));
              :       }
              :       bufferPtr_ = newBufferPtr;
              :       bufferLen_ = len;
              :     } catch (Throwable e) {
              :       nativeAllocator_.free(bufferPtr_);
              :       throw e;
              :     }
              :   }
> Wanted to keep the NativeAllocator logic minimal so that the test class can
I don't think this belongs in the allocator class. The logic here is specific 
to the state of this nbaos (reads and modifies bufferPtr_). It also checks for 
BUFFER_MAX_SIZE_LIMIT which is not related to the allocator.

I agree with Bharath and think it's simpler to keep the allocator a thin 
wrapper around the Unsafe calls. Pushing logic into the allocator means we need 
may need to duplicate it for the test mock (or otherwise share it).

Maybe it's less confusing if we rename this function to growBuffer() or 
something.


http://gerrit.cloudera.org:8080/#/c/7955/13/fe/src/test/java/org/apache/impala/thrift/NativeByteArrayOutputStreamTest.java
File 
fe/src/test/java/org/apache/impala/thrift/NativeByteArrayOutputStreamTest.java:

PS13, Line 43: return 0;
> My point is that the allocator doesn't only return 0, is it? It could alway
It can throw an OutOfMemory*Error* which is fatal. Are you saying we should try 
to recover from that?


-- 
To view, visit http://gerrit.cloudera.org:8080/7955
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I383684effa9524734ce3c6c0fb7ed37de0e15782
Gerrit-PatchSet: 13
Gerrit-Project: Impala-ASF
Gerrit-Branch: master
Gerrit-Owner: Bharath Vissapragada <bhara...@cloudera.com>
Gerrit-Reviewer: Alex Behm <alex.b...@cloudera.com>
Gerrit-Reviewer: Bharath Vissapragada <bhara...@cloudera.com>
Gerrit-Reviewer: Dimitris Tsirogiannis <dtsirogian...@cloudera.com>
Gerrit-Reviewer: Mostafa Mokhtar <mmokh...@cloudera.com>
Gerrit-Reviewer: Tim Armstrong <tarmstr...@cloudera.com>
Gerrit-HasComments: Yes

Reply via email to