All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.twitter.storehaus.asynchbase.AsynHBaseByteArrayStore.scala Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2013 Twitter inc.
 *
 *    Licensed 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 com.twitter.storehaus.asynchbase

import com.twitter.storehaus.Store
import com.twitter.util.{Future, Time}
import org.hbase.async.HBaseClient

/**
 * @author Mansur Ashraf
 * @since 9/8/13
 */
object AsyncHBaseByteArrayStore {
  def apply(quorumNames: Seq[String],
            table: String,
            columnFamily: String,
            column: String,
            threads: Int = 4): AsyncHBaseByteArrayStore = {
    val store = new AsyncHBaseByteArrayStore(quorumNames, table, columnFamily, column, new HBaseClient(quorumNames.mkString(",")), threads)
    store.validateConfiguration()
    store
  }

}

class AsyncHBaseByteArrayStore(protected val quorumNames: Seq[String],
                               protected val table: String,
                               protected val columnFamily: String,
                               protected val column: String,
                               protected val client: HBaseClient,
                               protected val threads: Int) extends Store[Array[Byte], Array[Byte]] with AsyncHBaseStore {

  /** get a single key from the store.
    * Prefer multiGet if you are getting more than one key at a time
    */
  override def get(k: Array[Byte]): Future[Option[Array[Byte]]] = {
    getValue(k)
  }

  /**
   * replace a value
   * Delete is the same as put((k,None))
   */
  override def put(kv: (Array[Byte], Option[Array[Byte]])): Future[Unit] = {
    putValue(kv)
  }

  /** Close this store and release any resources.
    * It is undefined what happens on get/multiGet after close
    */
  override def close(t: Time) = futurePool {
    client.shutdown().join()
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy