Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HBASE-22648 : Introducing Snapshot TTL #371

Merged
merged 1 commit into from
Jul 22, 2019

Conversation

virajjasani
Copy link
Contributor

@virajjasani virajjasani commented Jul 10, 2019

  • Associate TTL in sec with Snapshot argument. e.g. snapshot 'table', 'snapshot', {TTL => 20}
  • If not specified, default TTL to be taken for Snapshot. Specified here: HConstants.DEFAULT_SNAPSHOT_TTL
  • If Snapshot is never meant to get expired, specify negative value for TTL. snapshot 'table', 'snapshot', {TTL => -2}

Copy link
Member

@liuml07 liuml07 left a comment

Choose a reason for hiding this comment

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

Posted some random comments. Overall looks good to me, if doc is also updated.

ttl > (Long.MAX_VALUE / 1000)) {
ttl = HConstants.DEFAULT_SNAPSHOT_TTL;
}
SnapshotDescription.Builder builder = snapshot.toBuilder();
Copy link
Member

Choose a reason for hiding this comment

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

Should the snapshot build with ttl optional here, i.e. move to if clause above?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The above if condition is to just update ttl. So regardless of whether we use default ttl or user provided ttl(ttl < -1 meaning never expiring ttl), we would have to build the snapshot anyways. Hence, kept this logic here.
Please let me know if this looks good

Copy link
Member

Choose a reason for hiding this comment

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

OK, thanks!

try {
List<SnapshotProtos.SnapshotDescription> completedSnapshotsList =
this.snapshotManager.getCompletedSnapshots();
if (CollectionUtils.isNotEmpty(completedSnapshotsList)) {
Copy link
Member

Choose a reason for hiding this comment

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

Not sure the if not-empty check is really needed since the for will skip if empty. It's not null.

@InterfaceAudience.Private
public class SnapshotCleanerChore extends ScheduledChore {

private static final Logger LOGGER = LoggerFactory.getLogger(SnapshotCleanerChore.class);
Copy link
Member

Choose a reason for hiding this comment

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

nit: s/LOGGER/LOG/ if following other places.

}
}
} catch (IOException e) {
LOGGER.error("Error while cleaning up Snapshots. Stopping Snapshot Cleaner Chore...", e);
Copy link
Member

Choose a reason for hiding this comment

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

"Stopping Snapshot Cleaner Chore..." might be confusing since it's still scheduled next time.


@Override
protected void chore() {
LOGGER.trace("Snapshot Cleaner Chore is starting up...");
Copy link
Member

Choose a reason for hiding this comment

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

Does it merit to add a config disabling this chore, in case of some data restore operation using about-to expire snapshots...

Copy link
Contributor Author

Choose a reason for hiding this comment

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

What you are suggesting is adding a config to disable and restart HMaster(sort of EBF release) should disable running this chore as I can have a check here that only if the config is not disabled, perform all these steps?
Is that correct?

Copy link
Member

Choose a reason for hiding this comment

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

Yes, exactly. Does it make sense?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Definitely it's good to have disable config. Thanks @liuml07

// set default ttl(sec) if it is not set already or the value is out of the range
if (ttl == SnapshotDescriptionUtils.NO_SNAPSHOT_TTL_SPECIFIED ||
ttl > (Long.MAX_VALUE / 1000)) {
ttl = HConstants.DEFAULT_SNAPSHOT_TTL;
Copy link
Member

Choose a reason for hiding this comment

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

nit: add a LOG.debug() message here?

EnvironmentEdgeManager.currentTime()));
Mockito.when(snapshotManager.getCompletedSnapshots()).thenReturn(snapshotDescriptionList);
try {
LOG.debug("2 Snapshots are completed but TTL is not expired for any of them");
Copy link
Member

Choose a reason for hiding this comment

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

This can be in INFO level?

@virajjasani
Copy link
Contributor Author

@liuml07 Thanks for the review. Updated the patch

@@ -1445,6 +1445,9 @@
"hbase.util.default.lossycounting.errorrate";
public static final String NOT_IMPLEMENTED = "Not implemented";

// Default Snapshot TTL - 30 days (good enough?)
public static final long DEFAULT_SNAPSHOT_TTL = 24 * 3600 * 30;
Copy link
Contributor

Choose a reason for hiding this comment

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

So, what's the usage of the default TTL? If user doesn't specify TTL, should we just use default Snapshot API to take snapshot and keep it forever? If user specifies TTL, we use the value user set.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

If the user doesn't specify TTL, we can take above value as TTL by default. Otherwise we can take user provided TTL anyways. However, if the user decides to keep the snapshot forever(worst case), the user can specify negative value as TTL. e.g.: https://github.com/apache/hbase/pull/371/files#diff-f7c3e813539ba771a69ad518ef8dee00R2772

Does this look good to you?

Copy link
Contributor

Choose a reason for hiding this comment

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

We should keep snapshot feature behaving the same as older version, especially if we are going to back-port branch-1 and branch-2, etc., i would suggest keeping snapshot forever by default.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@Reidddddd Thanks for your review. Should we keep all previous snapshots forever? I thought may be 30 days could be good? IMO if the snapshot is kept for more than a month, it could be a real miss. What is your opinion?
Moreover, I tried to provide one config hbase.master.cleaner.snapshot.disable, which if provided value "true", will prevent any snapshot from getting deleted - especially useful if some backup restore activity is going on for a couple of days.

cc: @apurtell

Copy link
Contributor

Choose a reason for hiding this comment

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

If hbase.master.cleaner.snapshot.disable is false by default, then 30 days is ok, since it is explicitly set true.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Updated the PR. Please review

Copy link
Contributor

Choose a reason for hiding this comment

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

What is the benefit of forcing TTL if a user does not specify it explicitly?
Even at other areas where TTL can be used (e.g. Cell TTL) we do not force a default TTL value. In case that is not specified by the user HBase will keep those cells forever.

To keep backward compatibility (even if it is hidden behind a secondary configuration parameter) and consistency with other, similar features I'd prefer to have TTL=FOREVER as default value.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Sure @petersomogyi I agree with having default TTL as Forever.
Would you be comfortable with this change: https://github.com/apache/hbase/pull/371/files#diff-f7c3e813539ba771a69ad518ef8dee00R2767 ?

Copy link
Contributor

Choose a reason for hiding this comment

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

I definitely prefer this version rather than fixed 30 days TTL.

What do you think about having a config parameter e.g. hbase.master.snapshot.ttl.default with value 0 or -1 which means TTL FOREVER. Users can change it 30 days if that is the preferred value for their use case. With this we keep compatibility and users could specify default snapshot TTL based on their needs.

Copy link
Contributor

Choose a reason for hiding this comment

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

The default TTL must be "forever". Anything else violates the principle of least surprise.

Use 0 to denote "forever"

@@ -1864,4 +1864,14 @@ possible configurations would overwhelm and obscure the important.
<description>Default is 5 minutes. Make it 30 seconds for tests. See
HBASE-19794 for some context.</description>
</property>
<property>
<name>hbase.master.cleaner.snapshot.interval</name>
<value>600000</value>
Copy link
Contributor

Choose a reason for hiding this comment

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

nit:
Not a strong opinion, I think 10m is too frequent for snapshot cleanup chore.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Should we keep 30 min or 1 hr?

private static final Logger LOG = LoggerFactory.getLogger(SnapshotCleanerChore.class);
private static final String SNAPSHOT_CLEANER_CHORE_NAME = "SnapshotCleaner";
private static final String SNAPSHOT_CLEANER_INTERVAL = "hbase.master.cleaner.snapshot.interval";
private static final int SNAPSHOT_CLEANER_DEFAULT_INTERVAL = 600 * 1000; // Default 10 min
Copy link
Contributor

Choose a reason for hiding this comment

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

So, you have this 10m defined in both here and the default config file. Is this a duplication?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Although 10m is defined as default config for hbase.master.cleaner.snapshot.interval, even in the absence of this config, we need to have a default value, which is what is represented by this constant.
Used on L56:

configuration.getInt(SNAPSHOT_CLEANER_INTERVAL, SNAPSHOT_CLEANER_DEFAULT_INTERVAL)

Please let me know if this looks good to you

final boolean isSnapshotChoreDisabled = this.configuration.getBoolean(
SNAPSHOT_CLEANER_DISABLE, false);
if (isSnapshotChoreDisabled) {
return;
Copy link
Contributor

Choose a reason for hiding this comment

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

log here?

@@ -124,6 +124,9 @@ public CompletedSnaphotDirectoriesFilter(FileSystem fs) {
/** Default value if no start time is specified */
public static final long NO_SNAPSHOT_START_TIME_SPECIFIED = 0;

// Default value if no ttl is specified for Snapshot
private static final long NO_SNAPSHOT_TTL_SPECIFIED = 0;

public static final String MASTER_SNAPSHOT_TIMEOUT_MILLIS = "hbase.snapshot.master.timeout.millis";
Copy link
Contributor

Choose a reason for hiding this comment

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

Actually, here we use ms for snapshot related timeout, is that a good idea to use second for TTL for consistent concern?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good point. However, from the end user perspective, do you think it would be better to provide sec while creating snapshot?
e.g. which one would be preferred for 1 min TTL?

snapshot 't1', 'sp1', {TTL => 60}
snapshot 't1', 'sp1', {TTL => 60000}

multiply by 1000 increases the no for end user to provide with increased TTL

Copy link
Contributor

Choose a reason for hiding this comment

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

So far, from shell perspective, it is the former. But i'm not sure if the hbase shell convert the 60s to 60000ms.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

shell doesn't convert it to ms. this will continue to flow as sec only untill this point: https://github.com/apache/hbase/pull/371/files#diff-5fc046382ccaa45c26b89ba3462e8175R92
Please let me know if this looks good to you

Copy link
Contributor

Choose a reason for hiding this comment

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

IIRC, hbase shell accepts seconds like cf's TTL, i prefer snapshot 't1', 'sp1', {TTL => 60}. But server side shall be ms, so where the convert happens? Can we follow that convert impl?


Default Snapshot TTL = 30 Days

While creating a Snapshot, if TTL in seconds is not specified, the Default `TTL` will be applicable.
Copy link
Contributor

Choose a reason for hiding this comment

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

I don't think using this TTL version snapshot to replace current one is a good idea.
Open to discussion about this more.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Sorry, I didn't get you. Are you suggesting that we should not keep 30 days as default snapshot TTL?
I am not sure what attribute you are referring to with: replace current one

@Apache-HBase
Copy link

💔 -1 overall

Vote Subsystem Runtime Comment
0 reexec 33 Docker mode activated.
_ Prechecks _
+1 hbaseanti 0 Patch does not have any anti-patterns.
+1 @author 0 The patch does not contain any @author tags.
+1 test4tests 0 The patch appears to include 3 new or modified test files.
_ master Compile Tests _
0 mvndep 25 Maven dependency ordering for branch
+1 mvninstall 255 master passed
+1 compile 160 master passed
+1 checkstyle 128 master passed
0 refguide 440 branch has no errors when building the reference guide. See footer for rendered docs, which you should manually inspect.
+1 shadedjars 257 branch has no errors when building our shaded downstream artifacts.
0 findbugs 0 Skipped patched modules with no Java source: .
+1 findbugs 512 master passed
+1 javadoc 251 master passed
_ Patch Compile Tests _
0 mvndep 12 Maven dependency ordering for patch
+1 mvninstall 225 the patch passed
+1 compile 156 the patch passed
+1 cc 156 the patch passed
+1 javac 156 the patch passed
-1 checkstyle 128 root: The patch generated 3 new + 358 unchanged - 0 fixed = 361 total (was 358)
-1 rubocop 7 The patch generated 2 new + 273 unchanged - 1 fixed = 275 total (was 274)
+1 ruby-lint 1 There were no new ruby-lint issues.
+1 whitespace 0 The patch has no whitespace issues.
+1 xml 1 The patch has no ill-formed XML file.
0 refguide 440 patch has no errors when building the reference guide. See footer for rendered docs, which you should manually inspect.
+1 shadedjars 271 patch has no errors when building our shaded downstream artifacts.
+1 hadoopcheck 706 Patch does not cause any errors with Hadoop 2.8.5 2.9.2 or 3.1.2.
+1 hbaseprotoc 383 the patch passed
0 findbugs 0 Skipped patched modules with no Java source: .
-1 findbugs 106 hbase-server in the patch failed.
+1 javadoc 259 the patch passed
_ Other Tests _
-1 unit 11279 root in the patch failed.
+1 asflicense 176 The patch does not generate ASF License warnings.
16920
Reason Tests
Failed junit tests hadoop.hbase.snapshot.TestExportSnapshotNoCluster
Subsystem Report/Notes
Docker Client=18.09.7 Server=18.09.7 base: https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/1/artifact/out/Dockerfile
GITHUB PR #371
Optional Tests dupname asflicense javac javadoc unit findbugs shadedjars hadoopcheck hbaseanti checkstyle compile refguide xml cc hbaseprotoc rubocop ruby_lint
uname Linux a8fced1509c7 4.4.0-138-generic #164-Ubuntu SMP Tue Oct 2 17:16:02 UTC 2018 x86_64 GNU/Linux
Build tool maven
Personality /testptch/patchprocess/precommit/personality/provided.sh
git revision master / 438bf32
maven version: Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T18:33:14Z)
Default Java 1.8.0_181
refguide https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/1/artifact/out/branch-site/book.html
findbugs v3.1.11
checkstyle https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/1/artifact/out/diff-checkstyle-root.txt
rubocop v0.72.0
rubocop https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/1/artifact/out/diff-patch-rubocop.txt
ruby-lint v2.3.1
refguide https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/1/artifact/out/patch-site/book.html
findbugs https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/1/artifact/out/patch-findbugs-hbase-server.txt
unit https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/1/artifact/out/patch-unit-root.txt
Test Results https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/1/testReport/
Max. process+thread count 5475 (vs. ulimit of 10000)
modules C: hbase-protocol-shaded hbase-common hbase-protocol hbase-client hbase-server hbase-shell . U: .
Console output https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/1/console
Powered by Apache Yetus 0.9.0 http://yetus.apache.org

This message was automatically generated.

+ ((table != null) ? table : null) + " /owner = " + ((owner != null) ? owner : null)
+ (creationTime != -1 ? ("/creationtime = " + creationTime) : "")
+ (version != -1 ? ("/version = " + version) : "");
return "SnapshotDescription: name = " + name + "/table = "
Copy link
Contributor

Choose a reason for hiding this comment

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

Can we use StringBuilder to improve the readability?

@@ -2932,12 +2932,17 @@ public static SnapshotType createSnapshotType(SnapshotProtos.SnapshotDescription
if (snapshotDesc.getCreationTime() != -1L) {
builder.setCreationTime(snapshotDesc.getCreationTime());
}
if (snapshotDesc.getTtl() != -1L && snapshotDesc.getTtl() < Long.MAX_VALUE / 1000) {
Copy link
Contributor

Choose a reason for hiding this comment

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

snapshotDesc.getTtl() < Long.MAX_VALUE / 1000, not quite understand here, would you mind explaining it?

Copy link
Contributor

Choose a reason for hiding this comment

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

Hmm, you are converting the time to ms, i get you.

Copy link
Contributor

Choose a reason for hiding this comment

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

TimeUnit has utility functions for this, better than dividing by constants as the intent is clear.

@@ -35,15 +35,16 @@ message SnapshotDescription {
required string name = 1;
optional string table = 2; // not needed for delete, but checked for in taking snapshot
optional int64 creation_time = 3 [default = 0];
optional int64 ttl = 4 [default = 0];
Copy link
Contributor

Choose a reason for hiding this comment

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

It will break wire compatibility, ttl should be appended at the end of parameters sequence.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Makes sense. Will change this

Copy link
Contributor

@Reidddddd Reidddddd left a comment

Choose a reason for hiding this comment

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

Good, pr. Just leave few comments!

@Apache-HBase
Copy link

💔 -1 overall

Vote Subsystem Runtime Comment
0 reexec 32 Docker mode activated.
_ Prechecks _
+1 hbaseanti 0 Patch does not have any anti-patterns.
+1 @author 0 The patch does not contain any @author tags.
+1 test4tests 0 The patch appears to include 3 new or modified test files.
_ master Compile Tests _
0 mvndep 26 Maven dependency ordering for branch
+1 mvninstall 256 master passed
+1 compile 173 master passed
+1 checkstyle 143 master passed
0 refguide 446 branch has no errors when building the reference guide. See footer for rendered docs, which you should manually inspect.
+1 shadedjars 263 branch has no errors when building our shaded downstream artifacts.
0 findbugs 0 Skipped patched modules with no Java source: .
+1 findbugs 522 master passed
+1 javadoc 255 master passed
_ Patch Compile Tests _
0 mvndep 12 Maven dependency ordering for patch
+1 mvninstall 240 the patch passed
+1 compile 154 the patch passed
+1 cc 154 the patch passed
+1 javac 154 the patch passed
+1 checkstyle 128 the patch passed
-1 rubocop 7 The patch generated 2 new + 273 unchanged - 1 fixed = 275 total (was 274)
+1 ruby-lint 2 There were no new ruby-lint issues.
+1 whitespace 0 The patch has no whitespace issues.
+1 xml 1 The patch has no ill-formed XML file.
0 refguide 425 patch has no errors when building the reference guide. See footer for rendered docs, which you should manually inspect.
+1 shadedjars 254 patch has no errors when building our shaded downstream artifacts.
+1 hadoopcheck 715 Patch does not cause any errors with Hadoop 2.8.5 2.9.2 or 3.1.2.
+1 hbaseprotoc 423 the patch passed
0 findbugs 0 Skipped patched modules with no Java source: .
+1 findbugs 567 the patch passed
+1 javadoc 274 the patch passed
_ Other Tests _
+1 unit 12782 root in the patch passed.
+1 asflicense 192 The patch does not generate ASF License warnings.
18670
Subsystem Report/Notes
Docker Client=18.09.7 Server=18.09.7 base: https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/2/artifact/out/Dockerfile
GITHUB PR #371
Optional Tests dupname asflicense javac javadoc unit findbugs shadedjars hadoopcheck hbaseanti checkstyle compile refguide xml cc hbaseprotoc rubocop ruby_lint
uname Linux 956d8f1392e1 4.4.0-139-generic #165-Ubuntu SMP Wed Oct 24 10:58:50 UTC 2018 x86_64 GNU/Linux
Build tool maven
Personality /testptch/patchprocess/precommit/personality/provided.sh
git revision master / 74731c2
maven version: Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T18:33:14Z)
Default Java 1.8.0_181
refguide https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/2/artifact/out/branch-site/book.html
findbugs v3.1.11
rubocop v0.72.0
rubocop https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/2/artifact/out/diff-patch-rubocop.txt
ruby-lint v2.3.1
refguide https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/2/artifact/out/patch-site/book.html
Test Results https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/2/testReport/
Max. process+thread count 5540 (vs. ulimit of 10000)
modules C: hbase-protocol-shaded hbase-common hbase-protocol hbase-client hbase-server hbase-shell . U: .
Console output https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/2/console
Powered by Apache Yetus 0.9.0 http://yetus.apache.org

This message was automatically generated.

Copy link
Contributor

@apurtell apurtell left a comment

Choose a reason for hiding this comment

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

Initial round of review feedback

@@ -2932,12 +2932,17 @@ public static SnapshotType createSnapshotType(SnapshotProtos.SnapshotDescription
if (snapshotDesc.getCreationTime() != -1L) {
builder.setCreationTime(snapshotDesc.getCreationTime());
}
if (snapshotDesc.getTtl() != -1L && snapshotDesc.getTtl() < Long.MAX_VALUE / 1000) {
Copy link
Contributor

Choose a reason for hiding this comment

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

TimeUnit has utility functions for this, better than dividing by constants as the intent is clear.

@@ -1445,6 +1445,9 @@
"hbase.util.default.lossycounting.errorrate";
public static final String NOT_IMPLEMENTED = "Not implemented";

// Default Snapshot TTL - 30 days (good enough?)
public static final long DEFAULT_SNAPSHOT_TTL = 24 * 3600 * 30;
Copy link
Contributor

Choose a reason for hiding this comment

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

The default TTL must be "forever". Anything else violates the principle of least surprise.

Use 0 to denote "forever"

<value>false</value>
<description>
If Snapshot is created without specifying TTL, we can choose to
apply default TTL(30 days). If this config value is set to true,
Copy link
Contributor

Choose a reason for hiding this comment

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

Comment does not make sense when default TTL is "forever". See above. Default TTL must be forever.

hbase-protocol/src/main/protobuf/HBase.proto Show resolved Hide resolved
@Override
protected void chore() {
final boolean isSnapshotChoreDisabled = this.configuration.getBoolean(
SNAPSHOT_CLEANER_DISABLE, false);
Copy link
Contributor

Choose a reason for hiding this comment

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

If disabled do not create the chore.

There is nothing useful about a chore that wakes up only to log repeatedly that it will do nothing. :-)

LOG.debug("Snapshot Cleaner Chore is disabled. Not performing any cleanup...");
return;
}
LOG.trace("Snapshot Cleaner Chore is starting up...");
Copy link
Contributor

Choose a reason for hiding this comment

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

All LOG.debug and LOG.trace invocations should be guarded by if (LOG.isDebugEnabled()) or if (LOG.isTraceEnabled())

long snapshotTtl = snapshotDescription.getTtl();
/*
* Backward compatibility after the patch deployment on HMaster
* Any snapshot with negative or zero ttl should not be deleted
Copy link
Contributor

Choose a reason for hiding this comment

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

Again call 0 ttl "forever" and then backwards compat is trivial. This comment should also be updated to note that 0 TTL is forever.

* Default ttl value specified by {@HConstants.DEFAULT_SNAPSHOT_TTL}
*/
if (snapshotCreatedTime > 0 && snapshotTtl > 0 &&
snapshotTtl < (Long.MAX_VALUE / 1000)) {
Copy link
Contributor

Choose a reason for hiding this comment

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

Use TimeUnit for time unit conversions

@@ -99,6 +100,7 @@
<% } %>
</td>
<td><%= new Date(snapshot.getCreationTime()) %></td>
<td><%= snapshot.getTtl() %></td>
Copy link
Contributor

Choose a reason for hiding this comment

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

Can print "FOREVER" here or something similar if value is 0, so the user is less likely to be confused

@Apache-HBase
Copy link

💔 -1 overall

Vote Subsystem Runtime Comment
0 reexec 61 Docker mode activated.
_ Prechecks _
+1 hbaseanti 0 Patch does not have any anti-patterns.
+1 @author 0 The patch does not contain any @author tags.
+1 test4tests 0 The patch appears to include 3 new or modified test files.
_ master Compile Tests _
0 mvndep 26 Maven dependency ordering for branch
+1 mvninstall 335 master passed
+1 compile 218 master passed
+1 checkstyle 169 master passed
0 refguide 514 branch has no errors when building the reference guide. See footer for rendered docs, which you should manually inspect.
+1 shadedjars 360 branch has no errors when building our shaded downstream artifacts.
0 findbugs 0 Skipped patched modules with no Java source: .
+1 findbugs 670 master passed
+1 javadoc 341 master passed
_ Patch Compile Tests _
0 mvndep 15 Maven dependency ordering for patch
+1 mvninstall 309 the patch passed
+1 compile 214 the patch passed
+1 cc 214 the patch passed
+1 javac 214 the patch passed
+1 checkstyle 168 the patch passed
-1 rubocop 9 The patch generated 2 new + 273 unchanged - 1 fixed = 275 total (was 274)
+1 ruby-lint 2 There were no new ruby-lint issues.
+1 whitespace 0 The patch has no whitespace issues.
+1 xml 2 The patch has no ill-formed XML file.
0 refguide 577 patch has no errors when building the reference guide. See footer for rendered docs, which you should manually inspect.
+1 shadedjars 346 patch has no errors when building our shaded downstream artifacts.
+1 hadoopcheck 1001 Patch does not cause any errors with Hadoop 2.8.5 2.9.2 or 3.1.2.
+1 hbaseprotoc 532 the patch passed
0 findbugs 0 Skipped patched modules with no Java source: .
+1 findbugs 751 the patch passed
+1 javadoc 340 the patch passed
_ Other Tests _
-1 unit 17507 root in the patch failed.
+1 asflicense 200 The patch does not generate ASF License warnings.
25182
Reason Tests
Failed junit tests hadoop.hbase.client.TestAsyncTableGetMultiThreaded
Subsystem Report/Notes
Docker Client=18.09.7 Server=18.09.7 base: https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/3/artifact/out/Dockerfile
GITHUB PR #371
Optional Tests dupname asflicense javac javadoc unit findbugs shadedjars hadoopcheck hbaseanti checkstyle compile refguide xml cc hbaseprotoc rubocop ruby_lint
uname Linux 9c8bd9b801f1 4.4.0-138-generic #164-Ubuntu SMP Tue Oct 2 17:16:02 UTC 2018 x86_64 GNU/Linux
Build tool maven
Personality /testptch/patchprocess/precommit/personality/provided.sh
git revision master / cc38de1
maven version: Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T18:33:14Z)
Default Java 1.8.0_181
refguide https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/3/artifact/out/branch-site/book.html
findbugs v3.1.11
rubocop v0.72.0
rubocop https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/3/artifact/out/diff-patch-rubocop.txt
ruby-lint v2.3.1
refguide https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/3/artifact/out/patch-site/book.html
unit https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/3/artifact/out/patch-unit-root.txt
Test Results https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/3/testReport/
Max. process+thread count 5114 (vs. ulimit of 10000)
modules C: hbase-protocol-shaded hbase-common hbase-protocol hbase-client hbase-server hbase-shell . U: .
Console output https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/3/console
Powered by Apache Yetus 0.9.0 http://yetus.apache.org

This message was automatically generated.

Copy link
Contributor

@apurtell apurtell left a comment

Choose a reason for hiding this comment

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

Second round of feedback.
Looking good

* @throws SnapshotCreationException if snapshot creation failed
* @throws IllegalArgumentException if the snapshot request is formatted incorrectly
*/
default void snapshot(String snapshotName, TableName tableName, SnapshotType type, Long ttl)
Copy link
Contributor

Choose a reason for hiding this comment

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

TTL may be the first of more than one snapshot attribute we'd want to pass through this API. We can create a new method (and more backwards compat methods) every time, or make only one change: instead of parameter 'ttl' of type Long, introduce a parameter 'attributes' or 'properties' of type Map<String,Object> or java.util.Properties?

}

public SnapshotDescription(String name, TableName table, SnapshotType type, String owner,
long creationTime, int version) {
long creationTime, long ttl, int version) {
Copy link
Contributor

Choose a reason for hiding this comment

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

Likewise I would say that the current set of method parameters here are fine but 'ttl' is more of a minor or situational attribute of the snapshot. We should stop creating more SnapshotDescription constructors and introduce a generic map for minor attributes. For your consideration.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Totally Agree with having minor attributes Map. Also, given that you are fine with having getters and setters of ttl present for SnapshotDescription and protos have well usable builder pattern, I believe it's fine to keep adding each minor attribute explicitly to protos: Snapshot.proto and HBase.proto

@@ -139,15 +146,27 @@ public long getCreationTime() {
return this.creationTime;
}

// get snapshot ttl in sec
public long getTtl() {
Copy link
Contributor

Choose a reason for hiding this comment

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

Getters and setters for ttl is fine even if also using generic attribute map with getters and setters for elements of same.

public static final long DEFAULT_SNAPSHOT_TTL = 0;

// User defined Default TTL config key
public static final String DEFAULT_SNAPSHOT_TTL_CONFIG_KEY = "hbase.master.snapshot.ttl.default";
Copy link
Contributor

Choose a reason for hiding this comment

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

This should be "hbase.master.snapshot.ttl" because you are setting an effective value.

(Calling the default constant DEFAULT_SNAPSHOT_TTL is fine because that actually is naming a default value. )

Minor point. If you like.

</description>
</property>
<property>
<name>hbase.master.snapshot.ttl.default</name>
Copy link
Contributor

Choose a reason for hiding this comment

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

Same

@Reidddddd
Copy link
Contributor

LGTM, and I think Andrew's comments are good and should be followed.
And please make sure the QA failed tests warning in JIRA are unrelated, because i can still see a snapshot related failed test, TestSnapshotTemporaryDirectory

@Apache-HBase
Copy link

💔 -1 overall

Vote Subsystem Runtime Comment
0 reexec 30 Docker mode activated.
_ Prechecks _
+1 hbaseanti 0 Patch does not have any anti-patterns.
+1 @author 0 The patch does not contain any @author tags.
+1 test4tests 0 The patch appears to include 3 new or modified test files.
_ master Compile Tests _
0 mvndep 24 Maven dependency ordering for branch
+1 mvninstall 227 master passed
+1 compile 160 master passed
+1 checkstyle 128 master passed
0 refguide 433 branch has no errors when building the reference guide. See footer for rendered docs, which you should manually inspect.
+1 shadedjars 262 branch has no errors when building our shaded downstream artifacts.
0 findbugs 0 Skipped patched modules with no Java source: .
-1 findbugs 28 hbase-client in master failed.
-1 findbugs 142 hbase-server in master failed.
-1 javadoc 25 hbase-server in master failed.
_ Patch Compile Tests _
0 mvndep 12 Maven dependency ordering for patch
+1 mvninstall 235 the patch passed
+1 compile 160 the patch passed
+1 cc 160 the patch passed
+1 javac 160 the patch passed
+1 checkstyle 130 the patch passed
-1 rubocop 7 The patch generated 2 new + 273 unchanged - 1 fixed = 275 total (was 274)
+1 ruby-lint 0 There were no new ruby-lint issues.
-1 whitespace 0 The patch has 2 line(s) that end in whitespace. Use git apply --whitespace=fix <<patch_file>>. Refer https://git-scm.com/docs/git-apply
+1 xml 1 The patch has no ill-formed XML file.
0 refguide 432 patch has no errors when building the reference guide. See footer for rendered docs, which you should manually inspect.
+1 shadedjars 260 patch has no errors when building our shaded downstream artifacts.
+1 hadoopcheck 714 Patch does not cause any errors with Hadoop 2.8.5 2.9.2 or 3.1.2.
+1 hbaseprotoc 406 the patch passed
0 findbugs 0 Skipped patched modules with no Java source: .
+1 findbugs 578 the patch passed
+1 javadoc 277 the patch passed
_ Other Tests _
+1 unit 12370 root in the patch passed.
+1 asflicense 241 The patch does not generate ASF License warnings.
18139
Subsystem Report/Notes
Docker Client=18.09.7 Server=18.09.7 base: https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/4/artifact/out/Dockerfile
GITHUB PR #371
Optional Tests dupname asflicense javac javadoc unit findbugs shadedjars hadoopcheck hbaseanti checkstyle compile refguide xml cc hbaseprotoc rubocop ruby_lint
uname Linux 0f934639f9ad 4.4.0-138-generic #164-Ubuntu SMP Tue Oct 2 17:16:02 UTC 2018 x86_64 GNU/Linux
Build tool maven
Personality /testptch/patchprocess/precommit/personality/provided.sh
git revision master / 72e58a8
maven version: Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T18:33:14Z)
Default Java 1.8.0_181
refguide https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/4/artifact/out/branch-site/book.html
findbugs v3.1.11
findbugs https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/4/artifact/out/branch-findbugs-hbase-client.txt
findbugs https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/4/artifact/out/branch-findbugs-hbase-server.txt
javadoc https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/4/artifact/out/branch-javadoc-hbase-server.txt
rubocop v0.72.0
rubocop https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/4/artifact/out/diff-patch-rubocop.txt
ruby-lint v2.3.1
whitespace https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/4/artifact/out/whitespace-eol.txt
refguide https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/4/artifact/out/patch-site/book.html
Test Results https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/4/testReport/
Max. process+thread count 4903 (vs. ulimit of 10000)
modules C: hbase-protocol-shaded hbase-common hbase-protocol hbase-client hbase-server hbase-shell . U: .
Console output https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/4/console
Powered by Apache Yetus 0.9.0 http://yetus.apache.org

This message was automatically generated.

@virajjasani
Copy link
Contributor Author

LGTM, and I think Andrew's comments are good and should be followed.
And please make sure the QA failed tests warning in JIRA are unrelated, because i can still see a snapshot related failed test, TestSnapshotTemporaryDirectory

Thanks @Reidddddd
The test is working fine locally and unit test is also +1 in recent commit summary

@virajjasani
Copy link
Contributor Author

Not sure why the build is not auto-triggered. Can someone please help me retrigger the build: https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/

Updated the patch based on latest review comments. Please review @apurtell

@Apache-HBase
Copy link

💔 -1 overall

Vote Subsystem Runtime Comment
0 reexec 0 Docker mode activated.
-1 patch 6 #371 does not apply to master. Rebase required? Wrong Branch? See https://yetus.apache.org/documentation/in-progress/precommit-patchnames for help.
Subsystem Report/Notes
GITHUB PR #371
Console output https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/5/console
Powered by Apache Yetus 0.9.0 http://yetus.apache.org

This message was automatically generated.

@Apache-HBase
Copy link

💔 -1 overall

Vote Subsystem Runtime Comment
0 reexec 31 Docker mode activated.
_ Prechecks _
+1 hbaseanti 0 Patch does not have any anti-patterns.
+1 @author 0 The patch does not contain any @author tags.
+1 test4tests 0 The patch appears to include 3 new or modified test files.
_ master Compile Tests _
0 mvndep 22 Maven dependency ordering for branch
+1 mvninstall 241 master passed
+1 compile 162 master passed
+1 checkstyle 133 master passed
0 refguide 438 branch has no errors when building the reference guide. See footer for rendered docs, which you should manually inspect.
+1 shadedjars 266 branch has no errors when building our shaded downstream artifacts.
0 findbugs 0 Skipped patched modules with no Java source: .
+1 findbugs 531 master passed
+1 javadoc 273 master passed
_ Patch Compile Tests _
0 mvndep 12 Maven dependency ordering for patch
+1 mvninstall 239 the patch passed
+1 compile 164 the patch passed
+1 cc 164 the patch passed
+1 javac 164 the patch passed
+1 checkstyle 136 the patch passed
-1 rubocop 8 The patch generated 3 new + 273 unchanged - 1 fixed = 276 total (was 274)
+1 ruby-lint 1 There were no new ruby-lint issues.
+1 whitespace 0 The patch has no whitespace issues.
+1 xml 2 The patch has no ill-formed XML file.
0 refguide 447 patch has no errors when building the reference guide. See footer for rendered docs, which you should manually inspect.
+1 shadedjars 269 patch has no errors when building our shaded downstream artifacts.
+1 hadoopcheck 749 Patch does not cause any errors with Hadoop 2.8.5 2.9.2 or 3.1.2.
+1 hbaseprotoc 414 the patch passed
0 findbugs 0 Skipped patched modules with no Java source: .
+1 findbugs 576 the patch passed
+1 javadoc 275 the patch passed
_ Other Tests _
+1 unit 12560 root in the patch passed.
+1 asflicense 228 The patch does not generate ASF License warnings.
18578
Subsystem Report/Notes
Docker Client=18.09.8 Server=18.09.8 base: https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/6/artifact/out/Dockerfile
GITHUB PR #371
Optional Tests dupname asflicense javac javadoc unit findbugs shadedjars hadoopcheck hbaseanti checkstyle compile refguide xml cc hbaseprotoc rubocop ruby_lint
uname Linux 7081e9146fad 4.4.0-138-generic #164-Ubuntu SMP Tue Oct 2 17:16:02 UTC 2018 x86_64 GNU/Linux
Build tool maven
Personality /testptch/patchprocess/precommit/personality/provided.sh
git revision master / 00075ea
maven version: Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T18:33:14Z)
Default Java 1.8.0_181
refguide https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/6/artifact/out/branch-site/book.html
findbugs v3.1.11
rubocop v0.73.0
rubocop https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/6/artifact/out/diff-patch-rubocop.txt
ruby-lint v2.3.1
refguide https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/6/artifact/out/patch-site/book.html
Test Results https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/6/testReport/
Max. process+thread count 5409 (vs. ulimit of 10000)
modules C: hbase-protocol-shaded hbase-common hbase-protocol hbase-client hbase-server hbase-shell . U: .
Console output https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/6/console
Powered by Apache Yetus 0.9.0 http://yetus.apache.org

This message was automatically generated.

@Apache-HBase
Copy link

💔 -1 overall

Vote Subsystem Runtime Comment
0 reexec 32 Docker mode activated.
_ Prechecks _
+1 dupname 0 No case conflicting files found.
+1 hbaseanti 0 Patch does not have any anti-patterns.
+1 @author 0 The patch does not contain any @author tags.
+1 test4tests 0 The patch appears to include 3 new or modified test files.
_ master Compile Tests _
0 mvndep 7 Maven dependency ordering for branch
+1 mvninstall 261 master passed
+1 compile 177 master passed
+1 checkstyle 157 master passed
0 refguide 476 branch has no errors when building the reference guide. See footer for rendered docs, which you should manually inspect.
+1 shadedjars 284 branch has no errors when building our shaded downstream artifacts.
+1 javadoc 273 master passed
0 spotbugs 225 Used deprecated FindBugs config; considering switching to SpotBugs.
+1 findbugs 1508 master passed
_ Patch Compile Tests _
0 mvndep 13 Maven dependency ordering for patch
+1 mvninstall 261 the patch passed
+1 compile 179 the patch passed
+1 cc 179 the patch passed
+1 javac 179 the patch passed
+1 checkstyle 156 the patch passed
-1 rubocop 8 The patch generated 3 new + 273 unchanged - 1 fixed = 276 total (was 274)
+1 whitespace 0 The patch has no whitespace issues.
+1 xml 1 The patch has no ill-formed XML file.
0 refguide 470 patch has no errors when building the reference guide. See footer for rendered docs, which you should manually inspect.
+1 shadedjars 282 patch has no errors when building our shaded downstream artifacts.
+1 hadoopcheck 822 Patch does not cause any errors with Hadoop 2.8.5 2.9.2 or 3.1.2.
+1 hbaseprotoc 416 the patch passed
+1 javadoc 277 the patch passed
+1 findbugs 1399 the patch passed
_ Other Tests _
-1 unit 9119 root in the patch failed.
+1 asflicense 192 The patch does not generate ASF License warnings.
17187
Reason Tests
Failed junit tests hadoop.hbase.master.assignment.TestCloseRegionWhileRSCrash
Subsystem Report/Notes
Docker Client=18.09.8 Server=18.09.8 base: https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/7/artifact/out/Dockerfile
GITHUB PR #371
Optional Tests dupname asflicense javac javadoc unit spotbugs findbugs shadedjars hadoopcheck hbaseanti checkstyle compile refguide xml cc hbaseprotoc rubocop
uname Linux 9995223bf93d 4.4.0-138-generic #164-Ubuntu SMP Tue Oct 2 17:16:02 UTC 2018 x86_64 GNU/Linux
Build tool maven
Personality /home/jenkins/jenkins-slave/workspace/HBase-PreCommit-GitHub-PR_PR-371/out/precommit/personality/provided.sh
git revision master / c9293b0
Default Java 1.8.0_181
refguide https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/7/artifact/out/branch-site/book.html
rubocop https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/7/artifact/out/diff-patch-rubocop.txt
refguide https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/7/artifact/out/patch-site/book.html
unit https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/7/artifact/out/patch-unit-root.txt
Test Results https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/7/testReport/
Max. process+thread count 4992 (vs. ulimit of 10000)
modules C: hbase-protocol-shaded hbase-common hbase-protocol hbase-client hbase-server hbase-shell . U: .
Console output https://builds.apache.org/job/HBase-PreCommit-GitHub-PR/job/PR-371/7/console
versions git=2.11.0 maven=2018-06-17T18:33:14Z) findbugs=3.1.11 rubocop=0.73.0
Powered by Apache Yetus 0.10.0 http://yetus.apache.org

This message was automatically generated.

@apurtell
Copy link
Contributor

The PR is approved. Will merge/commit and pick back these changes. Thanks @virajjasani

@apurtell apurtell merged commit 9615c64 into apache:master Jul 22, 2019
asfgit pushed a commit that referenced this pull request Jul 22, 2019
Signed-off-by: Reid Chan <reidchan@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>

Conflicts:
	hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
	hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.java
asfgit pushed a commit that referenced this pull request Jul 23, 2019
Signed-off-by: Reid Chan <reidchan@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>
Co-authored-by: Andrew Purtell <apurtell@apache.org>

Conflicts:
	hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
	hbase-client/src/main/java/org/apache/hadoop/hbase/client/SnapshotDescription.java
	hbase-client/src/main/java/org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java
	hbase-common/src/main/java/org/apache/hadoop/hbase/HConstants.java
	hbase-common/src/main/resources/hbase-default.xml
	hbase-protocol-shaded/src/main/protobuf/Snapshot.proto
	hbase-protocol/src/main/protobuf/HBase.proto
	hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
	hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotInfo.java
	hbase-server/src/main/resources/hbase-webapps/master/snapshot.jsp
	hbase-server/src/main/resources/hbase-webapps/master/snapshotsStats.jsp
	hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestSnapshotFromClient.java
	hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestSnapshotTemporaryDirectory.java
	hbase-shell/src/main/ruby/hbase/admin.rb
	src/main/asciidoc/_chapters/hbase-default.adoc
infraio pushed a commit to infraio/hbase that referenced this pull request Aug 17, 2020
Signed-off-by: Reid Chan <reidchan@apache.org>
Signed-off-by: Andrew Purtell <apurtell@apache.org>

Conflicts:
	hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
	hbase-server/src/main/java/org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.java
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
7 participants