Skip to content
Snippets Groups Projects
Commit 9524b943 authored by Mike's avatar Mike
Browse files

Synchronize on "entries" the remaining update to "currentMemory".

Make "currentMemory" @volatile, so that it's reads in ensureFreeSpace() are atomic and up-to-date--i.e., currentMemory can't increase while putLock is held (though it could decrease, which would only help ensureFreeSpace()).
parent d34672f6
No related branches found
No related tags found
No related merge requests found
...@@ -33,7 +33,7 @@ private class MemoryStore(blockManager: BlockManager, maxMemory: Long) ...@@ -33,7 +33,7 @@ private class MemoryStore(blockManager: BlockManager, maxMemory: Long)
case class Entry(value: Any, size: Long, deserialized: Boolean) case class Entry(value: Any, size: Long, deserialized: Boolean)
private val entries = new LinkedHashMap[String, Entry](32, 0.75f, true) private val entries = new LinkedHashMap[String, Entry](32, 0.75f, true)
private var currentMemory = 0L @volatile private var currentMemory = 0L
// Object used to ensure that only one thread is putting blocks and if necessary, dropping // Object used to ensure that only one thread is putting blocks and if necessary, dropping
// blocks from the memory store. // blocks from the memory store.
private val putLock = new Object() private val putLock = new Object()
...@@ -160,8 +160,10 @@ private class MemoryStore(blockManager: BlockManager, maxMemory: Long) ...@@ -160,8 +160,10 @@ private class MemoryStore(blockManager: BlockManager, maxMemory: Long)
putLock.synchronized { putLock.synchronized {
if (ensureFreeSpace(blockId, size)) { if (ensureFreeSpace(blockId, size)) {
val entry = new Entry(value, size, deserialized) val entry = new Entry(value, size, deserialized)
entries.synchronized { entries.put(blockId, entry) } entries.synchronized {
currentMemory += size entries.put(blockId, entry)
currentMemory += size
}
if (deserialized) { if (deserialized) {
logInfo("Block %s stored as values to memory (estimated size %s, free %s)".format( logInfo("Block %s stored as values to memory (estimated size %s, free %s)".format(
blockId, Utils.bytesToString(size), Utils.bytesToString(freeMemory))) blockId, Utils.bytesToString(size), Utils.bytesToString(freeMemory)))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment