001/** 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.apache.hadoop.hbase.client; 019 020import java.util.concurrent.TimeUnit; 021import org.apache.yetus.audience.InterfaceAudience; 022 023import org.apache.hbase.thirdparty.com.google.common.base.Preconditions; 024import org.apache.hbase.thirdparty.io.netty.util.HashedWheelTimer; 025 026/** 027 * The implementation of {@link AsyncBufferedMutatorBuilder}. 028 */ 029@InterfaceAudience.Private 030class AsyncBufferedMutatorBuilderImpl implements AsyncBufferedMutatorBuilder { 031 032 private final HashedWheelTimer periodicalFlushTimer; 033 034 private final AsyncTableBuilder<?> tableBuilder; 035 036 private long writeBufferSize; 037 038 private long periodicFlushTimeoutNs; 039 040 public AsyncBufferedMutatorBuilderImpl(AsyncConnectionConfiguration connConf, 041 AsyncTableBuilder<?> tableBuilder, HashedWheelTimer periodicalFlushTimer) { 042 this.tableBuilder = tableBuilder; 043 this.writeBufferSize = connConf.getWriteBufferSize(); 044 this.periodicFlushTimeoutNs = connConf.getWriteBufferPeriodicFlushTimeoutNs(); 045 this.periodicalFlushTimer = periodicalFlushTimer; 046 } 047 048 @Override 049 public AsyncBufferedMutatorBuilder setOperationTimeout(long timeout, TimeUnit unit) { 050 tableBuilder.setOperationTimeout(timeout, unit); 051 return this; 052 } 053 054 @Override 055 public AsyncBufferedMutatorBuilder setRpcTimeout(long timeout, TimeUnit unit) { 056 tableBuilder.setRpcTimeout(timeout, unit); 057 return this; 058 } 059 060 @Override 061 public AsyncBufferedMutatorBuilder setRetryPause(long pause, TimeUnit unit) { 062 tableBuilder.setRetryPause(pause, unit); 063 return this; 064 } 065 066 @Override 067 public AsyncBufferedMutatorBuilder setMaxAttempts(int maxAttempts) { 068 tableBuilder.setMaxAttempts(maxAttempts); 069 return this; 070 } 071 072 @Override 073 public AsyncBufferedMutatorBuilder setStartLogErrorsCnt(int startLogErrorsCnt) { 074 tableBuilder.setStartLogErrorsCnt(startLogErrorsCnt); 075 return this; 076 } 077 078 @Override 079 public AsyncBufferedMutatorBuilder setWriteBufferSize(long writeBufferSize) { 080 Preconditions.checkArgument(writeBufferSize > 0, "writeBufferSize %d must be >= 0", 081 writeBufferSize); 082 this.writeBufferSize = writeBufferSize; 083 return this; 084 } 085 086 @Override 087 public AsyncBufferedMutatorBuilder setWriteBufferPeriodicFlush(long timeout, TimeUnit unit) { 088 this.periodicFlushTimeoutNs = unit.toNanos(timeout); 089 return this; 090 } 091 092 @Override 093 public AsyncBufferedMutator build() { 094 return new AsyncBufferedMutatorImpl(periodicalFlushTimer, tableBuilder.build(), writeBufferSize, 095 periodicFlushTimeoutNs); 096 } 097}