GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem - #40021

Merged
jorisvandenbossche merged 36 commits into
apache:mainfrom
Tom-Newton:tomnewton/minimal_python_bindings/GH-39968
Mar 13, 2024
Merged

GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem#40021
jorisvandenbossche merged 36 commits into
apache:mainfrom
Tom-Newton:tomnewton/minimal_python_bindings/GH-39968

Conversation

@Tom-Newton

@Tom-NewtonTom-Newton commented Feb 9, 2024

Copy link
Copy Markdown
Contributor

Rationale for this change

We want to use the new AzureFileSystem in pyarrow.

What changes are included in this PR?

  • Add minimal python bindings for AzureFileSystem. This includes just enough to run the python tests against azurite plus default credential auth to enable real use of this once this PR merges.
  • Adding additional configuration options and remaining authentication options can be done as a follow up.
  • I tried to copy the existing pybinds for GCS and S3
  • Explicitly set ARROW_AZURE=OFF rather than relying on defaults. The defaults are different for builds vs tests so this was causing tests to be enabled while Azure was disabled during the build.

Are these changes tested?

Enabled the the python filesystem tests for the new filesystem. I had to skip azure in a couple of the tests though because they are not yet working on the C++ side. I created Github issues to resolve these #40025 and #40026 and added TODO comments where relevant, that reference these Github issues.

Are there any user-facing changes?

pyarrow users can now use the native AzureFileSystem to get much better reliability and performance compared to adlfs based options.

@Tom-Newton
Tom-Newtonforce-pushed the tomnewton/minimal_python_bindings/GH-39968 branch from 8d6b96d to 99e1354CompareFebruary 10, 2024 12:26
@Tom-NewtonTom-Newton changed the title GH-39968: WIP Minimal python bindings for AzureFileSystemGH-39968: Minimal python bindings for AzureFileSystemFeb 10, 2024
@Tom-Newton
Tom-Newton marked this pull request as ready for review February 10, 2024 19:15
@koukou changed the title GH-39968: Minimal python bindings for AzureFileSystemGH-39968: [Python][FS][Azure] Minimal python bindings for AzureFileSystemFeb 10, 2024
@koukou changed the title GH-39968: [Python][FS][Azure] Minimal python bindings for AzureFileSystemGH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystemFeb 10, 2024

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

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

Comment threadcpp/src/arrow/util/config.h.cmake
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting review Awaiting review awaiting changes Awaiting changes labels Feb 10, 2024
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

I updated .github/workflows/python.yml and ci/scripts/python_sdist_build.sh. I think these are the only ones I missed in #39971. Probably I missed them because GCS was disabled.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

The MATLAB builds seem to be having issues. I don't think these can be related to my changes

@kou

kou commented Feb 11, 2024

Copy link
Copy Markdown
Member

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

@kou

kou commented Feb 11, 2024

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp -g wheel

@github-actions

This comment was marked as outdated.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

Created an issue: #40034

Comment threadpython/pyarrow/_azurefs.pyx Outdated
Comment threadpython/pyarrow/_azurefs.pyx
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting change review Awaiting change review awaiting changes Awaiting changes labels Feb 11, 2024
@Tom-Newton

Tom-Newton commented Feb 12, 2024

Copy link
Copy Markdown
ContributorAuthor

2 CI failures:
appvayor: Build execution time has reached the maximum allowed time for your plan (90 minutes).
C++ / AMD64 macOS 12 C++ (pull_request): 97/97 Test #73: arrow-s3fs-test ..............................***Timeout 300.06 sec

I think both are unrelated to this PR

@Tom-Newton
Tom-Newtonforce-pushed the tomnewton/minimal_python_bindings/GH-39968 branch from 793db20 to 20e7a31CompareMarch 13, 2024 10:33
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

I've just rebased after #40455

@jorisvandenbossche when you get a chance please could you re-review. Sorry to be impatient, but I really want to start using this and I'm hoping it will be merged in time for the 16.0.0 release.

@jorisvandenbossche

Copy link
Copy Markdown
Member

No need to apologize for the ping! ;)
I actually had re-reviewed the last code changes last week and everything looks good to me, forgot to comment that.

The conclusion from the last discussion just above about extra test builds to enable this (#40021 (comment)) is that this can wait for later? Do we want to create a follow-up issue to add this to some additional non-conda builds?

@jorisvandenbossche
jorisvandenbossche merged commit 9f6dc1f into apache:mainMar 13, 2024
@jorisvandenbosschejorisvandenbossche removed the awaiting change review Awaiting change review label Mar 13, 2024
@github-actionsgithub-actionsBot added the awaiting merge Awaiting merge label Mar 13, 2024
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

Thanks for reviewing and merging. I created an issue for the minio and azurite thing #40509

@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.

There were 7 benchmark results indicating a performance regression:

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

Comment on lines +59 to +64
blob_storage_scheme : str, default None
Either `http` or `https`. Defaults to `https`. Useful for connecting to a local
emulator, like Azurite.
dfs_storage_scheme : str, default None
Either `http` or `https`. Defaults to `https`. Useful for connecting to a local
emulator, like Azurite.

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.

@kou should this also change to enable_tls like you did in the URI parsing? cc @Tom-Newton

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.

Ah, I think so. We may want to use AzureOptions::FromUri() instead of re-implementing the same logic.

@Tom-Newton Could you follow-up this?

@Tom-NewtonTom-NewtonMar 15, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I created the issue for completing the python bindings and referenced this conversation #40572. There is a good chance that I will work on it but I can't say when.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.

There were 7 benchmark results indicating a performance regression:

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

@jorisvandenbossche

Copy link
Copy Markdown
Member

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

You can ignore all of them. I checked earlier today, and all are spurious spikes in the timings.
If this PR would actually have caused a regression, you would see that the later commits would also all be slower, which is not the case here:

image

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.

[Python][FS][Azure] Minimal python bindings for AzureFilesystem

5 participants

@Tom-Newton@kou@jorisvandenbossche@pitrou@felipecrv
, '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

GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem - #40021

Merged
jorisvandenbossche merged 36 commits into
apache:mainfrom
Tom-Newton:tomnewton/minimal_python_bindings/GH-39968
Mar 13, 2024
Merged

GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem#40021
jorisvandenbossche merged 36 commits into
apache:mainfrom
Tom-Newton:tomnewton/minimal_python_bindings/GH-39968

Conversation

@Tom-Newton

@Tom-NewtonTom-Newton commented Feb 9, 2024

Copy link
Copy Markdown
Contributor

Rationale for this change

We want to use the new AzureFileSystem in pyarrow.

What changes are included in this PR?

  • Add minimal python bindings for AzureFileSystem. This includes just enough to run the python tests against azurite plus default credential auth to enable real use of this once this PR merges.
  • Adding additional configuration options and remaining authentication options can be done as a follow up.
  • I tried to copy the existing pybinds for GCS and S3
  • Explicitly set ARROW_AZURE=OFF rather than relying on defaults. The defaults are different for builds vs tests so this was causing tests to be enabled while Azure was disabled during the build.

Are these changes tested?

Enabled the the python filesystem tests for the new filesystem. I had to skip azure in a couple of the tests though because they are not yet working on the C++ side. I created Github issues to resolve these #40025 and #40026 and added TODO comments where relevant, that reference these Github issues.

Are there any user-facing changes?

pyarrow users can now use the native AzureFileSystem to get much better reliability and performance compared to adlfs based options.

@Tom-Newton
Tom-Newtonforce-pushed the tomnewton/minimal_python_bindings/GH-39968 branch from 8d6b96d to 99e1354CompareFebruary 10, 2024 12:26
@Tom-NewtonTom-Newton changed the title GH-39968: WIP Minimal python bindings for AzureFileSystemGH-39968: Minimal python bindings for AzureFileSystemFeb 10, 2024
@Tom-Newton
Tom-Newton marked this pull request as ready for review February 10, 2024 19:15
@koukou changed the title GH-39968: Minimal python bindings for AzureFileSystemGH-39968: [Python][FS][Azure] Minimal python bindings for AzureFileSystemFeb 10, 2024
@koukou changed the title GH-39968: [Python][FS][Azure] Minimal python bindings for AzureFileSystemGH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystemFeb 10, 2024

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

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

Comment threadcpp/src/arrow/util/config.h.cmake
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting review Awaiting review awaiting changes Awaiting changes labels Feb 10, 2024
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

I updated .github/workflows/python.yml and ci/scripts/python_sdist_build.sh. I think these are the only ones I missed in #39971. Probably I missed them because GCS was disabled.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

The MATLAB builds seem to be having issues. I don't think these can be related to my changes

@kou

kou commented Feb 11, 2024

Copy link
Copy Markdown
Member

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

@kou

kou commented Feb 11, 2024

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp -g wheel

@github-actions

This comment was marked as outdated.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

Created an issue: #40034

Comment threadpython/pyarrow/_azurefs.pyx Outdated
Comment threadpython/pyarrow/_azurefs.pyx
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting change review Awaiting change review awaiting changes Awaiting changes labels Feb 11, 2024
@Tom-Newton

Tom-Newton commented Feb 12, 2024

Copy link
Copy Markdown
ContributorAuthor

2 CI failures:
appvayor: Build execution time has reached the maximum allowed time for your plan (90 minutes).
C++ / AMD64 macOS 12 C++ (pull_request): 97/97 Test #73: arrow-s3fs-test ..............................***Timeout 300.06 sec

I think both are unrelated to this PR

@Tom-Newton
Tom-Newtonforce-pushed the tomnewton/minimal_python_bindings/GH-39968 branch from 793db20 to 20e7a31CompareMarch 13, 2024 10:33
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

I've just rebased after #40455

@jorisvandenbossche when you get a chance please could you re-review. Sorry to be impatient, but I really want to start using this and I'm hoping it will be merged in time for the 16.0.0 release.

@jorisvandenbossche

Copy link
Copy Markdown
Member

No need to apologize for the ping! ;)
I actually had re-reviewed the last code changes last week and everything looks good to me, forgot to comment that.

The conclusion from the last discussion just above about extra test builds to enable this (#40021 (comment)) is that this can wait for later? Do we want to create a follow-up issue to add this to some additional non-conda builds?

@jorisvandenbossche
jorisvandenbossche merged commit 9f6dc1f into apache:mainMar 13, 2024
@jorisvandenbosschejorisvandenbossche removed the awaiting change review Awaiting change review label Mar 13, 2024
@github-actionsgithub-actionsBot added the awaiting merge Awaiting merge label Mar 13, 2024
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

Thanks for reviewing and merging. I created an issue for the minio and azurite thing #40509

@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.

There were 7 benchmark results indicating a performance regression:

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

Comment on lines +59 to +64
blob_storage_scheme : str, default None
Either `http` or `https`. Defaults to `https`. Useful for connecting to a local
emulator, like Azurite.
dfs_storage_scheme : str, default None
Either `http` or `https`. Defaults to `https`. Useful for connecting to a local
emulator, like Azurite.

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.

@kou should this also change to enable_tls like you did in the URI parsing? cc @Tom-Newton

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.

Ah, I think so. We may want to use AzureOptions::FromUri() instead of re-implementing the same logic.

@Tom-Newton Could you follow-up this?

@Tom-NewtonTom-NewtonMar 15, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I created the issue for completing the python bindings and referenced this conversation #40572. There is a good chance that I will work on it but I can't say when.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.

There were 7 benchmark results indicating a performance regression:

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

@jorisvandenbossche

Copy link
Copy Markdown
Member

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

You can ignore all of them. I checked earlier today, and all are spurious spikes in the timings.
If this PR would actually have caused a regression, you would see that the later commits would also all be slower, which is not the case here:

image

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.

[Python][FS][Azure] Minimal python bindings for AzureFilesystem

5 participants

@Tom-Newton@kou@jorisvandenbossche@pitrou@felipecrv
, '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

GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem - #40021

Merged
jorisvandenbossche merged 36 commits into
apache:mainfrom
Tom-Newton:tomnewton/minimal_python_bindings/GH-39968
Mar 13, 2024
Merged

GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem#40021
jorisvandenbossche merged 36 commits into
apache:mainfrom
Tom-Newton:tomnewton/minimal_python_bindings/GH-39968

Conversation

@Tom-Newton

@Tom-NewtonTom-Newton commented Feb 9, 2024

Copy link
Copy Markdown
Contributor

Rationale for this change

We want to use the new AzureFileSystem in pyarrow.

What changes are included in this PR?

  • Add minimal python bindings for AzureFileSystem. This includes just enough to run the python tests against azurite plus default credential auth to enable real use of this once this PR merges.
  • Adding additional configuration options and remaining authentication options can be done as a follow up.
  • I tried to copy the existing pybinds for GCS and S3
  • Explicitly set ARROW_AZURE=OFF rather than relying on defaults. The defaults are different for builds vs tests so this was causing tests to be enabled while Azure was disabled during the build.

Are these changes tested?

Enabled the the python filesystem tests for the new filesystem. I had to skip azure in a couple of the tests though because they are not yet working on the C++ side. I created Github issues to resolve these #40025 and #40026 and added TODO comments where relevant, that reference these Github issues.

Are there any user-facing changes?

pyarrow users can now use the native AzureFileSystem to get much better reliability and performance compared to adlfs based options.

@Tom-Newton
Tom-Newtonforce-pushed the tomnewton/minimal_python_bindings/GH-39968 branch from 8d6b96d to 99e1354CompareFebruary 10, 2024 12:26
@Tom-NewtonTom-Newton changed the title GH-39968: WIP Minimal python bindings for AzureFileSystemGH-39968: Minimal python bindings for AzureFileSystemFeb 10, 2024
@Tom-Newton
Tom-Newton marked this pull request as ready for review February 10, 2024 19:15
@koukou changed the title GH-39968: Minimal python bindings for AzureFileSystemGH-39968: [Python][FS][Azure] Minimal python bindings for AzureFileSystemFeb 10, 2024
@koukou changed the title GH-39968: [Python][FS][Azure] Minimal python bindings for AzureFileSystemGH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystemFeb 10, 2024

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

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

Comment threadcpp/src/arrow/util/config.h.cmake
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting review Awaiting review awaiting changes Awaiting changes labels Feb 10, 2024
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

I updated .github/workflows/python.yml and ci/scripts/python_sdist_build.sh. I think these are the only ones I missed in #39971. Probably I missed them because GCS was disabled.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

The MATLAB builds seem to be having issues. I don't think these can be related to my changes

@kou

kou commented Feb 11, 2024

Copy link
Copy Markdown
Member

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

@kou

kou commented Feb 11, 2024

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp -g wheel

@github-actions

This comment was marked as outdated.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

Created an issue: #40034

Comment threadpython/pyarrow/_azurefs.pyx Outdated
Comment threadpython/pyarrow/_azurefs.pyx
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting change review Awaiting change review awaiting changes Awaiting changes labels Feb 11, 2024
@Tom-Newton

Tom-Newton commented Feb 12, 2024

Copy link
Copy Markdown
ContributorAuthor

2 CI failures:
appvayor: Build execution time has reached the maximum allowed time for your plan (90 minutes).
C++ / AMD64 macOS 12 C++ (pull_request): 97/97 Test #73: arrow-s3fs-test ..............................***Timeout 300.06 sec

I think both are unrelated to this PR

@Tom-Newton
Tom-Newtonforce-pushed the tomnewton/minimal_python_bindings/GH-39968 branch from 793db20 to 20e7a31CompareMarch 13, 2024 10:33
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

I've just rebased after #40455

@jorisvandenbossche when you get a chance please could you re-review. Sorry to be impatient, but I really want to start using this and I'm hoping it will be merged in time for the 16.0.0 release.

@jorisvandenbossche

Copy link
Copy Markdown
Member

No need to apologize for the ping! ;)
I actually had re-reviewed the last code changes last week and everything looks good to me, forgot to comment that.

