Merge branch '1.5' into 1.6
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/9b20a9d4 Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/9b20a9d4 Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/9b20a9d4 Branch: refs/heads/1.6 Commit: 9b20a9d4062f9ac0d34ce4b2acd7b9b72524a84f Parents: 5e0f6a4 2deabd3 Author: Christopher Tubbs <ctubb...@apache.org> Authored: Fri Oct 31 23:37:27 2014 -0400 Committer: Christopher Tubbs <ctubb...@apache.org> Committed: Fri Oct 31 23:37:27 2014 -0400 ---------------------------------------------------------------------- assemble/bin/bootstrap_config.sh | 2 +- .../org/apache/accumulo/core/Constants.java | 13 +++++- .../apache/accumulo/core/cli/ClientOpts.java | 6 ++- .../accumulo/core/client/BatchWriterConfig.java | 11 ++--- .../accumulo/core/client/ZooKeeperInstance.java | 14 ++++--- .../client/impl/InstanceOperationsImpl.java | 4 +- .../accumulo/core/client/impl/Namespaces.java | 6 ++- .../accumulo/core/client/impl/ServerClient.java | 4 +- .../core/client/impl/TableOperationsImpl.java | 32 ++++++++------- .../accumulo/core/client/impl/Tables.java | 10 +++-- .../accumulo/core/client/impl/Writer.java | 5 ++- .../core/client/lexicoder/StringLexicoder.java | 6 +-- .../core/client/mapreduce/RangeInputSplit.java | 7 ++-- .../mapreduce/lib/impl/ConfiguratorBase.java | 4 +- .../mapreduce/lib/impl/InputConfigurator.java | 8 ++-- .../mapreduce/lib/impl/OutputConfigurator.java | 7 ++-- .../lib/partition/RangePartitioner.java | 7 ++-- .../accumulo/core/client/mock/MockShell.java | 11 ++--- .../client/security/tokens/PasswordToken.java | 5 ++- .../accumulo/core/conf/ConfigurationDocGen.java | 9 ++-- .../accumulo/core/data/ArrayByteSequence.java | 8 ++-- .../org/apache/accumulo/core/data/Column.java | 6 +-- .../apache/accumulo/core/data/Condition.java | 9 ++-- .../org/apache/accumulo/core/data/Value.java | 4 +- .../accumulo/core/file/BloomFilterLayer.java | 7 ++-- .../core/iterators/ColumnFamilyCounter.java | 5 ++- .../accumulo/core/iterators/LongCombiner.java | 7 ++-- .../accumulo/core/iterators/conf/ColumnSet.java | 7 ++-- .../core/iterators/user/BigDecimalCombiner.java | 7 ++-- .../core/iterators/user/GrepIterator.java | 5 ++- .../iterators/user/IntersectingIterator.java | 7 ++-- .../core/iterators/user/LargeRowFilter.java | 5 ++- .../core/iterators/user/RegExFilter.java | 7 ++-- .../iterators/user/RowDeletingIterator.java | 5 ++- .../iterators/user/SummingArrayCombiner.java | 7 ++-- .../iterators/user/TransformingIterator.java | 7 ++-- .../core/iterators/user/VisibilityFilter.java | 5 ++- .../accumulo/core/security/Authorizations.java | 13 +++--- .../core/security/ColumnVisibility.java | 43 ++++++++++---------- .../accumulo/core/security/Credentials.java | 11 ++--- .../core/security/VisibilityConstraint.java | 5 ++- .../core/security/VisibilityParseException.java | 6 +-- .../core/trace/InstanceUserPassword.java | 5 ++- .../accumulo/core/trace/ZooTraceClient.java | 5 ++- .../core/util/ByteArrayBackedCharSequence.java | 5 ++- .../apache/accumulo/core/util/ByteArraySet.java | 6 +-- .../accumulo/core/util/ByteBufferUtil.java | 5 ++- .../apache/accumulo/core/util/CreateToken.java | 5 ++- .../org/apache/accumulo/core/util/Encoding.java | 5 ++- .../apache/accumulo/core/util/FastFormat.java | 4 +- .../org/apache/accumulo/core/util/Merge.java | 5 ++- .../apache/accumulo/core/util/MonitorUtil.java | 4 +- .../org/apache/accumulo/core/util/TextUtil.java | 4 +- .../apache/accumulo/core/util/shell/Shell.java | 6 ++- .../util/shell/commands/AddSplitsCommand.java | 7 ++-- .../shell/commands/AuthenticateCommand.java | 5 ++- .../util/shell/commands/CreateTableCommand.java | 7 ++-- .../util/shell/commands/ExecfileCommand.java | 5 ++- .../core/util/shell/commands/HiddenCommand.java | 5 ++- .../core/util/shell/commands/PasswdCommand.java | 5 ++- .../shell/commands/QuotedStringTokenizer.java | 5 ++- .../core/util/shell/commands/UserCommand.java | 5 ++- .../core/client/BatchWriterConfigTest.java | 6 +-- .../core/client/ZooKeeperInstanceTest.java | 9 ++-- .../core/client/mock/MockNamespacesTest.java | 4 +- .../tokens/CredentialProviderTokenTest.java | 7 ++-- .../security/tokens/PasswordTokenTest.java | 7 ++-- .../accumulo/core/data/ConditionTest.java | 12 +++--- .../core/data/ConditionalMutationTest.java | 10 ++--- .../apache/accumulo/core/data/ValueTest.java | 5 ++- .../core/iterators/user/RegExFilterTest.java | 7 ++-- .../core/security/ColumnVisibilityTest.java | 6 +-- .../accumulo/core/security/CredentialsTest.java | 6 +-- .../core/security/VisibilityConstraintTest.java | 4 +- .../security/crypto/BlockedIOStreamTest.java | 10 ++--- .../core/util/format/DeleterFormatterTest.java | 12 +++--- .../ShardedTableDistributionFormatterTest.java | 8 ++-- .../org/apache/accumulo/fate/AdminUtil.java | 8 ++-- .../java/org/apache/accumulo/fate/ZooStore.java | 16 ++++---- .../zookeeper/DistributedReadWriteLock.java | 18 ++++---- .../accumulo/fate/zookeeper/ZooCache.java | 8 ++-- .../apache/accumulo/fate/zookeeper/ZooLock.java | 6 +-- .../accumulo/fate/zookeeper/ZooReservation.java | 9 ++-- .../accumulo/fate/zookeeper/ZooSession.java | 6 +-- .../impl/MiniAccumuloClusterImpl.java | 4 +- .../org/apache/accumulo/proxy/ProxyServer.java | 7 ++-- .../apache/accumulo/proxy/TestProxyClient.java | 15 +++---- .../java/org/apache/accumulo/proxy/Util.java | 5 ++- .../org/apache/accumulo/server/Accumulo.java | 4 +- .../accumulo/server/client/HdfsZooInstance.java | 10 +++-- .../server/conf/ZooCachePropertyAccessor.java | 5 ++- .../accumulo/server/conf/ZooConfiguration.java | 4 +- .../server/constraints/MetadataConstraints.java | 14 ++++--- .../apache/accumulo/server/init/Initialize.java | 15 +++---- .../accumulo/server/master/LiveTServerSet.java | 3 +- .../server/master/state/DeadServerList.java | 7 ++-- .../server/master/state/TServerInstance.java | 7 ++-- .../master/state/TabletStateChangeIterator.java | 5 ++- .../accumulo/server/master/state/ZooStore.java | 5 ++- .../master/state/ZooTabletStateStore.java | 11 ++--- .../server/metrics/AbstractMetricsImpl.java | 5 ++- .../accumulo/server/monitor/LogService.java | 4 +- .../server/security/SecurityOperation.java | 4 +- .../server/security/SystemCredentials.java | 10 +++-- .../security/handler/ZKAuthenticator.java | 4 +- .../server/security/handler/ZKAuthorizor.java | 5 ++- .../server/security/handler/ZKPermHandler.java | 5 ++- .../accumulo/server/tables/TableManager.java | 18 ++++---- .../server/tablets/UniqueNameAllocator.java | 10 +++-- .../server/util/AddFilesWithMissingEntries.java | 5 ++- .../accumulo/server/util/ChangeSecret.java | 5 ++- .../accumulo/server/util/CleanZookeeper.java | 6 ++- .../accumulo/server/util/DeleteZooInstance.java | 6 ++- .../accumulo/server/util/DumpZookeeper.java | 5 ++- .../accumulo/server/util/ListInstances.java | 6 ++- .../accumulo/server/util/MetadataTableUtil.java | 32 ++++++++------- .../accumulo/server/util/NamespacePropUtil.java | 4 +- .../accumulo/server/util/RandomizeVolumes.java | 6 +-- .../accumulo/server/util/RestoreZookeeper.java | 7 ++-- .../accumulo/server/util/SendLogToChainsaw.java | 9 ++-- .../accumulo/server/util/SystemPropUtil.java | 4 +- .../accumulo/server/util/TablePropUtil.java | 4 +- .../accumulo/server/util/TabletServerLocks.java | 4 +- .../server/watcher/MonitorLog4jWatcher.java | 4 +- .../accumulo/server/zookeeper/ZooQueueLock.java | 9 ++-- .../server/zookeeper/ZooReaderWriter.java | 5 ++- .../zookeeper/ZooReaderWriterFactory.java | 5 ++- .../server/conf/NamespaceConfigurationTest.java | 10 +++-- .../conf/ServerConfigurationFactoryTest.java | 4 +- .../server/conf/TableConfigurationTest.java | 9 ++-- .../conf/ZooCachePropertyAccessorTest.java | 4 +- .../java/org/apache/accumulo/master/Master.java | 8 ++-- .../master/recovery/RecoveryManager.java | 4 +- .../accumulo/master/state/SetGoalState.java | 4 +- .../accumulo/master/tableOps/BulkImport.java | 8 ++-- .../master/tableOps/CancelCompactions.java | 10 +++-- .../accumulo/master/tableOps/CompactRange.java | 14 ++++--- .../accumulo/master/tableOps/ExportTable.java | 8 ++-- .../accumulo/master/tableOps/ImportTable.java | 16 ++++---- .../accumulo/master/tableOps/RenameTable.java | 6 ++- .../apache/accumulo/master/tableOps/Utils.java | 14 ++++--- .../master/tserverOps/ShutdownTServer.java | 4 +- .../org/apache/accumulo/monitor/Monitor.java | 6 ++- .../accumulo/monitor/ZooKeeperStatus.java | 7 ++-- .../accumulo/monitor/servlets/BasicServlet.java | 10 +++-- .../monitor/servlets/DefaultServlet.java | 5 ++- .../accumulo/monitor/servlets/ShellServlet.java | 5 ++- .../accumulo/monitor/servlets/XMLServlet.java | 7 ++-- .../accumulo/monitor/servlets/trace/Basic.java | 5 ++- .../org/apache/accumulo/tracer/TraceServer.java | 8 ++-- .../tserver/BulkFailedCopyProcessor.java | 5 ++- .../org/apache/accumulo/tserver/Tablet.java | 10 +++-- .../apache/accumulo/tserver/TabletServer.java | 9 ++-- .../apache/accumulo/tserver/log/DfsLogger.java | 4 +- .../accumulo/tserver/logger/LogFileValue.java | 11 ++--- .../accumulo/tserver/logger/LogReader.java | 5 ++- .../accumulo/test/BulkImportDirectory.java | 5 ++- .../accumulo/test/NativeMapConcurrencyTest.java | 5 ++- .../accumulo/test/NativeMapPerformanceTest.java | 7 ++-- .../accumulo/test/NativeMapStressTest.java | 5 ++- .../apache/accumulo/test/TestBinaryRows.java | 7 ++-- .../org/apache/accumulo/test/TestIngest.java | 7 ++-- .../accumulo/test/TestMultiTableIngest.java | 5 ++- .../test/continuous/ContinuousIngest.java | 8 ++-- .../test/continuous/ContinuousMoru.java | 7 ++-- .../test/continuous/ContinuousQuery.java | 5 ++- .../test/continuous/ContinuousScanner.java | 5 ++- .../test/continuous/ContinuousVerify.java | 7 ++-- .../test/continuous/ContinuousWalk.java | 17 ++++---- .../accumulo/test/continuous/Histogram.java | 6 +-- .../test/continuous/PrintScanTimeHistogram.java | 5 ++- .../accumulo/test/continuous/TimeBinner.java | 5 ++- .../test/continuous/UndefinedAnalyzer.java | 9 ++-- .../test/functional/CacheTestReader.java | 7 ++-- .../test/functional/CacheTestWriter.java | 11 ++--- .../accumulo/test/functional/ZombieTServer.java | 4 +- .../metadata/MetadataBatchScanTest.java | 7 ++-- .../apache/accumulo/test/randomwalk/Module.java | 7 ++-- .../test/randomwalk/bulk/BulkMinusOne.java | 5 ++- .../accumulo/test/randomwalk/bulk/Verify.java | 5 ++- .../test/randomwalk/concurrent/BatchWrite.java | 5 ++- .../test/randomwalk/concurrent/BulkImport.java | 5 ++- .../concurrent/ChangeAuthorizations.java | 7 ++-- .../randomwalk/concurrent/StopTabletServer.java | 4 +- .../accumulo/test/randomwalk/image/Verify.java | 5 ++- .../accumulo/test/randomwalk/image/Write.java | 9 ++-- .../test/randomwalk/multitable/Write.java | 5 ++- .../randomwalk/security/SecurityHelper.java | 7 ++-- .../test/randomwalk/security/TableOp.java | 9 ++-- .../test/randomwalk/sequential/Write.java | 5 ++- .../test/randomwalk/shard/BulkInsert.java | 5 ++- .../test/randomwalk/shard/ExportIndex.java | 5 ++- .../accumulo/test/scalability/Ingest.java | 5 ++- .../apache/accumulo/test/AuditMessageIT.java | 6 +-- .../org/apache/accumulo/test/NamespacesIT.java | 8 ++-- .../java/org/apache/accumulo/test/VolumeIT.java | 6 +-- .../accumulo/test/functional/AddSplitIT.java | 5 ++- .../test/functional/BadIteratorMincIT.java | 6 +-- .../test/functional/BatchScanSplitIT.java | 7 ++-- .../test/functional/BatchWriterFlushIT.java | 5 ++- .../accumulo/test/functional/BulkFileIT.java | 5 ++- .../accumulo/test/functional/ConcurrencyIT.java | 7 ++-- .../accumulo/test/functional/ConstraintIT.java | 23 ++++++----- .../test/functional/CreateAndUseIT.java | 5 ++- .../test/functional/DeleteEverythingIT.java | 4 +- .../test/functional/DeleteRowsSplitIT.java | 6 +-- .../accumulo/test/functional/LargeRowIT.java | 7 ++-- .../accumulo/test/functional/NativeMapIT.java | 15 +++---- .../test/functional/ScanIteratorIT.java | 7 ++-- .../accumulo/test/functional/ScanRangeIT.java | 5 ++- .../test/functional/ScanSessionTimeOutIT.java | 5 ++- .../test/functional/SplitRecoveryIT.java | 3 +- .../accumulo/test/functional/TabletIT.java | 4 +- .../accumulo/test/functional/VisibilityIT.java | 11 ++--- .../instrument/receivers/ZooSpanClient.java | 4 +- 215 files changed, 900 insertions(+), 667 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/accumulo/blob/9b20a9d4/assemble/bin/bootstrap_config.sh ---------------------------------------------------------------------- diff --cc assemble/bin/bootstrap_config.sh index fb643da,0000000..fd262f0 mode 100755,000000..100755 --- a/assemble/bin/bootstrap_config.sh +++ b/assemble/bin/bootstrap_config.sh @@@ -1,323 -1,0 +1,323 @@@ +#! /usr/bin/env bash + +# 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. + +function usage { + cat <<EOF +Usage: bootstrap_config.sh [-options] +where options include (long options not available on all platforms): + -d, --dir Alternate directory to setup config files + -s, --size Supported sizes: '1GB' '2GB' '3GB' '512MB' + -n, --native Configure to use native libraries + -j, --jvm Configure to use the jvm + -o, --overwrite Overwrite the default config directory + -v, --version Specify the Apache Hadoop version supported versions: '1' '2' + -h, --help Print this help message +EOF +} + +# Start: Resolve Script Directory +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink + bin="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + SOURCE="$(readlink "$SOURCE")" + [[ $SOURCE != /* ]] && SOURCE="$bin/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located +done +bin="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + +# Stop: Resolve Script Directory + +# +# Resolve accumulo home for bootstrapping +# +ACCUMULO_HOME=$( cd -P ${bin}/.. && pwd ) +TEMPLATE_CONF_DIR="${ACCUMULO_HOME}/conf/templates" +CONF_DIR="${ACCUMULO_HOME}/conf" +ACCUMULO_SITE=accumulo-site.xml +ACCUMULO_ENV=accumulo-env.sh + +SIZE= +TYPE= +HADOOP_VERSION= +OVERWRITE="0" +BASE_DIR= + +#Execute getopt +if [[ $(uname -s) == "Linux" ]]; then + args=$(getopt -o "b:d:s:njov:h" -l "basedir:,dir:,size:,native,jvm,overwrite,version:,help" -q -- "$@") +else # Darwin, BSD + args=$(getopt b:d:s:njov:h $*) +fi + +#Bad arguments +if [[ $? != 0 ]]; then + usage 1>&2 + exit 1 +fi +eval set -- $args + +for i +do + case "$i" in + -b|--basedir) #Hidden option used to set general.maven.project.basedir for developers + BASE_DIR=$2; shift + shift;; + -d|--dir) + CONF_DIR=$2; shift + shift;; + -s|--size) + SIZE=$2; shift + shift;; + -n|--native) + TYPE=native + shift;; + -j|--jvm) + TYPE=jvm + shift;; + -o|--overwrite) + OVERWRITE=1 + shift;; + -v|--version) + HADOOP_VERSION=$2; shift + shift;; + -h|--help) + usage + exit 0 + shift;; + --) + shift + break;; + esac +done + +while [[ "${OVERWRITE}" = "0" ]]; do + if [[ -e "${CONF_DIR}/${ACCUMULO_ENV}" || -e "${CONF_DIR}/${ACCUMULO_SITE}" ]]; then + echo "Warning your current config files in ${CONF_DIR} will be overwritten!" + echo + echo "How would you like to proceed?:" + select CHOICE in 'Continue with overwrite' 'Specify new conf dir'; do + if [[ "${CHOICE}" = 'Specify new conf dir' ]]; then + echo -n "Please specifiy new conf directory: " + read CONF_DIR + elif [[ "${CHOICE}" = 'Continue with overwrite' ]]; then + OVERWRITE=1 + fi + break + done + else + OVERWRITE=1 + fi +done - echo "Coppying configuration files to: ${CONF_DIR}" ++echo "Copying configuration files to: ${CONF_DIR}" + +#Native 1GB +native_1GB_tServer="-Xmx128m -Xms128m" +_1GB_master="-Xmx128m -Xms128m" +_1GB_monitor="-Xmx64m -Xms64m" +_1GB_gc="-Xmx64m -Xms64m" +_1GB_other="-Xmx128m -Xms64m" + +_1GB_memoryMapMax="256M" +native_1GB_nativeEnabled="true" +_1GB_cacheDataSize="15M" +_1GB_cacheIndexSize="40M" +_1GB_sortBufferSize="50M" +_1GB_waLogMaxSize="256M" + +#Native 2GB +native_2GB_tServer="-Xmx256m -Xms256m" +_2GB_master="-Xmx256m -Xms256m" +_2GB_monitor="-Xmx128m -Xms64m" +_2GB_gc="-Xmx128m -Xms128m" +_2GB_other="-Xmx256m -Xms64m" + +_2GB_memoryMapMax="512M" +native_2GB_nativeEnabled="true" +_2GB_cacheDataSize="30M" +_2GB_cacheIndexSize="80M" +_2GB_sortBufferSize="50M" +_2GB_waLogMaxSize="512M" + +#Native 3GB +native_3GB_tServer="-Xmx1g -Xms1g -XX:NewSize=500m -XX:MaxNewSize=500m" +_3GB_master="-Xmx1g -Xms1g" +_3GB_monitor="-Xmx1g -Xms256m" +_3GB_gc="-Xmx256m -Xms256m" +_3GB_other="-Xmx1g -Xms256m" + +_3GB_memoryMapMax="1G" +native_3GB_nativeEnabled="true" +_3GB_cacheDataSize="128M" +_3GB_cacheIndexSize="128M" +_3GB_sortBufferSize="200M" +_3GB_waLogMaxSize="1G" + +#Native 512MB +native_512MB_tServer="-Xmx48m -Xms48m" +_512MB_master="-Xmx128m -Xms128m" +_512MB_monitor="-Xmx64m -Xms64m" +_512MB_gc="-Xmx64m -Xms64m" +_512MB_other="-Xmx128m -Xms64m" + +_512MB_memoryMapMax="80M" +native_512MB_nativeEnabled="true" +_512MB_cacheDataSize="7M" +_512MB_cacheIndexSize="20M" +_512MB_sortBufferSize="50M" +_512MB_waLogMaxSize="100M" + +#JVM 1GB +jvm_1GB_tServer="-Xmx384m -Xms384m" + +jvm_1GB_nativeEnabled="false" + +#JVM 2GB +jvm_2GB_tServer="-Xmx768m -Xms768m" + +jvm_2GB_nativeEnabled="false" + +#JVM 3GB +jvm_3GB_tServer="-Xmx2g -Xms2g -XX:NewSize=1G -XX:MaxNewSize=1G" + +jvm_3GB_nativeEnabled="false" + +#JVM 512MB +jvm_512MB_tServer="-Xmx128m -Xms128m" + +jvm_512MB_nativeEnabled="false" + + +if [[ -z "${SIZE}" ]]; then + echo "Choose the heap configuration:" + select DIRNAME in 1GB 2GB 3GB 512MB; do + echo "Using '${DIRNAME}' configuration" + SIZE=${DIRNAME} + break + done +elif [[ "${SIZE}" != "1GB" && "${SIZE}" != "2GB" && "${SIZE}" != "3GB" && "${SIZE}" != "512MB" ]]; then + echo "Invalid memory size" + echo "Supported sizes: '1GB' '2GB' '3GB' '512MB'" + exit 1 +fi + +if [[ -z "${TYPE}" ]]; then + echo + echo "Choose the Accumulo memory-map type:" + select TYPENAME in Java Native; do + if [[ "${TYPENAME}" == "Native" ]]; then + TYPE="native" + echo "Don't forget to build the native libraries using the bin/build_native_library.sh script" + elif [[ "${TYPENAME}" == "Java" ]]; then + TYPE="jvm" + fi + echo "Using '${TYPE}' configuration" + echo + break + done +fi + +if [[ -z "${HADOOP_VERSION}" ]]; then + echo + echo "Choose the Apache Hadoop version:" + select HADOOP in 'HADOOP 1' 'HADOOP 2' ; do + if [ "${HADOOP}" == "HADOOP 2" ]; then + HADOOP_VERSION="2" + elif [ "${HADOOP}" == "HADOOP 1" ]; then + HADOOP_VERSION="1" + fi + echo "Using Apache Hadoop version '${HADOOP_VERSION}' configuration" + echo + break + done +elif [[ "${HADOOP_VERSION}" != "1" && "${HADOOP_VERSION}" != "2" ]]; then + echo "Invalid Apache Hadoop version" + echo "Supported Apache Hadoop versions: '1' '2'" + exit 1 +fi + +for var in SIZE TYPE HADOOP_VERSION; do + if [[ -z ${!var} ]]; then + echo "Invalid $var configuration" + exit 1 + fi +done + +TSERVER="${TYPE}_${SIZE}_tServer" +MASTER="_${SIZE}_master" +MONITOR="_${SIZE}_monitor" +GC="_${SIZE}_gc" +OTHER="_${SIZE}_other" + +MEMORY_MAP_MAX="_${SIZE}_memoryMapMax" +NATIVE="${TYPE}_${SIZE}_nativeEnabled" +CACHE_DATA_SIZE="_${SIZE}_cacheDataSize" +CACHE_INDEX_SIZE="_${SIZE}_cacheIndexSize" +SORT_BUFFER_SIZE="_${SIZE}_sortBufferSize" +WAL_MAX_SIZE="_${SIZE}_waLogMaxSize" + +MAVEN_PROJ_BASEDIR="" + +if [[ ! -z "${BASE_DIR}" ]]; then + MAVEN_PROJ_BASEDIR="\n <property>\n <name>general.maven.project.basedir</name>\n <value>${BASE_DIR}</value>\n </property>\n" +fi + +#Configure accumulo-env.sh +mkdir -p "${CONF_DIR}" && cp ${TEMPLATE_CONF_DIR}/* ${CONF_DIR}/ +sed -e "s/\${tServerHigh_tServerLow}/${!TSERVER}/" \ + -e "s/\${masterHigh_masterLow}/${!MASTER}/" \ + -e "s/\${monitorHigh_monitorLow}/${!MONITOR}/" \ + -e "s/\${gcHigh_gcLow}/${!GC}/" \ + -e "s/\${otherHigh_otherLow}/${!OTHER}/" \ + ${TEMPLATE_CONF_DIR}/$ACCUMULO_ENV > ${CONF_DIR}/$ACCUMULO_ENV + +#Configure accumulo-site.xml +sed -e "s/\${memMapMax}/${!MEMORY_MAP_MAX}/" \ + -e "s/\${nativeEnabled}/${!NATIVE}/" \ + -e "s/\${cacheDataSize}/${!CACHE_DATA_SIZE}/" \ + -e "s/\${cacheIndexSize}/${!CACHE_INDEX_SIZE}/" \ + -e "s/\${sortBufferSize}/${!SORT_BUFFER_SIZE}/" \ + -e "s/\${waLogMaxSize}/${!WAL_MAX_SIZE}/" \ + -e "s=\${mvnProjBaseDir}=${MAVEN_PROJ_BASEDIR}=" ${TEMPLATE_CONF_DIR}/$ACCUMULO_SITE > ${CONF_DIR}/$ACCUMULO_SITE + +#Configure for hadoop 1 +if [[ "$HADOOP_VERSION" = "1" ]]; then + sed -e 's/^test -z \"$HADOOP_CONF_DIR\"/#test -z \"$HADOOP_CONF_DIR\"/' -e 's/^# test -z "$HADOOP_CONF_DIR"/test -z \"$HADOOP_CONF_DIR\"/' ${CONF_DIR}/$ACCUMULO_ENV > temp + mv temp ${CONF_DIR}/$ACCUMULO_ENV + sed -e 's/<!-- Hadoop 2 requirements -->/<!-- Hadoop 2 requirements -->\n <!--/' \ + -e 's/<!-- End Hadoop 2 requirements -->/-->\n <!-- End Hadoop 2 requirements -->/' \ + ${CONF_DIR}/$ACCUMULO_SITE > temp + mv temp ${CONF_DIR}/$ACCUMULO_SITE +fi + +#Additional setup steps for native configuration. +if [[ "${TYPE}" = "native" ]]; then + if [[ "$(uname)" = 'Linux' ]]; then + if [[ -z $HADOOP_PREFIX ]]; then + echo "HADOOP_PREFIX not set cannot automatically configure LD_LIBRARY_PATH" + else + NATIVE_LIB=$(readlink -ef $(dirname $(for x in $(find $HADOOP_PREFIX -name libhadoop.so); do ld $x 2>/dev/null && echo $x && break; done) 2>>/dev/null) 2>>/dev/null) + if [[ -z $NATIVE_LIB ]]; then + echo -e "Native libraries could not be found for your sytem in: $HADOOP_PREFIX" + else + sed "/# Should the monitor/ i export LD_LIBRARY_PATH=${NATIVE_LIB}:\${LD_LIBRARY_PATH}" ${CONF_DIR}/$ACCUMULO_ENV > temp + mv temp ${CONF_DIR}/$ACCUMULO_ENV + echo -e "Added ${NATIVE_LIB} to the LD_LIBRARY_PATH" + fi + fi + fi + echo -e "Please remember to compile the native libraries using the bin/build_native_library.sh script and to set the LD_LIBRARY_PATH variable in the ${CONF_DIR}/accumulo-env.sh script if needed." +fi +echo "Setup complete" http://git-wip-us.apache.org/repos/asf/accumulo/blob/9b20a9d4/core/src/main/java/org/apache/accumulo/core/Constants.java ---------------------------------------------------------------------- diff --cc core/src/main/java/org/apache/accumulo/core/Constants.java index 2a570f4,240de73..9897262 --- a/core/src/main/java/org/apache/accumulo/core/Constants.java +++ b/core/src/main/java/org/apache/accumulo/core/Constants.java @@@ -16,17 -16,37 +16,26 @@@ */ package org.apache.accumulo.core; + import static com.google.common.base.Charsets.UTF_8; + import java.nio.charset.Charset; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; -import org.apache.accumulo.core.conf.AccumuloConfiguration; -import org.apache.accumulo.core.conf.Property; -import org.apache.accumulo.core.data.Key; -import org.apache.accumulo.core.data.KeyExtent; -import org.apache.accumulo.core.data.PartialKey; -import org.apache.accumulo.core.data.Range; import org.apache.accumulo.core.security.Authorizations; -import org.apache.accumulo.core.util.ColumnFQ; -import org.apache.hadoop.fs.Path; -import org.apache.hadoop.io.Text; + import com.google.common.base.Charsets; + public class Constants { - public static final Charset UTF8 = Charset.forName("UTF-8"); + /** - * @deprecated since 1.5.3; statically import Guava's {@link Charsets#UTF_8} or Java 7's built-in StandardCharsets.UTF_8 or use ++ * @deprecated since 1.5.3, 1.6.2; statically import Guava's {@link Charsets#UTF_8} or Java 7's built-in StandardCharsets.UTF_8 or use + * {@link Charset#forName(String)} with "UTF-8" instead + */ + @Deprecated + public static final Charset UTF8 = UTF_8; public static final String VERSION = FilteredConstants.VERSION; - - // versions should never be negative - public static final Integer WIRE_VERSION = 2; - public static final int DATA_VERSION = 5; - public static final int PREV_DATA_VERSION = 4; - + // Zookeeper locations public static final String ZROOT = "/accumulo"; public static final String ZINSTANCES = "/instances"; @@@ -56,62 -76,117 +65,62 @@@ public static final String ZMONITOR_LOCK = ZMONITOR + "/lock"; public static final String ZMONITOR_HTTP_ADDR = ZMONITOR + "/http_addr"; public static final String ZMONITOR_LOG4J_ADDR = ZMONITOR + "/log4j_addr"; - + public static final String ZCONFIG = "/config"; - + public static final String ZTSERVERS = "/tservers"; - + public static final String ZDEAD = "/dead"; - public static final String ZDEADTSERVERS = "/dead/tservers"; - + public static final String ZDEADTSERVERS = ZDEAD + "/tservers"; + public static final String ZTRACERS = "/tracers"; - + public static final String ZPROBLEMS = "/problems"; - public static final String ZUSERS = "/users"; - + public static final String BULK_ARBITRATOR_TYPE = "bulkTx"; - + public static final String ZFATE = "/fate"; - + public static final String ZNEXT_FILE = "/next_file"; - + public static final String ZBULK_FAILED_COPYQ = "/bulk_failed_copyq"; - + public static final String ZHDFS_RESERVATIONS = "/hdfs_reservations"; public static final String ZRECOVERY = "/recovery"; - - public static final String METADATA_TABLE_ID = "!0"; - public static final String METADATA_TABLE_NAME = "!METADATA"; - public static final String DEFAULT_TABLET_LOCATION = "/default_tablet"; - public static final String TABLE_TABLET_LOCATION = "/table_info"; - public static final String ZTABLE_LOCKS = "/table_locks"; - - // reserved keyspace is any row that begins with a tilde '~' character - public static final Key METADATA_RESERVED_KEYSPACE_START_KEY = new Key(new Text(new byte[] {'~'})); - public static final Key METADATA_RESERVED_KEYSPACE_STOP_KEY = new Key(new Text(new byte[] {'~' + 1})); - public static final Range METADATA_RESERVED_KEYSPACE = new Range(METADATA_RESERVED_KEYSPACE_START_KEY, true, METADATA_RESERVED_KEYSPACE_STOP_KEY, false); - public static final String METADATA_DELETE_FLAG_PREFIX = "~del"; - public static final String METADATA_DELETE_FLAG_FOR_METADATA_PREFIX = "!!" + METADATA_DELETE_FLAG_PREFIX; - public static final Range METADATA_DELETES_KEYSPACE = new Range(new Key(new Text(METADATA_DELETE_FLAG_PREFIX)), true, new Key(new Text("~dem")), false); - public static final Range METADATA_DELETES_FOR_METADATA_KEYSPACE = new Range(new Key(new Text(METADATA_DELETE_FLAG_FOR_METADATA_PREFIX)), true, new Key(new Text("!!~dem")), false); - public static final String METADATA_BLIP_FLAG_PREFIX = "~blip"; // BLIP = bulk load in progress - public static final Range METADATA_BLIP_KEYSPACE = new Range(new Key(new Text(METADATA_BLIP_FLAG_PREFIX)), true, new Key(new Text("~bliq")), false); - - public static final Text METADATA_SERVER_COLUMN_FAMILY = new Text("srv"); - public static final Text METADATA_TABLET_COLUMN_FAMILY = new Text("~tab"); // this needs to sort after all other column families for that tablet - public static final Text METADATA_CURRENT_LOCATION_COLUMN_FAMILY = new Text("loc"); - public static final Text METADATA_FUTURE_LOCATION_COLUMN_FAMILY = new Text("future"); - public static final Text METADATA_LAST_LOCATION_COLUMN_FAMILY = new Text("last"); - public static final Text METADATA_BULKFILE_COLUMN_FAMILY = new Text("loaded"); // temporary marker that indicates a tablet loaded a bulk file - public static final Text METADATA_CLONED_COLUMN_FAMILY = new Text("!cloned"); // temporary marker that indicates a tablet was successfully cloned - - // README : very important that prevRow sort last to avoid race conditions between - // garbage collector and split - public static final ColumnFQ METADATA_PREV_ROW_COLUMN = new ColumnFQ(METADATA_TABLET_COLUMN_FAMILY, new Text("~pr")); // this needs to sort after everything - // else for that tablet - public static final ColumnFQ METADATA_OLD_PREV_ROW_COLUMN = new ColumnFQ(METADATA_TABLET_COLUMN_FAMILY, new Text("oldprevrow")); - public static final ColumnFQ METADATA_DIRECTORY_COLUMN = new ColumnFQ(METADATA_SERVER_COLUMN_FAMILY, new Text("dir")); - public static final ColumnFQ METADATA_TIME_COLUMN = new ColumnFQ(METADATA_SERVER_COLUMN_FAMILY, new Text("time")); - public static final ColumnFQ METADATA_FLUSH_COLUMN = new ColumnFQ(METADATA_SERVER_COLUMN_FAMILY, new Text("flush")); - public static final ColumnFQ METADATA_COMPACT_COLUMN = new ColumnFQ(METADATA_SERVER_COLUMN_FAMILY, new Text("compact")); - public static final ColumnFQ METADATA_SPLIT_RATIO_COLUMN = new ColumnFQ(METADATA_TABLET_COLUMN_FAMILY, new Text("splitRatio")); - public static final ColumnFQ METADATA_LOCK_COLUMN = new ColumnFQ(METADATA_SERVER_COLUMN_FAMILY, new Text("lock")); - - public static final Text METADATA_DATAFILE_COLUMN_FAMILY = new Text("file"); - public static final Text METADATA_SCANFILE_COLUMN_FAMILY = new Text("scan"); - public static final Text METADATA_LOG_COLUMN_FAMILY = new Text("log"); - public static final Text METADATA_CHOPPED_COLUMN_FAMILY = new Text("chopped"); - public static final ColumnFQ METADATA_CHOPPED_COLUMN = new ColumnFQ(METADATA_CHOPPED_COLUMN_FAMILY, new Text("chopped")); - - public static final Range NON_ROOT_METADATA_KEYSPACE = new Range( - new Key(KeyExtent.getMetadataEntry(new Text(METADATA_TABLE_ID), null)).followingKey(PartialKey.ROW), true, METADATA_RESERVED_KEYSPACE_START_KEY, false); - public static final Range METADATA_KEYSPACE = new Range(new Key(new Text(METADATA_TABLE_ID)), true, METADATA_RESERVED_KEYSPACE_START_KEY, false); - - public static final KeyExtent ROOT_TABLET_EXTENT = new KeyExtent(new Text(METADATA_TABLE_ID), KeyExtent.getMetadataEntry(new Text(METADATA_TABLE_ID), null), - null); - public static final Range METADATA_ROOT_TABLET_KEYSPACE = new Range(ROOT_TABLET_EXTENT.getMetadataEntry(), false, KeyExtent.getMetadataEntry(new Text( - METADATA_TABLE_ID), null), true); - + /** - * @deprecated since 1.5.3; not used, but specifies UTF-8 + * Initial tablet directory name for the default tablet in all tables */ - @Deprecated - public static final String VALUE_ENCODING = UTF_8.name(); - + public static final String DEFAULT_TABLET_LOCATION = "/default_tablet"; + + public static final String ZTABLE_LOCKS = "/table_locks"; + public static final String BULK_PREFIX = "b-"; - public static final String OLD_BULK_PREFIX = "bulk_"; - - // note: all times are in milliseconds - - public static final int SCAN_BATCH_SIZE = 1000; // this affects the table client caching of metadata - - public static final long MIN_MASTER_LOOP_TIME = 1000; - public static final int MASTER_TABLETSERVER_CONNECTION_TIMEOUT = 3000; - public static final long CLIENT_SLEEP_BEFORE_RECONNECT = 1000; - + + public static final String CLONE_PREFIX = "c-"; - public static final byte[] CLONE_PREFIX_BYTES = CLONE_PREFIX.getBytes(UTF8); ++ public static final byte[] CLONE_PREFIX_BYTES = CLONE_PREFIX.getBytes(UTF_8); + + // this affects the table client caching of metadata + public static final int SCAN_BATCH_SIZE = 1000; + + // Scanners will default to fetching 3 batches of Key/Value pairs before asynchronously + // fetching the next batch. + public static final long SCANNER_DEFAULT_READAHEAD_THRESHOLD = 3l; + // Security configuration public static final String PW_HASH_ALGORITHM = "SHA-256"; - - // Representation of an empty set of authorizations - // (used throughout the code, because scans of metadata table and many tests do not set record-level visibility) - public static final Authorizations NO_AUTHS = new Authorizations(); - - public static final int DEFAULT_MINOR_COMPACTION_MAX_SLEEP_TIME = 60 * 3; // in seconds - + + /** + * @deprecated since 1.6.0; Use {@link Authorizations#EMPTY} instead + */ + @Deprecated + public static final Authorizations NO_AUTHS = Authorizations.EMPTY; + public static final int MAX_DATA_TO_PRINT = 64; - public static final int CLIENT_RETRIES = 5; - public static final int TSERV_MINC_MAXCONCURRENT_NUMWAITING_MULTIPLIER = 2; public static final String CORE_PACKAGE_NAME = "org.apache.accumulo.core"; - public static final String OLD_PACKAGE_NAME = "cloudbase"; - public static final String VALID_TABLE_NAME_REGEX = "^\\w+$"; public static final String MAPFILE_EXTENSION = "map"; public static final String GENERATED_TABLET_DIRECTORY_PREFIX = "t-"; - + public static final String EXPORT_METADATA_FILE = "metadata.bin"; public static final String EXPORT_TABLE_CONFIG_FILE = "table_config.txt"; public static final String EXPORT_FILE = "exportMetadata.zip"; http://git-wip-us.apache.org/repos/asf/accumulo/blob/9b20a9d4/core/src/main/java/org/apache/accumulo/core/cli/ClientOpts.java ---------------------------------------------------------------------- diff --cc core/src/main/java/org/apache/accumulo/core/cli/ClientOpts.java index 35a9067,5134521..041c9e6 --- a/core/src/main/java/org/apache/accumulo/core/cli/ClientOpts.java +++ b/core/src/main/java/org/apache/accumulo/core/cli/ClientOpts.java @@@ -16,6 -16,9 +16,8 @@@ */ package org.apache.accumulo.core.cli; + import static com.google.common.base.Charsets.UTF_8; + -import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; http://git-wip-us.apache.org/repos/asf/accumulo/blob/9b20a9d4/core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java ---------------------------------------------------------------------- diff --cc core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java index 6d35757,251d6a7..a9c3292 --- a/core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java +++ b/core/src/main/java/org/apache/accumulo/core/client/ZooKeeperInstance.java @@@ -16,6 -16,11 +16,8 @@@ */ package org.apache.accumulo.core.client; + import static com.google.common.base.Charsets.UTF_8; + -import java.io.FileNotFoundException; -import java.io.IOException; -import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.util.Collections; import java.util.List; http://git-wip-us.apache.org/repos/asf/accumulo/blob/9b20a9d4/core/src/main/java/org/apache/accumulo/core/client/impl/InstanceOperationsImpl.java ---------------------------------------------------------------------- diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/InstanceOperationsImpl.java index 63e3497,0000000..6925f18 mode 100644,000000..100644 --- a/core/src/main/java/org/apache/accumulo/core/client/impl/InstanceOperationsImpl.java +++ b/core/src/main/java/org/apache/accumulo/core/client/impl/InstanceOperationsImpl.java @@@ -1,210 -1,0 +1,212 @@@ +/* + * 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 org.apache.accumulo.core.client.impl; + ++import static com.google.common.base.Charsets.UTF_8; ++ +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import org.apache.accumulo.core.Constants; +import org.apache.accumulo.core.client.AccumuloException; +import org.apache.accumulo.core.client.AccumuloSecurityException; +import org.apache.accumulo.core.client.Instance; +import org.apache.accumulo.core.client.TableNotFoundException; +import org.apache.accumulo.core.client.admin.ActiveScan; +import org.apache.accumulo.core.client.admin.ActiveCompaction; +import org.apache.accumulo.core.client.admin.InstanceOperations; +import org.apache.accumulo.core.client.impl.thrift.ClientService; +import org.apache.accumulo.core.client.impl.thrift.ConfigurationType; +import org.apache.accumulo.core.client.impl.thrift.ThriftSecurityException; +import org.apache.accumulo.core.master.thrift.MasterClientService; +import org.apache.accumulo.core.security.Credentials; +import org.apache.accumulo.core.tabletserver.thrift.TabletClientService; +import org.apache.accumulo.core.tabletserver.thrift.TabletClientService.Client; +import org.apache.accumulo.core.util.AddressUtil; +import org.apache.accumulo.core.util.ArgumentChecker; +import org.apache.accumulo.core.util.ThriftUtil; +import org.apache.accumulo.core.zookeeper.ZooUtil; +import org.apache.accumulo.fate.zookeeper.ZooCache; +import org.apache.accumulo.fate.zookeeper.ZooCacheFactory; +import org.apache.accumulo.trace.instrument.Tracer; +import org.apache.thrift.TException; +import org.apache.thrift.transport.TTransport; +import org.apache.thrift.transport.TTransportException; + +/** + * Provides a class for administering the accumulo instance + */ +public class InstanceOperationsImpl implements InstanceOperations { + private Instance instance; + private Credentials credentials; + + /** + * @param instance + * the connection information for this instance + * @param credentials + * the Credential, containing principal and Authentication Token + */ + public InstanceOperationsImpl(Instance instance, Credentials credentials) { + ArgumentChecker.notNull(instance, credentials); + this.instance = instance; + this.credentials = credentials; + } + + @Override + public void setProperty(final String property, final String value) throws AccumuloException, AccumuloSecurityException { + ArgumentChecker.notNull(property, value); + MasterClient.execute(instance, new ClientExec<MasterClientService.Client>() { + @Override + public void execute(MasterClientService.Client client) throws Exception { + client.setSystemProperty(Tracer.traceInfo(), credentials.toThrift(instance), property, value); + } + }); + } + + @Override + public void removeProperty(final String property) throws AccumuloException, AccumuloSecurityException { + ArgumentChecker.notNull(property); + MasterClient.execute(instance, new ClientExec<MasterClientService.Client>() { + @Override + public void execute(MasterClientService.Client client) throws Exception { + client.removeSystemProperty(Tracer.traceInfo(), credentials.toThrift(instance), property); + } + }); + } + + @Override + public Map<String,String> getSystemConfiguration() throws AccumuloException, AccumuloSecurityException { + return ServerClient.execute(instance, new ClientExecReturn<Map<String,String>,ClientService.Client>() { + @Override + public Map<String,String> execute(ClientService.Client client) throws Exception { + return client.getConfiguration(Tracer.traceInfo(), credentials.toThrift(instance), ConfigurationType.CURRENT); + } + }); + } + + @Override + public Map<String,String> getSiteConfiguration() throws AccumuloException, AccumuloSecurityException { + return ServerClient.execute(instance, new ClientExecReturn<Map<String,String>,ClientService.Client>() { + @Override + public Map<String,String> execute(ClientService.Client client) throws Exception { + return client.getConfiguration(Tracer.traceInfo(), credentials.toThrift(instance), ConfigurationType.SITE); + } + }); + } + + @Override + public List<String> getTabletServers() { + ZooCache cache = new ZooCacheFactory().getZooCache(instance.getZooKeepers(), instance.getZooKeepersSessionTimeOut()); + String path = ZooUtil.getRoot(instance) + Constants.ZTSERVERS; + List<String> results = new ArrayList<String>(); + for (String candidate : cache.getChildren(path)) { + List<String> children = cache.getChildren(path + "/" + candidate); + if (children != null && children.size() > 0) { + List<String> copy = new ArrayList<String>(children); + Collections.sort(copy); + byte[] data = cache.get(path + "/" + candidate + "/" + copy.get(0)); - if (data != null && !"master".equals(new String(data, Constants.UTF8))) { ++ if (data != null && !"master".equals(new String(data, UTF_8))) { + results.add(candidate); + } + } + } + return results; + } + + @Override + public List<ActiveScan> getActiveScans(String tserver) throws AccumuloException, AccumuloSecurityException { + Client client = null; + try { + client = ThriftUtil.getTServerClient(tserver, ServerConfigurationUtil.getConfiguration(instance)); + + List<ActiveScan> as = new ArrayList<ActiveScan>(); + for (org.apache.accumulo.core.tabletserver.thrift.ActiveScan activeScan : client.getActiveScans(Tracer.traceInfo(), credentials.toThrift(instance))) { + try { + as.add(new ActiveScanImpl(instance, activeScan)); + } catch (TableNotFoundException e) { + throw new AccumuloException(e); + } + } + return as; + } catch (TTransportException e) { + throw new AccumuloException(e); + } catch (ThriftSecurityException e) { + throw new AccumuloSecurityException(e.user, e.code, e); + } catch (TException e) { + throw new AccumuloException(e); + } finally { + if (client != null) + ThriftUtil.returnClient(client); + } + } + + @Override + public boolean testClassLoad(final String className, final String asTypeName) throws AccumuloException, AccumuloSecurityException { + return ServerClient.execute(instance, new ClientExecReturn<Boolean,ClientService.Client>() { + @Override + public Boolean execute(ClientService.Client client) throws Exception { + return client.checkClass(Tracer.traceInfo(), credentials.toThrift(instance), className, asTypeName); + } + }); + } + + @Override + public List<ActiveCompaction> getActiveCompactions(String tserver) throws AccumuloException, AccumuloSecurityException { + Client client = null; + try { + client = ThriftUtil.getTServerClient(tserver, ServerConfigurationUtil.getConfiguration(instance)); + + List<ActiveCompaction> as = new ArrayList<ActiveCompaction>(); + for (org.apache.accumulo.core.tabletserver.thrift.ActiveCompaction activeCompaction : client.getActiveCompactions(Tracer.traceInfo(), + credentials.toThrift(instance))) { + as.add(new ActiveCompactionImpl(instance, activeCompaction)); + } + return as; + } catch (TTransportException e) { + throw new AccumuloException(e); + } catch (ThriftSecurityException e) { + throw new AccumuloSecurityException(e.user, e.code, e); + } catch (TException e) { + throw new AccumuloException(e); + } finally { + if (client != null) + ThriftUtil.returnClient(client); + } + } + + @Override + public void ping(String tserver) throws AccumuloException { + TTransport transport = null; + try { + transport = ThriftUtil.createTransport(AddressUtil.parseAddress(tserver, false), ServerConfigurationUtil.getConfiguration(instance)); + TabletClientService.Client client = ThriftUtil.createClient(new TabletClientService.Client.Factory(), transport); + client.getTabletServerStatus(Tracer.traceInfo(), credentials.toThrift(instance)); + } catch (TTransportException e) { + throw new AccumuloException(e); + } catch (ThriftSecurityException e) { + throw new AccumuloException(e); + } catch (TException e) { + throw new AccumuloException(e); + } finally { + if (transport != null) { + transport.close(); + } + } + } +} http://git-wip-us.apache.org/repos/asf/accumulo/blob/9b20a9d4/core/src/main/java/org/apache/accumulo/core/client/impl/Namespaces.java ---------------------------------------------------------------------- diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/Namespaces.java index 30f0266,0000000..f32940c mode 100644,000000..100644 --- a/core/src/main/java/org/apache/accumulo/core/client/impl/Namespaces.java +++ b/core/src/main/java/org/apache/accumulo/core/client/impl/Namespaces.java @@@ -1,154 -1,0 +1,156 @@@ +/* + * 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 org.apache.accumulo.core.client.impl; + ++import static com.google.common.base.Charsets.UTF_8; ++ +import java.security.SecurityPermission; +import java.util.LinkedList; +import java.util.List; +import java.util.Map.Entry; +import java.util.SortedMap; +import java.util.TreeMap; + +import org.apache.accumulo.core.Constants; +import org.apache.accumulo.core.client.Instance; +import org.apache.accumulo.core.client.NamespaceNotFoundException; +import org.apache.accumulo.core.util.ArgumentChecker.Validator; +import org.apache.accumulo.core.zookeeper.ZooUtil; +import org.apache.accumulo.fate.zookeeper.ZooCache; +import org.apache.accumulo.fate.zookeeper.ZooCacheFactory; + +public class Namespaces { + public static final String VALID_NAME_REGEX = "^\\w*$"; + public static final Validator<String> VALID_NAME = new Validator<String>() { + @Override + public boolean isValid(String namespace) { + return namespace != null && namespace.matches(VALID_NAME_REGEX); + } + + @Override + public String invalidMessage(String namespace) { + if (namespace == null) + return "Namespace cannot be null"; + return "Namespaces must only contain word characters (letters, digits, and underscores): " + namespace; + } + }; + + public static final Validator<String> NOT_DEFAULT = new Validator<String>() { + @Override + public boolean isValid(String namespace) { + return !Namespaces.DEFAULT_NAMESPACE.equals(namespace); + } + + @Override + public String invalidMessage(String namespace) { + return "Namespace cannot be the reserved empty namespace"; + } + }; + + public static final Validator<String> NOT_ACCUMULO = new Validator<String>() { + @Override + public boolean isValid(String namespace) { + return !Namespaces.ACCUMULO_NAMESPACE.equals(namespace); + } + + @Override + public String invalidMessage(String namespace) { + return "Namespace cannot be the reserved namespace, " + Namespaces.ACCUMULO_NAMESPACE; + } + }; + + private static SecurityPermission TABLES_PERMISSION = new SecurityPermission("tablesPermission"); + + public static final String DEFAULT_NAMESPACE_ID = "+default"; + public static final String DEFAULT_NAMESPACE = ""; + public static final String ACCUMULO_NAMESPACE_ID = "+accumulo"; + public static final String ACCUMULO_NAMESPACE = "accumulo"; + + private static ZooCache getZooCache(Instance instance) { + SecurityManager sm = System.getSecurityManager(); + if (sm != null) { + sm.checkPermission(TABLES_PERMISSION); + } + return new ZooCacheFactory().getZooCache(instance.getZooKeepers(), instance.getZooKeepersSessionTimeOut()); + } + + private static SortedMap<String,String> getMap(Instance instance, boolean nameAsKey) { + ZooCache zc = getZooCache(instance); + + List<String> namespaceIds = zc.getChildren(ZooUtil.getRoot(instance) + Constants.ZNAMESPACES); + + TreeMap<String,String> namespaceMap = new TreeMap<String,String>(); + + for (String id : namespaceIds) { + byte[] path = zc.get(ZooUtil.getRoot(instance) + Constants.ZNAMESPACES + "/" + id + Constants.ZNAMESPACE_NAME); + if (path != null) { + if (nameAsKey) - namespaceMap.put(new String(path, Constants.UTF8), id); ++ namespaceMap.put(new String(path, UTF_8), id); + else - namespaceMap.put(id, new String(path, Constants.UTF8)); ++ namespaceMap.put(id, new String(path, UTF_8)); + } + } + return namespaceMap; + } + + public static boolean exists(Instance instance, String namespaceId) { + ZooCache zc = getZooCache(instance); + List<String> namespaceIds = zc.getChildren(ZooUtil.getRoot(instance) + Constants.ZNAMESPACES); + return namespaceIds.contains(namespaceId); + } + + public static String getNamespaceId(Instance instance, String namespace) throws NamespaceNotFoundException { + String id = getNameToIdMap(instance).get(namespace); + if (id == null) + throw new NamespaceNotFoundException(null, namespace, "getNamespaceId() failed to find namespace"); + return id; + } + + public static String getNamespaceName(Instance instance, String namespaceId) throws NamespaceNotFoundException { + String namespaceName = getIdToNameMap(instance).get(namespaceId); + if (namespaceName == null) + throw new NamespaceNotFoundException(namespaceId, null, "getNamespaceName() failed to find namespace"); + return namespaceName; + } + + public static SortedMap<String,String> getNameToIdMap(Instance instance) { + return getMap(instance, true); + } + + public static SortedMap<String,String> getIdToNameMap(Instance instance) { + return getMap(instance, false); + } + + public static List<String> getTableIds(Instance instance, String namespaceId) throws NamespaceNotFoundException { + String namespace = getNamespaceName(instance, namespaceId); + List<String> names = new LinkedList<String>(); + for (Entry<String,String> nameToId : Tables.getNameToIdMap(instance).entrySet()) + if (namespace.equals(Tables.qualify(nameToId.getKey()).getFirst())) + names.add(nameToId.getValue()); + return names; + } + + public static List<String> getTableNames(Instance instance, String namespaceId) throws NamespaceNotFoundException { + String namespace = getNamespaceName(instance, namespaceId); + List<String> names = new LinkedList<String>(); + for (String name : Tables.getNameToIdMap(instance).keySet()) + if (namespace.equals(Tables.qualify(name).getFirst())) + names.add(name); + return names; + } + +} http://git-wip-us.apache.org/repos/asf/accumulo/blob/9b20a9d4/core/src/main/java/org/apache/accumulo/core/client/impl/ServerClient.java ---------------------------------------------------------------------- diff --cc core/src/main/java/org/apache/accumulo/core/client/impl/ServerClient.java index 8da530b,1fcebe7..70bdbb0 --- a/core/src/main/java/org/apache/accumulo/core/client/impl/ServerClient.java +++ b/core/src/main/java/org/apache/accumulo/core/client/impl/ServerClient.java @@@ -16,7 -16,11 +16,9 @@@ */ package org.apache.accumulo.core.client.impl; + import static com.google.common.base.Charsets.UTF_8; + import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; import org.apache.accumulo.core.Constants; import org.apache.accumulo.core.client.AccumuloException; @@@ -128,10 -142,13 +130,10 @@@ public class ServerClient for (String tserver : zc.getChildren(ZooUtil.getRoot(instance) + Constants.ZTSERVERS)) { String path = ZooUtil.getRoot(instance) + Constants.ZTSERVERS + "/" + tserver; byte[] data = ZooUtil.getLockData(zc, path); - if (data != null && !new String(data, Constants.UTF8).equals("master")) - if (data != null) { - String tserverData = new String(data, UTF_8); - if (!tserverData.equals("master")) { - servers.add(new ThriftTransportKey(new ServerServices(tserverData).getAddressString(Service.TSERV_CLIENT), conf.getPort(Property.TSERV_CLIENTPORT), - rpcTimeout)); - } - } ++ if (data != null && !new String(data, UTF_8).equals("master")) + servers.add(new ThriftTransportKey( + new ServerServices(new String(data)).getAddressString(Service.TSERV_CLIENT), + rpcTimeout, SslConnectionParams.forClient(ServerConfigurationUtil.getConfiguration(instance)))); } boolean opened = false;