Search in sources :

Example 11 with ClusterConfigurationService

use of org.apache.geode.distributed.internal.ClusterConfigurationService in project geode by apache.

the class ClusterConfigWithSecurityDUnitTest method testSecurityPropsInheritance.

@Test
@Ignore("GEODE-2315")
public void testSecurityPropsInheritance() throws Exception {
    locatorProps.clear();
    locatorProps.setProperty(LOCATORS, "localhost[" + locator0.getPort() + "]");
    locatorProps.setProperty("security-username", "cluster");
    locatorProps.setProperty("security-password", "cluster");
    MemberVM locator1 = lsRule.startLocatorVM(1, locatorProps);
    // the second locator should inherit the first locator's security props
    locator1.invoke(() -> {
        InternalLocator locator = LocatorServerStartupRule.locatorStarter.getLocator();
        ClusterConfigurationService sc = locator.getSharedConfiguration();
        Properties clusterConfigProps = sc.getConfiguration("cluster").getGemfireProperties();
        assertThat(clusterConfigProps.getProperty(SECURITY_MANAGER)).isEqualTo(SimpleTestSecurityManager.class.getName());
        assertThat(locator.getConfig().getSecurityManager()).isNotEmpty();
    });
}
Also used : InternalLocator(org.apache.geode.distributed.internal.InternalLocator) ClusterConfigurationService(org.apache.geode.distributed.internal.ClusterConfigurationService) MemberVM(org.apache.geode.test.dunit.rules.MemberVM) Properties(java.util.Properties) SimpleTestSecurityManager(org.apache.geode.security.SimpleTestSecurityManager) Ignore(org.junit.Ignore) SecurityTest(org.apache.geode.test.junit.categories.SecurityTest) Test(org.junit.Test) DistributedTest(org.apache.geode.test.junit.categories.DistributedTest)

Example 12 with ClusterConfigurationService

use of org.apache.geode.distributed.internal.ClusterConfigurationService in project geode by apache.

the class ClusterConfigurationServiceDUnitTest method testSharedConfigurationService.

@Test
public void testSharedConfigurationService() throws Exception {
    // Start the Locator and wait for shared configuration to be available
    final String testGroup = "G1";
    final String clusterLogLevel = "error";
    final String groupLogLevel = "fine";
    final String testName = getName();
    final VM locator1Vm = getHost(0).getVM(1);
    final VM dataMemberVm = getHost(0).getVM(2);
    final VM locator2Vm = getHost(0).getVM(3);
    final int[] ports = getRandomAvailableTCPPorts(3);
    final int locator1Port = ports[0];
    locator1Vm.invoke(() -> {
        final File locatorLogFile = new File(testName + "-locator-" + locator1Port + ".log");
        final Properties locatorProps = new Properties();
        locatorProps.setProperty(NAME, "Locator1");
        locatorProps.setProperty(MCAST_PORT, "0");
        locatorProps.setProperty(LOG_LEVEL, "info");
        locatorProps.setProperty(ENABLE_CLUSTER_CONFIGURATION, "true");
        try {
            final InternalLocator locator = (InternalLocator) Locator.startLocatorAndDS(locator1Port, locatorLogFile, null, locatorProps);
            WaitCriterion wc = new WaitCriterion() {

                @Override
                public boolean done() {
                    return locator.isSharedConfigurationRunning();
                }

                @Override
                public String description() {
                    return "Waiting for shared configuration to be started";
                }
            };
            waitForCriterion(wc, TIMEOUT, INTERVAL, true);
        } catch (IOException e) {
            fail("Unable to create a locator with a shared configuration", e);
        }
    });
    XmlEntity xmlEntity = dataMemberVm.invoke(() -> {
        Properties localProps = new Properties();
        localProps.setProperty(MCAST_PORT, "0");
        localProps.setProperty(LOCATORS, "localhost[" + locator1Port + "]");
        localProps.setProperty(GROUPS, testGroup);
        getSystem(localProps);
        Cache cache = getCache();
        assertNotNull(cache);
        DiskStoreFactory dsFactory = cache.createDiskStoreFactory();
        File dsDir = new File("dsDir");
        if (!dsDir.exists()) {
            dsDir.mkdir();
        }
        dsFactory.setDiskDirs(new File[] { dsDir });
        dsFactory.create(DISKSTORENAME);
        RegionFactory regionFactory = getCache().createRegionFactory(RegionShortcut.REPLICATE);
        regionFactory.create(REGION1);
        return new XmlEntity(CacheXml.REGION, "name", REGION1);
    });
    locator1Vm.invoke(() -> {
        ClusterConfigurationService sc = InternalLocator.getLocator().getSharedConfiguration();
        sc.addXmlEntity(xmlEntity, new String[] { testGroup });
        // Modify property and cache attributes
        Properties clusterProperties = new Properties();
        clusterProperties.setProperty(LOG_LEVEL, clusterLogLevel);
        XmlEntity cacheEntity = XmlEntity.builder().withType(CacheXml.CACHE).build();
        Map<String, String> cacheAttributes = new HashMap<String, String>();
        cacheAttributes.put(CacheXml.COPY_ON_READ, "true");
        sc.modifyXmlAndProperties(clusterProperties, cacheEntity, null);
        clusterProperties.setProperty(LOG_LEVEL, groupLogLevel);
        sc.modifyXmlAndProperties(clusterProperties, cacheEntity, new String[] { testGroup });
        // Add a jar
        byte[][] jarBytes = new byte[1][];
        jarBytes[0] = "Hello".getBytes();
        assertTrue(sc.addJarsToThisLocator(new String[] { "foo.jar" }, jarBytes, null));
        // Add a jar for the group
        jarBytes = new byte[1][];
        jarBytes[0] = "Hello".getBytes();
        assertTrue(sc.addJarsToThisLocator(new String[] { "bar.jar" }, jarBytes, new String[] { testGroup }));
    });
    final int locator2Port = ports[1];
    // Create another locator in VM2
    locator2Vm.invoke(() -> {
        final File locatorLogFile = new File(testName + "-locator-" + locator2Port + ".log");
        final Properties locatorProps = new Properties();
        locatorProps.setProperty(NAME, "Locator2");
        locatorProps.setProperty(MCAST_PORT, "0");
        locatorProps.setProperty(LOG_LEVEL, "info");
        locatorProps.setProperty(ENABLE_CLUSTER_CONFIGURATION, "true");
        locatorProps.setProperty(LOCATORS, "localhost[" + locator1Port + "]");
        try {
            final InternalLocator locator = (InternalLocator) Locator.startLocatorAndDS(locator2Port, locatorLogFile, null, locatorProps);
            WaitCriterion wc = new WaitCriterion() {

                @Override
                public boolean done() {
                    return locator.isSharedConfigurationRunning();
                }

                @Override
                public String description() {
                    return "Waiting for shared configuration to be started";
                }
            };
            waitForCriterion(wc, TIMEOUT, INTERVAL, true);
        } catch (IOException e) {
            fail("Unable to create a locator with a shared configuration", e);
        }
        InternalLocator locator = (InternalLocator) Locator.getLocator();
        ClusterConfigurationService sharedConfig = locator.getSharedConfiguration();
        Map<String, Configuration> entireConfiguration = sharedConfig.getEntireConfiguration();
        Configuration clusterConfig = entireConfiguration.get(ClusterConfigurationService.CLUSTER_CONFIG);
        assertNotNull(clusterConfig);
        assertNotNull(clusterConfig.getJarNames());
        assertTrue(clusterConfig.getJarNames().contains("foo.jar"));
        assertTrue(clusterConfig.getGemfireProperties().getProperty(LOG_LEVEL).equals(clusterLogLevel));
        assertNotNull(clusterConfig.getCacheXmlContent());
        Configuration testGroupConfiguration = entireConfiguration.get(testGroup);
        assertNotNull(testGroupConfiguration);
        assertNotNull(testGroupConfiguration.getJarNames());
        assertTrue(testGroupConfiguration.getJarNames().contains("bar.jar"));
        assertTrue(testGroupConfiguration.getGemfireProperties().getProperty(LOG_LEVEL).equals(groupLogLevel));
        assertNotNull(testGroupConfiguration.getCacheXmlContent());
        assertTrue(testGroupConfiguration.getCacheXmlContent().contains(REGION1));
        Map<String, byte[]> jarData = sharedConfig.getAllJarsFromThisLocator(entireConfiguration.keySet());
        String[] jarNames = jarData.keySet().stream().toArray(String[]::new);
        byte[][] jarBytes = jarData.values().toArray(new byte[jarNames.length][]);
        assertNotNull(jarNames);
        assertNotNull(jarBytes);
        sharedConfig.deleteXmlEntity(new XmlEntity(CacheXml.REGION, "name", REGION1), new String[] { testGroup });
        sharedConfig.removeJars(new String[] { "foo.jar" }, null);
        sharedConfig.removeJars(null, null);
    });
    dataMemberVm.invoke(() -> {
        Set<String> groups = new HashSet<String>();
        groups.add(testGroup);
        ConfigurationRequest configRequest = new ConfigurationRequest(groups);
        ConfigurationResponse configResponse = (ConfigurationResponse) new TcpClient().requestToServer(InetAddress.getByName("localhost"), locator2Port, configRequest, 1000);
        assertNotNull(configResponse);
        Map<String, Configuration> requestedConfiguration = configResponse.getRequestedConfiguration();
        Configuration clusterConfiguration = requestedConfiguration.get(ClusterConfigurationService.CLUSTER_CONFIG);
        assertNotNull(clusterConfiguration);
        assertTrue(configResponse.getJarNames().length == 0);
        assertTrue(configResponse.getJars().length == 0);
        assertTrue(clusterConfiguration.getJarNames().isEmpty());
        assertTrue(clusterConfiguration.getGemfireProperties().getProperty(LOG_LEVEL).equals(clusterLogLevel));
        Configuration testGroupConfiguration = requestedConfiguration.get(testGroup);
        assertNotNull(testGroupConfiguration);
        assertFalse(testGroupConfiguration.getCacheXmlContent().contains(REGION1));
        assertTrue(testGroupConfiguration.getJarNames().isEmpty());
        assertTrue(testGroupConfiguration.getGemfireProperties().getProperty(LOG_LEVEL).equals(groupLogLevel));
        GemFireCacheImpl cache = (GemFireCacheImpl) getCache();
        Map<InternalDistributedMember, Collection<String>> locatorsWithSharedConfiguration = cache.getDistributionManager().getAllHostedLocatorsWithSharedConfiguration();
        assertFalse(locatorsWithSharedConfiguration.isEmpty());
        assertTrue(locatorsWithSharedConfiguration.size() == 2);
        Set<InternalDistributedMember> locatorMembers = locatorsWithSharedConfiguration.keySet();
        for (InternalDistributedMember locatorMember : locatorMembers) {
            System.out.println(locatorMember);
        }
        return null;
    });
}
Also used : ConfigurationResponse(org.apache.geode.management.internal.configuration.messages.ConfigurationResponse) Configuration(org.apache.geode.management.internal.configuration.domain.Configuration) ConfigurationProperties(org.apache.geode.distributed.ConfigurationProperties) RegionFactory(org.apache.geode.cache.RegionFactory) TcpClient(org.apache.geode.distributed.internal.tcpserver.TcpClient) GemFireCacheImpl(org.apache.geode.internal.cache.GemFireCacheImpl) IOException(java.io.IOException) DiskStoreFactory(org.apache.geode.cache.DiskStoreFactory) XmlEntity(org.apache.geode.management.internal.configuration.domain.XmlEntity) InternalLocator(org.apache.geode.distributed.internal.InternalLocator) WaitCriterion(org.apache.geode.test.dunit.WaitCriterion) ClusterConfigurationService(org.apache.geode.distributed.internal.ClusterConfigurationService) InternalDistributedMember(org.apache.geode.distributed.internal.membership.InternalDistributedMember) ConfigurationRequest(org.apache.geode.management.internal.configuration.messages.ConfigurationRequest) VM(org.apache.geode.test.dunit.VM) File(java.io.File) Cache(org.apache.geode.cache.Cache) Test(org.junit.Test) DistributedTest(org.apache.geode.test.junit.categories.DistributedTest)

