ARROW-1283: [JAVA] Allow VectorSchemaRoot to close more than once - #898

Closed
BryanCutler wants to merge 6 commits into
apache:masterfrom
BryanCutler:java-vectorSchemaRoot-close-twice-ARROW-1283
Closed

ARROW-1283: [JAVA] Allow VectorSchemaRoot to close more than once#898
BryanCutler wants to merge 6 commits into
apache:masterfrom
BryanCutler:java-vectorSchemaRoot-close-twice-ARROW-1283

Conversation

@BryanCutler

Copy link
Copy Markdown
Member

This change allows the VectorSchemaRoot/FieldVectors to close more than once, even if the allocator has already been closed. Before, an empty ArrowBuf was created during closing which required the allocator to not be closed, however this empty buffer is not needed once the FieldVector has been closed.

@BryanCutler

Copy link
Copy Markdown
MemberAuthor

cc @julienledem@elahrvivaz

@elahrvivazelahrvivaz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me

@wesm

wesm commented Jul 28, 2017

Copy link
Copy Markdown
Member

@jacques-n@StevenMPhillips@siddharthteotia do you see any issues with this?

@siddharthteotia

Copy link
Copy Markdown
Contributor

@BryanCutler

I would like to know why is there a need to close a vector twice. The current change is structured such that following works and the last statement doesn't raise an error.

vector.close()
allocator.close()
vector.close()

Once close() operation is invoked on the vector and allocator, I expect the resources associated to be garbage collected properly. Under what conditions, do we still the 3rd statement?

Thanks,
Siddharth

data = null;
}
super.close();
data = null;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer doing this change differently. Maybe by allowing allocator to return an empty buffer even if closed. This is because it makes bugs/issues much easier to understand than getting an NPE.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, that sounds fine. As far as I can this would not cause any issues.

@BryanCutler

BryanCutler commented Jul 31, 2017

Copy link
Copy Markdown
MemberAuthor

I would like to know why is there a need to close a vector twice.

@siddharthteotia , this came from a discussion in Spark here. The root/allocator are being used in an iterator and are closed normally after the last iteration, however there are some ways this wouldn't happen (say if a task was cancelled), so they are also closed in a callback to prevent any leaks. Right now an extra flag is being used, which is fine but it would be cleaner to just allow them to call close a second time and not do anything.

}

private ArrowBuf createEmpty() {
assertOpen();

@BryanCutlerBryanCutlerAug 1, 2017

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this did not seem necessary either, because an allocator will always hold an instance of an empty buffer. Does this seem ok?

@BryanCutler

BryanCutler commented Aug 1, 2017

Copy link
Copy Markdown
MemberAuthor

@jacques-n , I made the change to use an empty buffer instead of assigning null. This essentially made close() the same as clear() and could be removed. Now in the super class BaseValueVector.close() will invoke clear() to release any buffer and assign data to an empty buffer.

It also seems to me that all Nullable vector would now have a close() method that is identical to clear(). Is that maybe something to remove and cleanup here also? Should there be any different meaning to closing vs. clearing a vector?

@BryanCutler
BryanCutlerforce-pushed the java-vectorSchemaRoot-close-twice-ARROW-1283 branch from 9dd1f07 to 2921d84CompareAugust 3, 2017 18:23
}

// TODO: Nullable vectors extend BaseDataValueVector but do not use the data field
// We should fix the inheritance tree

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@siddharthteotia I believe you resolved this comment in #892. Does this PR look ok to you?

@wesm

wesm commented Aug 4, 2017

Copy link
Copy Markdown
Member

The CI failure is unrelated to these changes. Can this be merged?

wesm
wesm approved these changes Aug 7, 2017

@wesmwesm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

@asfgitasfgit closed this in f9d9833Aug 7, 2017
@BryanCutler

Copy link
Copy Markdown
MemberAuthor

Thanks @wesm!

@BryanCutler
BryanCutler deleted the java-vectorSchemaRoot-close-twice-ARROW-1283 branch November 7, 2017 23:50
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
This change allows the VectorSchemaRoot/FieldVectors to close more than once, even if the allocator has already been closed. Before, an empty ArrowBuf was created during closing which required the allocator to not be closed, however this empty buffer is not needed once the FieldVector has been closed.
Author: Bryan Cutler <cutlerb@gmail.com>
Closesapache#898 from BryanCutler/java-vectorSchemaRoot-close-twice-ARROW-1283 and squashes the following commits:
2921d84 [Bryan Cutler] removed resolved comment
3b3718b [Bryan Cutler] Merge remote-tracking branch 'upstream/master' into java-vectorSchemaRoot-close-twice-ARROW-1283
e992fc7 [Bryan Cutler] BaseDataValueVector.close will now just clear, which releases previous and assigns an empty buffer
8ecfce2 [Bryan Cutler] Merge remote-tracking branch 'upstream/master' into java-vectorSchemaRoot-close-twice-ARROW-1283
ca38d3d [Bryan Cutler] use clear to release data, ensure that an empty buffer is never allocated again after closing
10ff7c3 [Bryan Cutler] Added regression test
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@BryanCutler@wesm@siddharthteotia@jacques-n@elahrvivaz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

ARROW-1283: [JAVA] Allow VectorSchemaRoot to close more than once - #898

Closed
BryanCutler wants to merge 6 commits into
apache:masterfrom
BryanCutler:java-vectorSchemaRoot-close-twice-ARROW-1283
Closed

ARROW-1283: [JAVA] Allow VectorSchemaRoot to close more than once#898
BryanCutler wants to merge 6 commits into
apache:masterfrom
BryanCutler:java-vectorSchemaRoot-close-twice-ARROW-1283

Conversation

@BryanCutler

Copy link
Copy Markdown
Member

This change allows the VectorSchemaRoot/FieldVectors to close more than once, even if the allocator has already been closed. Before, an empty ArrowBuf was created during closing which required the allocator to not be closed, however this empty buffer is not needed once the FieldVector has been closed.

@BryanCutler

Copy link
Copy Markdown
MemberAuthor

cc @julienledem@elahrvivaz

@elahrvivazelahrvivaz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me

@wesm

wesm commented Jul 28, 2017

Copy link
Copy Markdown
Member

@jacques-n@StevenMPhillips@siddharthteotia do you see any issues with this?

@siddharthteotia

Copy link
Copy Markdown
Contributor

@BryanCutler

I would like to know why is there a need to close a vector twice. The current change is structured such that following works and the last statement doesn't raise an error.

vector.close()
allocator.close()
vector.close()

Once close() operation is invoked on the vector and allocator, I expect the resources associated to be garbage collected properly. Under what conditions, do we still the 3rd statement?

Thanks,
Siddharth

data = null;
}
super.close();
data = null;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer doing this change differently. Maybe by allowing allocator to return an empty buffer even if closed. This is because it makes bugs/issues much easier to understand than getting an NPE.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, that sounds fine. As far as I can this would not cause any issues.

@BryanCutler

BryanCutler commented Jul 31, 2017

Copy link
Copy Markdown
MemberAuthor

I would like to know why is there a need to close a vector twice.

@siddharthteotia , this came from a discussion in Spark here. The root/allocator are being used in an iterator and are closed normally after the last iteration, however there are some ways this wouldn't happen (say if a task was cancelled), so they are also closed in a callback to prevent any leaks. Right now an extra flag is being used, which is fine but it would be cleaner to just allow them to call close a second time and not do anything.

}

private ArrowBuf createEmpty() {
assertOpen();

@BryanCutlerBryanCutlerAug 1, 2017

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this did not seem necessary either, because an allocator will always hold an instance of an empty buffer. Does this seem ok?

@BryanCutler

BryanCutler commented Aug 1, 2017

Copy link
Copy Markdown
MemberAuthor

@jacques-n , I made the change to use an empty buffer instead of assigning null. This essentially made close() the same as clear() and could be removed. Now in the super class BaseValueVector.close() will invoke clear() to release any buffer and assign data to an empty buffer.

It also seems to me that all Nullable vector would now have a close() method that is identical to clear(). Is that maybe something to remove and cleanup here also? Should there be any different meaning to closing vs. clearing a vector?

@BryanCutler
BryanCutlerforce-pushed the java-vectorSchemaRoot-close-twice-ARROW-1283 branch from 9dd1f07 to 2921d84CompareAugust 3, 2017 18:23
}

// TODO: Nullable vectors extend BaseDataValueVector but do not use the data field
// We should fix the inheritance tree

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@siddharthteotia I believe you resolved this comment in #892. Does this PR look ok to you?

@wesm

wesm commented Aug 4, 2017

Copy link
Copy Markdown
Member

The CI failure is unrelated to these changes. Can this be merged?

wesm
wesm approved these changes Aug 7, 2017

@wesmwesm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

@asfgitasfgit closed this in f9d9833Aug 7, 2017
@BryanCutler

Copy link
Copy Markdown
MemberAuthor

Thanks @wesm!

@BryanCutler
BryanCutler deleted the java-vectorSchemaRoot-close-twice-ARROW-1283 branch November 7, 2017 23:50
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
This change allows the VectorSchemaRoot/FieldVectors to close more than once, even if the allocator has already been closed. Before, an empty ArrowBuf was created during closing which required the allocator to not be closed, however this empty buffer is not needed once the FieldVector has been closed.
Author: Bryan Cutler <cutlerb@gmail.com>
Closesapache#898 from BryanCutler/java-vectorSchemaRoot-close-twice-ARROW-1283 and squashes the following commits:
2921d84 [Bryan Cutler] removed resolved comment
3b3718b [Bryan Cutler] Merge remote-tracking branch 'upstream/master' into java-vectorSchemaRoot-close-twice-ARROW-1283
e992fc7 [Bryan Cutler] BaseDataValueVector.close will now just clear, which releases previous and assigns an empty buffer
8ecfce2 [Bryan Cutler] Merge remote-tracking branch 'upstream/master' into java-vectorSchemaRoot-close-twice-ARROW-1283
ca38d3d [Bryan Cutler] use clear to release data, ensure that an empty buffer is never allocated again after closing
10ff7c3 [Bryan Cutler] Added regression test
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@BryanCutler@wesm@siddharthteotia@jacques-n@elahrvivaz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-1283: [JAVA] Allow VectorSchemaRoot to close more than once - #898

Closed
BryanCutler wants to merge 6 commits into
apache:masterfrom
BryanCutler:java-vectorSchemaRoot-close-twice-ARROW-1283
Closed

ARROW-1283: [JAVA] Allow VectorSchemaRoot to close more than once#898
BryanCutler wants to merge 6 commits into
apache:masterfrom
BryanCutler:java-vectorSchemaRoot-close-twice-ARROW-1283

Conversation

@BryanCutler

Copy link
Copy Markdown
Member

This change allows the VectorSchemaRoot/FieldVectors to close more than once, even if the allocator has already been closed. Before, an empty ArrowBuf was created during closing which required the allocator to not be closed, however this empty buffer is not needed once the FieldVector has been closed.

@BryanCutler

Copy link
Copy Markdown
MemberAuthor

cc @julienledem@elahrvivaz

@elahrvivazelahrvivaz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me

@wesm

wesm commented Jul 28, 2017

Copy link
Copy Markdown
Member

@jacques-n@StevenMPhillips@siddharthteotia do you see any issues with this?

@siddharthteotia

Copy link
Copy Markdown
Contributor

@BryanCutler

I would like to know why is there a need to close a vector twice. The current change is structured such that following works and the last statement doesn't raise an error.

vector.close()
allocator.close()
vector.close()

Once close() operation is invoked on the vector and allocator, I expect the resources associated to be garbage collected properly. Under what conditions, do we still the 3rd statement?

Thanks,
Siddharth

data = null;
}
super.close();
data = null;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer doing this change differently. Maybe by allowing allocator to return an empty buffer even if closed. This is because it makes bugs/issues much easier to understand than getting an NPE.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, that sounds fine. As far as I can this would not cause any issues.

@BryanCutler

BryanCutler commented Jul 31, 2017

Copy link
Copy Markdown
MemberAuthor

I would like to know why is there a need to close a vector twice.

@siddharthteotia , this came from a discussion in Spark here. The root/allocator are being used in an iterator and are closed normally after the last iteration, however there are some ways this wouldn't happen (say if a task was cancelled), so they are also closed in a callback to prevent any leaks. Right now an extra flag is being used, which is fine but it would be cleaner to just allow them to call close a second time and not do anything.

}

private ArrowBuf createEmpty() {
assertOpen();

@BryanCutlerBryanCutlerAug 1, 2017

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this did not seem necessary either, because an allocator will always hold an instance of an empty buffer. Does this seem ok?

@BryanCutler

BryanCutler commented Aug 1, 2017

Copy link
Copy Markdown
MemberAuthor

@jacques-n , I made the change to use an empty buffer instead of assigning null. This essentially made close() the same as clear() and could be removed. Now in the super class BaseValueVector.close() will invoke clear() to release any buffer and assign data to an empty buffer.

It also seems to me that all Nullable vector would now have a close() method that is identical to clear(). Is that maybe something to remove and cleanup here also? Should there be any different meaning to closing vs. clearing a vector?

@BryanCutler
BryanCutlerforce-pushed the java-vectorSchemaRoot-close-twice-ARROW-1283 branch from 9dd1f07 to 2921d84CompareAugust 3, 2017 18:23
}

// TODO: Nullable vectors extend BaseDataValueVector but do not use the data field
// We should fix the inheritance tree

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@siddharthteotia I believe you resolved this comment in #892. Does this PR look ok to you?

@wesm

wesm commented Aug 4, 2017

Copy link
Copy Markdown
Member

The CI failure is unrelated to these changes. Can this be merged?

wesm
wesm approved these changes Aug 7, 2017

@wesmwesm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

@asfgitasfgit closed this in f9d9833Aug 7, 2017
@BryanCutler

Copy link
Copy Markdown
MemberAuthor

Thanks @wesm!

@BryanCutler
BryanCutler deleted the java-vectorSchemaRoot-close-twice-ARROW-1283 branch November 7, 2017 23:50
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
This change allows the VectorSchemaRoot/FieldVectors to close more than once, even if the allocator has already been closed. Before, an empty ArrowBuf was created during closing which required the allocator to not be closed, however this empty buffer is not needed once the FieldVector has been closed.
Author: Bryan Cutler <cutlerb@gmail.com>
Closesapache#898 from BryanCutler/java-vectorSchemaRoot-close-twice-ARROW-1283 and squashes the following commits:
2921d84 [Bryan Cutler] removed resolved comment
3b3718b [Bryan Cutler] Merge remote-tracking branch 'upstream/master' into java-vectorSchemaRoot-close-twice-ARROW-1283
e992fc7 [Bryan Cutler] BaseDataValueVector.close will now just clear, which releases previous and assigns an empty buffer
8ecfce2 [Bryan Cutler] Merge remote-tracking branch 'upstream/master' into java-vectorSchemaRoot-close-twice-ARROW-1283
ca38d3d [Bryan Cutler] use clear to release data, ensure that an empty buffer is never allocated again after closing
10ff7c3 [Bryan Cutler] Added regression test
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@BryanCutler@wesm@siddharthteotia@jacques-n@elahrvivaz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-1283: [JAVA] Allow VectorSchemaRoot to close more than once - #898

Closed
BryanCutler wants to merge 6 commits into
apache:masterfrom
BryanCutler:java-vectorSchemaRoot-close-twice-ARROW-1283
Closed

ARROW-1283: [JAVA] Allow VectorSchemaRoot to close more than once#898
BryanCutler wants to merge 6 commits into
apache:masterfrom
BryanCutler:java-vectorSchemaRoot-close-twice-ARROW-1283

Conversation

@BryanCutler

Copy link
Copy Markdown
Member

This change allows the VectorSchemaRoot/FieldVectors to close more than once, even if the allocator has already been closed. Before, an empty ArrowBuf was created during closing which required the allocator to not be closed, however this empty buffer is not needed once the FieldVector has been closed.

@BryanCutler

Copy link
Copy Markdown
MemberAuthor

cc @julienledem@elahrvivaz

@elahrvivazelahrvivaz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me

@wesm

wesm commented Jul 28, 2017

Copy link
Copy Markdown
Member

@jacques-n@StevenMPhillips@siddharthteotia do you see any issues with this?

@siddharthteotia

Copy link
Copy Markdown
Contributor

@BryanCutler

I would like to know why is there a need to close a vector twice. The current change is structured such that following works and the last statement doesn't raise an error.

vector.close()
allocator.close()
vector.close()

Once close() operation is invoked on the vector and allocator, I expect the resources associated to be garbage collected properly. Under what conditions, do we still the 3rd statement?

Thanks,
Siddharth

data = null;
}
super.close();
data = null;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer doing this change differently. Maybe by allowing allocator to return an empty buffer even if closed. This is because it makes bugs/issues much easier to understand than getting an NPE.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, that sounds fine. As far as I can this would not cause any issues.

@BryanCutler

BryanCutler commented Jul 31, 2017

Copy link
Copy Markdown
MemberAuthor

I would like to know why is there a need to close a vector twice.

@siddharthteotia , this came from a discussion in Spark here. The root/allocator are being used in an iterator and are closed normally after the last iteration, however there are some ways this wouldn't happen (say if a task was cancelled), so they are also closed in a callback to prevent any leaks. Right now an extra flag is being used, which is fine but it would be cleaner to just allow them to call close a second time and not do anything.

}

private ArrowBuf createEmpty() {
assertOpen();

@BryanCutlerBryanCutlerAug 1, 2017

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this did not seem necessary either, because an allocator will always hold an instance of an empty buffer. Does this seem ok?

@BryanCutler

BryanCutler commented Aug 1, 2017

Copy link
Copy Markdown
MemberAuthor

@jacques-n , I made the change to use an empty buffer instead of assigning null. This essentially made close() the same as clear() and could be removed. Now in the super class BaseValueVector.close() will invoke clear() to release any buffer and assign data to an empty buffer.

It also seems to me that all Nullable vector would now have a close() method that is identical to clear(). Is that maybe something to remove and cleanup here also? Should there be any different meaning to closing vs. clearing a vector?

@BryanCutler
BryanCutlerforce-pushed the java-vectorSchemaRoot-close-twice-ARROW-1283 branch from 9dd1f07 to 2921d84CompareAugust 3, 2017 18:23
}

// TODO: Nullable vectors extend BaseDataValueVector but do not use the data field
// We should fix the inheritance tree

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@siddharthteotia I believe you resolved this comment in #892. Does this PR look ok to you?

@wesm

wesm commented Aug 4, 2017

Copy link
Copy Markdown
Member

The CI failure is unrelated to these changes. Can this be merged?

wesm
wesm approved these changes Aug 7, 2017

@wesmwesm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

@asfgitasfgit closed this in f9d9833Aug 7, 2017
@BryanCutler

Copy link
Copy Markdown
MemberAuthor

Thanks @wesm!

@BryanCutler
BryanCutler deleted the java-vectorSchemaRoot-close-twice-ARROW-1283 branch November 7, 2017 23:50
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
This change allows the VectorSchemaRoot/FieldVectors to close more than once, even if the allocator has already been closed. Before, an empty ArrowBuf was created during closing which required the allocator to not be closed, however this empty buffer is not needed once the FieldVector has been closed.
Author: Bryan Cutler <cutlerb@gmail.com>
Closesapache#898 from BryanCutler/java-vectorSchemaRoot-close-twice-ARROW-1283 and squashes the following commits:
2921d84 [Bryan Cutler] removed resolved comment
3b3718b [Bryan Cutler] Merge remote-tracking branch 'upstream/master' into java-vectorSchemaRoot-close-twice-ARROW-1283
e992fc7 [Bryan Cutler] BaseDataValueVector.close will now just clear, which releases previous and assigns an empty buffer
8ecfce2 [Bryan Cutler] Merge remote-tracking branch 'upstream/master' into java-vectorSchemaRoot-close-twice-ARROW-1283
ca38d3d [Bryan Cutler] use clear to release data, ensure that an empty buffer is never allocated again after closing
10ff7c3 [Bryan Cutler] Added regression test
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@BryanCutler@wesm@siddharthteotia@jacques-n@elahrvivaz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

ARROW-1283: [JAVA] Allow VectorSchemaRoot to close more than once - #898

Closed
BryanCutler wants to merge 6 commits into
apache:masterfrom
BryanCutler:java-vectorSchemaRoot-close-twice-ARROW-1283
Closed

ARROW-1283: [JAVA] Allow VectorSchemaRoot to close more than once#898
BryanCutler wants to merge 6 commits into
apache:masterfrom
BryanCutler:java-vectorSchemaRoot-close-twice-ARROW-1283

Conversation

@BryanCutler

Copy link
Copy Markdown
Member

This change allows the VectorSchemaRoot/FieldVectors to close more than once, even if the allocator has already been closed. Before, an empty ArrowBuf was created during closing which required the allocator to not be closed, however this empty buffer is not needed once the FieldVector has been closed.

@BryanCutler

Copy link
Copy Markdown
MemberAuthor

cc @julienledem@elahrvivaz

@elahrvivazelahrvivaz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me

@wesm

wesm commented Jul 28, 2017

Copy link
Copy Markdown
Member

@jacques-n@StevenMPhillips@siddharthteotia do you see any issues with this?

@siddharthteotia

Copy link
Copy Markdown
Contributor

@BryanCutler

I would like to know why is there a need to close a vector twice. The current change is structured such that following works and the last statement doesn't raise an error.

vector.close()
allocator.close()
vector.close()

Once close() operation is invoked on the vector and allocator, I expect the resources associated to be garbage collected properly. Under what conditions, do we still the 3rd statement?

Thanks,
Siddharth

data = null;
}
super.close();
data = null;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer doing this change differently. Maybe by allowing allocator to return an empty buffer even if closed. This is because it makes bugs/issues much easier to understand than getting an NPE.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, that sounds fine. As far as I can this would not cause any issues.

@BryanCutler

BryanCutler commented Jul 31, 2017

Copy link
Copy Markdown
MemberAuthor

I would like to know why is there a need to close a vector twice.

@siddharthteotia , this came from a discussion in Spark here. The root/allocator are being used in an iterator and are closed normally after the last iteration, however there are some ways this wouldn't happen (say if a task was cancelled), so they are also closed in a callback to prevent any leaks. Right now an extra flag is being used, which is fine but it would be cleaner to just allow them to call close a second time and not do anything.

}

private ArrowBuf createEmpty() {
assertOpen();

@BryanCutlerBryanCutlerAug 1, 2017

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this did not seem necessary either, because an allocator will always hold an instance of an empty buffer. Does this seem ok?

@BryanCutler

BryanCutler commented Aug 1, 2017

Copy link
Copy Markdown
MemberAuthor

@jacques-n , I made the change to use an empty buffer instead of assigning null. This essentially made close() the same as clear() and could be removed. Now in the super class BaseValueVector.close() will invoke clear() to release any buffer and assign data to an empty buffer.

It also seems to me that all Nullable vector would now have a close() method that is identical to clear(). Is that maybe something to remove and cleanup here also? Should there be any different meaning to closing vs. clearing a vector?

@BryanCutler
BryanCutlerforce-pushed the java-vectorSchemaRoot-close-twice-ARROW-1283 branch from 9dd1f07 to 2921d84CompareAugust 3, 2017 18:23
}

// TODO: Nullable vectors extend BaseDataValueVector but do not use the data field
// We should fix the inheritance tree

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@siddharthteotia I believe you resolved this comment in #892. Does this PR look ok to you?

@wesm

wesm commented Aug 4, 2017

Copy link
Copy Markdown
Member

The CI failure is unrelated to these changes. Can this be merged?

wesm
wesm approved these changes Aug 7, 2017

@wesmwesm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

@asfgitasfgit closed this in f9d9833Aug 7, 2017
@BryanCutler

Copy link
Copy Markdown
MemberAuthor

Thanks @wesm!

@BryanCutler
BryanCutler deleted the java-vectorSchemaRoot-close-twice-ARROW-1283 branch November 7, 2017 23:50
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
This change allows the VectorSchemaRoot/FieldVectors to close more than once, even if the allocator has already been closed. Before, an empty ArrowBuf was created during closing which required the allocator to not be closed, however this empty buffer is not needed once the FieldVector has been closed.
Author: Bryan Cutler <cutlerb@gmail.com>
Closesapache#898 from BryanCutler/java-vectorSchemaRoot-close-twice-ARROW-1283 and squashes the following commits:
2921d84 [Bryan Cutler] removed resolved comment
3b3718b [Bryan Cutler] Merge remote-tracking branch 'upstream/master' into java-vectorSchemaRoot-close-twice-ARROW-1283
e992fc7 [Bryan Cutler] BaseDataValueVector.close will now just clear, which releases previous and assigns an empty buffer
8ecfce2 [Bryan Cutler] Merge remote-tracking branch 'upstream/master' into java-vectorSchemaRoot-close-twice-ARROW-1283
ca38d3d [Bryan Cutler] use clear to release data, ensure that an empty buffer is never allocated again after closing
10ff7c3 [Bryan Cutler] Added regression test
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@BryanCutler@wesm@siddharthteotia@jacques-n@elahrvivaz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-1283: [JAVA] Allow VectorSchemaRoot to close more than once - #898

Closed
BryanCutler wants to merge 6 commits into
apache:masterfrom
BryanCutler:java-vectorSchemaRoot-close-twice-ARROW-1283
Closed

ARROW-1283: [JAVA] Allow VectorSchemaRoot to close more than once#898
BryanCutler wants to merge 6 commits into
apache:masterfrom
BryanCutler:java-vectorSchemaRoot-close-twice-ARROW-1283

Conversation

@BryanCutler

Copy link
Copy Markdown
Member

This change allows the VectorSchemaRoot/FieldVectors to close more than once, even if the allocator has already been closed. Before, an empty ArrowBuf was created during closing which required the allocator to not be closed, however this empty buffer is not needed once the FieldVector has been closed.

@BryanCutler

Copy link
Copy Markdown
MemberAuthor

cc @julienledem@elahrvivaz

@elahrvivazelahrvivaz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me

@wesm

wesm commented Jul 28, 2017

Copy link
Copy Markdown
Member

@jacques-n@StevenMPhillips@siddharthteotia do you see any issues with this?

@siddharthteotia

Copy link
Copy Markdown
Contributor

@BryanCutler

I would like to know why is there a need to close a vector twice. The current change is structured such that following works and the last statement doesn't raise an error.

vector.close()
allocator.close()
vector.close()

Once close() operation is invoked on the vector and allocator, I expect the resources associated to be garbage collected properly. Under what conditions, do we still the 3rd statement?

Thanks,
Siddharth

data = null;
}
super.close();
data = null;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer doing this change differently. Maybe by allowing allocator to return an empty buffer even if closed. This is because it makes bugs/issues much easier to understand than getting an NPE.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, that sounds fine. As far as I can this would not cause any issues.

@BryanCutler

BryanCutler commented Jul 31, 2017

Copy link
Copy Markdown
MemberAuthor

I would like to know why is there a need to close a vector twice.

@siddharthteotia , this came from a discussion in Spark here. The root/allocator are being used in an iterator and are closed normally after the last iteration, however there are some ways this wouldn't happen (say if a task was cancelled), so they are also closed in a callback to prevent any leaks. Right now an extra flag is being used, which is fine but it would be cleaner to just allow them to call close a second time and not do anything.

}

private ArrowBuf createEmpty() {
assertOpen();

@BryanCutlerBryanCutlerAug 1, 2017

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this did not seem necessary either, because an allocator will always hold an instance of an empty buffer. Does this seem ok?

@BryanCutler

BryanCutler commented Aug 1, 2017

Copy link
Copy Markdown
MemberAuthor

@jacques-n , I made the change to use an empty buffer instead of assigning null. This essentially made close() the same as clear() and could be removed. Now in the super class BaseValueVector.close() will invoke clear() to release any buffer and assign data to an empty buffer.

It also seems to me that all Nullable vector would now have a close() method that is identical to clear(). Is that maybe something to remove and cleanup here also? Should there be any different meaning to closing vs. clearing a vector?

@BryanCutler
BryanCutlerforce-pushed the java-vectorSchemaRoot-close-twice-ARROW-1283 branch from 9dd1f07 to 2921d84CompareAugust 3, 2017 18:23
}

// TODO: Nullable vectors extend BaseDataValueVector but do not use the data field
// We should fix the inheritance tree

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@siddharthteotia I believe you resolved this comment in #892. Does this PR look ok to you?

@wesm

wesm commented Aug 4, 2017

Copy link
Copy Markdown
Member

The CI failure is unrelated to these changes. Can this be merged?

wesm
wesm approved these changes Aug 7, 2017

@wesmwesm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

@asfgitasfgit closed this in f9d9833Aug 7, 2017
@BryanCutler

Copy link
Copy Markdown
MemberAuthor

Thanks @wesm!

@BryanCutler
BryanCutler deleted the java-vectorSchemaRoot-close-twice-ARROW-1283 branch November 7, 2017 23:50
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
This change allows the VectorSchemaRoot/FieldVectors to close more than once, even if the allocator has already been closed. Before, an empty ArrowBuf was created during closing which required the allocator to not be closed, however this empty buffer is not needed once the FieldVector has been closed.
Author: Bryan Cutler <cutlerb@gmail.com>
Closesapache#898 from BryanCutler/java-vectorSchemaRoot-close-twice-ARROW-1283 and squashes the following commits:
2921d84 [Bryan Cutler] removed resolved comment
3b3718b [Bryan Cutler] Merge remote-tracking branch 'upstream/master' into java-vectorSchemaRoot-close-twice-ARROW-1283
e992fc7 [Bryan Cutler] BaseDataValueVector.close will now just clear, which releases previous and assigns an empty buffer
8ecfce2 [Bryan Cutler] Merge remote-tracking branch 'upstream/master' into java-vectorSchemaRoot-close-twice-ARROW-1283
ca38d3d [Bryan Cutler] use clear to release data, ensure that an empty buffer is never allocated again after closing
10ff7c3 [Bryan Cutler] Added regression test
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@BryanCutler@wesm@siddharthteotia@jacques-n@elahrvivaz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

ARROW-1283: [JAVA] Allow VectorSchemaRoot to close more than once - #898

