List of usage examples for java.util.concurrent.locks Lock unlock
void unlock();
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(); } }