Example usage for java.util.concurrent.locks Lock unlock

List of usage examples for java.util.concurrent.locks Lock unlock

Introduction

In this page you can find the example usage for java.util.concurrent.locks Lock unlock.

Prototype

void unlock();

Source Link

Document

Releases the lock.

Usage

From source file:net.myrrix.online.ServerRecommender.java

@Override
public float[] estimatePreferences(long userID, long... itemIDs) throws NotReadyException {

    Generation generation = getCurrentGeneration();
    FastByIDMap<float[]> X = generation.getX();

    float[] userFeatures;
    Lock xLock = generation.getXLock().readLock();
    xLock.lock();//from  w  ww  .  j  a  v a  2s .co m
    try {
        userFeatures = X.get(userID);
    } finally {
        xLock.unlock();
    }
    if (userFeatures == null) {
        return new float[itemIDs.length]; // All 0.0f
    }

    FastByIDMap<float[]> Y = generation.getY();

    Lock yLock = generation.getYLock().readLock();
    yLock.lock();
    try {
        float[] result = new float[itemIDs.length];
        for (int i = 0; i < itemIDs.length; i++) {
            long itemID = itemIDs[i];
            float[] itemFeatures = Y.get(itemID);
            if (itemFeatures != null) {
                float value = (float) SimpleVectorMath.dot(itemFeatures, userFeatures);
                Preconditions.checkState(LangUtils.isFinite(value), "Bad estimate");
                result[i] = value;
            } // else leave value at 0.0f
        }
        return result;
    } finally {
        yLock.unlock();
    }
}

From source file:net.myrrix.online.ServerRecommender.java

public void setUserTag(long userID, String tag, float value, boolean bulk) {
    Preconditions.checkNotNull(tag);/*from   w ww  . j  a  v  a2 s.c  om*/
    Preconditions.checkArgument(!tag.isEmpty());
    // Record datum
    try {
        generationManager.appendUserTag(userID, tag, value, bulk);
    } catch (IOException ioe) {
        log.warn("Could not append datum; continuing", ioe);
    }

    Generation generation;
    try {
        generation = getCurrentGeneration();
    } catch (NotReadyException nre) {
        // Corner case -- no model ready so all we can do is record (above). Don't fail the request.
        return;
    }

    long tagID = tagHasher.toLongID(tag);

    FastIDSet userTagIDs = generation.getUserTagIDs();
    Lock userTagWriteLock = generation.getYLock().writeLock();
    userTagWriteLock.lock();
    try {
        userTagIDs.add(tagID);
    } finally {
        userTagWriteLock.unlock();
    }

    float[] userFeatures = getFeatures(userID, generation.getX(), generation.getXLock());
    float[] tagFeatures = getFeatures(tagID, generation.getY(), generation.getYLock());
    updateFeatures(userFeatures, tagFeatures, value, generation);

    updateClusters(userID, userFeatures, generation.getUserClusters(),
            generation.getUserClustersLock().readLock());
}

From source file:net.myrrix.online.ServerRecommender.java

public void setItemTag(String tag, long itemID, float value, boolean bulk) {
    Preconditions.checkNotNull(tag);//  w  ww .  java 2 s .c o m
    Preconditions.checkArgument(!tag.isEmpty());
    // Record datum
    try {
        generationManager.appendItemTag(tag, itemID, value, bulk);
    } catch (IOException ioe) {
        log.warn("Could not append datum; continuing", ioe);
    }

    Generation generation;
    try {
        generation = getCurrentGeneration();
    } catch (NotReadyException nre) {
        // Corner case -- no model ready so all we can do is record (above). Don't fail the request.
        return;
    }

    long tagID = tagHasher.toLongID(tag);

    FastIDSet itemTagIDs = generation.getItemTagIDs();
    Lock itemTagWriteLock = generation.getXLock().writeLock();
    itemTagWriteLock.lock();
    try {
        itemTagIDs.add(tagID);
    } finally {
        itemTagWriteLock.unlock();
    }

    float[] tagFeatures = getFeatures(tagID, generation.getX(), generation.getXLock());
    float[] itemFeatures = getFeatures(itemID, generation.getY(), generation.getYLock());
    updateFeatures(tagFeatures, itemFeatures, value, generation);

    updateClusters(itemID, itemFeatures, generation.getItemClusters(),
            generation.getItemClustersLock().readLock());
}

From source file:net.myrrix.online.ServerRecommender.java

@Override
public float estimateForAnonymous(long toItemID, long[] itemIDs, float[] values)
        throws NotReadyException, NoSuchItemException {

    Generation generation = getCurrentGeneration();
    FastByIDMap<float[]> Y = generation.getY();
    Lock yLock = generation.getYLock().readLock();
    float[] toItemFeatures;
    yLock.lock();//from w  ww  .  ja v  a 2  s  . c o  m
    try {
        toItemFeatures = Y.get(toItemID);
    } finally {
        yLock.unlock();
    }

    if (toItemFeatures == null) {
        throw new NoSuchItemException(toItemID);
    }

    float[] anonymousUserFeatures = buildAnonymousUserFeatures(itemIDs, values);

    return (float) SimpleVectorMath.dot(anonymousUserFeatures, toItemFeatures);
}

From source file:com.cloudera.lib.service.instrumentation.InstrumentationService.java

@SuppressWarnings("unchecked")
private <T> T getToAdd(String group, String name, Class<T> klass, Lock lock, Map<String, Map<String, T>> map) {
    boolean locked = false;
    try {/*w  ww .j a  v a 2 s . co m*/
        Map<String, T> groupMap = map.get(group);
        if (groupMap == null) {
            lock.lock();
            locked = true;
            groupMap = map.get(group);
            if (groupMap == null) {
                groupMap = new ConcurrentHashMap<String, T>();
                map.put(group, groupMap);
            }
        }
        T element = groupMap.get(name);
        if (element == null) {
            if (!locked) {
                lock.lock();
                locked = true;
            }
            element = groupMap.get(name);
            if (element == null) {
                try {
                    if (klass == Timer.class) {
                        element = (T) new Timer(timersSize);
                    } else {
                        element = klass.newInstance();
                    }
                } catch (Exception ex) {
                    throw new RuntimeException(ex);
                }
                groupMap.put(name, element);
            }
        }
        return element;
    } finally {
        if (locked) {
            lock.unlock();
        }
    }
}

From source file:org.archive.modules.recrawl.hbase.SingleHBaseTable.java

public Result get(Get g) throws IOException {
    getCount.incrementAndGet();/*from  w w w  .  j  a v  a  2s  . c  o  m*/
    // trigger reconnection if necessary. as table can be modified before
    // read lock is acquired, we don't read table variable here.
    getTable();
    boolean htableFailed = false;
    HTableInterface htable = null;
    Lock readLock = tableUseLock.readLock();
    try {
        if (!readLock.tryLock(TRY_READ_LOCK_TIMEOUT, TimeUnit.SECONDS)) {
            getSkipCount.incrementAndGet();
            throw new IOException("could not acquire read lock for HTable.");
        }
    } catch (InterruptedException ex) {
        throw new IOException("interrupted while acquiring read lock", ex);
    }
    try {
        htable = table;
        if (htable == null) {
            getSkipCount.incrementAndGet();
            throw new IOException("HBase connection is unvailable.");
        }
        try {
            return htable.get(g);
        } catch (NotServingRegionException ex) {
            // caused by disruption to HBase cluster. no need to
            // refresh HBase connection, since connection itself
            // is working okay.
            // TODO: should we need to back-off for a while? other
            // regions may still be accessible.
            getErrorCount.incrementAndGet();
            throw ex;
        } catch (IOException ex) {
            getErrorCount.incrementAndGet();
            htableFailed = true;
            throw ex;
        }
    } finally {
        readLock.unlock();
        if (htableFailed) {
            closeTable(htable, true);
        }
    }
}

From source file:net.myrrix.online.ServerRecommender.java

@Override
public FastIDSet getUserCluster(int n) throws NotReadyException {
    Generation generation = getCurrentGeneration();
    List<IDCluster> clusters = generation.getUserClusters();
    if (clusters == null || clusters.isEmpty()) {
        throw new UnsupportedOperationException();
    }/* ww w  . j a v a 2s . co m*/
    Lock lock = generation.getUserClustersLock().readLock();
    FastIDSet members;
    lock.lock();
    try {
        members = clusters.get(n).getMembers();
    } finally {
        lock.unlock();
    }
    synchronized (members) {
        return members.clone();
    }
}

From source file:net.myrrix.online.ServerRecommender.java

@Override
public FastIDSet getItemCluster(int n) throws NotReadyException {
    Generation generation = getCurrentGeneration();
    List<IDCluster> clusters = generation.getItemClusters();
    if (clusters == null || clusters.isEmpty()) {
        throw new UnsupportedOperationException();
    }/* ww w.j  ava  2s. c  o  m*/
    Lock lock = generation.getItemClustersLock().readLock();
    FastIDSet members;
    lock.lock();
    try {
        members = clusters.get(n).getMembers();
    } finally {
        lock.unlock();
    }
    synchronized (members) {
        return members.clone();
    }
}

From source file:org.apache.bookkeeper.bookie.EntryLogManagerForEntryLogPerLedger.java

private void onCacheEntryRemoval(
        RemovalNotification<Long, EntryLogAndLockTuple> removedLedgerEntryLogMapEntry) {
    Long ledgerId = removedLedgerEntryLogMapEntry.getKey();
    log.debug("LedgerId {} is being evicted from the cache map because of {}", ledgerId,
            removedLedgerEntryLogMapEntry.getCause());
    EntryLogAndLockTuple entryLogAndLockTuple = removedLedgerEntryLogMapEntry.getValue();
    if (entryLogAndLockTuple == null) {
        log.error("entryLogAndLockTuple is not supposed to be null in entry removal listener for ledger : {}",
                ledgerId);//from   w  w  w . j  av  a  2  s  .  c o m
        return;
    }
    Lock lock = entryLogAndLockTuple.ledgerLock;
    BufferedLogChannelWithDirInfo logChannelWithDirInfo = entryLogAndLockTuple.getEntryLogWithDirInfo();
    if (logChannelWithDirInfo == null) {
        log.error("logChannel for ledger: {} is not supposed to be null in entry removal listener", ledgerId);
        return;
    }
    lock.lock();
    try {
        BufferedLogChannel logChannel = logChannelWithDirInfo.getLogChannel();
        // Append ledgers map at the end of entry log
        try {
            logChannel.appendLedgersMap();
        } catch (Exception e) {
            log.error("Got IOException while trying to appendLedgersMap in cacheEntryRemoval callback", e);
        }
        replicaOfCurrentLogChannels.remove(logChannel.getLogId());
        rotatedLogChannels.add(logChannel);
        entryLogsPerLedgerCounter.removedLedgerFromEntryLogMapCache(ledgerId,
                removedLedgerEntryLogMapEntry.getCause());
    } finally {
        lock.unlock();
    }
}

From source file:com.netprogs.minecraft.plugins.social.SocialPerson.java

public SocialDivorce getDivorce() {
    Lock lock = rwDivorceLock.readLock();
    lock.lock();//from   ww  w  .  jav a 2  s.  co  m
    try {
        return socialDivorce;
    } finally {
        lock.unlock();
    }
}