You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by ta...@apache.org on 2021/02/04 17:31:57 UTC

[unomi] branch IT created (now f54cfa4)

This is an automated email from the ASF dual-hosted git repository.

taybou pushed a change to branch IT
in repository https://gitbox.apache.org/repos/asf/unomi.git.


      at f54cfa4  try fix IT

This branch includes the following new commits:

     new f54cfa4  try fix IT

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[unomi] 01/01: try fix IT

Posted by ta...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

taybou pushed a commit to branch IT
in repository https://gitbox.apache.org/repos/asf/unomi.git

commit f54cfa45ba01cfb3fdcc29da14e85cda78dc8915
Author: Taybou <be...@gmail.com>
AuthorDate: Thu Feb 4 18:31:39 2021 +0100

    try fix IT
---
 .../unomi/graphql/schema/GraphQLSchemaUpdater.java | 349 +--------------------
 ...aUpdater.java => GraphQLSchemaUpdaterImpl.java} |  33 +-
 .../apache/unomi/itests/graphql/BaseGraphQLIT.java |   9 +
 .../unomi/itests/graphql/GraphQLSegmentIT.java     |   1 +
 4 files changed, 38 insertions(+), 354 deletions(-)

diff --git a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/schema/GraphQLSchemaUpdater.java b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/schema/GraphQLSchemaUpdater.java
index 73a7712..2c85132 100644
--- a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/schema/GraphQLSchemaUpdater.java
+++ b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/schema/GraphQLSchemaUpdater.java
@@ -17,353 +17,14 @@
 package org.apache.unomi.graphql.schema;
 
 import graphql.GraphQL;
-import graphql.execution.SubscriptionExecutionStrategy;
-import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLSchema;
-import org.apache.unomi.api.services.EventTypeRegistry;
-import org.apache.unomi.api.services.ProfileService;
-import org.apache.unomi.graphql.fetchers.event.UnomiEventPublisher;
-import org.apache.unomi.graphql.providers.GraphQLAdditionalTypesProvider;
-import org.apache.unomi.graphql.providers.GraphQLCodeRegistryProvider;
-import org.apache.unomi.graphql.providers.GraphQLExtensionsProvider;
-import org.apache.unomi.graphql.providers.GraphQLFieldVisibilityProvider;
-import org.apache.unomi.graphql.providers.GraphQLMutationProvider;
-import org.apache.unomi.graphql.providers.GraphQLProvider;
-import org.apache.unomi.graphql.providers.GraphQLQueryProvider;
-import org.apache.unomi.graphql.providers.GraphQLSubscriptionProvider;
-import org.apache.unomi.graphql.providers.GraphQLTypeFunctionProvider;
-import org.apache.unomi.graphql.types.output.CDPEventInterface;
-import org.apache.unomi.graphql.types.output.CDPPersona;
-import org.apache.unomi.graphql.types.output.CDPProfile;
-import org.apache.unomi.graphql.types.output.CDPProfileInterface;
-import org.apache.unomi.graphql.types.output.CDPPropertyInterface;
-import org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Deactivate;
-import org.osgi.service.component.annotations.Reference;
-import org.osgi.service.component.annotations.ReferenceCardinality;
-import org.osgi.service.component.annotations.ReferencePolicy;
-import org.osgi.service.component.annotations.ReferencePolicyOption;
 
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
+public interface GraphQLSchemaUpdater {
+    boolean isSchemaUpdating();
 
-@Component(service = GraphQLSchemaUpdater.class)
-public class GraphQLSchemaUpdater {
+    void updateSchema();
 
-    public @interface SchemaConfig {
-
-        int schema_update_delay() default 0;
-
-    }
-
-    private final List<GraphQLQueryProvider> queryProviders = new CopyOnWriteArrayList<>();
-
-    private final List<GraphQLMutationProvider> mutationProviders = new CopyOnWriteArrayList<>();
-
-    private final List<GraphQLSubscriptionProvider> subscriptionProviders = new CopyOnWriteArrayList<>();
-
-    private final List<GraphQLExtensionsProvider> extensionsProviders = new CopyOnWriteArrayList<>();
-
-    private final List<GraphQLAdditionalTypesProvider> additionalTypesProviders = new CopyOnWriteArrayList<>();
-
-    private final List<GraphQLTypeFunctionProvider> typeFunctionProviders = new CopyOnWriteArrayList<>();
-
-    private GraphQLFieldVisibilityProvider fieldVisibilityProvider;
-
-    private GraphQLCodeRegistryProvider codeRegistryProvider;
-
-    private UnomiEventPublisher eventPublisher;
-
-    private GraphQL graphQL;
-
-    private ProfileService profileService;
-
-    private EventTypeRegistry eventTypeRegistry;
-
-    private CDPEventInterfaceRegister eventInterfaceRegister;
-
-    private CDPProfileInterfaceRegister profilesInterfaceRegister;
-
-    private CDPPropertyInterfaceRegister propertyInterfaceRegister;
-
-    private ScheduledExecutorService executorService;
-
-    private ScheduledFuture<?> updateFuture;
-
-    private boolean isActivated;
-
-    private int schemaUpdateDelay;
-
-    @Activate
-    public void activate(final SchemaConfig config) {
-        this.isActivated = true;
-        this.schemaUpdateDelay = config.schema_update_delay();
-
-        if (config.schema_update_delay() != 0) {
-            this.executorService = Executors.newSingleThreadScheduledExecutor();
-        }
-
-        updateSchema();
-    }
-
-    @Deactivate
-    public void deactivate() {
-        this.isActivated = false;
-
-        if (executorService != null) {
-            executorService.shutdown();
-        }
-    }
-
-    @Reference
-    public void setEventPublisher(UnomiEventPublisher eventPublisher) {
-        this.eventPublisher = eventPublisher;
-    }
-
-    @Reference
-    public void setProfileService(ProfileService profileService) {
-        this.profileService = profileService;
-    }
-
-    @Reference
-    public void setEventTypeRegistry(EventTypeRegistry eventTypeRegistry) {
-        this.eventTypeRegistry = eventTypeRegistry;
-    }
-
-    @Reference
-    public void setEventInterfaceRegister(CDPEventInterfaceRegister eventInterfaceRegister) {
-        this.eventInterfaceRegister = eventInterfaceRegister;
-    }
-
-    @Reference
-    public void setProfilesInterfaceRegister(CDPProfileInterfaceRegister profilesInterfaceRegister) {
-        this.profilesInterfaceRegister = profilesInterfaceRegister;
-    }
-
-    @Reference
-    public void setPropertiesInterfaceRegister(CDPPropertyInterfaceRegister propertyInterfaceRegister) {
-        this.propertyInterfaceRegister = propertyInterfaceRegister;
-    }
-
-    @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
-    public void bindProvider(GraphQLProvider provider) {
-        if (provider instanceof GraphQLQueryProvider) {
-            queryProviders.add((GraphQLQueryProvider) provider);
-        }
-        if (provider instanceof GraphQLMutationProvider) {
-            mutationProviders.add((GraphQLMutationProvider) provider);
-        }
-        if (provider instanceof GraphQLSubscriptionProvider) {
-            subscriptionProviders.add((GraphQLSubscriptionProvider) provider);
-        }
-        if (provider instanceof GraphQLAdditionalTypesProvider) {
-            additionalTypesProviders.add((GraphQLAdditionalTypesProvider) provider);
-        }
-        if (provider instanceof GraphQLFieldVisibilityProvider) {
-            fieldVisibilityProvider = (GraphQLFieldVisibilityProvider) provider;
-        }
-        if (provider instanceof GraphQLCodeRegistryProvider) {
-            codeRegistryProvider = (GraphQLCodeRegistryProvider) provider;
-        }
-        updateSchema();
-    }
-
-    public void unbindProvider(GraphQLProvider provider) {
-        if (provider instanceof GraphQLQueryProvider) {
-            queryProviders.remove(provider);
-        }
-        if (provider instanceof GraphQLMutationProvider) {
-            mutationProviders.remove(provider);
-        }
-        if (provider instanceof GraphQLSubscriptionProvider) {
-            subscriptionProviders.remove(provider);
-        }
-        if (provider instanceof GraphQLAdditionalTypesProvider) {
-            additionalTypesProviders.remove(provider);
-        }
-        if (provider instanceof GraphQLFieldVisibilityProvider) {
-            fieldVisibilityProvider = null;
-        }
-        if (provider instanceof GraphQLCodeRegistryProvider) {
-            codeRegistryProvider = GraphQLCodeRegistry::newCodeRegistry;
-        }
-        updateSchema();
-    }
-
-    @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
-    public void bindQueryProvider(GraphQLQueryProvider provider) {
-        queryProviders.add(provider);
-
-        updateSchema();
-    }
-
-    public void unbindQueryProvider(GraphQLQueryProvider provider) {
-        queryProviders.remove(provider);
-
-        updateSchema();
-    }
-
-    @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
-    public void bindMutationProvider(GraphQLMutationProvider provider) {
-        mutationProviders.add(provider);
-
-        updateSchema();
-    }
-
-    public void unbindMutationProvider(GraphQLMutationProvider provider) {
-        mutationProviders.remove(provider);
-
-        updateSchema();
-    }
-
-    @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
-    public void bindSubscriptionProvider(GraphQLSubscriptionProvider provider) {
-        subscriptionProviders.add(provider);
-
-        updateSchema();
-    }
-
-    public void unbindSubscriptionProvider(GraphQLSubscriptionProvider provider) {
-        subscriptionProviders.remove(provider);
-
-        updateSchema();
-    }
-
-
-    @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
-    public void bindFieldVisibilityProvider(GraphQLFieldVisibilityProvider provider) {
-        fieldVisibilityProvider = provider;
-
-        updateSchema();
-    }
-
-    public void unbindFieldVisibilityProvider(GraphQLFieldVisibilityProvider provider) {
-        fieldVisibilityProvider = null;
-
-        updateSchema();
-    }
-
-    @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
-    public void bindExtensionsProvider(GraphQLExtensionsProvider provider) {
-        extensionsProviders.add(provider);
-
-        updateSchema();
-    }
-
-    public void unbindExtensionsProvider(GraphQLExtensionsProvider provider) {
-        extensionsProviders.remove(provider);
-
-        updateSchema();
-    }
-
-    @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
-    public void bindAdditionalTypes(GraphQLAdditionalTypesProvider provider) {
-        additionalTypesProviders.add(provider);
-
-        updateSchema();
-    }
-
-    public void unbindAdditionalTypes(GraphQLAdditionalTypesProvider provider) {
-        additionalTypesProviders.remove(provider);
-
-        updateSchema();
-    }
-
-    @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
-    public void bindTypeFunctionProviders(GraphQLTypeFunctionProvider typeFunctionProvider) {
-        this.typeFunctionProviders.add(typeFunctionProvider);
-
-        updateSchema();
-    }
-
-    public void unbindTypeFunctionProviders(GraphQLTypeFunctionProvider typeFunctionProvider) {
-        typeFunctionProviders.remove(typeFunctionProvider);
-
-        updateSchema();
-    }
-
-    @Reference(cardinality = ReferenceCardinality.OPTIONAL, policy = ReferencePolicy.DYNAMIC, policyOption = ReferencePolicyOption.GREEDY)
-    public void bindCodeRegistryProvider(GraphQLCodeRegistryProvider codeRegistryProvider) {
-        this.codeRegistryProvider = codeRegistryProvider;
-
-        updateSchema();
-    }
-
-    public void unbindCodeRegistryProvider(GraphQLCodeRegistryProvider codeRegistryProvider) {
-        this.codeRegistryProvider = null;
-
-        updateSchema();
-    }
-
-    public void updateSchema() {
-        if (!isActivated) {
-            return;
-        }
-
-        if (schemaUpdateDelay == 0) {
-            doUpdateSchema();
-        } else {
-            if (updateFuture != null) {
-                updateFuture.cancel(true);
-            }
-
-            updateFuture = executorService.scheduleWithFixedDelay(this::doUpdateSchema, 0, schemaUpdateDelay, TimeUnit.SECONDS);
-        }
-    }
-
-    private void doUpdateSchema() {
-        final GraphQLSchema graphQLSchema = createGraphQLSchema();
-
-        this.graphQL = GraphQL.newGraphQL(graphQLSchema)
-                .subscriptionExecutionStrategy(new SubscriptionExecutionStrategy())
-                .build();
-    }
-
-    public GraphQL getGraphQL() {
-        return graphQL;
-    }
-
-    @SuppressWarnings("unchecked")
-    private GraphQLSchema createGraphQLSchema() {
-        final GraphQLSchemaProvider schemaProvider = GraphQLSchemaProvider.create(profileService, eventTypeRegistry)
-                .typeFunctionProviders(typeFunctionProviders)
-                .extensionsProviders(extensionsProviders)
-                .additionalTypesProviders(additionalTypesProviders)
-                .queryProviders(queryProviders)
-                .mutationProviders(mutationProviders)
-                .subscriptionProviders(subscriptionProviders)
-                .eventPublisher(eventPublisher)
-                .codeRegistryProvider(codeRegistryProvider)
-                .fieldVisibilityProvider(fieldVisibilityProvider)
-                .build();
-
-        final GraphQLSchema schema = schemaProvider.createSchema();
-
-        profilesInterfaceRegister.register(CDPProfile.class);
-        profilesInterfaceRegister.register(CDPPersona.class);
-
-        if (schemaProvider.getAdditionalTypes() != null && !schemaProvider.getAdditionalTypes().isEmpty()) {
-            schemaProvider.getAdditionalTypes().forEach(additionalType -> {
-                if (CDPEventInterface.class.isAssignableFrom(additionalType)) {
-                    eventInterfaceRegister.register((Class<? extends CDPEventInterface>) additionalType);
-                }
-
-                if (CDPProfileInterface.class.isAssignableFrom(additionalType)) {
-                    profilesInterfaceRegister.register((Class<? extends CDPProfileInterface>) additionalType);
-                }
-
-                if (CDPPropertyInterface.class.isAssignableFrom(additionalType)) {
-                    propertyInterfaceRegister.register((Class<? extends CDPPropertyInterface>) additionalType);
-                }
-            });
-        }
-
-        return schema;
-    }
+    GraphQL getGraphQL();
 
+    GraphQLSchema createGraphQLSchema();
 }
diff --git a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/schema/GraphQLSchemaUpdater.java b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/schema/GraphQLSchemaUpdaterImpl.java
similarity index 97%
copy from graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/schema/GraphQLSchemaUpdater.java
copy to graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/schema/GraphQLSchemaUpdaterImpl.java
index 73a7712..383c17c 100644
--- a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/schema/GraphQLSchemaUpdater.java
+++ b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/schema/GraphQLSchemaUpdaterImpl.java
@@ -53,7 +53,7 @@ import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 
 @Component(service = GraphQLSchemaUpdater.class)
-public class GraphQLSchemaUpdater {
+public class GraphQLSchemaUpdaterImpl implements GraphQLSchemaUpdater {
 
     public @interface SchemaConfig {
 
@@ -99,6 +99,8 @@ public class GraphQLSchemaUpdater {
 
     private int schemaUpdateDelay;
 
+    private boolean schemaUpdating;
+
     @Activate
     public void activate(final SchemaConfig config) {
         this.isActivated = true;
@@ -300,6 +302,12 @@ public class GraphQLSchemaUpdater {
         updateSchema();
     }
 
+    @Override
+    public boolean isSchemaUpdating() {
+        return schemaUpdating;
+    }
+
+    @Override
     public void updateSchema() {
         if (!isActivated) {
             return;
@@ -316,20 +324,14 @@ public class GraphQLSchemaUpdater {
         }
     }
 
-    private void doUpdateSchema() {
-        final GraphQLSchema graphQLSchema = createGraphQLSchema();
-
-        this.graphQL = GraphQL.newGraphQL(graphQLSchema)
-                .subscriptionExecutionStrategy(new SubscriptionExecutionStrategy())
-                .build();
-    }
-
+    @Override
     public GraphQL getGraphQL() {
         return graphQL;
     }
 
     @SuppressWarnings("unchecked")
-    private GraphQLSchema createGraphQLSchema() {
+    @Override
+    public GraphQLSchema createGraphQLSchema() {
         final GraphQLSchemaProvider schemaProvider = GraphQLSchemaProvider.create(profileService, eventTypeRegistry)
                 .typeFunctionProviders(typeFunctionProviders)
                 .extensionsProviders(extensionsProviders)
@@ -366,4 +368,15 @@ public class GraphQLSchemaUpdater {
         return schema;
     }
 
+    private void doUpdateSchema() {
+        schemaUpdating = true;
+        final GraphQLSchema graphQLSchema = createGraphQLSchema();
+
+        this.graphQL = GraphQL.newGraphQL(graphQLSchema)
+                .subscriptionExecutionStrategy(new SubscriptionExecutionStrategy())
+                .build();
+
+        schemaUpdating = false;
+    }
+
 }
diff --git a/itests/src/test/java/org/apache/unomi/itests/graphql/BaseGraphQLIT.java b/itests/src/test/java/org/apache/unomi/itests/graphql/BaseGraphQLIT.java
index df3e8b0..d7122ca 100644
--- a/itests/src/test/java/org/apache/unomi/itests/graphql/BaseGraphQLIT.java
+++ b/itests/src/test/java/org/apache/unomi/itests/graphql/BaseGraphQLIT.java
@@ -23,6 +23,7 @@ import org.apache.http.entity.ContentType;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.util.EntityUtils;
+import org.apache.unomi.graphql.schema.GraphQLSchemaUpdater;
 import org.apache.unomi.graphql.utils.GraphQLObjectMapper;
 import org.apache.unomi.itests.BaseIT;
 import org.apache.unomi.lifecycle.BundleWatcher;
@@ -57,11 +58,19 @@ public abstract class BaseGraphQLIT extends BaseIT {
     @Filter(timeout = 600000)
     protected BundleWatcher bundleWatcher;
 
+    @Inject
+    @Filter(timeout = 600000)
+    protected GraphQLSchemaUpdater graphQLSchemaUpdater;
+
     @Before
     public void setUp() throws InterruptedException {
         while (!bundleWatcher.isStartupComplete()) {
             Thread.sleep(1000);
         }
+
+        while (graphQLSchemaUpdater.isSchemaUpdating()) {
+            Thread.sleep(100);
+        }
     }
 
     protected CloseableHttpResponse post(final String resource) throws IOException {
diff --git a/itests/src/test/java/org/apache/unomi/itests/graphql/GraphQLSegmentIT.java b/itests/src/test/java/org/apache/unomi/itests/graphql/GraphQLSegmentIT.java
index be6b536..5ea86b0 100644
--- a/itests/src/test/java/org/apache/unomi/itests/graphql/GraphQLSegmentIT.java
+++ b/itests/src/test/java/org/apache/unomi/itests/graphql/GraphQLSegmentIT.java
@@ -39,6 +39,7 @@ public class GraphQLSegmentIT extends BaseGraphQLIT {
 
     @Before
     public void setUp() throws InterruptedException {
+        super.setUp();
         removeItems(Segment.class);
     }