The conclusion from the last discussion just above about extra test builds to enable this (#40021 (comment)) is that this can wait for later? Do we want to create a follow-up issue to add this to some additional non-conda builds?

@jorisvandenbossche
jorisvandenbossche merged commit 9f6dc1f into apache:mainMar 13, 2024
@jorisvandenbosschejorisvandenbossche removed the awaiting change review Awaiting change review label Mar 13, 2024
@github-actionsgithub-actionsBot added the awaiting merge Awaiting merge label Mar 13, 2024
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

Thanks for reviewing and merging. I created an issue for the minio and azurite thing #40509

@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.

There were 7 benchmark results indicating a performance regression:

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

Comment on lines +59 to +64
blob_storage_scheme : str, default None
Either `http` or `https`. Defaults to `https`. Useful for connecting to a local
emulator, like Azurite.
dfs_storage_scheme : str, default None
Either `http` or `https`. Defaults to `https`. Useful for connecting to a local
emulator, like Azurite.

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.

@kou should this also change to enable_tls like you did in the URI parsing? cc @Tom-Newton

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.

Ah, I think so. We may want to use AzureOptions::FromUri() instead of re-implementing the same logic.

@Tom-Newton Could you follow-up this?

@Tom-NewtonTom-NewtonMar 15, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I created the issue for completing the python bindings and referenced this conversation #40572. There is a good chance that I will work on it but I can't say when.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.

There were 7 benchmark results indicating a performance regression:

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

@jorisvandenbossche

Copy link
Copy Markdown
Member

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

You can ignore all of them. I checked earlier today, and all are spurious spikes in the timings.
If this PR would actually have caused a regression, you would see that the later commits would also all be slower, which is not the case here:

image

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.

[Python][FS][Azure] Minimal python bindings for AzureFilesystem

5 participants

@Tom-Newton@kou@jorisvandenbossche@pitrou@felipecrv
, '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

GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem - #40021

Merged
jorisvandenbossche merged 36 commits into
apache:mainfrom
Tom-Newton:tomnewton/minimal_python_bindings/GH-39968
Mar 13, 2024
Merged

GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem#40021
jorisvandenbossche merged 36 commits into
apache:mainfrom
Tom-Newton:tomnewton/minimal_python_bindings/GH-39968

Conversation

@Tom-Newton

@Tom-NewtonTom-Newton commented Feb 9, 2024

Copy link
Copy Markdown
Contributor

Rationale for this change

We want to use the new AzureFileSystem in pyarrow.

What changes are included in this PR?

  • Add minimal python bindings for AzureFileSystem. This includes just enough to run the python tests against azurite plus default credential auth to enable real use of this once this PR merges.
  • Adding additional configuration options and remaining authentication options can be done as a follow up.
  • I tried to copy the existing pybinds for GCS and S3
  • Explicitly set ARROW_AZURE=OFF rather than relying on defaults. The defaults are different for builds vs tests so this was causing tests to be enabled while Azure was disabled during the build.

Are these changes tested?

Enabled the the python filesystem tests for the new filesystem. I had to skip azure in a couple of the tests though because they are not yet working on the C++ side. I created Github issues to resolve these #40025 and #40026 and added TODO comments where relevant, that reference these Github issues.

Are there any user-facing changes?

pyarrow users can now use the native AzureFileSystem to get much better reliability and performance compared to adlfs based options.

@Tom-Newton
Tom-Newtonforce-pushed the tomnewton/minimal_python_bindings/GH-39968 branch from 8d6b96d to 99e1354CompareFebruary 10, 2024 12:26
@Tom-NewtonTom-Newton changed the title GH-39968: WIP Minimal python bindings for AzureFileSystemGH-39968: Minimal python bindings for AzureFileSystemFeb 10, 2024
@Tom-Newton
Tom-Newton marked this pull request as ready for review February 10, 2024 19:15
@koukou changed the title GH-39968: Minimal python bindings for AzureFileSystemGH-39968: [Python][FS][Azure] Minimal python bindings for AzureFileSystemFeb 10, 2024
@koukou changed the title GH-39968: [Python][FS][Azure] Minimal python bindings for AzureFileSystemGH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystemFeb 10, 2024

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

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

Comment threadcpp/src/arrow/util/config.h.cmake
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting review Awaiting review awaiting changes Awaiting changes labels Feb 10, 2024
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

I updated .github/workflows/python.yml and ci/scripts/python_sdist_build.sh. I think these are the only ones I missed in #39971. Probably I missed them because GCS was disabled.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

The MATLAB builds seem to be having issues. I don't think these can be related to my changes

@kou

kou commented Feb 11, 2024

Copy link
Copy Markdown
Member

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

@kou

kou commented Feb 11, 2024

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp -g wheel

@github-actions

This comment was marked as outdated.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

Created an issue: #40034

Comment threadpython/pyarrow/_azurefs.pyx Outdated
Comment threadpython/pyarrow/_azurefs.pyx
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting change review Awaiting change review awaiting changes Awaiting changes labels Feb 11, 2024
@Tom-Newton

Tom-Newton commented Feb 12, 2024

Copy link
Copy Markdown
ContributorAuthor

2 CI failures:
appvayor: Build execution time has reached the maximum allowed time for your plan (90 minutes).
C++ / AMD64 macOS 12 C++ (pull_request): 97/97 Test #73: arrow-s3fs-test ..............................***Timeout 300.06 sec

I think both are unrelated to this PR

@Tom-Newton
Tom-Newtonforce-pushed the tomnewton/minimal_python_bindings/GH-39968 branch from 793db20 to 20e7a31CompareMarch 13, 2024 10:33
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

I've just rebased after #40455

@jorisvandenbossche when you get a chance please could you re-review. Sorry to be impatient, but I really want to start using this and I'm hoping it will be merged in time for the 16.0.0 release.

@jorisvandenbossche

Copy link
Copy Markdown
Member

No need to apologize for the ping! ;)
I actually had re-reviewed the last code changes last week and everything looks good to me, forgot to comment that.

