ARROW-12161: [C++][Dataset] Revert async CSV reader in datasets - #10019

Closed
westonpace wants to merge 5 commits into
apache:masterfrom
westonpace:feature/revert-arrow-12161
Closed

ARROW-12161: [C++][Dataset] Revert async CSV reader in datasets#10019
westonpace wants to merge 5 commits into
apache:masterfrom
westonpace:feature/revert-arrow-12161

Conversation

@westonpace

Copy link
Copy Markdown
Member

Reverts the streaming CSV reader and the async workaround introduced for it. It will be reintroduced, more cleanly, in ARROW-12355

@westonpace

Copy link
Copy Markdown
MemberAuthor

CC @lidavidm Sorry, I hadn't realized you were also working on this. This revert is a bit more extensive than yours as it removes some stuff that was put in just to get the async streaming reader working.

@lidavidmlidavidm 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.

Thanks @westonpace. Unfortunately CI will likely take a while but I'll circle back and merge this tonight.

@lidavidm

lidavidm commented Apr 13, 2021

Copy link
Copy Markdown
Member

I kicked AppVeyor as the Windows arrow-dataset-file-csv-test failed seemingly without explanation: https://ci.appveyor.com/project/ApacheSoftwareFoundation/arrow/builds/38687464/job/pth19ssutpbagn0s

but it may very well be a Windows-only issue (the test does pass locally for me on Linux)

@westonpace

Copy link
Copy Markdown
MemberAuthor

@lidavidm It does indeed seem to be a Windows only issue. Local builds failed twice for me so I'm currently building on my laptop to investigate.

@westonpace
westonpaceforce-pushed the feature/revert-arrow-12161 branch from 303fa2b to be19df4CompareApril 13, 2021 23:47
@westonpace

Copy link
Copy Markdown
MemberAuthor

Ok, after getting lost in the weeds for a while I was able to confirm that this is very much related to ARROW-12220. Some fun facts...

  • Since threading has been removed the teardown is a lot more deterministic so we get the error 100% of the time
  • It only happens on the Windows build that has mimalloc turned on
  • The reason there are no logs is because the failure is not a segmentation fault but a mimalloc assertion
  • The assertion happens as the background generator is being destroyed (I verified this with the debugger and this is pretty concrete evidence)

Unfortunately, merging in ARROW-12220 did not fix the issue. So...more debugging and I was able to discover...

microsoft/mimalloc#363

It is triggered by a thread exit. The serial thread readers use a dedicated thread that is destroyed when the reader finishes. That thread must have done a huge allocation. Huge is defined as "larger than 1<<21". The test in question that triggers this uses a block size of 1<<22

So, I can workaround it by changing the block_size in the test. We could conceivably limit the block size for users. I'm not fully aware of all the places we destroy threads (there aren't many so we can maybe get away with it). We may want to reconsider mimalloc 2.0 until this is fixed.

@westonpace

Copy link
Copy Markdown
MemberAuthor

@nealrichardson@jonkeane Tagging the mimalloc crowd.

@westonpace

Copy link
Copy Markdown
MemberAuthor

Just to be clear, ARROW-12220 is still a separate and valid bug. I'm not implying that ARROW-12220 is a fault of mimalloc. I started writing the first half of this message assuming ARROW-12220 was the fix and then probably should've rewritten or just removed that part.

@westonpace

Copy link
Copy Markdown
MemberAuthor

And for the last confirmation I modified the test to use a smaller block size and the test passes: https://github.com/westonpace/arrow/runs/2339553058?check_suite_focus=true

@github-actions

Copy link
Copy Markdown

lidavidm added a commit that referenced this pull request Apr 14, 2021
This reverts commit 8780ca4 in order to avoid microsoft/mimalloc#363 as discovered in #10019.
Closes#10024 from lidavidm/arrow-11475
Authored-by: David Li <li.davidm96@gmail.com>
Signed-off-by: David Li <li.davidm96@gmail.com>
@lidavidm

Copy link
Copy Markdown
Member

@westonpace would you like to rebase this and check that Windows tests pass now that we've reverted mimalloc?

@westonpace
westonpaceforce-pushed the feature/revert-arrow-12161 branch from 326f062 to 2f55217CompareApril 14, 2021 20:15
@westonpace

Copy link
Copy Markdown
MemberAuthor

Rebased. I'll watch local CI.

@westonpace

Copy link
Copy Markdown
MemberAuthor

Appveyor & local Windows 2019 builds pass so that is promising.

@lidavidm

Copy link
Copy Markdown
Member

I'll give CI some more time but I'll merge this tonight and then rebase ARROW-11797. I've speculatively rebased the latter onto this branch at: https://github.com/lidavidm/arrow/tree/arrow-11797 so we can catch anything in CI; hopefully we'll have this all merged tonight or early tomorrow.

@lidavidm

Copy link
Copy Markdown
Member

Actually, it looks like between your fork's CI and AppVeyor here, all the relevant (C++, Python, R, etc.) CI jobs look good to go, with only Travis being queued.

@lidavidm

Copy link
Copy Markdown
Member

Ok, I don't think the Travis queue is clearing anytime soon. https://github.com/lidavidm/arrow/tree/arrow-11797 which is this + ARROW-11797 passes Actions/Travis/AppVeyor, so I'll merge this and rebase 11797.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@westonpace@lidavidm
, '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-12161: [C++][Dataset] Revert async CSV reader in datasets - #10019

Closed
westonpace wants to merge 5 commits into
apache:masterfrom
westonpace:feature/revert-arrow-12161
Closed

ARROW-12161: [C++][Dataset] Revert async CSV reader in datasets#10019
westonpace wants to merge 5 commits into
apache:masterfrom
westonpace:feature/revert-arrow-12161

Conversation

@westonpace

Copy link
Copy Markdown
Member

Reverts the streaming CSV reader and the async workaround introduced for it. It will be reintroduced, more cleanly, in ARROW-12355

@westonpace

Copy link
Copy Markdown
MemberAuthor

CC @lidavidm Sorry, I hadn't realized you were also working on this. This revert is a bit more extensive than yours as it removes some stuff that was put in just to get the async streaming reader working.

@lidavidmlidavidm 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.

Thanks @westonpace. Unfortunately CI will likely take a while but I'll circle back and merge this tonight.

@lidavidm

lidavidm commented Apr 13, 2021

Copy link
Copy Markdown
Member

I kicked AppVeyor as the Windows arrow-dataset-file-csv-test failed seemingly without explanation: https://ci.appveyor.com/project/ApacheSoftwareFoundation/arrow/builds/38687464/job/pth19ssutpbagn0s

but it may very well be a Windows-only issue (the test does pass locally for me on Linux)

@westonpace

Copy link
Copy Markdown
MemberAuthor

@lidavidm It does indeed seem to be a Windows only issue. Local builds failed twice for me so I'm currently building on my laptop to investigate.

@westonpace
westonpaceforce-pushed the feature/revert-arrow-12161 branch from 303fa2b to be19df4CompareApril 13, 2021 23:47
@westonpace

Copy link
Copy Markdown
MemberAuthor

Ok, after getting lost in the weeds for a while I was able to confirm that this is very much related to ARROW-12220. Some fun facts...

  • Since threading has been removed the teardown is a lot more deterministic so we get the error 100% of the time
  • It only happens on the Windows build that has mimalloc turned on
  • The reason there are no logs is because the failure is not a segmentation fault but a mimalloc assertion
  • The assertion happens as the background generator is being destroyed (I verified this with the debugger and this is pretty concrete evidence)

Unfortunately, merging in ARROW-12220 did not fix the issue. So...more debugging and I was able to discover...

microsoft/mimalloc#363

It is triggered by a thread exit. The serial thread readers use a dedicated thread that is destroyed when the reader finishes. That thread must have done a huge allocation. Huge is defined as "larger than 1<<21". The test in question that triggers this uses a block size of 1<<22

So, I can workaround it by changing the block_size in the test. We could conceivably limit the block size for users. I'm not fully aware of all the places we destroy threads (there aren't many so we can maybe get away with it). We may want to reconsider mimalloc 2.0 until this is fixed.

@westonpace

Copy link
Copy Markdown
MemberAuthor

@nealrichardson@jonkeane Tagging the mimalloc crowd.

@westonpace

Copy link
Copy Markdown
MemberAuthor

Just to be clear, ARROW-12220 is still a separate and valid bug. I'm not implying that ARROW-12220 is a fault of mimalloc. I started writing the first half of this message assuming ARROW-12220 was the fix and then probably should've rewritten or just removed that part.

@westonpace

Copy link
Copy Markdown
MemberAuthor

And for the last confirmation I modified the test to use a smaller block size and the test passes: https://github.com/westonpace/arrow/runs/2339553058?check_suite_focus=true

@github-actions

Copy link
Copy Markdown

lidavidm added a commit that referenced this pull request Apr 14, 2021
This reverts commit 8780ca4 in order to avoid microsoft/mimalloc#363 as discovered in #10019.
Closes#10024 from lidavidm/arrow-11475
Authored-by: David Li <li.davidm96@gmail.com>
Signed-off-by: David Li <li.davidm96@gmail.com>
@lidavidm

Copy link
Copy Markdown
Member

@westonpace would you like to rebase this and check that Windows tests pass now that we've reverted mimalloc?

@westonpace
westonpaceforce-pushed the feature/revert-arrow-12161 branch from 326f062 to 2f55217CompareApril 14, 2021 20:15
@westonpace

Copy link
Copy Markdown
MemberAuthor

Rebased. I'll watch local CI.

@westonpace

Copy link
Copy Markdown
MemberAuthor

Appveyor & local Windows 2019 builds pass so that is promising.

@lidavidm

Copy link
Copy Markdown
Member

I'll give CI some more time but I'll merge this tonight and then rebase ARROW-11797. I've speculatively rebased the latter onto this branch at: https://github.com/lidavidm/arrow/tree/arrow-11797 so we can catch anything in CI; hopefully we'll have this all merged tonight or early tomorrow.

@lidavidm

Copy link
Copy Markdown
Member

Actually, it looks like between your fork's CI and AppVeyor here, all the relevant (C++, Python, R, etc.) CI jobs look good to go, with only Travis being queued.

@lidavidm

Copy link
Copy Markdown
Member

Ok, I don't think the Travis queue is clearing anytime soon. https://github.com/lidavidm/arrow/tree/arrow-11797 which is this + ARROW-11797 passes Actions/Travis/AppVeyor, so I'll merge this and rebase 11797.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@westonpace@lidavidm
, '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-12161: [C++][Dataset] Revert async CSV reader in datasets - #10019

