Search in sources :

Example 11 with ActivityLog

use of com.netflix.exhibitor.core.activity.ActivityLog in project exhibitor by soabase.

the class TestS3PseudoLock method testWithDifferentLockKeySeparator.

@Test
public void testWithDifferentLockKeySeparator() throws Exception {
    MockS3Client client = new MockS3Client();
    ActivityLog mockLog = Mockito.mock(ActivityLog.class);
    S3PseudoLock lock = new S3PseudoLock(client, "foo", "bar", 10000, 1, 0, "#");
    Assert.assertTrue(lock.lock(mockLog, 5, TimeUnit.SECONDS));
    lock.unlock();
}
Also used : MockS3Client(com.netflix.exhibitor.core.backup.s3.MockS3Client) ActivityLog(com.netflix.exhibitor.core.activity.ActivityLog) Test(org.testng.annotations.Test)

Example 12 with ActivityLog

use of com.netflix.exhibitor.core.activity.ActivityLog in project exhibitor by soabase.

the class TestRollingChangeStaging method internalTest.

private void internalTest(final int attempts) throws Exception {
    final Semaphore restartLatch = new Semaphore(0);
    TestProcessOperations mockOperations1 = new TestProcessOperations();
    TestProcessOperations mockOperations2 = new TestProcessOperations();
    TestProcessOperations mockOperations3 = new TestProcessOperations();
    final InstanceConfig defaultInstanceConfig = DefaultProperties.newDefaultInstanceConfig(null);
    final InstanceConfig instanceConfig = new InstanceConfig() {

        @Override
        public String getString(StringConfigs config) {
            if (config == StringConfigs.SERVERS_SPEC) {
                return "1:one,2:two,3:three";
            }
            if ((config == StringConfigs.ZOOKEEPER_DATA_DIRECTORY) || (config == StringConfigs.ZOOKEEPER_INSTALL_DIRECTORY)) {
                return "foo";
            }
            return defaultInstanceConfig.getString(config);
        }

        @Override
        public int getInt(IntConfigs config) {
            if (config == IntConfigs.CHECK_MS) {
                return 1;
            }
            return defaultInstanceConfig.getInt(config);
        }
    };
    Properties properties = DefaultProperties.getFromInstanceConfig(instanceConfig);
    ConfigCollection configCollection = new PropertyBasedInstanceConfig(properties, new Properties());
    LoadedInstanceConfig loadedInstanceConfig = new LoadedInstanceConfig(configCollection, 1);
    final AtomicReference<LoadedInstanceConfig> providerConfig = new AtomicReference<LoadedInstanceConfig>(loadedInstanceConfig);
    ConfigProvider mockConfigProvider = new ConfigProvider() {

        @Override
        public void start() throws Exception {
        }

        @Override
        public LoadedInstanceConfig loadConfig() throws Exception {
            return providerConfig.get();
        }

        @Override
        public LoadedInstanceConfig storeConfig(ConfigCollection config, long compareVersion) throws Exception {
            LoadedInstanceConfig loadedInstanceConfig = new LoadedInstanceConfig(config, compareVersion + 1);
            providerConfig.set(loadedInstanceConfig);
            return loadedInstanceConfig;
        }

        @Override
        public PseudoLock newPseudoLock() throws Exception {
            return new PseudoLock() {

                @Override
                public boolean lock(ActivityLog log, long maxWait, TimeUnit unit) throws Exception {
                    return true;
                }

                @Override
                public void unlock() throws Exception {
                }
            };
        }

        @Override
        public void close() throws IOException {
        }
    };
    ControlPanelValues mockControlPanelValues = Mockito.mock(ControlPanelValues.class);
    Mockito.when(mockControlPanelValues.isSet(Mockito.any(ControlPanelTypes.class))).thenReturn(true);
    ActivityQueue activityQueue = new ActivityQueue();
    final Queue<AssertionError> exceptions = Queues.newConcurrentLinkedQueue();
    Exhibitor mockExhibitor1 = Mockito.mock(Exhibitor.class, Mockito.RETURNS_MOCKS);
    Mockito.when(mockExhibitor1.getActivityQueue()).thenReturn(activityQueue);
    ConfigManager configManager1 = new TestConfigManager(mockExhibitor1, mockConfigProvider);
    Mockito.when(mockExhibitor1.getConfigManager()).thenReturn(configManager1);
    MonitorRunningInstance monitorRunningInstance1 = new MockMonitorRunningInstance(mockExhibitor1, providerConfig, "one", restartLatch, exceptions);
    Mockito.when(mockExhibitor1.getMonitorRunningInstance()).thenReturn(monitorRunningInstance1);
    Mockito.when(mockExhibitor1.getThisJVMHostname()).thenReturn("one");
    Mockito.when(mockExhibitor1.getProcessOperations()).thenReturn(mockOperations1);
    Mockito.when(mockExhibitor1.getControlPanelValues()).thenReturn(mockControlPanelValues);
    Exhibitor mockExhibitor2 = Mockito.mock(Exhibitor.class, Mockito.RETURNS_MOCKS);
    Mockito.when(mockExhibitor2.getActivityQueue()).thenReturn(activityQueue);
    ConfigManager configManager2 = new TestConfigManager(mockExhibitor2, mockConfigProvider);
    Mockito.when(mockExhibitor2.getConfigManager()).thenReturn(configManager2);
    MonitorRunningInstance monitorRunningInstance2 = new MockMonitorRunningInstance(mockExhibitor2, providerConfig, "two", restartLatch, exceptions);
    Mockito.when(mockExhibitor2.getMonitorRunningInstance()).thenReturn(monitorRunningInstance2);
    Mockito.when(mockExhibitor2.getThisJVMHostname()).thenReturn("two");
    Mockito.when(mockExhibitor2.getProcessOperations()).thenReturn(mockOperations2);
    Mockito.when(mockExhibitor2.getControlPanelValues()).thenReturn(mockControlPanelValues);
    Exhibitor mockExhibitor3 = Mockito.mock(Exhibitor.class, Mockito.RETURNS_MOCKS);
    Mockito.when(mockExhibitor3.getActivityQueue()).thenReturn(activityQueue);
    ConfigManager configManager3 = new TestConfigManager(mockExhibitor3, mockConfigProvider);
    Mockito.when(mockExhibitor3.getConfigManager()).thenReturn(configManager3);
    MonitorRunningInstance monitorRunningInstance3 = new MockMonitorRunningInstance(mockExhibitor3, providerConfig, "three", restartLatch, exceptions);
    Mockito.when(mockExhibitor3.getMonitorRunningInstance()).thenReturn(monitorRunningInstance3);
    Mockito.when(mockExhibitor3.getThisJVMHostname()).thenReturn("three");
    Mockito.when(mockExhibitor3.getProcessOperations()).thenReturn(mockOperations3);
    Mockito.when(mockExhibitor3.getControlPanelValues()).thenReturn(mockControlPanelValues);
    try {
        activityQueue.start();
        configManager1.start();
        configManager2.start();
        configManager3.start();
        monitorRunningInstance1.start();
        monitorRunningInstance2.start();
        monitorRunningInstance3.start();
        Thread.sleep(1000);
        for (int i = 0; i < attempts; ++i) {
            Assert.assertEquals(restartLatch.availablePermits(), 0);
            final int index = i;
            InstanceConfig changedInstanceConfig = new InstanceConfig() {

                @Override
                public String getString(StringConfigs config) {
                    if (config == StringConfigs.LOG4J_PROPERTIES) {
                        return "something different " + index;
                    }
                    return instanceConfig.getString(config);
                }

                @Override
                public int getInt(IntConfigs config) {
                    return instanceConfig.getInt(config);
                }
            };
            configManager1.startRollingConfig(changedInstanceConfig, "one");
            Assert.assertTrue(restartLatch.tryAcquire(1, 10, TimeUnit.SECONDS));
            if (exceptions.size() > 0) {
                for (AssertionError assertionError : exceptions) {
                    assertionError.printStackTrace();
                }
                Assert.fail("Failed restart assertions");
            }
        }
    } finally {
        CloseableUtils.closeQuietly(monitorRunningInstance3);
        CloseableUtils.closeQuietly(monitorRunningInstance2);
        CloseableUtils.closeQuietly(monitorRunningInstance1);
        CloseableUtils.closeQuietly(configManager3);
        CloseableUtils.closeQuietly(configManager2);
        CloseableUtils.closeQuietly(configManager1);
        CloseableUtils.closeQuietly(activityQueue);
    }
}
Also used : ControlPanelTypes(com.netflix.exhibitor.core.controlpanel.ControlPanelTypes) Semaphore(java.util.concurrent.Semaphore) Properties(java.util.Properties) MonitorRunningInstance(com.netflix.exhibitor.core.state.MonitorRunningInstance) Exhibitor(com.netflix.exhibitor.core.Exhibitor) TimeUnit(java.util.concurrent.TimeUnit) ControlPanelValues(com.netflix.exhibitor.core.controlpanel.ControlPanelValues) ActivityLog(com.netflix.exhibitor.core.activity.ActivityLog) AtomicReference(java.util.concurrent.atomic.AtomicReference) ActivityQueue(com.netflix.exhibitor.core.activity.ActivityQueue)