The conclusion from the last discussion just above about extra test builds to enable this (#40021 (comment)) is that this can wait for later? Do we want to create a follow-up issue to add this to some additional non-conda builds?

@jorisvandenbossche
jorisvandenbossche merged commit 9f6dc1f into apache:mainMar 13, 2024
@jorisvandenbosschejorisvandenbossche removed the awaiting change review Awaiting change review label Mar 13, 2024
@github-actionsgithub-actionsBot added the awaiting merge Awaiting merge label Mar 13, 2024
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

Thanks for reviewing and merging. I created an issue for the minio and azurite thing #40509

@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.

There were 7 benchmark results indicating a performance regression:

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

Comment on lines +59 to +64
blob_storage_scheme : str, default None
Either `http` or `https`. Defaults to `https`. Useful for connecting to a local
emulator, like Azurite.
dfs_storage_scheme : str, default None
Either `http` or `https`. Defaults to `https`. Useful for connecting to a local
emulator, like Azurite.

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.

@kou should this also change to enable_tls like you did in the URI parsing? cc @Tom-Newton

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.

Ah, I think so. We may want to use AzureOptions::FromUri() instead of re-implementing the same logic.

@Tom-Newton Could you follow-up this?

@Tom-NewtonTom-NewtonMar 15, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I created the issue for completing the python bindings and referenced this conversation #40572. There is a good chance that I will work on it but I can't say when.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.

There were 7 benchmark results indicating a performance regression:

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

@jorisvandenbossche

Copy link
Copy Markdown
Member

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

You can ignore all of them. I checked earlier today, and all are spurious spikes in the timings.
If this PR would actually have caused a regression, you would see that the later commits would also all be slower, which is not the case here:

image

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.

[Python][FS][Azure] Minimal python bindings for AzureFilesystem

5 participants

@Tom-Newton@kou@jorisvandenbossche@pitrou@felipecrv
, '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

GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem - #40021

Merged
jorisvandenbossche merged 36 commits into
apache:mainfrom
Tom-Newton:tomnewton/minimal_python_bindings/GH-39968
Mar 13, 2024
Merged

GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem#40021
jorisvandenbossche merged 36 commits into
apache:mainfrom
Tom-Newton:tomnewton/minimal_python_bindings/GH-39968

Conversation

@Tom-Newton

@Tom-NewtonTom-Newton commented Feb 9, 2024

Copy link
Copy Markdown
Contributor

Rationale for this change

We want to use the new AzureFileSystem in pyarrow.

What changes are included in this PR?

  • Add minimal python bindings for AzureFileSystem. This includes just enough to run the python tests against azurite plus default credential auth to enable real use of this once this PR merges.
  • Adding additional configuration options and remaining authentication options can be done as a follow up.
  • I tried to copy the existing pybinds for GCS and S3
  • Explicitly set ARROW_AZURE=OFF rather than relying on defaults. The defaults are different for builds vs tests so this was causing tests to be enabled while Azure was disabled during the build.

Are these changes tested?

Enabled the the python filesystem tests for the new filesystem. I had to skip azure in a couple of the tests though because they are not yet working on the C++ side. I created Github issues to resolve these #40025 and #40026 and added TODO comments where relevant, that reference these Github issues.

Are there any user-facing changes?

pyarrow users can now use the native AzureFileSystem to get much better reliability and performance compared to adlfs based options.

@Tom-Newton
Tom-Newtonforce-pushed the tomnewton/minimal_python_bindings/GH-39968 branch from 8d6b96d to 99e1354CompareFebruary 10, 2024 12:26
@Tom-NewtonTom-Newton changed the title GH-39968: WIP Minimal python bindings for AzureFileSystemGH-39968: Minimal python bindings for AzureFileSystemFeb 10, 2024
@Tom-Newton
Tom-Newton marked this pull request as ready for review February 10, 2024 19:15
@koukou changed the title GH-39968: Minimal python bindings for AzureFileSystemGH-39968: [Python][FS][Azure] Minimal python bindings for AzureFileSystemFeb 10, 2024
@koukou changed the title GH-39968: [Python][FS][Azure] Minimal python bindings for AzureFileSystemGH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystemFeb 10, 2024

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

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

Comment threadcpp/src/arrow/util/config.h.cmake
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting review Awaiting review awaiting changes Awaiting changes labels Feb 10, 2024
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

I updated .github/workflows/python.yml and ci/scripts/python_sdist_build.sh. I think these are the only ones I missed in #39971. Probably I missed them because GCS was disabled.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

The MATLAB builds seem to be having issues. I don't think these can be related to my changes

@kou

kou commented Feb 11, 2024

Copy link
Copy Markdown
Member

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

@kou

kou commented Feb 11, 2024

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp -g wheel

@github-actions

This comment was marked as outdated.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

Created an issue: #40034

Comment threadpython/pyarrow/_azurefs.pyx Outdated
Comment threadpython/pyarrow/_azurefs.pyx
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting change review Awaiting change review awaiting changes Awaiting changes labels Feb 11, 2024
@Tom-Newton

Tom-Newton commented Feb 12, 2024

Copy link
Copy Markdown
ContributorAuthor

2 CI failures:
appvayor: Build execution time has reached the maximum allowed time for your plan (90 minutes).
C++ / AMD64 macOS 12 C++ (pull_request): 97/97 Test #73: arrow-s3fs-test ..............................***Timeout 300.06 sec

I think both are unrelated to this PR

@Tom-Newton
Tom-Newtonforce-pushed the tomnewton/minimal_python_bindings/GH-39968 branch from 793db20 to 20e7a31CompareMarch 13, 2024 10:33
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

I've just rebased after #40455

@jorisvandenbossche when you get a chance please could you re-review. Sorry to be impatient, but I really want to start using this and I'm hoping it will be merged in time for the 16.0.0 release.

@jorisvandenbossche

Copy link
Copy Markdown
Member

No need to apologize for the ping! ;)
I actually had re-reviewed the last code changes last week and everything looks good to me, forgot to comment that.

