HBASE-24685 : Removing MultiAction and FailureInfo (#2027)
Signed-off-by: Wellington Chevreuil <wchevreuil@apache.org>
This commit is contained in:
parent
287f29818f
commit
a1d7e6e253
|
@ -1,60 +0,0 @@
|
||||||
/**
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
* or more contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. The ASF licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.hadoop.hbase.client;
|
|
||||||
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
|
||||||
|
|
||||||
import org.apache.yetus.audience.InterfaceAudience;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Keeps track of repeated failures to any region server. Multiple threads manipulate the contents
|
|
||||||
* of this thread.
|
|
||||||
*
|
|
||||||
* Access to the members is guarded by the concurrent nature of the members inherently.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@InterfaceAudience.Private
|
|
||||||
class FailureInfo {
|
|
||||||
// The number of consecutive failures.
|
|
||||||
final AtomicLong numConsecutiveFailures = new AtomicLong();
|
|
||||||
// The time when the server started to become unresponsive
|
|
||||||
// Once set, this would never be updated.
|
|
||||||
final long timeOfFirstFailureMilliSec;
|
|
||||||
// The time when the client last tried to contact the server.
|
|
||||||
// This is only updated by one client at a time
|
|
||||||
volatile long timeOfLatestAttemptMilliSec;
|
|
||||||
// Used to keep track of concurrent attempts to contact the server.
|
|
||||||
// In Fast fail mode, we want just one client thread to try to connect
|
|
||||||
// the rest of the client threads will fail fast.
|
|
||||||
final AtomicBoolean exclusivelyRetringInspiteOfFastFail = new AtomicBoolean(false);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "FailureInfo: numConsecutiveFailures = "
|
|
||||||
+ numConsecutiveFailures + " timeOfFirstFailureMilliSec = "
|
|
||||||
+ timeOfFirstFailureMilliSec + " timeOfLatestAttemptMilliSec = "
|
|
||||||
+ timeOfLatestAttemptMilliSec
|
|
||||||
+ " exclusivelyRetringInspiteOfFastFail = "
|
|
||||||
+ exclusivelyRetringInspiteOfFastFail.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
FailureInfo(long firstFailureTime) {
|
|
||||||
this.timeOfFirstFailureMilliSec = firstFailureTime;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,112 +0,0 @@
|
||||||
/*
|
|
||||||
*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
* or more contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. The ASF licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.hadoop.hbase.client;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
import org.apache.hadoop.hbase.HConstants;
|
|
||||||
import org.apache.hadoop.hbase.util.Bytes;
|
|
||||||
import org.apache.yetus.audience.InterfaceAudience;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Container for Actions (i.e. Get, Delete, or Put), which are grouped by regionName.
|
|
||||||
*/
|
|
||||||
@InterfaceAudience.Private
|
|
||||||
public final class MultiAction {
|
|
||||||
// TODO: This class should not be visible outside of the client package.
|
|
||||||
|
|
||||||
// map of regions to lists of puts/gets/deletes for that region.
|
|
||||||
protected Map<byte[], List<Action>> actions = new TreeMap<>(Bytes.BYTES_COMPARATOR);
|
|
||||||
|
|
||||||
private long nonceGroup = HConstants.NO_NONCE;
|
|
||||||
|
|
||||||
public MultiAction() {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the total number of Actions
|
|
||||||
*
|
|
||||||
* @return total number of Actions for all groups in this container.
|
|
||||||
*/
|
|
||||||
public int size() {
|
|
||||||
int size = 0;
|
|
||||||
for (List<?> l : actions.values()) {
|
|
||||||
size += l.size();
|
|
||||||
}
|
|
||||||
return size;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add an Action to this container based on it's regionName. If the regionName
|
|
||||||
* is wrong, the initial execution will fail, but will be automatically
|
|
||||||
* retried after looking up the correct region.
|
|
||||||
*
|
|
||||||
* @param regionName
|
|
||||||
* @param a
|
|
||||||
*/
|
|
||||||
public void add(byte[] regionName, Action a) {
|
|
||||||
add(regionName, Collections.singletonList(a));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add an Action to this container based on it's regionName. If the regionName
|
|
||||||
* is wrong, the initial execution will fail, but will be automatically
|
|
||||||
* retried after looking up the correct region.
|
|
||||||
*
|
|
||||||
* @param regionName
|
|
||||||
* @param actionList list of actions to add for the region
|
|
||||||
*/
|
|
||||||
public void add(byte[] regionName, List<Action> actionList){
|
|
||||||
List<Action> rsActions = actions.get(regionName);
|
|
||||||
if (rsActions == null) {
|
|
||||||
rsActions = new ArrayList<>(actionList.size());
|
|
||||||
actions.put(regionName, rsActions);
|
|
||||||
}
|
|
||||||
rsActions.addAll(actionList);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setNonceGroup(long nonceGroup) {
|
|
||||||
this.nonceGroup = nonceGroup;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Set<byte[]> getRegions() {
|
|
||||||
return actions.keySet();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasNonceGroup() {
|
|
||||||
return nonceGroup != HConstants.NO_NONCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getNonceGroup() {
|
|
||||||
return this.nonceGroup;
|
|
||||||
}
|
|
||||||
|
|
||||||
// returns the max priority of all the actions
|
|
||||||
public int getPriority() {
|
|
||||||
Optional<Action> result = actions.values().stream().flatMap(List::stream)
|
|
||||||
.max((action1, action2) -> Math.max(action1.getPriority(), action2.getPriority()));
|
|
||||||
return result.isPresent() ? result.get().getPriority() : HConstants.PRIORITY_UNSET;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue