Example usage for java.util.concurrent.atomic AtomicInteger get

List of usage examples for java.util.concurrent.atomic AtomicInteger get

Introduction

In this page you can find the example usage for java.util.concurrent.atomic AtomicInteger get.

Prototype

public final int get() 

Source Link

Document

Returns the current value, with memory effects as specified by VarHandle#getVolatile .

Usage

From source file:com.twitter.distributedlog.service.balancer.ClusterBalancer.java

public void balance(int rebalanceWaterMark, double rebalanceTolerancePercentage, int rebalanceConcurrency,
        Optional<String> source, Optional<RateLimiter> rebalanceRateLimiter) {
    Map<SocketAddress, Set<String>> distribution = monitor.getStreamOwnershipDistribution();
    if (distribution.size() <= 1) {
        return;// w w  w  . j  ava2 s .c o  m
    }
    SocketAddress sourceAddr = null;
    if (source.isPresent()) {
        sourceAddr = DLSocketAddress.parseSocketAddress(source.get());
        logger.info("Balancer source is {}", sourceAddr);
        if (!distribution.containsKey(sourceAddr)) {
            return;
        }
    }
    // Get the list of hosts ordered by number of streams in DESC order
    List<Host> hosts = new ArrayList<Host>(distribution.size());
    for (Map.Entry<SocketAddress, Set<String>> entry : distribution.entrySet()) {
        Host host = new Host(entry.getKey(), entry.getValue(), clientBuilder);
        hosts.add(host);
    }
    Collections.sort(hosts, new HostComparator());
    try {

        // find the host to move streams from.
        int hostIdxMoveFrom = -1;
        if (null != sourceAddr) {
            for (Host host : hosts) {
                ++hostIdxMoveFrom;
                if (sourceAddr.equals(host.address)) {
                    break;
                }
            }
        }

        // compute the average load.
        int totalStream = 0;
        for (Host host : hosts) {
            totalStream += host.streams.size();
        }
        double averageLoad;
        if (hostIdxMoveFrom >= 0) {
            averageLoad = ((double) totalStream / (hosts.size() - 1));
        } else {
            averageLoad = ((double) totalStream / hosts.size());
        }

        int moveFromLowWaterMark;
        int moveToHighWaterMark = Math.max(1,
                (int) (averageLoad + averageLoad * rebalanceTolerancePercentage / 100.0f));

        if (hostIdxMoveFrom >= 0) {
            moveFromLowWaterMark = Math.max(0, rebalanceWaterMark);
            moveStreams(hosts, new AtomicInteger(hostIdxMoveFrom), moveFromLowWaterMark,
                    new AtomicInteger(hosts.size() - 1), moveToHighWaterMark, rebalanceRateLimiter);
            moveRemainingStreamsFromSource(hosts.get(hostIdxMoveFrom), hosts, rebalanceRateLimiter);
        } else {
            moveFromLowWaterMark = Math.max((int) Math.ceil(averageLoad), rebalanceWaterMark);
            AtomicInteger moveFrom = new AtomicInteger(0);
            AtomicInteger moveTo = new AtomicInteger(hosts.size() - 1);
            while (moveFrom.get() < moveTo.get()) {
                moveStreams(hosts, moveFrom, moveFromLowWaterMark, moveTo, moveToHighWaterMark,
                        rebalanceRateLimiter);
                moveFrom.incrementAndGet();
            }
        }
    } finally {
        for (Host host : hosts) {
            host.close();
        }
    }
}

From source file:com.linkedin.pinot.core.offline.OfflineTableDataManagerTest.java

private void verifyCount(SegmentDataManager segmentDataManager, int value) throws Exception {
    Field refcntField = SegmentDataManager.class.getDeclaredField(refCntFieldName);
    refcntField.setAccessible(true);//  w  w w .  ja v  a 2 s .  c o  m
    AtomicInteger refCnt = (AtomicInteger) refcntField.get(segmentDataManager);
    int actualCount = refCnt.get();
    Assert.assertEquals(actualCount, value,
            segmentDataManager.getSegmentName() + " had " + actualCount + " instead of " + value);
}

From source file:com.rationaldevelopers.oss.service.CacheService.java

@Scheduled(fixedRate = 60000)
public void trueUpCache() {
    if (!lock.isLocked()) {
        lock.lock();//from   w  w w  .  j av  a2  s .c  o  m
        try {
            LOGGER.info("Running Timed Task");
            final Iterable<SimpleItem> all = simpleItemService.findAll();
            final AtomicInteger itemsUpdated = new AtomicInteger(0);
            StreamSupport.stream(all.spliterator(), false).filter(i -> !cache.containsKey(i.getSid())
                    || cache.containsKey(i.getSid()) && !cache.get(i.getSid()).equals(i)).forEach(i -> {
                        cache.put(i.getSid(), i);
                        itemsUpdated.incrementAndGet();
                    });
            LOGGER.info("Total Items Updated: {}", itemsUpdated.get());
        } finally {
            lock.unlock();
        }
    }
}

From source file:gov.pnnl.goss.gridappsd.process.ProcessManagerImpl.java

public int assignSimulationPort(int simulationId) throws Exception {
    Integer simIdKey = new Integer(simulationId);
    if (!simulationPorts.containsKey(simIdKey)) {
        int tempPort = 49152 + randPort.nextInt(16384);
        AtomicInteger tempPortObj = new AtomicInteger(tempPort);
        while (simulationPorts.containsValue(tempPortObj)) {
            int newTempPort = 49152 + randPort.nextInt(16384);
            tempPortObj.set(newTempPort);
        }/*  w  w  w .j  a  v a2 s  . c  o  m*/
        simulationPorts.put(simIdKey, tempPortObj);
        return tempPortObj.get();
        //TODO: test host:port is available
    } else {
        throw new Exception(
                "The simulation id already exists. This indicates that the simulation id is part of a"
                        + "simulation in progress.");
    }
}

From source file:org.zenoss.zep.dao.impl.DaoUtilsTest.java

@Test
public void testDeadlockRetry() throws Exception {
    final AtomicInteger i = new AtomicInteger();
    final int returnVal = new Random().nextInt();
    int result = DaoUtils.deadlockRetry(new Callable<Integer>() {
        @Override/*w w w  . j  a va  2  s .  c  o m*/
        public Integer call() throws Exception {
            if (i.incrementAndGet() < 5) {
                throw new DeadlockLoserDataAccessException("My fake exception", null);
            }
            return returnVal;
        }
    });
    assertEquals(i.get(), 5);
    assertEquals(result, returnVal);
}

From source file:com.twitter.distributedlog.service.balancer.ClusterBalancer.java

void moveStreams(List<Host> hosts, AtomicInteger hostIdxMoveFrom, int moveFromLowWaterMark,
        AtomicInteger hostIdxMoveTo, int moveToHighWaterMark, Optional<RateLimiter> rateLimiter) {
    if (hostIdxMoveFrom.get() < 0 || hostIdxMoveFrom.get() >= hosts.size() || hostIdxMoveTo.get() < 0
            || hostIdxMoveTo.get() >= hosts.size() || hostIdxMoveFrom.get() >= hostIdxMoveTo.get()) {
        return;/*w  ww  .jav  a  2s  .  c  o m*/
    }

    if (logger.isDebugEnabled()) {
        logger.debug(
                "Moving streams : hosts = {}, from = {}, to = {} : from_low_water_mark = {}, to_high_water_mark = {}",
                new Object[] { hosts, hostIdxMoveFrom.get(), hostIdxMoveTo.get(), moveFromLowWaterMark,
                        moveToHighWaterMark });
    }

    Host hostMoveFrom = hosts.get(hostIdxMoveFrom.get());
    int numStreamsOnFromHost = hostMoveFrom.streams.size();
    if (numStreamsOnFromHost <= moveFromLowWaterMark) {
        // do nothing
        return;
    }

    int numStreamsToMove = numStreamsOnFromHost - moveFromLowWaterMark;
    LinkedList<String> streamsToMove = new LinkedList<String>(hostMoveFrom.streams);
    Collections.shuffle(streamsToMove);

    if (logger.isDebugEnabled()) {
        logger.debug("Try to move {} streams from host {} : streams = {}",
                new Object[] { numStreamsToMove, hostMoveFrom.address, streamsToMove });
    }

    while (numStreamsToMove-- > 0 && !streamsToMove.isEmpty()) {
        if (rateLimiter.isPresent()) {
            rateLimiter.get().acquire();
        }

        // pick a host to move
        Host hostMoveTo = hosts.get(hostIdxMoveTo.get());
        while (hostMoveTo.streams.size() >= moveToHighWaterMark) {
            int hostIdx = hostIdxMoveTo.decrementAndGet();
            logger.info("move to host : {}, from {}", hostIdx, hostIdxMoveFrom.get());
            if (hostIdx <= hostIdxMoveFrom.get()) {
                return;
            } else {
                hostMoveTo = hosts.get(hostIdx);
                if (logger.isDebugEnabled()) {
                    logger.debug("Target host to move moved to host {} @ {}", hostIdx, hostMoveTo);
                }
            }
        }

        // pick a stream
        String stream = streamsToMove.remove();

        // move the stream
        if (moveStream(stream, hostMoveFrom, hostMoveTo)) {
            hostMoveFrom.streams.remove(stream);
            hostMoveTo.streams.add(stream);
        }
    }

}

From source file:org.apache.distributedlog.service.balancer.ClusterBalancer.java

void moveStreams(List<Host> hosts, AtomicInteger hostIdxMoveFrom, int moveFromLowWaterMark,
        AtomicInteger hostIdxMoveTo, int moveToHighWaterMark, Optional<RateLimiter> rateLimiter) {
    if (hostIdxMoveFrom.get() < 0 || hostIdxMoveFrom.get() >= hosts.size() || hostIdxMoveTo.get() < 0
            || hostIdxMoveTo.get() >= hosts.size() || hostIdxMoveFrom.get() >= hostIdxMoveTo.get()) {
        return;//w  w w . ja  v  a  2 s  .  co  m
    }

    if (logger.isDebugEnabled()) {
        logger.debug(
                "Moving streams : hosts = {}, from = {}, to = {} :"
                        + " from_low_water_mark = {}, to_high_water_mark = {}",
                new Object[] { hosts, hostIdxMoveFrom.get(), hostIdxMoveTo.get(), moveFromLowWaterMark,
                        moveToHighWaterMark });
    }

    Host hostMoveFrom = hosts.get(hostIdxMoveFrom.get());
    int numStreamsOnFromHost = hostMoveFrom.streams.size();
    if (numStreamsOnFromHost <= moveFromLowWaterMark) {
        // do nothing
        return;
    }

    int numStreamsToMove = numStreamsOnFromHost - moveFromLowWaterMark;
    LinkedList<String> streamsToMove = new LinkedList<String>(hostMoveFrom.streams);
    Collections.shuffle(streamsToMove);

    if (logger.isDebugEnabled()) {
        logger.debug("Try to move {} streams from host {} : streams = {}",
                new Object[] { numStreamsToMove, hostMoveFrom.address, streamsToMove });
    }

    while (numStreamsToMove-- > 0 && !streamsToMove.isEmpty()) {
        if (rateLimiter.isPresent()) {
            rateLimiter.get().acquire();
        }

        // pick a host to move
        Host hostMoveTo = hosts.get(hostIdxMoveTo.get());
        while (hostMoveTo.streams.size() >= moveToHighWaterMark) {
            int hostIdx = hostIdxMoveTo.decrementAndGet();
            logger.info("move to host : {}, from {}", hostIdx, hostIdxMoveFrom.get());
            if (hostIdx <= hostIdxMoveFrom.get()) {
                return;
            } else {
                hostMoveTo = hosts.get(hostIdx);
                if (logger.isDebugEnabled()) {
                    logger.debug("Target host to move moved to host {} @ {}", hostIdx, hostMoveTo);
                }
            }
        }

        // pick a stream
        String stream = streamsToMove.remove();

        // move the stream
        if (moveStream(stream, hostMoveFrom, hostMoveTo)) {
            hostMoveFrom.streams.remove(stream);
            hostMoveTo.streams.add(stream);
        }
    }

}

From source file:com.opengamma.financial.currency.AbstractCurrencyMatrix.java

protected CurrencyMatrixValue removeConversion(final Currency source, final Currency target) {
    ArgumentChecker.notNull(source, "source");
    ArgumentChecker.notNull(target, "target");
    ConcurrentHashMap<Currency, CurrencyMatrixValue> conversions = _values.get(source);
    if (conversions == null) {
        // Nothing from that source
        return null;
    }/*from  w w  w .  j a  v a 2s .  co m*/
    final CurrencyMatrixValue value = conversions.remove(target);
    if (value == null) {
        // No conversion from source to target
        return null;
    }
    // Removed a value, so need to decrease the target's reference count
    AtomicInteger targetCount = _targets.get(target);
    if (targetCount != null) {
        // Target count should never be null at this point
        if (targetCount.decrementAndGet() == 0) {
            // This was the last reference to the target, confirm and remove atomically against the "add" operation
            synchronized (targetCount) {
                if (targetCount.get() == 0) {
                    _targets.remove(target);
                }
            }
        }
    }
    return value;
}

From source file:org.zenoss.zep.dao.impl.DaoUtilsTest.java

@Test
public void testDeadlockRetryOtherException() throws Exception {
    final AtomicInteger i = new AtomicInteger();
    try {/*from ww  w. j  a va  2  s  .  c  o m*/
        DaoUtils.deadlockRetry(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                i.incrementAndGet();
                throw new RuntimeException("Bad exception - no retry");
            }
        });
        fail("Should have thrown an exception after first retry");
    } catch (RuntimeException e) {
        assertEquals(1, i.get());
        assertEquals("Bad exception - no retry", e.getMessage());
    }
}

From source file:org.jtheque.features.FeatureServiceTest.java

@Test
public void listenerCalledForMainFeatures() {
    final AtomicInteger addCounter = new AtomicInteger(0);
    final AtomicInteger removeCounter = new AtomicInteger(0);
    final AtomicInteger modifyCounter = new AtomicInteger(0);

    featureService.addFeatureListener(new MyFeatureListener(addCounter, removeCounter, modifyCounter));

    featureService.addMenu("no-module", new MenuMain());

    assertEquals(1, addCounter.get());
    assertEquals(0, removeCounter.get());
    assertEquals(0, modifyCounter.get());

    featureService.addMenu("no-module", new MenuMain());

    assertEquals(2, addCounter.get());//from  ww  w. j a v a2 s . c  o  m
    assertEquals(0, removeCounter.get());
    assertEquals(0, modifyCounter.get());
}