You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sm...@apache.org on 2017/12/11 19:56:10 UTC
[airavata] 05/13: Reverted dependency on api-server,
added ThriftClientPool class for profile service
This is an automated email from the ASF dual-hosted git repository.
smarru pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata.git
commit ab467ac8fd4bb36239de16ab7baf5220de09e62f
Author: Sachin Kariyattin <sa...@gmail.com>
AuthorDate: Mon Dec 4 21:04:56 2017 -0500
Reverted dependency on api-server, added ThriftClientPool class for profile service
---
.../profile-service/profile-service-server/pom.xml | 4 +-
.../handlers/GroupManagerServiceHandler.java | 2 +-
.../service/profile/utils/ThriftClientPool.java | 176 +++++++++++++++++++++
3 files changed, 179 insertions(+), 3 deletions(-)
diff --git a/airavata-services/profile-service/profile-service-server/pom.xml b/airavata-services/profile-service/profile-service-server/pom.xml
index ba8febe..2215cbc 100644
--- a/airavata-services/profile-service/profile-service-server/pom.xml
+++ b/airavata-services/profile-service/profile-service-server/pom.xml
@@ -56,8 +56,8 @@
</dependency>
<dependency>
<groupId>org.apache.airavata</groupId>
- <artifactId>airavata-api-server</artifactId>
- <version>${project.version}</version>
+ <artifactId>airavata-sharing-registry-stubs</artifactId>
+ <version>0.17-SNAPSHOT</version>
</dependency>
</dependencies>
diff --git a/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/GroupManagerServiceHandler.java b/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/GroupManagerServiceHandler.java
index a02f03a..1c2a656 100644
--- a/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/GroupManagerServiceHandler.java
+++ b/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/handlers/GroupManagerServiceHandler.java
@@ -1,6 +1,5 @@
package org.apache.airavata.service.profile.handlers;
-import org.apache.airavata.api.server.util.ThriftClientPool;
import org.apache.airavata.common.utils.Constants;
import org.apache.airavata.common.utils.ServerSettings;
import org.apache.airavata.model.error.AuthorizationException;
@@ -8,6 +7,7 @@ import org.apache.airavata.model.group.GroupModel;
import org.apache.airavata.model.security.AuthzToken;
import org.apache.airavata.service.profile.groupmanager.cpi.GroupManagerService;
import org.apache.airavata.service.profile.groupmanager.cpi.exception.GroupManagerServiceException;
+import org.apache.airavata.service.profile.utils.ThriftClientPool;
import org.apache.airavata.service.security.interceptor.SecurityCheck;
import org.apache.airavata.sharing.registry.models.GroupType;
import org.apache.airavata.sharing.registry.models.UserGroup;
diff --git a/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/utils/ThriftClientPool.java b/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/utils/ThriftClientPool.java
new file mode 100644
index 0000000..1adf9b7
--- /dev/null
+++ b/airavata-services/profile-service/profile-service-server/src/main/java/org/apache/airavata/service/profile/utils/ThriftClientPool.java
@@ -0,0 +1,176 @@
+/**
+ *
+ * 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.airavata.service.profile.utils;
+
+import org.apache.commons.pool.BasePoolableObjectFactory;
+import org.apache.commons.pool.impl.GenericObjectPool;
+import org.apache.thrift.TServiceClient;
+import org.apache.thrift.protocol.TBinaryProtocol;
+import org.apache.thrift.protocol.TProtocol;
+import org.apache.thrift.transport.TSocket;
+import org.apache.thrift.transport.TTransport;
+import org.apache.thrift.transport.TTransportException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ThriftClientPool<T extends TServiceClient> implements
+ AutoCloseable {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(ThriftClientPool.class);
+
+ private final GenericObjectPool internalPool;
+
+ public ThriftClientPool(ClientFactory<T> clientFactory,
+ GenericObjectPool.Config poolConfig, String host, int port) {
+ this(clientFactory, new BinaryOverSocketProtocolFactory(host, port),
+ poolConfig);
+ }
+
+ public ThriftClientPool(ClientFactory<T> clientFactory,
+ ProtocolFactory protocolFactory, GenericObjectPool.Config poolConfig) {
+ this.internalPool = new GenericObjectPool(new ThriftClientFactory(
+ clientFactory, protocolFactory), poolConfig);
+ }
+
+ class ThriftClientFactory extends BasePoolableObjectFactory {
+
+ private ClientFactory<T> clientFactory;
+ private ProtocolFactory protocolFactory;
+
+ public ThriftClientFactory(ClientFactory<T> clientFactory,
+ ProtocolFactory protocolFactory) {
+ this.clientFactory = clientFactory;
+ this.protocolFactory = protocolFactory;
+ }
+
+ @Override
+ public T makeObject() throws Exception {
+ try {
+ TProtocol protocol = protocolFactory.make();
+ return clientFactory.make(protocol);
+ } catch (Exception e) {
+ LOGGER.warn(e.getMessage(), e);
+ throw new ThriftClientException(
+ "Can not make a new object for pool", e);
+ }
+ }
+
+ public void destroyObject(T obj) throws Exception {
+ if (obj.getOutputProtocol().getTransport().isOpen()) {
+ obj.getOutputProtocol().getTransport().close();
+ }
+ if (obj.getInputProtocol().getTransport().isOpen()) {
+ obj.getInputProtocol().getTransport().close();
+ }
+ }
+ }
+
+ public static interface ClientFactory<T> {
+
+ T make(TProtocol tProtocol);
+ }
+
+ public static interface ProtocolFactory {
+
+ TProtocol make();
+ }
+
+ public static class BinaryOverSocketProtocolFactory implements
+ ProtocolFactory {
+
+ private String host;
+ private int port;
+
+ public BinaryOverSocketProtocolFactory(String host, int port) {
+ this.host = host;
+ this.port = port;
+ }
+
+ public TProtocol make() {
+ TTransport transport = new TSocket(host, port);
+ try {
+ transport.open();
+ } catch (TTransportException e) {
+ LOGGER.warn(e.getMessage(), e);
+ throw new ThriftClientException("Can not make protocol", e);
+ }
+ return new TBinaryProtocol(transport);
+ }
+ }
+
+ public static class ThriftClientException extends RuntimeException {
+
+ // Fucking Eclipse
+ private static final long serialVersionUID = -2275296727467192665L;
+
+ public ThriftClientException(String message, Exception e) {
+ super(message, e);
+ }
+
+ }
+
+ public T getResource() {
+ try {
+ return (T) internalPool.borrowObject();
+ } catch (Exception e) {
+ throw new ThriftClientException(
+ "Could not get a resource from the pool", e);
+ }
+ }
+
+ public void returnResourceObject(T resource) {
+ try {
+ internalPool.returnObject(resource);
+ } catch (Exception e) {
+ throw new ThriftClientException(
+ "Could not return the resource to the pool", e);
+ }
+ }
+
+ public void returnBrokenResource(T resource) {
+ returnBrokenResourceObject(resource);
+ }
+
+ public void returnResource(T resource) {
+ returnResourceObject(resource);
+ }
+
+ protected void returnBrokenResourceObject(T resource) {
+ try {
+ internalPool.invalidateObject(resource);
+ } catch (Exception e) {
+ throw new ThriftClientException(
+ "Could not return the resource to the pool", e);
+ }
+ }
+
+ public void destroy() {
+ close();
+ }
+
+ public void close() {
+ try {
+ internalPool.close();
+ } catch (Exception e) {
+ throw new ThriftClientException("Could not destroy the pool", e);
+ }
+ }
+}
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
"commits@airavata.apache.org" <co...@airavata.apache.org>.