Closed
westonpace wants to merge 5 commits into
apache:masterfrom
westonpace:feature/revert-arrow-12161
Closed

ARROW-12161: [C++][Dataset] Revert async CSV reader in datasets#10019
westonpace wants to merge 5 commits into
apache:masterfrom
westonpace:feature/revert-arrow-12161

Conversation

@westonpace

Copy link
Copy Markdown
Member

Reverts the streaming CSV reader and the async workaround introduced for it. It will be reintroduced, more cleanly, in ARROW-12355

@westonpace

Copy link
Copy Markdown
MemberAuthor

CC @lidavidm Sorry, I hadn't realized you were also working on this. This revert is a bit more extensive than yours as it removes some stuff that was put in just to get the async streaming reader working.

@lidavidmlidavidm 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.

Thanks @westonpace. Unfortunately CI will likely take a while but I'll circle back and merge this tonight.

@lidavidm

lidavidm commented Apr 13, 2021

Copy link
Copy Markdown
Member

I kicked AppVeyor as the Windows arrow-dataset-file-csv-test failed seemingly without explanation: https://ci.appveyor.com/project/ApacheSoftwareFoundation/arrow/builds/38687464/job/pth19ssutpbagn0s

but it may very well be a Windows-only issue (the test does pass locally for me on Linux)

@westonpace

Copy link
Copy Markdown
MemberAuthor

@lidavidm It does indeed seem to be a Windows only issue. Local builds failed twice for me so I'm currently building on my laptop to investigate.

@westonpace
westonpaceforce-pushed the feature/revert-arrow-12161 branch from 303fa2b to be19df4CompareApril 13, 2021 23:47
@westonpace

Copy link
Copy Markdown
MemberAuthor

Ok, after getting lost in the weeds for a while I was able to confirm that this is very much related to ARROW-12220. Some fun facts...

  • Since threading has been removed the teardown is a lot more deterministic so we get the error 100% of the time
  • It only happens on the Windows build that has mimalloc turned on
  • The reason there are no logs is because the failure is not a segmentation fault but a mimalloc assertion
  • The assertion happens as the background generator is being destroyed (I verified this with the debugger and this is pretty concrete evidence)

Unfortunately, merging in ARROW-12220 did not fix the issue. So...more debugging and I was able to discover...

microsoft/mimalloc#363

It is triggered by a thread exit. The serial thread readers use a dedicated thread that is destroyed when the reader finishes. That thread must have done a huge allocation. Huge is defined as "larger than 1<<21". The test in question that triggers this uses a block size of 1<<22

So, I can workaround it by changing the block_size in the test. We could conceivably limit the block size for users. I'm not fully aware of all the places we destroy threads (there aren't many so we can maybe get away with it). We may want to reconsider mimalloc 2.0 until this is fixed.

@westonpace

Copy link
Copy Markdown
MemberAuthor

@nealrichardson@jonkeane Tagging the mimalloc crowd.

@westonpace

Copy link
Copy Markdown
MemberAuthor

Just to be clear, ARROW-12220 is still a separate and valid bug. I'm not implying that ARROW-12220 is a fault of mimalloc. I started writing the first half of this message assuming ARROW-12220 was the fix and then probably should've rewritten or just removed that part.

@westonpace

Copy link
Copy Markdown
MemberAuthor

And for the last confirmation I modified the test to use a smaller block size and the test passes: https://github.com/westonpace/arrow/runs/2339553058?check_suite_focus=true

@github-actions

Copy link
Copy Markdown

lidavidm added a commit that referenced this pull request Apr 14, 2021
This reverts commit 8780ca4 in order to avoid microsoft/mimalloc#363 as discovered in #10019.
Closes#10024 from lidavidm/arrow-11475
Authored-by: David Li <li.davidm96@gmail.com>
Signed-off-by: David Li <li.davidm96@gmail.com>
@lidavidm

Copy link
Copy Markdown
Member

@westonpace would you like to rebase this and check that Windows tests pass now that we've reverted mimalloc?

@westonpace
westonpaceforce-pushed the feature/revert-arrow-12161 branch from 326f062 to 2f55217CompareApril 14, 2021 20:15
@westonpace

Copy link
Copy Markdown
MemberAuthor

Rebased. I'll watch local CI.

@westonpace

Copy link
Copy Markdown
MemberAuthor

Appveyor & local Windows 2019 builds pass so that is promising.

@lidavidm

Copy link
Copy Markdown
Member

I'll give CI some more time but I'll merge this tonight and then rebase ARROW-11797. I've speculatively rebased the latter onto this branch at: https://github.com/lidavidm/arrow/tree/arrow-11797 so we can catch anything in CI; hopefully we'll have this all merged tonight or early tomorrow.

@lidavidm

Copy link
Copy Markdown
Member

Actually, it looks like between your fork's CI and AppVeyor here, all the relevant (C++, Python, R, etc.) CI jobs look good to go, with only Travis being queued.

@lidavidm

Copy link
Copy Markdown
Member

Ok, I don't think the Travis queue is clearing anytime soon. https://github.com/lidavidm/arrow/tree/arrow-11797 which is this + ARROW-11797 passes Actions/Travis/AppVeyor, so I'll merge this and rebase 11797.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@westonpace@lidavidm
, '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-12161: [C++][Dataset] Revert async CSV reader in datasets - #10019

Closed
westonpace wants to merge 5 commits into
apache:masterfrom
westonpace:feature/revert-arrow-12161
Closed

ARROW-12161: [C++][Dataset] Revert async CSV reader in datasets#10019
westonpace wants to merge 5 commits into
apache:masterfrom
westonpace:feature/revert-arrow-12161

Conversation

@westonpace

Copy link
Copy Markdown
Member

Reverts the streaming CSV reader and the async workaround introduced for it. It will be reintroduced, more cleanly, in ARROW-12355

@westonpace

Copy link
Copy Markdown
MemberAuthor

CC @lidavidm Sorry, I hadn't realized you were also working on this. This revert is a bit more extensive than yours as it removes some stuff that was put in just to get the async streaming reader working.

@lidavidmlidavidm 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.

Thanks @westonpace. Unfortunately CI will likely take a while but I'll circle back and merge this tonight.

@lidavidm

lidavidm commented Apr 13, 2021

Copy link
Copy Markdown
Member

I kicked AppVeyor as the Windows arrow-dataset-file-csv-test failed seemingly without explanation: https://ci.appveyor.com/project/ApacheSoftwareFoundation/arrow/builds/38687464/job/pth19ssutpbagn0s

but it may very well be a Windows-only issue (the test does pass locally for me on Linux)

@westonpace

Copy link
Copy Markdown
MemberAuthor

@lidavidm It does indeed seem to be a Windows only issue. Local builds failed twice for me so I'm currently building on my laptop to investigate.

@westonpace
westonpaceforce-pushed the feature/revert-arrow-12161 branch from 303fa2b to be19df4CompareApril 13, 2021 23:47
@westonpace

Copy link
Copy Markdown
MemberAuthor

Ok, after getting lost in the weeds for a while I was able to confirm that this is very much related to ARROW-12220. Some fun facts...

  • Since threading has been removed the teardown is a lot more deterministic so we get the error 100% of the time
  • It only happens on the Windows build that has mimalloc turned on
  • The reason there are no logs is because the failure is not a segmentation fault but a mimalloc assertion
  • The assertion happens as the background generator is being destroyed (I verified this with the debugger and this is pretty concrete evidence)

Unfortunately, merging in ARROW-12220 did not fix the issue. So...more debugging and I was able to discover...

microsoft/mimalloc#363

It is triggered by a thread exit. The serial thread readers use a dedicated thread that is destroyed when the reader finishes. That thread must have done a huge allocation. Huge is defined as "larger than 1<<21". The test in question that triggers this uses a block size of 1<<22

So, I can workaround it by changing the block_size in the test. We could conceivably limit the block size for users. I'm not fully aware of all the places we destroy threads (there aren't many so we can maybe get away with it). We may want to reconsider mimalloc 2.0 until this is fixed.

@westonpace

Copy link
Copy Markdown
MemberAuthor

@nealrichardson@jonkeane Tagging the mimalloc crowd.

@westonpace

Copy link
Copy Markdown
MemberAuthor

Just to be clear, ARROW-12220 is still a separate and valid bug. I'm not implying that ARROW-12220 is a fault of mimalloc. I started writing the first half of this message assuming ARROW-12220 was the fix and then probably should've rewritten or just removed that part.

@westonpace

Copy link
Copy Markdown
MemberAuthor

And for the last confirmation I modified the test to use a smaller block size and the test passes: https://github.com/westonpace/arrow/runs/2339553058?check_suite_focus=true

@github-actions

Copy link
Copy Markdown

lidavidm added a commit that referenced this pull request Apr 14, 2021
This reverts commit 8780ca4 in order to avoid microsoft/mimalloc#363 as discovered in #10019.
Closes#10024 from lidavidm/arrow-11475
Authored-by: David Li <li.davidm96@gmail.com>
Signed-off-by: David Li <li.davidm96@gmail.com>
@lidavidm

Copy link
Copy Markdown
Member

@westonpace would you like to rebase this and check that Windows tests pass now that we've reverted mimalloc?

@westonpace
westonpaceforce-pushed the feature/revert-arrow-12161 branch from 326f062 to 2f55217CompareApril 14, 2021 20:15
@westonpace

Copy link
Copy Markdown
MemberAuthor

Rebased. I'll watch local CI.

@westonpace

Copy link
Copy Markdown
MemberAuthor

Appveyor & local Windows 2019 builds pass so that is promising.

@lidavidm

Copy link
Copy Markdown
Member

I'll give CI some more time but I'll merge this tonight and then rebase ARROW-11797. I've speculatively rebased the latter onto this branch at: https://github.com/lidavidm/arrow/tree/arrow-11797 so we can catch anything in CI; hopefully we'll have this all merged tonight or early tomorrow.

@lidavidm

Copy link
Copy Markdown
Member

Actually, it looks like between your fork's CI and AppVeyor here, all the relevant (C++, Python, R, etc.) CI jobs look good to go, with only Travis being queued.

@lidavidm

Copy link
Copy Markdown
Member

Ok, I don't think the Travis queue is clearing anytime soon. https://github.com/lidavidm/arrow/tree/arrow-11797 which is this + ARROW-11797 passes Actions/Travis/AppVeyor, so I'll merge this and rebase 11797.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@westonpace@lidavidm
, '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-12161: [C++][Dataset] Revert async CSV reader in datasets - #10019