Closed
BryanCutler wants to merge 6 commits into
apache:masterfrom
BryanCutler:java-vectorSchemaRoot-close-twice-ARROW-1283
Closed

ARROW-1283: [JAVA] Allow VectorSchemaRoot to close more than once#898
BryanCutler wants to merge 6 commits into
apache:masterfrom
BryanCutler:java-vectorSchemaRoot-close-twice-ARROW-1283

Conversation

@BryanCutler

Copy link
Copy Markdown
Member

This change allows the VectorSchemaRoot/FieldVectors to close more than once, even if the allocator has already been closed. Before, an empty ArrowBuf was created during closing which required the allocator to not be closed, however this empty buffer is not needed once the FieldVector has been closed.

@BryanCutler

Copy link
Copy Markdown
MemberAuthor

cc @julienledem@elahrvivaz

@elahrvivazelahrvivaz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me

@wesm

wesm commented Jul 28, 2017

Copy link
Copy Markdown
Member

@jacques-n@StevenMPhillips@siddharthteotia do you see any issues with this?

@siddharthteotia

Copy link
Copy Markdown
Contributor

@BryanCutler

I would like to know why is there a need to close a vector twice. The current change is structured such that following works and the last statement doesn't raise an error.

vector.close()
allocator.close()
vector.close()

Once close() operation is invoked on the vector and allocator, I expect the resources associated to be garbage collected properly. Under what conditions, do we still the 3rd statement?

Thanks,
Siddharth

data = null;
}
super.close();
data = null;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer doing this change differently. Maybe by allowing allocator to return an empty buffer even if closed. This is because it makes bugs/issues much easier to understand than getting an NPE.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, that sounds fine. As far as I can this would not cause any issues.

@BryanCutler

BryanCutler commented Jul 31, 2017

Copy link
Copy Markdown
MemberAuthor

I would like to know why is there a need to close a vector twice.

@siddharthteotia , this came from a discussion in Spark here. The root/allocator are being used in an iterator and are closed normally after the last iteration, however there are some ways this wouldn't happen (say if a task was cancelled), so they are also closed in a callback to prevent any leaks. Right now an extra flag is being used, which is fine but it would be cleaner to just allow them to call close a second time and not do anything.

}

private ArrowBuf createEmpty() {
assertOpen();

@BryanCutlerBryanCutlerAug 1, 2017

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this did not seem necessary either, because an allocator will always hold an instance of an empty buffer. Does this seem ok?

@BryanCutler

BryanCutler commented Aug 1, 2017

Copy link
Copy Markdown
MemberAuthor

@jacques-n , I made the change to use an empty buffer instead of assigning null. This essentially made close() the same as clear() and could be removed. Now in the super class BaseValueVector.close() will invoke clear() to release any buffer and assign data to an empty buffer.

It also seems to me that all Nullable vector would now have a close() method that is identical to clear(). Is that maybe something to remove and cleanup here also? Should there be any different meaning to closing vs. clearing a vector?

@BryanCutler
BryanCutlerforce-pushed the java-vectorSchemaRoot-close-twice-ARROW-1283 branch from 9dd1f07 to 2921d84CompareAugust 3, 2017 18:23
}

// TODO: Nullable vectors extend BaseDataValueVector but do not use the data field
// We should fix the inheritance tree

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@siddharthteotia I believe you resolved this comment in #892. Does this PR look ok to you?

@wesm

wesm commented Aug 4, 2017

Copy link
Copy Markdown
Member

The CI failure is unrelated to these changes. Can this be merged?

wesm
wesm approved these changes Aug 7, 2017

@wesmwesm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

@asfgitasfgit closed this in f9d9833Aug 7, 2017
@BryanCutler

Copy link
Copy Markdown
MemberAuthor

Thanks @wesm!

@BryanCutler
BryanCutler deleted the java-vectorSchemaRoot-close-twice-ARROW-1283 branch November 7, 2017 23:50
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
This change allows the VectorSchemaRoot/FieldVectors to close more than once, even if the allocator has already been closed. Before, an empty ArrowBuf was created during closing which required the allocator to not be closed, however this empty buffer is not needed once the FieldVector has been closed.
Author: Bryan Cutler <cutlerb@gmail.com>
Closesapache#898 from BryanCutler/java-vectorSchemaRoot-close-twice-ARROW-1283 and squashes the following commits:
2921d84 [Bryan Cutler] removed resolved comment
3b3718b [Bryan Cutler] Merge remote-tracking branch 'upstream/master' into java-vectorSchemaRoot-close-twice-ARROW-1283
e992fc7 [Bryan Cutler] BaseDataValueVector.close will now just clear, which releases previous and assigns an empty buffer
8ecfce2 [Bryan Cutler] Merge remote-tracking branch 'upstream/master' into java-vectorSchemaRoot-close-twice-ARROW-1283
ca38d3d [Bryan Cutler] use clear to release data, ensure that an empty buffer is never allocated again after closing
10ff7c3 [Bryan Cutler] Added regression test
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@BryanCutler@wesm@siddharthteotia@jacques-n@elahrvivaz
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

ARROW-1283: [JAVA] Allow VectorSchemaRoot to close more than once - #898

