diff --git a/atlas-core/src/main/scala/com/netflix/atlas/core/index/BatchUpdateTagIndex.scala b/atlas-core/src/main/scala/com/netflix/atlas/core/index/BatchUpdateTagIndex.scala index cf43e4de0..2e1e11a38 100644 --- a/atlas-core/src/main/scala/com/netflix/atlas/core/index/BatchUpdateTagIndex.scala +++ b/atlas-core/src/main/scala/com/netflix/atlas/core/index/BatchUpdateTagIndex.scala @@ -143,5 +143,7 @@ class BatchUpdateTagIndex[T <: TaggedItem: ClassTag]( def findItems(query: TagQuery): List[T] = currentIndex.get.findItems(query) + override def iterator: Iterator[T] = currentIndex.get.iterator + def size: Int = currentIndex.get.size } diff --git a/atlas-core/src/main/scala/com/netflix/atlas/core/index/CachingTagIndex.scala b/atlas-core/src/main/scala/com/netflix/atlas/core/index/CachingTagIndex.scala index 0e7275fc9..f1ab56cd4 100644 --- a/atlas-core/src/main/scala/com/netflix/atlas/core/index/CachingTagIndex.scala +++ b/atlas-core/src/main/scala/com/netflix/atlas/core/index/CachingTagIndex.scala @@ -57,5 +57,7 @@ class CachingTagIndex[T <: TaggedItem](delegate: TagIndex[T]) extends TagIndex[T findItemsCache.get(query) } + override def iterator: Iterator[T] = delegate.iterator + def size: Int = delegate.size } diff --git a/atlas-core/src/main/scala/com/netflix/atlas/core/index/RoaringTagIndex.scala b/atlas-core/src/main/scala/com/netflix/atlas/core/index/RoaringTagIndex.scala index 4a328a6d9..c3143c70d 100644 --- a/atlas-core/src/main/scala/com/netflix/atlas/core/index/RoaringTagIndex.scala +++ b/atlas-core/src/main/scala/com/netflix/atlas/core/index/RoaringTagIndex.scala @@ -495,6 +495,8 @@ class RoaringTagIndex[T <: TaggedItem](items: Array[T], stats: IndexStats) exten result.result() } + override def iterator: Iterator[T] = items.iterator + val size: Int = items.length } diff --git a/atlas-core/src/main/scala/com/netflix/atlas/core/index/SimpleTagIndex.scala b/atlas-core/src/main/scala/com/netflix/atlas/core/index/SimpleTagIndex.scala index a733fe1fa..7e4f490d9 100644 --- a/atlas-core/src/main/scala/com/netflix/atlas/core/index/SimpleTagIndex.scala +++ b/atlas-core/src/main/scala/com/netflix/atlas/core/index/SimpleTagIndex.scala @@ -135,6 +135,8 @@ class SimpleTagIndex[T <: TaggedItem: ClassTag](items: Array[T]) extends TagInde sorted.take(query.limit) } + override def iterator: Iterator[T] = items.iterator + val size: Int = items.length def update(additions: List[T], deletions: List[ItemId]): TagIndex[T] = { diff --git a/atlas-core/src/main/scala/com/netflix/atlas/core/index/TagIndex.scala b/atlas-core/src/main/scala/com/netflix/atlas/core/index/TagIndex.scala index 8df03ab7a..4160e5dbe 100644 --- a/atlas-core/src/main/scala/com/netflix/atlas/core/index/TagIndex.scala +++ b/atlas-core/src/main/scala/com/netflix/atlas/core/index/TagIndex.scala @@ -28,6 +28,8 @@ trait TagIndex[T <: TaggedItem] { def findItems(query: TagQuery): List[T] + def iterator: Iterator[T] + def size: Int } diff --git a/atlas-core/src/test/scala/com/netflix/atlas/core/index/TagIndexSuite.scala b/atlas-core/src/test/scala/com/netflix/atlas/core/index/TagIndexSuite.scala index 6e36d51f5..0ac2390c9 100644 --- a/atlas-core/src/test/scala/com/netflix/atlas/core/index/TagIndexSuite.scala +++ b/atlas-core/src/test/scala/com/netflix/atlas/core/index/TagIndexSuite.scala @@ -347,4 +347,10 @@ abstract class TagIndexSuite extends FunSuite { } assertEquals(result.size, 4640) } + + test("iterator") { + val expected = index.findItems(TagQuery(Some(Query.True))).map(_.tags.toString).sorted + val actual = index.iterator.map(_.tags.toString).toList.sorted + assertEquals(actual, expected) + } } diff --git a/atlas-postgres/src/main/scala/com/netflix/atlas/postgres/PostgresTagIndex.scala b/atlas-postgres/src/main/scala/com/netflix/atlas/postgres/PostgresTagIndex.scala index a7657f36a..7371f9685 100644 --- a/atlas-postgres/src/main/scala/com/netflix/atlas/postgres/PostgresTagIndex.scala +++ b/atlas-postgres/src/main/scala/com/netflix/atlas/postgres/PostgresTagIndex.scala @@ -84,7 +84,11 @@ class PostgresTagIndex(postgres: PostgresService) extends TagIndex[TaggedItem] { } override def findItems(query: TagQuery): List[TaggedItem] = { - throw new UnsupportedOperationException("") + throw new UnsupportedOperationException("findItems") + } + + override def iterator: Iterator[TaggedItem] = { + throw new UnsupportedOperationException("iterator") } override def size: Int = 0