DanielZhu58 opened a new pull request, #6717:
URL: https://github.com/apache/hive/pull/6717
### What changes were proposed in this pull request?
<!--
Please clarify what changes you are proposing. The purpose of this section
is to outline the changes and how this PR fixes the issue.
If possible, please consider writing useful notes for better and faster
reviews in your PR. See the examples below.
1. If you refactor some codes with changing classes, showing the class
hierarchy will help reviewers.
2. If you fix some SQL features, you can provide some references of other
DBMSes.
3. If there is design documentation, please add the link.
4. If there is a discussion in the mailing list, please add the link.
-->
This PR fixes CreateDatabaseHandler.java so that the managed directory for a
database is always created, regardless of whether MANAGEDLOCATION is explicitly
specified at database creation time.
Previously, dbMgdPath was only set when the user explicitly passed a managed
location URI; otherwise it was left null, and the managed directory creation
logic (guarded by if (dbMgdPath != null)) was skipped entirely. This PR changes
dbMgdPath to fall back to the already-computed defaultDbMgdPath when no managed
location is explicitly specified, so the managed directory is always created
using either the user-specified or the default path.
As part of this fix, the duplicated directory-creation logic for the managed
and external directories (each previously implemented as separate doAs + isDir
+ mkdirs blocks) has been consolidated into a single private helper method,
createDbDirectory, parameterized by the target path, whether to run as the
login (admin) user or the current user, and a label used for logging/error
messages.
### Why are the changes needed?
<!--
Please clarify why the changes are needed. For instance,
1. If you propose a new API, clarify the use case for a new API.
2. If you fix a bug, you can clarify why it is a bug.
-->
The correct behavior is for HMS to always create a managed directory path
for a database, whether or not a managed location is explicitly specified —
mirroring how the external directory is always created via a default fallback
path. Without this fix, some databases end up with only an external directory
and no managed directory, which can cause downstream failures for any operation
that expects the managed directory to exist (e.g. copying files into it).
### Does this PR introduce _any_ user-facing change?
<!--
Note that it means *any* user-facing change including all aspects such as
the documentation fix.
If yes, please clarify the previous behavior and the change this PR proposes
- provide the console output, description, screenshot and/or a reproducable
example to show the behavior difference if possible.
If possible, please also clarify if this is a user-facing change compared to
the released Hive versions or within the unreleased branches such as master.
If no, write 'No'.
-->
Yes. Previously, creating a database without an explicit MANAGEDLOCATION
could result in no managed directory being created on the filesystem. After
this change, the managed directory is always created at the default managed
location if one is not explicitly specified.
### How was this patch tested?
<!--
If tests were added, say they were added here. Please make sure to add some
test cases that check the changes thoroughly including negative and positive
cases if possible.
If it was tested in a way different from regular unit tests, please clarify
how you tested step by step, ideally copy and paste-able, so that other
reviewers can test and check, and descendants can verify in the future.
If tests were not added, please describe why they were not added and/or why
it was difficult to add.
-->
Unit tests and q tests.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]