Closed
BryanCutler wants to merge 6 commits into
apache:masterfrom
BryanCutler:java-vectorSchemaRoot-close-twice-ARROW-1283
Closed

ARROW-1283: [JAVA] Allow VectorSchemaRoot to close more than once#898
BryanCutler wants to merge 6 commits into
apache:masterfrom
BryanCutler:java-vectorSchemaRoot-close-twice-ARROW-1283

Conversation

@BryanCutler

Copy link
Copy Markdown
Member

This change allows the VectorSchemaRoot/FieldVectors to close more than once, even if the allocator has already been closed. Before, an empty ArrowBuf was created during closing which required the allocator to not be closed, however this empty buffer is not needed once the FieldVector has been closed.

@BryanCutler

Copy link
Copy Markdown
MemberAuthor

cc @julienledem@elahrvivaz

@elahrvivazelahrvivaz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me

@wesm

wesm commented Jul 28, 2017

Copy link
Copy Markdown
Member

@jacques-n@StevenMPhillips@siddharthteotia do you see any issues with this?

@siddharthteotia

Copy link
Copy Markdown
Contributor

@BryanCutler

I would like to know why is there a need to close a vector twice. The current change is structured such that following works and the last statement doesn't raise an error.

vector.close()
allocator.close()
vector.close()

Once close() operation is invoked on the vector and allocator, I expect the resources associated to be garbage collected properly. Under what conditions, do we still the 3rd statement?

Thanks,
Siddharth

data = null;
}
super.close();
data = null;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would prefer doing this change differently. Maybe by allowing allocator to return an empty buffer even if closed. This is because it makes bugs/issues much easier to understand than getting an NPE.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, that sounds fine. As far as I can this would not cause any issues.

@BryanCutler

BryanCutler commented Jul 31, 2017

Copy link
Copy Markdown
MemberAuthor

I would like to know why is there a need to close a vector twice.

@siddharthteotia , this came from a discussion in Spark here. The root/allocator are being used in an iterator and are closed normally after the last iteration, however there are some ways this wouldn't happen (say if a task was cancelled), so they are also closed in a callback to prevent any leaks. Right now an extra flag is being used, which is fine but it would be cleaner to just allow them to call close a second time and not do anything.

}

private ArrowBuf createEmpty() {
assertOpen();

@BryanCutlerBryanCutlerAug 1, 2017

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this did not seem necessary either, because an allocator will always hold an instance of an empty buffer. Does this seem ok?

@BryanCutler

BryanCutler commented Aug 1, 2017

Copy link
Copy Markdown
MemberAuthor

@jacques-n , I made the change to use an empty buffer instead of assigning null. This essentially made close() the same as clear() and could be removed. Now in the super class BaseValueVector.close() will invoke clear() to release any buffer and assign data to an empty buffer.

It also seems to me that all Nullable vector would now have a close() method that is identical to clear(). Is that maybe something to remove and cleanup here also? Should there be any different meaning to closing vs. clearing a vector?

@BryanCutler
BryanCutlerforce-pushed the java-vectorSchemaRoot-close-twice-ARROW-1283 branch from 9dd1f07 to 2921d84CompareAugust 3, 2017 18:23
}

// TODO: Nullable vectors extend BaseDataValueVector but do not use the data field
// We should fix the inheritance tree

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@siddharthteotia I believe you resolved this comment in #892. Does this PR look ok to you?

@wesm

wesm commented Aug 4, 2017

Copy link
Copy Markdown
Member

The CI failure is unrelated to these changes. Can this be merged?

wesm
wesm approved these changes Aug 7, 2017

@wesmwesm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1

@asfgitasfgit closed this in f9d9833Aug 7, 2017
@BryanCutler

Copy link
Copy Markdown
MemberAuthor

Thanks @wesm!

@BryanCutler
BryanCutler deleted the java-vectorSchemaRoot-close-twice-ARROW-1283 branch November 7, 2017 23:50
pribor pushed a commit to GlobalWebIndex/arrow that referenced this pull request Oct 24, 2025
This change allows the VectorSchemaRoot/FieldVectors to close more than once, even if the allocator has already been closed. Before, an empty ArrowBuf was created during closing which required the allocator to not be closed, however this empty buffer is not needed once the FieldVector has been closed.
Author: Bryan Cutler <cutlerb@gmail.com>
Closesapache#898 from BryanCutler/java-vectorSchemaRoot-close-twice-ARROW-1283 and squashes the following commits:
2921d84 [Bryan Cutler] removed resolved comment
3b3718b [Bryan Cutler] Merge remote-tracking branch 'upstream/master' into java-vectorSchemaRoot-close-twice-ARROW-1283
e992fc7 [Bryan Cutler] BaseDataValueVector.close will now just clear, which releases previous and assigns an empty buffer
8ecfce2 [Bryan Cutler] Merge remote-tracking branch 'upstream/master' into java-vectorSchemaRoot-close-twice-ARROW-1283
ca38d3d [Bryan Cutler] use clear to release data, ensure that an empty buffer is never allocated again after closing
10ff7c3 [Bryan Cutler] Added regression test
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@BryanCutler@wesm@siddharthteotia@jacques-n@elahrvivaz