gortiz commented on code in PR #17353:
URL: https://github.com/apache/pinot/pull/17353#discussion_r2613151955


##########
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/context/BrokerContext.java:
##########
@@ -0,0 +1,55 @@
+/**
+ * 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.query.runtime.context;
+
+import java.util.Objects;
+import javax.annotation.Nullable;
+import 
org.apache.pinot.query.runtime.operator.factory.QueryOperatorFactoryProvider;
+
+
+/**
+ * The <code>BrokerContext</code> class is a singleton class which contains 
all broker related context.
+ */
+public class BrokerContext {
+  private static final BrokerContext INSTANCE = new BrokerContext();
+
+  private BrokerContext() {
+  }
+
+  public static BrokerContext getInstance() {
+    return INSTANCE;
+  }

Review Comment:
   In the short term, this is fine, but in the long term, I don't think this 
singleton is a good pattern usage.
   
   If I see something called `BrokerContext`, I would expect that it should 
contain contextual information from the broker. For example, I would expect 
this class to provide the broker name, its configuration, etc. That would be 
super useful in Pinot.
   
   But given that we can (and want to!) have multiple 
brokers/controllers/servers on the same JVM, the `BrokerContext` I'm describing 
_cannot_ be a singleton.
   
   I understand we want to use this class to create an SPI for operators, which 
is cool. Still, I think either a more ambitious pattern should be used, or we 
should refactor this to have a static getter on `QueryOperatorFactoryProvider`, 
as we can assume all servers and brokers in the same JVM should use the same 
operators.
   
   We can use the current model for now, and in the future, if we introduce a 
DI or decide to use ThreadLocals, we can change the internal implementation, 
removing the static attribute and substituting it with an injected value or a 
thread local.



-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to