From e7ad394994cc103ad5d13064eefb4c8c4ef3414e Mon Sep 17 00:00:00 2001 From: Andrew Polack Date: Wed, 13 Jun 2018 10:45:08 -0400 Subject: [PATCH] Prevent re-preparing already prepared statement in CassandraLayerReader Signed-off-by: Andrew Polack --- .../spark/io/cassandra/CassandraValueReader.scala | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cassandra/src/main/scala/geotrellis/spark/io/cassandra/CassandraValueReader.scala b/cassandra/src/main/scala/geotrellis/spark/io/cassandra/CassandraValueReader.scala index cdc019f414..c4cc8974f3 100644 --- a/cassandra/src/main/scala/geotrellis/spark/io/cassandra/CassandraValueReader.scala +++ b/cassandra/src/main/scala/geotrellis/spark/io/cassandra/CassandraValueReader.scala @@ -43,15 +43,17 @@ class CassandraValueReader( val writerSchema = attributeStore.readSchema(layerId) val codec = KeyValueRecordCodec[K, V] - def read(key: K): V = instance.withSession { session => - val statement = session.prepare( + private lazy val statement = instance.withSession{ session => + session.prepare( QueryBuilder.select("value") .from(header.keyspace, header.tileTable) .where(eqs("key", QueryBuilder.bindMarker())) .and(eqs("name", layerId.name)) .and(eqs("zoom", layerId.zoom)) ) + } + def read(key: K): V = instance.withSession { session => val row = session.execute(statement.bind(keyIndex.toIndex(key): BigInteger)).all() val tiles = row.map { entry => AvroEncoder.fromBinary(writerSchema, entry.getBytes("value").array())(codec)