Skip to content

Commit 83698f7

Browse files
droudnitskyDaniel Roudnitsky
authored andcommitted
HBASE-28608 Correct client meta operation timeout to default to client operation timeout (#6000)
Co-authored-by: Daniel Roudnitsky <[email protected]> Signed-off-by: Duo Zhang <[email protected]> (cherry picked from commit beb36e8)
1 parent 87ffda8 commit 83698f7

File tree

4 files changed

+72
-6
lines changed

4 files changed

+72
-6
lines changed

hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncConnectionConfiguration.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,11 @@ class AsyncConnectionConfiguration {
149149
private final int maxKeyValueSize;
150150

151151
AsyncConnectionConfiguration(Configuration conf) {
152-
this.metaOperationTimeoutNs = TimeUnit.MILLISECONDS.toNanos(
153-
conf.getLong(HBASE_CLIENT_META_OPERATION_TIMEOUT, DEFAULT_HBASE_CLIENT_OPERATION_TIMEOUT));
154-
this.operationTimeoutNs = TimeUnit.MILLISECONDS.toNanos(
155-
conf.getLong(HBASE_CLIENT_OPERATION_TIMEOUT, DEFAULT_HBASE_CLIENT_OPERATION_TIMEOUT));
152+
long operationTimeoutMs =
153+
conf.getLong(HBASE_CLIENT_OPERATION_TIMEOUT, DEFAULT_HBASE_CLIENT_OPERATION_TIMEOUT);
154+
this.operationTimeoutNs = TimeUnit.MILLISECONDS.toNanos(operationTimeoutMs);
155+
this.metaOperationTimeoutNs = TimeUnit.MILLISECONDS
156+
.toNanos(conf.getLong(HBASE_CLIENT_META_OPERATION_TIMEOUT, operationTimeoutMs));
156157
long rpcTimeoutMs = conf.getLong(HBASE_RPC_TIMEOUT_KEY, DEFAULT_HBASE_RPC_TIMEOUT);
157158
this.rpcTimeoutNs = TimeUnit.MILLISECONDS.toNanos(rpcTimeoutMs);
158159
long readRpcTimeoutMillis = conf.getLong(HBASE_RPC_READ_TIMEOUT_KEY, rpcTimeoutMs);

hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionConfiguration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ public class ConnectionConfiguration {
8787
WRITE_BUFFER_PERIODIC_FLUSH_TIMERTICK_MS, WRITE_BUFFER_PERIODIC_FLUSH_TIMERTICK_MS_DEFAULT);
8888

8989
this.metaOperationTimeout = conf.getInt(HConstants.HBASE_CLIENT_META_OPERATION_TIMEOUT,
90-
HConstants.DEFAULT_HBASE_CLIENT_OPERATION_TIMEOUT);
90+
conf.getInt(HConstants.HBASE_CLIENT_OPERATION_TIMEOUT,
91+
HConstants.DEFAULT_HBASE_CLIENT_OPERATION_TIMEOUT));
9192

9293
this.operationTimeout = conf.getInt(HConstants.HBASE_CLIENT_OPERATION_TIMEOUT,
9394
HConstants.DEFAULT_HBASE_CLIENT_OPERATION_TIMEOUT);

hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestAsyncConnectionConfiguration.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import org.junit.experimental.categories.Category;
3333

3434
/**
35-
* See HBASE-24513.
35+
* See HBASE-24513, HBASE-28608.
3636
*/
3737
@Category({ ClientTests.class, SmallTests.class })
3838
public class TestAsyncConnectionConfiguration {
@@ -69,4 +69,16 @@ public void testDefaultReadWriteRpcTimeout() {
6969
assertEquals(expected, config.getReadRpcTimeoutNs());
7070
assertEquals(expected, config.getWriteRpcTimeoutNs());
7171
}
72+
73+
@Test
74+
public void testDefaultMetaOperationTimeout() {
75+
Configuration conf = HBaseConfiguration.create();
76+
long timeoutMs = 1000;
77+
conf.setLong(HConstants.HBASE_CLIENT_OPERATION_TIMEOUT, timeoutMs);
78+
AsyncConnectionConfiguration config = new AsyncConnectionConfiguration(conf);
79+
long expected = TimeUnit.MILLISECONDS.toNanos(timeoutMs);
80+
assertEquals(expected, config.getOperationTimeoutNs());
81+
assertEquals(expected, config.getMetaOperationTimeoutNs());
82+
}
83+
7284
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
package org.apache.hadoop.hbase.client;
19+
20+
import static org.junit.Assert.assertEquals;
21+
22+
import org.apache.hadoop.conf.Configuration;
23+
import org.apache.hadoop.hbase.HBaseClassTestRule;
24+
import org.apache.hadoop.hbase.HBaseConfiguration;
25+
import org.apache.hadoop.hbase.HConstants;
26+
import org.apache.hadoop.hbase.testclassification.ClientTests;
27+
import org.apache.hadoop.hbase.testclassification.SmallTests;
28+
import org.junit.ClassRule;
29+
import org.junit.Test;
30+
import org.junit.experimental.categories.Category;
31+
32+
/**
33+
* See HBASE-28608. Configuration tests for (non async) connections
34+
*/
35+
@Category({ ClientTests.class, SmallTests.class })
36+
public class TestConnectionConfiguration {
37+
38+
@ClassRule
39+
public static final HBaseClassTestRule CLASS_RULE =
40+
HBaseClassTestRule.forClass(TestConnectionConfiguration.class);
41+
42+
@Test
43+
public void testDefaultMetaOperationTimeout() {
44+
Configuration conf = HBaseConfiguration.create();
45+
long clientOperationTimeoutMs = 1000;
46+
conf.setLong(HConstants.HBASE_CLIENT_OPERATION_TIMEOUT, clientOperationTimeoutMs);
47+
ConnectionConfiguration config = new ConnectionConfiguration(conf);
48+
assertEquals(clientOperationTimeoutMs, config.getOperationTimeout());
49+
assertEquals(clientOperationTimeoutMs, config.getMetaOperationTimeout());
50+
}
51+
52+
}

0 commit comments

Comments
 (0)