The conclusion from the last discussion just above about extra test builds to enable this (#40021 (comment)) is that this can wait for later? Do we want to create a follow-up issue to add this to some additional non-conda builds?

@jorisvandenbossche
jorisvandenbossche merged commit 9f6dc1f into apache:mainMar 13, 2024
@jorisvandenbosschejorisvandenbossche removed the awaiting change review Awaiting change review label Mar 13, 2024
@github-actionsgithub-actionsBot added the awaiting merge Awaiting merge label Mar 13, 2024
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

Thanks for reviewing and merging. I created an issue for the minio and azurite thing #40509

@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.

There were 7 benchmark results indicating a performance regression:

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

Comment on lines +59 to +64
blob_storage_scheme : str, default None
Either `http` or `https`. Defaults to `https`. Useful for connecting to a local
emulator, like Azurite.
dfs_storage_scheme : str, default None
Either `http` or `https`. Defaults to `https`. Useful for connecting to a local
emulator, like Azurite.

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.

@kou should this also change to enable_tls like you did in the URI parsing? cc @Tom-Newton

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.

Ah, I think so. We may want to use AzureOptions::FromUri() instead of re-implementing the same logic.

@Tom-Newton Could you follow-up this?

@Tom-NewtonTom-NewtonMar 15, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I created the issue for completing the python bindings and referenced this conversation #40572. There is a good chance that I will work on it but I can't say when.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.

There were 7 benchmark results indicating a performance regression:

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

@jorisvandenbossche

Copy link
Copy Markdown
Member

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

You can ignore all of them. I checked earlier today, and all are spurious spikes in the timings.
If this PR would actually have caused a regression, you would see that the later commits would also all be slower, which is not the case here:

image

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.

[Python][FS][Azure] Minimal python bindings for AzureFilesystem

5 participants

@Tom-Newton@kou@jorisvandenbossche@pitrou@felipecrv
, '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

GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem - #40021

Merged
jorisvandenbossche merged 36 commits into
apache:mainfrom
Tom-Newton:tomnewton/minimal_python_bindings/GH-39968
Mar 13, 2024
Merged

GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem#40021
jorisvandenbossche merged 36 commits into
apache:mainfrom
Tom-Newton:tomnewton/minimal_python_bindings/GH-39968

Conversation

@Tom-Newton

@Tom-NewtonTom-Newton commented Feb 9, 2024

Copy link
Copy Markdown
Contributor

Rationale for this change

We want to use the new AzureFileSystem in pyarrow.

What changes are included in this PR?

  • Add minimal python bindings for AzureFileSystem. This includes just enough to run the python tests against azurite plus default credential auth to enable real use of this once this PR merges.
  • Adding additional configuration options and remaining authentication options can be done as a follow up.
  • I tried to copy the existing pybinds for GCS and S3
  • Explicitly set ARROW_AZURE=OFF rather than relying on defaults. The defaults are different for builds vs tests so this was causing tests to be enabled while Azure was disabled during the build.

Are these changes tested?

Enabled the the python filesystem tests for the new filesystem. I had to skip azure in a couple of the tests though because they are not yet working on the C++ side. I created Github issues to resolve these #40025 and #40026 and added TODO comments where relevant, that reference these Github issues.

Are there any user-facing changes?

pyarrow users can now use the native AzureFileSystem to get much better reliability and performance compared to adlfs based options.

@Tom-Newton
Tom-Newtonforce-pushed the tomnewton/minimal_python_bindings/GH-39968 branch from 8d6b96d to 99e1354CompareFebruary 10, 2024 12:26
@Tom-NewtonTom-Newton changed the title GH-39968: WIP Minimal python bindings for AzureFileSystemGH-39968: Minimal python bindings for AzureFileSystemFeb 10, 2024
@Tom-Newton
Tom-Newton marked this pull request as ready for review February 10, 2024 19:15
@koukou changed the title GH-39968: Minimal python bindings for AzureFileSystemGH-39968: [Python][FS][Azure] Minimal python bindings for AzureFileSystemFeb 10, 2024
@koukou changed the title GH-39968: [Python][FS][Azure] Minimal python bindings for AzureFileSystemGH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystemFeb 10, 2024

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

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

Comment threadcpp/src/arrow/util/config.h.cmake
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting review Awaiting review awaiting changes Awaiting changes labels Feb 10, 2024
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

I updated .github/workflows/python.yml and ci/scripts/python_sdist_build.sh. I think these are the only ones I missed in #39971. Probably I missed them because GCS was disabled.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

The MATLAB builds seem to be having issues. I don't think these can be related to my changes

@kou

kou commented Feb 11, 2024

Copy link
Copy Markdown
Member

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

@kou

kou commented Feb 11, 2024

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp -g wheel

@github-actions

This comment was marked as outdated.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

Created an issue: #40034

Comment threadpython/pyarrow/_azurefs.pyx Outdated
Comment threadpython/pyarrow/_azurefs.pyx
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting change review Awaiting change review awaiting changes Awaiting changes labels Feb 11, 2024
@Tom-Newton

Tom-Newton commented Feb 12, 2024

Copy link
Copy Markdown
ContributorAuthor

2 CI failures:
appvayor: Build execution time has reached the maximum allowed time for your plan (90 minutes).
C++ / AMD64 macOS 12 C++ (pull_request): 97/97 Test #73: arrow-s3fs-test ..............................***Timeout 300.06 sec

I think both are unrelated to this PR

@Tom-Newton
Tom-Newtonforce-pushed the tomnewton/minimal_python_bindings/GH-39968 branch from 793db20 to 20e7a31CompareMarch 13, 2024 10:33
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

I've just rebased after #40455

@jorisvandenbossche when you get a chance please could you re-review. Sorry to be impatient, but I really want to start using this and I'm hoping it will be merged in time for the 16.0.0 release.

@jorisvandenbossche

Copy link
Copy Markdown
Member

No need to apologize for the ping! ;)
I actually had re-reviewed the last code changes last week and everything looks good to me, forgot to comment that.