Closed
westonpace wants to merge 5 commits into
apache:masterfrom
westonpace:feature/revert-arrow-12161
Closed

ARROW-12161: [C++][Dataset] Revert async CSV reader in datasets#10019
westonpace wants to merge 5 commits into
apache:masterfrom
westonpace:feature/revert-arrow-12161

Conversation

@westonpace

Copy link
Copy Markdown
Member

Reverts the streaming CSV reader and the async workaround introduced for it. It will be reintroduced, more cleanly, in ARROW-12355

@westonpace

Copy link
Copy Markdown
MemberAuthor

CC @lidavidm Sorry, I hadn't realized you were also working on this. This revert is a bit more extensive than yours as it removes some stuff that was put in just to get the async streaming reader working.

@lidavidmlidavidm 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.

Thanks @westonpace. Unfortunately CI will likely take a while but I'll circle back and merge this tonight.

@lidavidm

lidavidm commented Apr 13, 2021

Copy link
Copy Markdown
Member

I kicked AppVeyor as the Windows arrow-dataset-file-csv-test failed seemingly without explanation: https://ci.appveyor.com/project/ApacheSoftwareFoundation/arrow/builds/38687464/job/pth19ssutpbagn0s

but it may very well be a Windows-only issue (the test does pass locally for me on Linux)

@westonpace

Copy link
Copy Markdown
MemberAuthor

@lidavidm It does indeed seem to be a Windows only issue. Local builds failed twice for me so I'm currently building on my laptop to investigate.

@westonpace
westonpaceforce-pushed the feature/revert-arrow-12161 branch from 303fa2b to be19df4CompareApril 13, 2021 23:47
@westonpace

Copy link
Copy Markdown
MemberAuthor

Ok, after getting lost in the weeds for a while I was able to confirm that this is very much related to ARROW-12220. Some fun facts...

  • Since threading has been removed the teardown is a lot more deterministic so we get the error 100% of the time
  • It only happens on the Windows build that has mimalloc turned on
  • The reason there are no logs is because the failure is not a segmentation fault but a mimalloc assertion
  • The assertion happens as the background generator is being destroyed (I verified this with the debugger and this is pretty concrete evidence)

Unfortunately, merging in ARROW-12220 did not fix the issue. So...more debugging and I was able to discover...

microsoft/mimalloc#363

It is triggered by a thread exit. The serial thread readers use a dedicated thread that is destroyed when the reader finishes. That thread must have done a huge allocation. Huge is defined as "larger than 1<<21". The test in question that triggers this uses a block size of 1<<22

So, I can workaround it by changing the block_size in the test. We could conceivably limit the block size for users. I'm not fully aware of all the places we destroy threads (there aren't many so we can maybe get away with it). We may want to reconsider mimalloc 2.0 until this is fixed.

@westonpace

Copy link
Copy Markdown
MemberAuthor

@nealrichardson@jonkeane Tagging the mimalloc crowd.

@westonpace

Copy link
Copy Markdown
MemberAuthor

Just to be clear, ARROW-12220 is still a separate and valid bug. I'm not implying that ARROW-12220 is a fault of mimalloc. I started writing the first half of this message assuming ARROW-12220 was the fix and then probably should've rewritten or just removed that part.

@westonpace

Copy link
Copy Markdown
MemberAuthor

And for the last confirmation I modified the test to use a smaller block size and the test passes: https://github.com/westonpace/arrow/runs/2339553058?check_suite_focus=true

@github-actions

Copy link
Copy Markdown

lidavidm added a commit that referenced this pull request Apr 14, 2021
This reverts commit 8780ca4 in order to avoid microsoft/mimalloc#363 as discovered in #10019.
Closes#10024 from lidavidm/arrow-11475
Authored-by: David Li <li.davidm96@gmail.com>
Signed-off-by: David Li <li.davidm96@gmail.com>
@lidavidm

Copy link
Copy Markdown
Member

@westonpace would you like to rebase this and check that Windows tests pass now that we've reverted mimalloc?

@westonpace
westonpaceforce-pushed the feature/revert-arrow-12161 branch from 326f062 to 2f55217CompareApril 14, 2021 20:15
@westonpace

Copy link
Copy Markdown
MemberAuthor

Rebased. I'll watch local CI.

@westonpace

Copy link
Copy Markdown
MemberAuthor

Appveyor & local Windows 2019 builds pass so that is promising.

@lidavidm

Copy link
Copy Markdown
Member

I'll give CI some more time but I'll merge this tonight and then rebase ARROW-11797. I've speculatively rebased the latter onto this branch at: https://github.com/lidavidm/arrow/tree/arrow-11797 so we can catch anything in CI; hopefully we'll have this all merged tonight or early tomorrow.

@lidavidm

Copy link
Copy Markdown
Member

Actually, it looks like between your fork's CI and AppVeyor here, all the relevant (C++, Python, R, etc.) CI jobs look good to go, with only Travis being queued.

@lidavidm

Copy link
Copy Markdown
Member

Ok, I don't think the Travis queue is clearing anytime soon. https://github.com/lidavidm/arrow/tree/arrow-11797 which is this + ARROW-11797 passes Actions/Travis/AppVeyor, so I'll merge this and rebase 11797.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@westonpace@lidavidm
, '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-12161: [C++][Dataset] Revert async CSV reader in datasets - #10019

Closed
westonpace wants to merge 5 commits into
apache:masterfrom
westonpace:feature/revert-arrow-12161
Closed

ARROW-12161: [C++][Dataset] Revert async CSV reader in datasets#10019
westonpace wants to merge 5 commits into
apache:masterfrom
westonpace:feature/revert-arrow-12161

Conversation

@westonpace

Copy link
Copy Markdown
Member

Reverts the streaming CSV reader and the async workaround introduced for it. It will be reintroduced, more cleanly, in ARROW-12355

@westonpace

Copy link
Copy Markdown
MemberAuthor

CC @lidavidm Sorry, I hadn't realized you were also working on this. This revert is a bit more extensive than yours as it removes some stuff that was put in just to get the async streaming reader working.

@lidavidmlidavidm 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.

Thanks @westonpace. Unfortunately CI will likely take a while but I'll circle back and merge this tonight.

@lidavidm

lidavidm commented Apr 13, 2021

Copy link
Copy Markdown
Member

I kicked AppVeyor as the Windows arrow-dataset-file-csv-test failed seemingly without explanation: https://ci.appveyor.com/project/ApacheSoftwareFoundation/arrow/builds/38687464/job/pth19ssutpbagn0s

but it may very well be a Windows-only issue (the test does pass locally for me on Linux)

@westonpace

Copy link
Copy Markdown
MemberAuthor

@lidavidm It does indeed seem to be a Windows only issue. Local builds failed twice for me so I'm currently building on my laptop to investigate.

@westonpace
westonpaceforce-pushed the feature/revert-arrow-12161 branch from 303fa2b to be19df4CompareApril 13, 2021 23:47
@westonpace

Copy link
Copy Markdown
MemberAuthor

Ok, after getting lost in the weeds for a while I was able to confirm that this is very much related to ARROW-12220. Some fun facts...

  • Since threading has been removed the teardown is a lot more deterministic so we get the error 100% of the time
  • It only happens on the Windows build that has mimalloc turned on
  • The reason there are no logs is because the failure is not a segmentation fault but a mimalloc assertion
  • The assertion happens as the background generator is being destroyed (I verified this with the debugger and this is pretty concrete evidence)

Unfortunately, merging in ARROW-12220 did not fix the issue. So...more debugging and I was able to discover...

microsoft/mimalloc#363

It is triggered by a thread exit. The serial thread readers use a dedicated thread that is destroyed when the reader finishes. That thread must have done a huge allocation. Huge is defined as "larger than 1<<21". The test in question that triggers this uses a block size of 1<<22

So, I can workaround it by changing the block_size in the test. We could conceivably limit the block size for users. I'm not fully aware of all the places we destroy threads (there aren't many so we can maybe get away with it). We may want to reconsider mimalloc 2.0 until this is fixed.

@westonpace

Copy link
Copy Markdown
MemberAuthor

@nealrichardson@jonkeane Tagging the mimalloc crowd.

@westonpace

Copy link
Copy Markdown
MemberAuthor

Just to be clear, ARROW-12220 is still a separate and valid bug. I'm not implying that ARROW-12220 is a fault of mimalloc. I started writing the first half of this message assuming ARROW-12220 was the fix and then probably should've rewritten or just removed that part.

@westonpace

Copy link
Copy Markdown
MemberAuthor

And for the last confirmation I modified the test to use a smaller block size and the test passes: https://github.com/westonpace/arrow/runs/2339553058?check_suite_focus=true

@github-actions

Copy link
Copy Markdown

lidavidm added a commit that referenced this pull request Apr 14, 2021
This reverts commit 8780ca4 in order to avoid microsoft/mimalloc#363 as discovered in #10019.
Closes#10024 from lidavidm/arrow-11475
Authored-by: David Li <li.davidm96@gmail.com>
Signed-off-by: David Li <li.davidm96@gmail.com>
@lidavidm

Copy link
Copy Markdown
Member

@westonpace would you like to rebase this and check that Windows tests pass now that we've reverted mimalloc?

@westonpace
westonpaceforce-pushed the feature/revert-arrow-12161 branch from 326f062 to 2f55217CompareApril 14, 2021 20:15
@westonpace

Copy link
Copy Markdown
MemberAuthor

Rebased. I'll watch local CI.

@westonpace

Copy link
Copy Markdown
MemberAuthor

Appveyor & local Windows 2019 builds pass so that is promising.

@lidavidm

Copy link
Copy Markdown
Member

I'll give CI some more time but I'll merge this tonight and then rebase ARROW-11797. I've speculatively rebased the latter onto this branch at: https://github.com/lidavidm/arrow/tree/arrow-11797 so we can catch anything in CI; hopefully we'll have this all merged tonight or early tomorrow.

@lidavidm

Copy link
Copy Markdown
Member

Actually, it looks like between your fork's CI and AppVeyor here, all the relevant (C++, Python, R, etc.) CI jobs look good to go, with only Travis being queued.

@lidavidm

Copy link
Copy Markdown
Member

Ok, I don't think the Travis queue is clearing anytime soon. https://github.com/lidavidm/arrow/tree/arrow-11797 which is this + ARROW-11797 passes Actions/Travis/AppVeyor, so I'll merge this and rebase 11797.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@westonpace@lidavidm
, '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-12161: [C++][Dataset] Revert async CSV reader in datasets - #10019

