[
https://issues.apache.org/jira/browse/GEODE-3284?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16110266#comment-16110266
]
ASF GitHub Bot commented on GEODE-3284:
---------------------------------------
Github user galen-pivotal commented on a diff in the pull request:
https://github.com/apache/geode/pull/673#discussion_r130781962
--- Diff:
geode-protobuf/src/main/java/org/apache/geode/protocol/protobuf/operations/GetAvailableServersOperationHandler.java
---
@@ -0,0 +1,110 @@
+/*
+ * 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.geode.protocol.protobuf.operations;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.geode.cache.Cache;
+import org.apache.geode.cache.client.internal.locator.GetAllServersRequest;
+import
org.apache.geode.cache.client.internal.locator.GetAllServersResponse;
+import org.apache.geode.distributed.ConfigurationProperties;
+import org.apache.geode.distributed.internal.InternalDistributedSystem;
+import org.apache.geode.distributed.internal.ServerLocation;
+import org.apache.geode.distributed.internal.tcpserver.TcpClient;
+import org.apache.geode.internal.admin.remote.DistributionLocatorId;
+import org.apache.geode.protocol.operations.OperationHandler;
+import org.apache.geode.protocol.protobuf.BasicTypes;
+import org.apache.geode.protocol.protobuf.Failure;
+import org.apache.geode.protocol.protobuf.Result;
+import org.apache.geode.protocol.protobuf.ServerAPI;
+import org.apache.geode.protocol.protobuf.Success;
+import org.apache.geode.serialization.SerializationService;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Optional;
+import java.util.Properties;
+import java.util.StringTokenizer;
+import java.util.stream.Collectors;
+
+public class GetAvailableServersOperationHandler implements
+ OperationHandler<ServerAPI.GetAvailableServersRequest,
ServerAPI.GetAvailableServersResponse> {
+
+ @Override
+ public Result<ServerAPI.GetAvailableServersResponse> process(
+ SerializationService serializationService,
ServerAPI.GetAvailableServersRequest request,
+ Cache cache) {
+ HashSet<DistributionLocatorId> locators =
getLocatorIdsFromDistributedProperties(cache);
+
+ TcpClient tcpClient = getTcpClient();
+ Optional<Result<ServerAPI.GetAvailableServersResponse>> result =
locators.stream()
+ .map((locatorId -> getGetAvailableServersFromLocator(tcpClient,
locatorId)))
+ .filter((obj) -> obj != null).findFirst();
+
+ if (result.isPresent()) {
+ return result.get();
+ } else {
+ return Failure
+ .of(BasicTypes.ErrorResponse.newBuilder().setMessage("Unable to
find a locator").build());
+ }
+ }
+
+ private HashSet<DistributionLocatorId>
getLocatorIdsFromDistributedProperties(Cache cache) {
--- End diff --
Will this work if locators are configured via cluster config? I'm guessing
it won't work if the original locators are no longer in the cluster. Since this
is a prototype and will be redone better, I think it's fine for now.
> New flow: getAvailableServers
> -----------------------------
>
> Key: GEODE-3284
> URL: https://issues.apache.org/jira/browse/GEODE-3284
> Project: Geode
> Issue Type: Sub-task
> Components: client/server
> Reporter: Brian Baynes
>
> As a Geode client user, I'd like to be able to know all available servers in
> a grid in order to support operations targeting any available server.
> Create op handler for getAvailableServers message, following proto message
> definition.
> Client should be able to complete getAvailableServers, receiving all servers
> available in grid.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)