The conclusion from the last discussion just above about extra test builds to enable this (#40021 (comment)) is that this can wait for later? Do we want to create a follow-up issue to add this to some additional non-conda builds?

@jorisvandenbossche
jorisvandenbossche merged commit 9f6dc1f into apache:mainMar 13, 2024
@jorisvandenbosschejorisvandenbossche removed the awaiting change review Awaiting change review label Mar 13, 2024
@github-actionsgithub-actionsBot added the awaiting merge Awaiting merge label Mar 13, 2024
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

Thanks for reviewing and merging. I created an issue for the minio and azurite thing #40509

@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.

There were 7 benchmark results indicating a performance regression:

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

Comment on lines +59 to +64
blob_storage_scheme : str, default None
Either `http` or `https`. Defaults to `https`. Useful for connecting to a local
emulator, like Azurite.
dfs_storage_scheme : str, default None
Either `http` or `https`. Defaults to `https`. Useful for connecting to a local
emulator, like Azurite.

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.

@kou should this also change to enable_tls like you did in the URI parsing? cc @Tom-Newton

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.

Ah, I think so. We may want to use AzureOptions::FromUri() instead of re-implementing the same logic.

@Tom-Newton Could you follow-up this?

@Tom-NewtonTom-NewtonMar 15, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I created the issue for completing the python bindings and referenced this conversation #40572. There is a good chance that I will work on it but I can't say when.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.

There were 7 benchmark results indicating a performance regression:

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

@jorisvandenbossche

Copy link
Copy Markdown
Member

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

You can ignore all of them. I checked earlier today, and all are spurious spikes in the timings.
If this PR would actually have caused a regression, you would see that the later commits would also all be slower, which is not the case here:

image

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.

[Python][FS][Azure] Minimal python bindings for AzureFilesystem

5 participants

@Tom-Newton@kou@jorisvandenbossche@pitrou@felipecrv
, '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

GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem - #40021

Merged
jorisvandenbossche merged 36 commits into
apache:mainfrom
Tom-Newton:tomnewton/minimal_python_bindings/GH-39968
Mar 13, 2024
Merged

GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem#40021
jorisvandenbossche merged 36 commits into
apache:mainfrom
Tom-Newton:tomnewton/minimal_python_bindings/GH-39968

Conversation

@Tom-Newton

@Tom-NewtonTom-Newton commented Feb 9, 2024

Copy link
Copy Markdown
Contributor

Rationale for this change

We want to use the new AzureFileSystem in pyarrow.

What changes are included in this PR?

  • Add minimal python bindings for AzureFileSystem. This includes just enough to run the python tests against azurite plus default credential auth to enable real use of this once this PR merges.
  • Adding additional configuration options and remaining authentication options can be done as a follow up.
  • I tried to copy the existing pybinds for GCS and S3
  • Explicitly set ARROW_AZURE=OFF rather than relying on defaults. The defaults are different for builds vs tests so this was causing tests to be enabled while Azure was disabled during the build.

Are these changes tested?

Enabled the the python filesystem tests for the new filesystem. I had to skip azure in a couple of the tests though because they are not yet working on the C++ side. I created Github issues to resolve these #40025 and #40026 and added TODO comments where relevant, that reference these Github issues.

Are there any user-facing changes?

pyarrow users can now use the native AzureFileSystem to get much better reliability and performance compared to adlfs based options.

@Tom-Newton
Tom-Newtonforce-pushed the tomnewton/minimal_python_bindings/GH-39968 branch from 8d6b96d to 99e1354CompareFebruary 10, 2024 12:26
@Tom-NewtonTom-Newton changed the title GH-39968: WIP Minimal python bindings for AzureFileSystemGH-39968: Minimal python bindings for AzureFileSystemFeb 10, 2024
@Tom-Newton
Tom-Newton marked this pull request as ready for review February 10, 2024 19:15
@koukou changed the title GH-39968: Minimal python bindings for AzureFileSystemGH-39968: [Python][FS][Azure] Minimal python bindings for AzureFileSystemFeb 10, 2024
@koukou changed the title GH-39968: [Python][FS][Azure] Minimal python bindings for AzureFileSystemGH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystemFeb 10, 2024

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

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

Comment threadcpp/src/arrow/util/config.h.cmake
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting review Awaiting review awaiting changes Awaiting changes labels Feb 10, 2024
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

I updated .github/workflows/python.yml and ci/scripts/python_sdist_build.sh. I think these are the only ones I missed in #39971. Probably I missed them because GCS was disabled.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

The MATLAB builds seem to be having issues. I don't think these can be related to my changes

@kou

kou commented Feb 11, 2024

Copy link
Copy Markdown
Member

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

@kou

kou commented Feb 11, 2024

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp -g wheel

@github-actions

This comment was marked as outdated.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

Created an issue: #40034

Comment threadpython/pyarrow/_azurefs.pyx Outdated
Comment threadpython/pyarrow/_azurefs.pyx
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting change review Awaiting change review awaiting changes Awaiting changes labels Feb 11, 2024
@Tom-Newton

Tom-Newton commented Feb 12, 2024

Copy link
Copy Markdown
ContributorAuthor

2 CI failures:
appvayor: Build execution time has reached the maximum allowed time for your plan (90 minutes).
C++ / AMD64 macOS 12 C++ (pull_request): 97/97 Test #73: arrow-s3fs-test ..............................***Timeout 300.06 sec

I think both are unrelated to this PR

@Tom-Newton
Tom-Newtonforce-pushed the tomnewton/minimal_python_bindings/GH-39968 branch from 793db20 to 20e7a31CompareMarch 13, 2024 10:33
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

I've just rebased after #40455

@jorisvandenbossche when you get a chance please could you re-review. Sorry to be impatient, but I really want to start using this and I'm hoping it will be merged in time for the 16.0.0 release.

@jorisvandenbossche

Copy link
Copy Markdown
Member

No need to apologize for the ping! ;)
I actually had re-reviewed the last code changes last week and everything looks good to me, forgot to comment that.