Closed
westonpace wants to merge 5 commits into
apache:masterfrom
westonpace:feature/revert-arrow-12161
Closed

ARROW-12161: [C++][Dataset] Revert async CSV reader in datasets#10019
westonpace wants to merge 5 commits into
apache:masterfrom
westonpace:feature/revert-arrow-12161

Conversation

@westonpace

Copy link
Copy Markdown
Member

Reverts the streaming CSV reader and the async workaround introduced for it. It will be reintroduced, more cleanly, in ARROW-12355

@westonpace

Copy link
Copy Markdown
MemberAuthor

CC @lidavidm Sorry, I hadn't realized you were also working on this. This revert is a bit more extensive than yours as it removes some stuff that was put in just to get the async streaming reader working.

@lidavidmlidavidm 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.

Thanks @westonpace. Unfortunately CI will likely take a while but I'll circle back and merge this tonight.

@lidavidm

lidavidm commented Apr 13, 2021

Copy link
Copy Markdown
Member

I kicked AppVeyor as the Windows arrow-dataset-file-csv-test failed seemingly without explanation: https://ci.appveyor.com/project/ApacheSoftwareFoundation/arrow/builds/38687464/job/pth19ssutpbagn0s

but it may very well be a Windows-only issue (the test does pass locally for me on Linux)

@westonpace

Copy link
Copy Markdown
MemberAuthor

@lidavidm It does indeed seem to be a Windows only issue. Local builds failed twice for me so I'm currently building on my laptop to investigate.

@westonpace
westonpaceforce-pushed the feature/revert-arrow-12161 branch from 303fa2b to be19df4CompareApril 13, 2021 23:47
@westonpace

Copy link
Copy Markdown
MemberAuthor

Ok, after getting lost in the weeds for a while I was able to confirm that this is very much related to ARROW-12220. Some fun facts...

  • Since threading has been removed the teardown is a lot more deterministic so we get the error 100% of the time
  • It only happens on the Windows build that has mimalloc turned on
  • The reason there are no logs is because the failure is not a segmentation fault but a mimalloc assertion
  • The assertion happens as the background generator is being destroyed (I verified this with the debugger and this is pretty concrete evidence)

Unfortunately, merging in ARROW-12220 did not fix the issue. So...more debugging and I was able to discover...

microsoft/mimalloc#363

It is triggered by a thread exit. The serial thread readers use a dedicated thread that is destroyed when the reader finishes. That thread must have done a huge allocation. Huge is defined as "larger than 1<<21". The test in question that triggers this uses a block size of 1<<22

So, I can workaround it by changing the block_size in the test. We could conceivably limit the block size for users. I'm not fully aware of all the places we destroy threads (there aren't many so we can maybe get away with it). We may want to reconsider mimalloc 2.0 until this is fixed.

@westonpace

Copy link
Copy Markdown
MemberAuthor

@nealrichardson@jonkeane Tagging the mimalloc crowd.

@westonpace

Copy link
Copy Markdown
MemberAuthor

Just to be clear, ARROW-12220 is still a separate and valid bug. I'm not implying that ARROW-12220 is a fault of mimalloc. I started writing the first half of this message assuming ARROW-12220 was the fix and then probably should've rewritten or just removed that part.

@westonpace

Copy link
Copy Markdown
MemberAuthor

And for the last confirmation I modified the test to use a smaller block size and the test passes: https://github.com/westonpace/arrow/runs/2339553058?check_suite_focus=true

@github-actions

Copy link
Copy Markdown

lidavidm added a commit that referenced this pull request Apr 14, 2021
This reverts commit 8780ca4 in order to avoid microsoft/mimalloc#363 as discovered in #10019.
Closes#10024 from lidavidm/arrow-11475
Authored-by: David Li <li.davidm96@gmail.com>
Signed-off-by: David Li <li.davidm96@gmail.com>
@lidavidm

Copy link
Copy Markdown
Member

@westonpace would you like to rebase this and check that Windows tests pass now that we've reverted mimalloc?

@westonpace
westonpaceforce-pushed the feature/revert-arrow-12161 branch from 326f062 to 2f55217CompareApril 14, 2021 20:15
@westonpace

Copy link
Copy Markdown
MemberAuthor

Rebased. I'll watch local CI.

@westonpace

Copy link
Copy Markdown
MemberAuthor

Appveyor & local Windows 2019 builds pass so that is promising.

@lidavidm

Copy link
Copy Markdown
Member

I'll give CI some more time but I'll merge this tonight and then rebase ARROW-11797. I've speculatively rebased the latter onto this branch at: https://github.com/lidavidm/arrow/tree/arrow-11797 so we can catch anything in CI; hopefully we'll have this all merged tonight or early tomorrow.

@lidavidm

Copy link
Copy Markdown
Member

Actually, it looks like between your fork's CI and AppVeyor here, all the relevant (C++, Python, R, etc.) CI jobs look good to go, with only Travis being queued.

@lidavidm

Copy link
Copy Markdown
Member

Ok, I don't think the Travis queue is clearing anytime soon. https://github.com/lidavidm/arrow/tree/arrow-11797 which is this + ARROW-11797 passes Actions/Travis/AppVeyor, so I'll merge this and rebase 11797.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@westonpace@lidavidm
, '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-12161: [C++][Dataset] Revert async CSV reader in datasets - #10019

Closed
westonpace wants to merge 5 commits into
apache:masterfrom
westonpace:feature/revert-arrow-12161
Closed

ARROW-12161: [C++][Dataset] Revert async CSV reader in datasets#10019
westonpace wants to merge 5 commits into
apache:masterfrom
westonpace:feature/revert-arrow-12161

Conversation

@westonpace

Copy link
Copy Markdown
Member

Reverts the streaming CSV reader and the async workaround introduced for it. It will be reintroduced, more cleanly, in ARROW-12355

@westonpace

Copy link
Copy Markdown
MemberAuthor

CC @lidavidm Sorry, I hadn't realized you were also working on this. This revert is a bit more extensive than yours as it removes some stuff that was put in just to get the async streaming reader working.

@lidavidmlidavidm 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.

Thanks @westonpace. Unfortunately CI will likely take a while but I'll circle back and merge this tonight.

@lidavidm

lidavidm commented Apr 13, 2021

Copy link
Copy Markdown
Member

I kicked AppVeyor as the Windows arrow-dataset-file-csv-test failed seemingly without explanation: https://ci.appveyor.com/project/ApacheSoftwareFoundation/arrow/builds/38687464/job/pth19ssutpbagn0s

but it may very well be a Windows-only issue (the test does pass locally for me on Linux)

@westonpace

Copy link
Copy Markdown
MemberAuthor

@lidavidm It does indeed seem to be a Windows only issue. Local builds failed twice for me so I'm currently building on my laptop to investigate.

@westonpace
westonpaceforce-pushed the feature/revert-arrow-12161 branch from 303fa2b to be19df4CompareApril 13, 2021 23:47
@westonpace

Copy link
Copy Markdown
MemberAuthor

Ok, after getting lost in the weeds for a while I was able to confirm that this is very much related to ARROW-12220. Some fun facts...

  • Since threading has been removed the teardown is a lot more deterministic so we get the error 100% of the time
  • It only happens on the Windows build that has mimalloc turned on
  • The reason there are no logs is because the failure is not a segmentation fault but a mimalloc assertion
  • The assertion happens as the background generator is being destroyed (I verified this with the debugger and this is pretty concrete evidence)

Unfortunately, merging in ARROW-12220 did not fix the issue. So...more debugging and I was able to discover...

microsoft/mimalloc#363

It is triggered by a thread exit. The serial thread readers use a dedicated thread that is destroyed when the reader finishes. That thread must have done a huge allocation. Huge is defined as "larger than 1<<21". The test in question that triggers this uses a block size of 1<<22

So, I can workaround it by changing the block_size in the test. We could conceivably limit the block size for users. I'm not fully aware of all the places we destroy threads (there aren't many so we can maybe get away with it). We may want to reconsider mimalloc 2.0 until this is fixed.

@westonpace

Copy link
Copy Markdown
MemberAuthor

@nealrichardson@jonkeane Tagging the mimalloc crowd.

@westonpace

Copy link
Copy Markdown
MemberAuthor

Just to be clear, ARROW-12220 is still a separate and valid bug. I'm not implying that ARROW-12220 is a fault of mimalloc. I started writing the first half of this message assuming ARROW-12220 was the fix and then probably should've rewritten or just removed that part.

@westonpace

Copy link
Copy Markdown
MemberAuthor

And for the last confirmation I modified the test to use a smaller block size and the test passes: https://github.com/westonpace/arrow/runs/2339553058?check_suite_focus=true

@github-actions

Copy link
Copy Markdown

lidavidm added a commit that referenced this pull request Apr 14, 2021
This reverts commit 8780ca4 in order to avoid microsoft/mimalloc#363 as discovered in #10019.
Closes#10024 from lidavidm/arrow-11475
Authored-by: David Li <li.davidm96@gmail.com>
Signed-off-by: David Li <li.davidm96@gmail.com>
@lidavidm

Copy link
Copy Markdown
Member

@westonpace would you like to rebase this and check that Windows tests pass now that we've reverted mimalloc?

@westonpace
westonpaceforce-pushed the feature/revert-arrow-12161 branch from 326f062 to 2f55217CompareApril 14, 2021 20:15
@westonpace

Copy link
Copy Markdown
MemberAuthor

Rebased. I'll watch local CI.

@westonpace

Copy link
Copy Markdown
MemberAuthor

Appveyor & local Windows 2019 builds pass so that is promising.

@lidavidm

Copy link
Copy Markdown
Member

I'll give CI some more time but I'll merge this tonight and then rebase ARROW-11797. I've speculatively rebased the latter onto this branch at: https://github.com/lidavidm/arrow/tree/arrow-11797 so we can catch anything in CI; hopefully we'll have this all merged tonight or early tomorrow.

@lidavidm

Copy link
Copy Markdown
Member

Actually, it looks like between your fork's CI and AppVeyor here, all the relevant (C++, Python, R, etc.) CI jobs look good to go, with only Travis being queued.

@lidavidm

Copy link
Copy Markdown
Member

Ok, I don't think the Travis queue is clearing anytime soon. https://github.com/lidavidm/arrow/tree/arrow-11797 which is this + ARROW-11797 passes Actions/Travis/AppVeyor, so I'll merge this and rebase 11797.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@westonpace@lidavidm