Aggregations

ActivityLog (com.netflix.exhibitor.core.activity.ActivityLog)12 Test (org.testng.annotations.Test)11 Exhibitor (com.netflix.exhibitor.core.Exhibitor)7 ActivityQueue (com.netflix.exhibitor.core.activity.ActivityQueue)7 MonitorRunningInstance (com.netflix.exhibitor.core.state.MonitorRunningInstance)7 Properties (java.util.Properties)7 RemoteInstanceRequestClient (com.netflix.exhibitor.core.automanage.RemoteInstanceRequestClient)6 ServerList (com.netflix.exhibitor.core.state.ServerList)6 URI (java.net.URI)6 AtomicLong (java.util.concurrent.atomic.AtomicLong)6 MediaType (javax.ws.rs.core.MediaType)6 MockS3Client (com.netflix.exhibitor.core.backup.s3.MockS3Client)5 InstanceState (com.netflix.exhibitor.core.state.InstanceState)5 RestartSignificantConfig (com.netflix.exhibitor.core.state.RestartSignificantConfig)5 IOException (java.io.IOException)4 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)2 ControlPanelTypes (com.netflix.exhibitor.core.controlpanel.ControlPanelTypes)1 ControlPanelValues (com.netflix.exhibitor.core.controlpanel.ControlPanelValues)1 ArrayBlockingQueue (java.util.concurrent.ArrayBlockingQueue)1 ExecutorCompletionService (java.util.concurrent.ExecutorCompletionService)1