Copilot commented on code in PR #15606: URL: https://github.com/apache/pinot/pull/15606#discussion_r2065851053
########## pinot-common/src/main/java/org/apache/pinot/common/cache/QueryCache.java: ########## @@ -0,0 +1,71 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.pinot.common.cache; + +import org.apache.pinot.common.request.context.FilterContext; + + +public interface QueryCache { + /** + * Put the given key-value pair into the cache. + * + * @param key The key to be put into the cache + * @param value The value to be put into the cache + */ + void put(String key, Object value); + + /** + * Get the value for the given key from the cache. + * + * @param key The key to get from the cache + * @return The value for the given key, or null if not found + */ + Object get(String key); + + /** + * Remove the given key from the cache. + * + * @param key The key to remove from the cache + */ + void remove(String key); + + /** + * Get the cache key for the given table, segment name, and filter context. + * @param segmentName The segment name + * @param filterContext The filter context + * @return The cache key + */ + static String getCacheKey(String segmentName, FilterContext filterContext) { + return segmentName + "_" + filterContext.hashCode(); Review Comment: Consider using a more robust mechanism to generate cache keys for filter contexts instead of relying solely on filterContext.hashCode(), to mitigate potential hash collisions for complex filters. ```suggestion return segmentName + "_" + filterContext.toString(); ``` ########## pinot-common/src/main/java/org/apache/pinot/common/cache/QueryCacheFactory.java: ########## @@ -0,0 +1,60 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.pinot.common.cache; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + + +public class QueryCacheFactory { + private static final Map<String, QueryCache> CACHE_MAP = new ConcurrentHashMap<>(); + + private QueryCacheFactory() { + } + + /** + * Creates a new instance of the QueryCache. + * + * @return A new instance of the QueryCache + */ + public static QueryCache createQueryCache(String table, String cacheType) { + if (CACHE_MAP.get(table) == null) { + synchronized (CACHE_MAP) { + if (CACHE_MAP.get(table) == null) { + CACHE_MAP.put(table, createCache(cacheType)); + } + } + } + return CACHE_MAP.get(table); Review Comment: Consider using ConcurrentHashMap's computeIfAbsent method to simplify the cache creation logic and further ensure thread safety. ```suggestion return CACHE_MAP.computeIfAbsent(table, key -> createCache(cacheType)); ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org