Package com.alibaba.wasp.fserver

Source Code of com.alibaba.wasp.fserver.GlobalEntityGroup

/**
* 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 com.alibaba.wasp.fserver;

import com.alibaba.wasp.EntityGroupInfo;
import com.alibaba.wasp.GlobalEntityGroupInfo;
import com.alibaba.wasp.NotServingEntityGroupException;
import com.alibaba.wasp.plan.action.ScanAction;
import com.alibaba.wasp.storage.StorageTableNotFoundException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;

import java.io.Closeable;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.ReentrantReadWriteLock;

/**
* Execute global query plan.
*
*/
public class GlobalEntityGroup implements Closeable, EntityGroupServices {

  public static final Log LOG = LogFactory.getLog(GlobalEntityGroup.class);

  protected final FServerServices services;

  protected Configuration configuration;

  private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();

  final AtomicBoolean close = new AtomicBoolean(false);

  final GlobalEntityGroupInfo entityGroupInfo;

  public GlobalEntityGroup(FServerServices service) {
    this.services = service;
    this.configuration = service.getConfiguration();
    this.entityGroupInfo = new GlobalEntityGroupInfo();
  }

  /**
   * Return an iterator that scans over the EntityGroup, returning the indicated
   * columns and rows specified by the
   *
   * <p>
   * This Iterator must be closed by the caller.
   *
   * @param action
   * @return
   * @throws java.io.IOException
   * @throws com.alibaba.wasp.storage.StorageTableNotFoundException
   */
  public EntityGroupScanner getScanner(ScanAction action) throws IOException,
      StorageTableNotFoundException {
    startEntityGroupOperation();
    try {
      return instantiateEntityGroupScanner(action);
    } finally {
      closeEntityGroupOperation();
    }
  }

  /**
   * return EntityGroupScanner.
   *
   * @param action
   * @return
   * @throws java.io.IOException
   * @throws com.alibaba.wasp.storage.StorageTableNotFoundException
   */
  protected EntityGroupScanner instantiateEntityGroupScanner(ScanAction action)
      throws StorageTableNotFoundException, IOException {
    return new EntityGroupScanner(this, action, System.currentTimeMillis());
  }

  /**
   * This method needs to be called before any public call that reads or
   * modifies data. It has to be called just before a try. Acquires checks if
   * the entityGroup is close.
   *
   * @throws com.alibaba.wasp.NotServingEntityGroupException
   *           when the entityGroup is closing or closed
   */
  private void startEntityGroupOperation()
      throws NotServingEntityGroupException {
    lock.readLock().lock();
    if (this.close.get()) {
      lock.readLock().unlock();
      throw new NotServingEntityGroupException("GlobalEntityGroup is closed");
    }
  }

  private void closeEntityGroupOperation() {
    lock.readLock().unlock();
  }

  @Override
  public void close() {
    close.set(true);
  }

  /**
   * @see org.apache.hadoop.conf.Configurable#getConf()
   */
  @Override
  public Configuration getConf() {
    return this.configuration;
  }

  /**
   * @see com.alibaba.wasp.fserver.EntityGroupServices#getFServerServices()
   */
  @Override
  public FServerServices getFServerServices() {
    return this.services;
  }

  /**
   * @see com.alibaba.wasp.fserver.EntityGroupServices#getEntityGroupInfo()
   */
  @Override
  public EntityGroupInfo getEntityGroupInfo() {
    return entityGroupInfo;
  }
}
TOP

Related Classes of com.alibaba.wasp.fserver.GlobalEntityGroup

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.