/** * The put request will be buffered by its corresponding buffer queue. And the put request will be * retried before dropping the request. Return false if the queue is already full. * * @return true if the request can be accepted by its corresponding buffer queue. */ public boolean put(final TableName tableName, final Put put, int maxAttempts) { if (maxAttempts <= 0) { return false; } try { HTable.validatePut(put, maxKeyValueSize); // Allow mocking to get at the connection, but don't expose the connection to users. ClusterConnection conn = (ClusterConnection) getConnection(); // AsyncProcess in the FlushWorker should take care of refreshing the location cache // as necessary. We shouldn't have to do that here. HRegionLocation loc = conn.getRegionLocation(tableName, put.getRow(), false); if (loc != null) { // Add the put pair into its corresponding queue. LinkedBlockingQueue<PutStatus> queue = getQueue(loc); // Generate a MultiPutStatus object and offer it into the queue PutStatus s = new PutStatus(loc.getRegionInfo(), put, maxAttempts); return queue.offer(s); } } catch (IOException e) { LOG.debug("Cannot process the put " + put, e); } return false; }
/** * The put request will be buffered by its corresponding buffer queue. And the put request will be * retried before dropping the request. Return false if the queue is already full. * * @return true if the request can be accepted by its corresponding buffer queue. */ public boolean put(final TableName tableName, final Put put, int retry) { if (retry <= 0) { return false; } try { HTable.validatePut(put, maxKeyValueSize); HRegionLocation loc = conn.getRegionLocation(tableName, put.getRow(), false); if (loc != null) { // Add the put pair into its corresponding queue. LinkedBlockingQueue<PutStatus> queue = getQueue(loc); // Generate a MultiPutStatus object and offer it into the queue PutStatus s = new PutStatus(loc.getRegionInfo(), put, retry); return queue.offer(s); } } catch (IOException e) { LOG.debug("Cannot process the put " + put, e); } return false; }