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 private int maxKeyValueSize; 041 042 public AsyncBufferedMutatorBuilderImpl(AsyncConnectionConfiguration connConf, 043 AsyncTableBuilder<?> tableBuilder, HashedWheelTimer periodicalFlushTimer) { 044 this.tableBuilder = tableBuilder; 045 this.writeBufferSize = connConf.getWriteBufferSize(); 046 this.periodicFlushTimeoutNs = connConf.getWriteBufferPeriodicFlushTimeoutNs(); 047 this.maxKeyValueSize = connConf.getMaxKeyValueSize(); 048 this.periodicalFlushTimer = periodicalFlushTimer; 049 } 050 051 @Override 052 public AsyncBufferedMutatorBuilder setOperationTimeout(long timeout, TimeUnit unit) { 053 tableBuilder.setOperationTimeout(timeout, unit); 054 return this; 055 } 056 057 @Override 058 public AsyncBufferedMutatorBuilder setRpcTimeout(long timeout, TimeUnit unit) { 059 tableBuilder.setRpcTimeout(timeout, unit); 060 return this; 061 } 062 063 @Override 064 public AsyncBufferedMutatorBuilder setRetryPause(long pause, TimeUnit unit) { 065 tableBuilder.setRetryPause(pause, unit); 066 return this; 067 } 068 069 @Override 070 public AsyncBufferedMutatorBuilder setMaxAttempts(int maxAttempts) { 071 tableBuilder.setMaxAttempts(maxAttempts); 072 return this; 073 } 074 075 @Override 076 public AsyncBufferedMutatorBuilder setStartLogErrorsCnt(int startLogErrorsCnt) { 077 tableBuilder.setStartLogErrorsCnt(startLogErrorsCnt); 078 return this; 079 } 080 081 @Override 082 public AsyncBufferedMutatorBuilder setWriteBufferSize(long writeBufferSize) { 083 Preconditions.checkArgument(writeBufferSize > 0, "writeBufferSize %d must be > 0", 084 writeBufferSize); 085 this.writeBufferSize = writeBufferSize; 086 return this; 087 } 088 089 @Override 090 public AsyncBufferedMutatorBuilder setWriteBufferPeriodicFlush(long timeout, TimeUnit unit) { 091 this.periodicFlushTimeoutNs = unit.toNanos(timeout); 092 return this; 093 } 094 095 @Override 096 public AsyncBufferedMutatorBuilder setMaxKeyValueSize(int maxKeyValueSize) { 097 Preconditions.checkArgument(maxKeyValueSize > 0, "maxKeyValueSize %d must be > 0", 098 maxKeyValueSize); 099 this.maxKeyValueSize = maxKeyValueSize; 100 return this; 101 } 102 103 @Override 104 public AsyncBufferedMutator build() { 105 return new AsyncBufferedMutatorImpl(periodicalFlushTimer, tableBuilder.build(), writeBufferSize, 106 periodicFlushTimeoutNs, maxKeyValueSize); 107 } 108}