Example 13 with ClusterConfigurationService

use of org.apache.geode.distributed.internal.ClusterConfigurationService in project geode by apache.

the class ClusterConfigurationServiceDUnitTest method testGetHostedLocatorsWithSharedConfiguration.

@Test
public void testGetHostedLocatorsWithSharedConfiguration() throws Exception {
    final VM locator1Vm = getHost(0).getVM(1);
    final VM locator2Vm = getHost(0).getVM(2);
    final String testName = getName();
    final int[] ports = getRandomAvailableTCPPorts(3);
    final int locator1Port = ports[0];
    final String locator1Name = "locator1" + locator1Port;
    locator1Vm.invoke(() -> {
        final File locatorLogFile = new File(testName + "-locator-" + locator1Port + ".log");
        final Properties locatorProps = new Properties();
        locatorProps.setProperty(NAME, locator1Name);
        locatorProps.setProperty(MCAST_PORT, "0");
        locatorProps.setProperty(LOG_LEVEL, "fine");
        locatorProps.setProperty(ENABLE_CLUSTER_CONFIGURATION, "true");
        try {
            final InternalLocator locator = (InternalLocator) Locator.startLocatorAndDS(locator1Port, locatorLogFile, null, locatorProps);
            WaitCriterion wc = new WaitCriterion() {

                @Override
                public boolean done() {
                    return locator.isSharedConfigurationRunning();
                }

                @Override
                public String description() {
                    return "Waiting for shared configuration to be started";
                }
            };
            waitForCriterion(wc, TIMEOUT, INTERVAL, true);
        } catch (IOException e) {
            fail("Unable to create a locator with a shared configuration", e);
        }
        GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
        InternalDistributedMember me = cache.getMyId();
        DM dm = cache.getDistributionManager();
        Map<InternalDistributedMember, Collection<String>> hostedLocators = dm.getAllHostedLocators();
        assertFalse(hostedLocators.isEmpty());
        Map<InternalDistributedMember, Collection<String>> hostedLocatorsWithSharedConfiguration = dm.getAllHostedLocatorsWithSharedConfiguration();
        assertFalse(hostedLocatorsWithSharedConfiguration.isEmpty());
        assertNotNull(hostedLocators.get(me));
        assertNotNull(hostedLocatorsWithSharedConfiguration.get(me));
        return null;
    });
    final int locator2Port = ports[1];
    final String locator2Name = "locator2" + locator2Port;
    locator2Vm.invoke(() -> {
        final File locatorLogFile = new File(testName + "-locator-" + locator2Port + ".log");
        final Properties locatorProps = new Properties();
        locatorProps.setProperty(NAME, locator2Name);
        locatorProps.setProperty(MCAST_PORT, "0");
        locatorProps.setProperty(LOG_LEVEL, "fine");
        locatorProps.setProperty(LOCATORS, "localhost[" + locator1Port + "]");
        locatorProps.setProperty(ENABLE_CLUSTER_CONFIGURATION, "false");
        final InternalLocator locator = (InternalLocator) Locator.startLocatorAndDS(locator2Port, locatorLogFile, null, locatorProps);
        GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
        InternalDistributedMember me = cache.getMyId();
        DM dm = cache.getDistributionManager();
        Map<InternalDistributedMember, Collection<String>> hostedLocators = dm.getAllHostedLocators();
        assertFalse(hostedLocators.isEmpty());
        Map<InternalDistributedMember, Collection<String>> hostedLocatorsWithSharedConfiguration = dm.getAllHostedLocatorsWithSharedConfiguration();
        assertFalse(hostedLocatorsWithSharedConfiguration.isEmpty());
        assertNotNull(hostedLocators.get(me));
        assertNull(hostedLocatorsWithSharedConfiguration.get(me));
        assertTrue(hostedLocators.size() == 2);
        assertTrue(hostedLocatorsWithSharedConfiguration.size() == 1);
        Set<InternalDistributedMember> locatorsWithSharedConfig = hostedLocatorsWithSharedConfiguration.keySet();
        Set<String> locatorsWithSharedConfigNames = new HashSet<String>();
        for (InternalDistributedMember locatorWithSharedConfig : locatorsWithSharedConfig) {
            locatorsWithSharedConfigNames.add(locatorWithSharedConfig.getName());
        }
        assertTrue(locatorsWithSharedConfigNames.contains(locator1Name));
        return null;
    });
    locator1Vm.invoke(() -> {
        InternalLocator locator = (InternalLocator) Locator.getLocator();
        ClusterConfigurationService sharedConfig = locator.getSharedConfiguration();
        sharedConfig.destroySharedConfiguration();
        locator.stop();
        return null;
    });
    locator2Vm.invoke(() -> {
        GemFireCacheImpl cache = GemFireCacheImpl.getInstance();
        InternalDistributedMember me = cache.getMyId();
        DM dm = cache.getDistributionManager();
        Map<InternalDistributedMember, Collection<String>> hostedLocators = dm.getAllHostedLocators();
        assertFalse(hostedLocators.isEmpty());
        Map<InternalDistributedMember, Collection<String>> hostedLocatorsWithSharedConfiguration = dm.getAllHostedLocatorsWithSharedConfiguration();
        assertTrue(hostedLocatorsWithSharedConfiguration.isEmpty());
        assertNotNull(hostedLocators.get(me));
        assertNull(hostedLocatorsWithSharedConfiguration.get(me));
        assertTrue(hostedLocators.size() == 1);
        assertTrue(hostedLocatorsWithSharedConfiguration.size() == 0);
        return null;
    });
}
Also used : DM(org.apache.geode.distributed.internal.DM) IOException(java.io.IOException) ConfigurationProperties(org.apache.geode.distributed.ConfigurationProperties) InternalLocator(org.apache.geode.distributed.internal.InternalLocator) WaitCriterion(org.apache.geode.test.dunit.WaitCriterion) ClusterConfigurationService(org.apache.geode.distributed.internal.ClusterConfigurationService) InternalDistributedMember(org.apache.geode.distributed.internal.membership.InternalDistributedMember) VM(org.apache.geode.test.dunit.VM) GemFireCacheImpl(org.apache.geode.internal.cache.GemFireCacheImpl) File(java.io.File) Test(org.junit.Test) DistributedTest(org.apache.geode.test.junit.categories.DistributedTest)

