Index: hbase-server/src/test/java/org/apache/hadoop/hbase/util/EnvironmentEdgeManagerTestHelper.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/util/EnvironmentEdgeManagerTestHelper.java (revision 1391311) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/util/EnvironmentEdgeManagerTestHelper.java (working copy) @@ -1,35 +0,0 @@ -/* - * - * 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.hadoop.hbase.util; - -/** - * Used by tests to inject an edge into the manager. The intent is to minimise - * the use of the injectEdge method giving it default permissions, but in - * testing we may need to use this functionality elsewhere. - */ -public class EnvironmentEdgeManagerTestHelper { - - public static void reset() { - EnvironmentEdgeManager.reset(); - } - - public static void injectEdge(EnvironmentEdge edge) { - EnvironmentEdgeManager.injectEdge(edge); - } -} Index: hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestEnvironmentEdgeManager.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestEnvironmentEdgeManager.java (revision 1391311) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestEnvironmentEdgeManager.java (working copy) @@ -1,68 +0,0 @@ -/* - * - * 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.hadoop.hbase.util; - -import org.apache.hadoop.hbase.MediumTests; -import org.junit.Test; -import org.junit.experimental.categories.Category; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -import static org.mockito.Mockito.verify; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -@Category(MediumTests.class) -public class TestEnvironmentEdgeManager { - - @Test - public void testManageSingleton() { - EnvironmentEdgeManager.reset(); - EnvironmentEdge edge = EnvironmentEdgeManager.getDelegate(); - assertNotNull(edge); - assertTrue(edge instanceof DefaultEnvironmentEdge); - EnvironmentEdgeManager.reset(); - EnvironmentEdge edge2 = EnvironmentEdgeManager.getDelegate(); - assertFalse(edge == edge2); - IncrementingEnvironmentEdge newEdge = new IncrementingEnvironmentEdge(); - EnvironmentEdgeManager.injectEdge(newEdge); - assertEquals(newEdge, EnvironmentEdgeManager.getDelegate()); - - //injecting null will result in default being assigned. - EnvironmentEdgeManager.injectEdge(null); - EnvironmentEdge nullResult = EnvironmentEdgeManager.getDelegate(); - assertTrue(nullResult instanceof DefaultEnvironmentEdge); - } - - @Test - public void testCurrentTimeInMillis() { - EnvironmentEdge mock = mock(EnvironmentEdge.class); - EnvironmentEdgeManager.injectEdge(mock); - long expectation = 3456; - when(mock.currentTimeMillis()).thenReturn(expectation); - long result = EnvironmentEdgeManager.currentTimeMillis(); - verify(mock).currentTimeMillis(); - assertEquals(expectation, result); - } - -} - Index: hbase-server/src/main/java/org/apache/hadoop/hbase/util/IncrementingEnvironmentEdge.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/util/IncrementingEnvironmentEdge.java (revision 1391311) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/util/IncrementingEnvironmentEdge.java (working copy) @@ -1,41 +0,0 @@ -/* - * - * 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.hadoop.hbase.util; - -import org.apache.hadoop.classification.InterfaceAudience; - -/** - * Uses an incrementing algorithm instead of the default. - */ -@InterfaceAudience.Private -public class IncrementingEnvironmentEdge implements EnvironmentEdge { - - private long timeIncrement = 1; - - /** - * {@inheritDoc} - *
- * This method increments a known value for the current time each time this - * method is called. The first value is 1. - */ - @Override - public synchronized long currentTimeMillis() { - return timeIncrement++; - } -} Index: hbase-server/src/main/java/org/apache/hadoop/hbase/util/EnvironmentEdgeManager.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/util/EnvironmentEdgeManager.java (revision 1391311) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/util/EnvironmentEdgeManager.java (working copy) @@ -1,79 +0,0 @@ -/* - * - * 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.hadoop.hbase.util; - -import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; - -/** - * Manages a singleton instance of the environment edge. This class shall - * implement static versions of the interface {@link EnvironmentEdge}, then - * defer to the delegate on invocation. - */ -@InterfaceAudience.Public -@InterfaceStability.Evolving -public class EnvironmentEdgeManager { - private static volatile EnvironmentEdge delegate = new DefaultEnvironmentEdge(); - - private EnvironmentEdgeManager() { - - } - - /** - * Retrieves the singleton instance of the {@link EnvironmentEdge} that is - * being managed. - * - * @return the edge. - */ - public static EnvironmentEdge getDelegate() { - return delegate; - } - - /** - * Resets the managed instance to the default instance: {@link - * DefaultEnvironmentEdge}. - */ - public static void reset() { - injectEdge(new DefaultEnvironmentEdge()); - } - - /** - * Injects the given edge such that it becomes the managed entity. If null is - * passed to this method, the default type is assigned to the delegate. - * - * @param edge the new edge. - */ - public static void injectEdge(EnvironmentEdge edge) { - if (edge == null) { - reset(); - } else { - delegate = edge; - } - } - - /** - * Defers to the delegate and calls the - * {@link EnvironmentEdge#currentTimeMillis()} method. - * - * @return current time in millis according to the delegate. - */ - public static long currentTimeMillis() { - return getDelegate().currentTimeMillis(); - } -} Index: hbase-server/src/main/java/org/apache/hadoop/hbase/util/EnvironmentEdge.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/util/EnvironmentEdge.java (revision 1391311) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/util/EnvironmentEdge.java (working copy) @@ -1,40 +0,0 @@ -/* - * - * 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.hadoop.hbase.util; - -import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; - -/** - * Has some basic interaction with the environment. Alternate implementations - * can be used where required (eg in tests). - * - * @see EnvironmentEdgeManager - */ -@InterfaceAudience.Public -@InterfaceStability.Evolving -public interface EnvironmentEdge { - - /** - * Returns the currentTimeMillis. - * - * @return currentTimeMillis. - */ - long currentTimeMillis(); -} Index: hbase-server/src/main/java/org/apache/hadoop/hbase/util/DefaultEnvironmentEdge.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/util/DefaultEnvironmentEdge.java (revision 1391311) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/util/DefaultEnvironmentEdge.java (working copy) @@ -1,41 +0,0 @@ -/* - * - * 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.hadoop.hbase.util; - -import org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.classification.InterfaceStability; - -/** - * Default implementation of an environment edge. - */ -@InterfaceAudience.Public -@InterfaceStability.Evolving -public class DefaultEnvironmentEdge implements EnvironmentEdge { - - - /** - * {@inheritDoc} - * - * This implementation returns {@link System#currentTimeMillis()} - */ - @Override - public long currentTimeMillis() { - return System.currentTimeMillis(); - } -}