You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by dl...@apache.org on 2016/04/12 15:58:42 UTC
[25/39] accumulo git commit: ACCUMULO-4147 Add Accumulo Namespace
Operations to Proxy
ACCUMULO-4147 Add Accumulo Namespace Operations to Proxy
Squashed commit of the following:
commit a97782a97bddd0495fc493c7484907ff29b9e023
Author: Tristen Georgiou <tr...@gmail.com>
Date: Tue Mar 29 22:29:55 2016 -0700
Added in missing calls to Assert.fail() to ensure that expected exceptions are thrown and removed a function call that doesn't actually throw the exception.
commit 3b9cff9219cecc93392e32741177531ed7d1dbe5
Merge: 9d2dc05 1d49030
Author: Tristen Georgiou <tr...@gmail.com>
Date: Fri Mar 25 14:03:48 2016 -0700
Merge remote-tracking branch 'upstream/master'
commit 9d2dc05dde1a3896af1ac64e0e2bea67d784ad89
Author: Tristen Georgiou <tr...@gmail.com>
Date: Fri Mar 25 14:01:52 2016 -0700
Added in integration tests for the proxy namespace operations.
commit 9cb8bc88fbc205ca841bf59159c5060fede43990
Merge: eacedaa c4d6eee
Author: Tristen Georgiou <tg...@phemi.com>
Date: Thu Feb 25 17:05:55 2016 -0800
Merge remote-tracking branch 'upstream/master'
commit eacedaaccd9d79d8a1f2303a2aef15599acfcb10
Author: Tristen Georgiou <tg...@phemi.com>
Date: Thu Feb 25 17:03:17 2016 -0800
Added in IT tests for namespace operations and added in a namespace example file under the python examples .
commit 8dc5ab95d97f5c825222ab2ed52afaf2553e05a2
Merge: e149233 2651ba8
Author: Tristen Georgiou <tg...@phemi.com>
Date: Thu Feb 25 11:50:34 2016 -0800
Merge remote-tracking branch 'upstream/master'
commit e149233c5340329410d83270a523fdb6a8a57cb9
Author: Tristen Georgiou <tr...@gmail.com>
Date: Sat Feb 20 12:13:58 2016 -0800
Formatting update.
commit cc254d7857adc696413afd6ff0d945f955af5853
Author: Tristen Georgiou <tr...@gmail.com>
Date: Sat Feb 20 10:55:21 2016 -0800
Added in namespace security operation permission functions.
commit 7e3c4d40c7ec6df43730e142b5dc87fa498caebe
Author: Tristen Georgiou <tg...@phemi.com>
Date: Fri Feb 19 16:10:21 2016 -0800
Initial implementation for proxy namespace operations.
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/8839fe51
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/8839fe51
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/8839fe51
Branch: refs/heads/ACCUMULO-4173
Commit: 8839fe5116337bbbf1e9b81109d0e9127fef7715
Parents: ada31a9
Author: Tristen Georgiou <tg...@phemi.com>
Authored: Mon Apr 4 12:19:41 2016 -0400
Committer: Keith Turner <kt...@apache.org>
Committed: Mon Apr 4 13:47:10 2016 -0400
----------------------------------------------------------------------
proxy/examples/python/TestNamespace.py | 172 +
proxy/src/main/cpp/AccumuloProxy.cpp | 33610 ++++---
proxy/src/main/cpp/AccumuloProxy.h | 5162 +-
.../main/cpp/AccumuloProxy_server.skeleton.cpp | 115 +
proxy/src/main/cpp/proxy_types.cpp | 315 +
proxy/src/main/cpp/proxy_types.h | 166 +
.../org/apache/accumulo/proxy/ProxyServer.java | 289 +
.../accumulo/proxy/thrift/AccumuloProxy.java | 88369 +++++++++++------
.../proxy/thrift/NamespaceExistsException.java | 414 +
.../thrift/NamespaceNotEmptyException.java | 414 +
.../thrift/NamespaceNotFoundException.java | 414 +
.../proxy/thrift/NamespacePermission.java | 82 +
proxy/src/main/python/AccumuloProxy-remote | 161 +
proxy/src/main/python/AccumuloProxy.py | 15767 ++-
proxy/src/main/python/ttypes.py | 239 +
proxy/src/main/ruby/accumulo_proxy.rb | 1740 +-
proxy/src/main/ruby/proxy_types.rb | 83 +
proxy/src/main/thrift/proxy.thrift | 61 +-
.../accumulo/test/proxy/SimpleProxyBase.java | 407 +-
.../proxy/TestProxyNamespaceOperations.java | 165 +
.../test/proxy/TestProxySecurityOperations.java | 13 +
21 files changed, 102216 insertions(+), 45942 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/accumulo/blob/8839fe51/proxy/examples/python/TestNamespace.py
----------------------------------------------------------------------
diff --git a/proxy/examples/python/TestNamespace.py b/proxy/examples/python/TestNamespace.py
new file mode 100644
index 0000000..e7d2377
--- /dev/null
+++ b/proxy/examples/python/TestNamespace.py
@@ -0,0 +1,172 @@
+#! /usr/bin/env python
+
+# 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.
+
+from thrift.protocol import TCompactProtocol
+from thrift.transport import TSocket, TTransport
+
+from proxy import AccumuloProxy
+from proxy.ttypes import NamespacePermission, IteratorSetting, IteratorScope, AccumuloException
+
+
+def main():
+ transport = TSocket.TSocket('localhost', 42424)
+ transport = TTransport.TFramedTransport(transport)
+ protocol = TCompactProtocol.TCompactProtocol(transport)
+ client = AccumuloProxy.Client(protocol)
+ transport.open()
+ login = client.login('root', {'password': 'password'})
+
+ client.createLocalUser(login, 'user1', 'password1')
+
+ print client.listNamespaces(login)
+
+ # create a namespace and give the user1 all permissions
+ print 'creating namespace testing'
+ client.createNamespace(login, 'testing')
+ assert client.namespaceExists(login, 'testing')
+ print client.listNamespaces(login)
+
+ print 'testing namespace renaming'
+ client.renameNamespace(login, 'testing', 'testing2')
+ assert not client.namespaceExists(login, 'testing')
+ assert client.namespaceExists(login, 'testing2')
+ client.renameNamespace(login, 'testing2', 'testing')
+ assert not client.namespaceExists(login, 'testing2')
+ assert client.namespaceExists(login, 'testing')
+
+ print 'granting all namespace permissions to user1'
+ for k, v in NamespacePermission._VALUES_TO_NAMES.iteritems():
+ client.grantNamespacePermission(login, 'user1', 'testing', k)
+
+ # make sure the last operation worked
+ for k, v in NamespacePermission._VALUES_TO_NAMES.iteritems():
+ assert client.hasNamespacePermission(login, 'user1', 'testing', k), \
+ 'user1 does\'nt have namespace permission %s' % v
+
+ print 'default namespace: ' + client.defaultNamespace()
+ print 'system namespace: ' + client.systemNamespace()
+
+ # grab the namespace properties
+ print 'retrieving namespace properties'
+ props = client.getNamespaceProperties(login, 'testing')
+ assert props and props['table.compaction.major.ratio'] == '3'
+
+ # update a property and verify it is good
+ print 'setting namespace property table.compaction.major.ratio = 4'
+ client.setNamespaceProperty(login, 'testing', 'table.compaction.major.ratio', '4')
+ props = client.getNamespaceProperties(login, 'testing')
+ assert props and props['table.compaction.major.ratio'] == '4'
+
+ print 'retrieving namespace ID map'
+ nsids = client.namespaceIdMap(login)
+ assert nsids and 'accumulo' in nsids
+
+ print 'attaching debug iterator to namespace testing'
+ setting = IteratorSetting(priority=40, name='DebugTheThings',
+ iteratorClass='org.apache.accumulo.core.iterators.DebugIterator', properties={})
+ client.attachNamespaceIterator(login, 'testing', setting, [IteratorScope.SCAN])
+ setting = client.getNamespaceIteratorSetting(login, 'testing', 'DebugTheThings', IteratorScope.SCAN)
+ assert setting and setting.name == 'DebugTheThings'
+
+ # make sure the iterator is in the list
+ iters = client.listNamespaceIterators(login, 'testing')
+ found = False
+ for name, scopes in iters.iteritems():
+ if name == 'DebugTheThings':
+ found = True
+ break
+ assert found
+
+ print 'checking for iterator conflicts'
+
+ # this next statment should be fine since we are on a different scope
+ client.checkNamespaceIteratorConflicts(login, 'testing', setting, [IteratorScope.MINC])
+
+ # this time it should throw an exception since we have already added the iterator with this scope
+ try:
+ client.checkNamespaceIteratorConflicts(login, 'testing', setting, [IteratorScope.SCAN, IteratorScope.MINC])
+ except AccumuloException:
+ pass
+ else:
+ assert False, 'There should have been a namespace iterator conflict!'
+
+ print 'removing debug iterator from namespace testing'
+ client.removeNamespaceIterator(login, 'testing', 'DebugTheThings', [IteratorScope.SCAN])
+
+ # make sure the iterator is NOT in the list anymore
+ iters = client.listNamespaceIterators(login, 'testing')
+ found = False
+ for name, scopes in iters.iteritems():
+ if name == 'DebugTheThings':
+ found = True
+ break
+ assert not found
+
+ print 'adding max mutation size namespace constraint'
+ constraintid = client.addNamespaceConstraint(login, 'testing',
+ 'org.apache.accumulo.examples.simple.constraints.MaxMutationSize')
+
+ print 'make sure constraint was added'
+ constraints = client.listNamespaceConstraints(login, 'testing')
+ found = False
+ for name, cid in constraints.iteritems():
+ if cid == constraintid and name == 'org.apache.accumulo.examples.simple.constraints.MaxMutationSize':
+ found = True
+ break
+ assert found
+
+ print 'remove max mutation size namespace constraint'
+ client.removeNamespaceConstraint(login, 'testing', constraintid)
+
+ print 'make sure constraint was removed'
+ constraints = client.listNamespaceConstraints(login, 'testing')
+ found = False
+ for name, cid in constraints.iteritems():
+ if cid == constraintid and name == 'org.apache.accumulo.examples.simple.constraints.MaxMutationSize':
+ found = True
+ break
+ assert not found
+
+ print 'test a namespace class load of the VersioningIterator'
+ res = client.testNamespaceClassLoad(login, 'testing', 'org.apache.accumulo.core.iterators.user.VersioningIterator',
+ 'org.apache.accumulo.core.iterators.SortedKeyValueIterator')
+ assert res
+
+ print 'test a bad namespace class load of the VersioningIterator'
+ res = client.testNamespaceClassLoad(login, 'testing', 'org.apache.accumulo.core.iterators.user.VersioningIterator',
+ 'dummy')
+ assert not res
+
+ # revoke the permissions
+ print 'revoking namespace permissions for user1'
+ for k, v in NamespacePermission._VALUES_TO_NAMES.iteritems():
+ client.revokeNamespacePermission(login, 'user1', 'testing', k)
+
+ # make sure the last operation worked
+ for k, v in NamespacePermission._VALUES_TO_NAMES.iteritems():
+ assert not client.hasNamespacePermission(login, 'user1', 'testing', k), \
+ 'user1 does\'nt have namespace permission %s' % v
+
+ print 'deleting namespace testing'
+ client.deleteNamespace(login, 'testing')
+ assert not client.namespaceExists(login, 'testing')
+
+ print 'deleting user1'
+ client.dropLocalUser(login, 'user1')
+
+if __name__ == "__main__":
+ main()