Example 14 with ClusterConfigurationService

use of org.apache.geode.distributed.internal.ClusterConfigurationService in project geode by apache.

the class ClusterConfig method verifyLocator.

public void verifyLocator(MemberVM<Locator> locatorVM) {
    Set<String> expectedGroupConfigs = this.getGroups().stream().map(ConfigGroup::getName).collect(toSet());
    // verify info exists in memory
    locatorVM.invoke(() -> {
        InternalLocator internalLocator = LocatorServerStartupRule.locatorStarter.getLocator();
        ClusterConfigurationService sc = internalLocator.getSharedConfiguration();
        // verify no extra configs exist in memory
        Set<String> actualGroupConfigs = sc.getEntireConfiguration().keySet();
        assertThat(actualGroupConfigs).isEqualTo(expectedGroupConfigs);
        for (ConfigGroup configGroup : this.getGroups()) {
            // verify jars are as expected
            Configuration config = sc.getConfiguration(configGroup.name);
            assertThat(config.getJarNames()).isEqualTo(configGroup.getJars());
            // verify property is as expected
            if (StringUtils.isNotBlank(configGroup.getMaxLogFileSize())) {
                Properties props = config.getGemfireProperties();
                assertThat(props.getProperty(LOG_FILE_SIZE_LIMIT)).isEqualTo(configGroup.getMaxLogFileSize());
            }
            // verify region is in the region xml
            for (String regionName : configGroup.getRegions()) {
                String regionXml = "<region name=\"" + regionName + "\"";
                assertThat(config.getCacheXmlContent()).contains(regionXml);
            }
        }
    });
    File clusterConfigDir = new File(locatorVM.getWorkingDir(), "/cluster_config");
    for (ConfigGroup configGroup : this.getGroups()) {
        Set<String> actualFiles = toSetIgnoringHiddenFiles(new File(clusterConfigDir, configGroup.name).list());
        Set<String> expectedFiles = configGroup.getAllFiles();
        assertThat(actualFiles).isEqualTo(expectedFiles);
    }
}
Also used : InternalLocator(org.apache.geode.distributed.internal.InternalLocator) ClusterConfigurationService(org.apache.geode.distributed.internal.ClusterConfigurationService) Configuration(org.apache.geode.management.internal.configuration.domain.Configuration) Properties(java.util.Properties) File(java.io.File)

Example 15 with ClusterConfigurationService

use of org.apache.geode.distributed.internal.ClusterConfigurationService in project geode by apache.

the class UploadJarFunction method execute.

@Override
public void execute(FunctionContext context) {
    InternalLocator locator = (InternalLocator) Locator.getLocator();
    Object[] args = (Object[]) context.getArguments();
    String group = (String) args[0];
    String jarName = (String) args[1];
    if (locator != null && group != null && jarName != null) {
        ClusterConfigurationService sharedConfig = locator.getSharedConfiguration();
        if (sharedConfig != null) {
            try {
                byte[] jarBytes = sharedConfig.getJarBytesFromThisLocator(group, jarName);
                context.getResultSender().lastResult(jarBytes);
            } catch (Exception e) {
                logger.error(e);
                context.getResultSender().sendException(e);
            }
        }
    }
    // TODO: Why does this not throw an IllegalStateException?
    context.getResultSender().lastResult(null);
}
Also used : InternalLocator(org.apache.geode.distributed.internal.InternalLocator) ClusterConfigurationService(org.apache.geode.distributed.internal.ClusterConfigurationService)

Aggregations

ClusterConfigurationService (org.apache.geode.distributed.internal.ClusterConfigurationService)16 InternalLocator (org.apache.geode.distributed.internal.InternalLocator)15 File (java.io.File)11 IOException (java.io.IOException)10 DistributedTest (org.apache.geode.test.junit.categories.DistributedTest)10 Test (org.junit.Test)10 Properties (java.util.Properties)9 VM (org.apache.geode.test.dunit.VM)9 UnknownHostException (java.net.UnknownHostException)6 Cache (org.apache.geode.cache.Cache)6 CommandResult (org.apache.geode.management.internal.cli.result.CommandResult)6 CommandStringBuilder (org.apache.geode.management.internal.cli.util.CommandStringBuilder)6 WaitCriterion (org.apache.geode.test.dunit.WaitCriterion)6 FlakyTest (org.apache.geode.test.junit.categories.FlakyTest)6 Configuration (org.apache.geode.management.internal.configuration.domain.Configuration)4 SerializableRunnable (org.apache.geode.test.dunit.SerializableRunnable)4 Category (org.junit.experimental.categories.Category)4 Region (org.apache.geode.cache.Region)3 SerializableCallable (org.apache.geode.test.dunit.SerializableCallable)3 FileNotFoundException (java.io.FileNotFoundException)2