The conclusion from the last discussion just above about extra test builds to enable this (#40021 (comment)) is that this can wait for later? Do we want to create a follow-up issue to add this to some additional non-conda builds?

@jorisvandenbossche
jorisvandenbossche merged commit 9f6dc1f into apache:mainMar 13, 2024
@jorisvandenbosschejorisvandenbossche removed the awaiting change review Awaiting change review label Mar 13, 2024
@github-actionsgithub-actionsBot added the awaiting merge Awaiting merge label Mar 13, 2024
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

Thanks for reviewing and merging. I created an issue for the minio and azurite thing #40509

@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.

There were 7 benchmark results indicating a performance regression:

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

Comment on lines +59 to +64
blob_storage_scheme : str, default None
Either `http` or `https`. Defaults to `https`. Useful for connecting to a local
emulator, like Azurite.
dfs_storage_scheme : str, default None
Either `http` or `https`. Defaults to `https`. Useful for connecting to a local
emulator, like Azurite.

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.

@kou should this also change to enable_tls like you did in the URI parsing? cc @Tom-Newton

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.

Ah, I think so. We may want to use AzureOptions::FromUri() instead of re-implementing the same logic.

@Tom-Newton Could you follow-up this?

@Tom-NewtonTom-NewtonMar 15, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I created the issue for completing the python bindings and referenced this conversation #40572. There is a good chance that I will work on it but I can't say when.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.

There were 7 benchmark results indicating a performance regression:

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

@jorisvandenbossche

Copy link
Copy Markdown
Member

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

You can ignore all of them. I checked earlier today, and all are spurious spikes in the timings.
If this PR would actually have caused a regression, you would see that the later commits would also all be slower, which is not the case here:

image

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.

[Python][FS][Azure] Minimal python bindings for AzureFilesystem

5 participants

@Tom-Newton@kou@jorisvandenbossche@pitrou@felipecrv
, '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

GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem - #40021

Merged
jorisvandenbossche merged 36 commits into
apache:mainfrom
Tom-Newton:tomnewton/minimal_python_bindings/GH-39968
Mar 13, 2024
Merged

GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem#40021
jorisvandenbossche merged 36 commits into
apache:mainfrom
Tom-Newton:tomnewton/minimal_python_bindings/GH-39968

Conversation

@Tom-Newton

@Tom-NewtonTom-Newton commented Feb 9, 2024

Copy link
Copy Markdown
Contributor

Rationale for this change

We want to use the new AzureFileSystem in pyarrow.

What changes are included in this PR?

  • Add minimal python bindings for AzureFileSystem. This includes just enough to run the python tests against azurite plus default credential auth to enable real use of this once this PR merges.
  • Adding additional configuration options and remaining authentication options can be done as a follow up.
  • I tried to copy the existing pybinds for GCS and S3
  • Explicitly set ARROW_AZURE=OFF rather than relying on defaults. The defaults are different for builds vs tests so this was causing tests to be enabled while Azure was disabled during the build.

Are these changes tested?

Enabled the the python filesystem tests for the new filesystem. I had to skip azure in a couple of the tests though because they are not yet working on the C++ side. I created Github issues to resolve these #40025 and #40026 and added TODO comments where relevant, that reference these Github issues.

Are there any user-facing changes?

pyarrow users can now use the native AzureFileSystem to get much better reliability and performance compared to adlfs based options.

@Tom-Newton
Tom-Newtonforce-pushed the tomnewton/minimal_python_bindings/GH-39968 branch from 8d6b96d to 99e1354CompareFebruary 10, 2024 12:26
@Tom-NewtonTom-Newton changed the title GH-39968: WIP Minimal python bindings for AzureFileSystemGH-39968: Minimal python bindings for AzureFileSystemFeb 10, 2024
@Tom-Newton
Tom-Newton marked this pull request as ready for review February 10, 2024 19:15
@koukou changed the title GH-39968: Minimal python bindings for AzureFileSystemGH-39968: [Python][FS][Azure] Minimal python bindings for AzureFileSystemFeb 10, 2024
@koukou changed the title GH-39968: [Python][FS][Azure] Minimal python bindings for AzureFileSystemGH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystemFeb 10, 2024

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

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

Comment threadcpp/src/arrow/util/config.h.cmake
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting review Awaiting review awaiting changes Awaiting changes labels Feb 10, 2024
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

I updated .github/workflows/python.yml and ci/scripts/python_sdist_build.sh. I think these are the only ones I missed in #39971. Probably I missed them because GCS was disabled.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

The MATLAB builds seem to be having issues. I don't think these can be related to my changes

@kou

kou commented Feb 11, 2024

Copy link
Copy Markdown
Member

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

@kou

kou commented Feb 11, 2024

Copy link
Copy Markdown
Member

@github-actions crossbow submit -g cpp -g wheel

@github-actions

This comment was marked as outdated.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

Created an issue: #40034

Comment threadpython/pyarrow/_azurefs.pyx Outdated
Comment threadpython/pyarrow/_azurefs.pyx
@github-actionsgithub-actionsBot added awaiting changes Awaiting changes awaiting change review Awaiting change review and removed awaiting change review Awaiting change review awaiting changes Awaiting changes labels Feb 11, 2024
@Tom-Newton

Tom-Newton commented Feb 12, 2024

Copy link
Copy Markdown
ContributorAuthor

2 CI failures:
appvayor: Build execution time has reached the maximum allowed time for your plan (90 minutes).
C++ / AMD64 macOS 12 C++ (pull_request): 97/97 Test #73: arrow-s3fs-test ..............................***Timeout 300.06 sec

I think both are unrelated to this PR

@Tom-Newton
Tom-Newtonforce-pushed the tomnewton/minimal_python_bindings/GH-39968 branch from 793db20 to 20e7a31CompareMarch 13, 2024 10:33
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

I've just rebased after #40455

@jorisvandenbossche when you get a chance please could you re-review. Sorry to be impatient, but I really want to start using this and I'm hoping it will be merged in time for the 16.0.0 release.

@jorisvandenbossche

Copy link
Copy Markdown
Member

No need to apologize for the ping! ;)
I actually had re-reviewed the last code changes last week and everything looks good to me, forgot to comment that.

The conclusion from the last discussion just above about extra test builds to enable this (#40021 (comment)) is that this can wait for later? Do we want to create a follow-up issue to add this to some additional non-conda builds?

@jorisvandenbossche
jorisvandenbossche merged commit 9f6dc1f into apache:mainMar 13, 2024
@jorisvandenbosschejorisvandenbossche removed the awaiting change review Awaiting change review label Mar 13, 2024
@github-actionsgithub-actionsBot added the awaiting merge Awaiting merge label Mar 13, 2024
@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

Thanks for reviewing and merging. I created an issue for the minio and azurite thing #40509

@conbench-apache-arrow

Copy link
Copy Markdown

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.

There were 7 benchmark results indicating a performance regression:

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

Comment on lines +59 to +64
blob_storage_scheme : str, default None
Either `http` or `https`. Defaults to `https`. Useful for connecting to a local
emulator, like Azurite.
dfs_storage_scheme : str, default None
Either `http` or `https`. Defaults to `https`. Useful for connecting to a local
emulator, like Azurite.

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.

@kou should this also change to enable_tls like you did in the URI parsing? cc @Tom-Newton

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.

Ah, I think so. We may want to use AzureOptions::FromUri() instead of re-implementing the same logic.

@Tom-Newton Could you follow-up this?

@Tom-NewtonTom-NewtonMar 15, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I created the issue for completing the python bindings and referenced this conversation #40572. There is a good chance that I will work on it but I can't say when.

@Tom-Newton

Copy link
Copy Markdown
ContributorAuthor

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.

There were 7 benchmark results indicating a performance regression:

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

@jorisvandenbossche

Copy link
Copy Markdown
Member

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

You can ignore all of them. I checked earlier today, and all are spurious spikes in the timings.
If this PR would actually have caused a regression, you would see that the later commits would also all be slower, which is not the case here:

image

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.

[Python][FS][Azure] Minimal python bindings for AzureFilesystem

5 participants

@Tom-Newton@kou@jorisvandenbossche@pitrou@felipecrv