Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.socrata.datacoordinator.service.collocation.secondary.stores

import org.slf4j.LoggerFactory

import com.socrata.datacoordinator.secondary.SecondaryMetric
import com.socrata.datacoordinator.secondary.config.SecondaryGroupConfig
import com.socrata.datacoordinator.service.collocation.Cost
Expand All @@ -12,6 +14,7 @@ case class NotEnoughInstancesInSecondaryGroup(name: String, count: Int)
class SecondaryStoreSelector(groupName: String,
storesFreeSpaceMap: Map[String, Long],
replicationFactor: Int)(implicit costOrdering: Ordering[Cost]) {
import SecondaryStoreSelector.log

def maxCostKey[T](costMap: Map[T, Cost]): Option[T] =
if (costMap.nonEmpty) Some(costMap.maxBy(_._2)._1) // max by Cost and return key
Expand Down Expand Up @@ -46,7 +49,9 @@ class SecondaryStoreSelector(groupName: String,
val totalCost = costMap.values.fold(Cost.Zero)(_ + _)
randomStore(allStores -- (unavailableStores(totalCost) ++ seen)) match {
case Some(selected) => (selected, seen + selected)
case None => throw NotEnoughInstancesInSecondaryGroup(groupName, replicationFactor)
case None =>
log.info("Total cost: {}, all unchosen stores: {}", totalCost:Any, storesFreeSpaceMap -- seen)
throw NotEnoughInstancesInSecondaryGroup(groupName, replicationFactor)
}
}
}
Expand All @@ -68,6 +73,8 @@ class SecondaryStoreSelector(groupName: String,
}

object SecondaryStoreSelector {
val log = LoggerFactory.getLogger(classOf[SecondaryStoreSelector])

def apply(groupName: String,
groupConfig: SecondaryGroupConfig,
storeMetrics: Map[String, SecondaryMetric])(implicit costOrdering: Ordering[Cost]): SecondaryStoreSelector = {
Expand Down