[ 
https://issues.apache.org/jira/browse/GEODE-2632?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15967841#comment-15967841
 ] 

ASF GitHub Bot commented on GEODE-2632:
---------------------------------------

Github user kirklund commented on a diff in the pull request:

    https://github.com/apache/geode/pull/450#discussion_r111432477
  
    --- Diff: 
geode-core/src/jmh/java/org/apache/geode/internal/cache/tier/sockets/command/ClientCachePutBench.java
 ---
    @@ -0,0 +1,199 @@
    +/*
    + * 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.internal.cache.tier.sockets.command;
    +
    +import static java.lang.System.*;
    +import static java.util.concurrent.TimeUnit.*;
    +import static org.apache.commons.io.FileUtils.*;
    +import static org.apache.commons.lang.StringUtils.*;
    +import static org.apache.geode.cache.client.ClientRegionShortcut.*;
    +import static org.apache.geode.distributed.AbstractLauncher.Status.*;
    +import static org.apache.geode.distributed.ConfigurationProperties.*;
    +import static org.apache.geode.distributed.internal.DistributionConfig.*;
    +import static org.apache.geode.internal.AvailablePort.*;
    +import static org.apache.geode.test.dunit.NetworkUtils.*;
    +import static org.assertj.core.api.Assertions.*;
    +import static org.awaitility.Awaitility.*;
    +
    +import org.apache.geode.cache.Region;
    +import org.apache.geode.cache.client.ClientCache;
    +import org.apache.geode.cache.client.ClientCacheFactory;
    +import org.apache.geode.distributed.ServerLauncher;
    +import org.apache.geode.internal.process.ProcessStreamReader;
    +import org.junit.rules.TemporaryFolder;
    +import org.openjdk.jmh.annotations.Benchmark;
    +import org.openjdk.jmh.annotations.BenchmarkMode;
    +import org.openjdk.jmh.annotations.Fork;
    +import org.openjdk.jmh.annotations.Level;
    +import org.openjdk.jmh.annotations.Measurement;
    +import org.openjdk.jmh.annotations.Mode;
    +import org.openjdk.jmh.annotations.OutputTimeUnit;
    +import org.openjdk.jmh.annotations.Scope;
    +import org.openjdk.jmh.annotations.Setup;
    +import org.openjdk.jmh.annotations.State;
    +import org.openjdk.jmh.annotations.TearDown;
    +import org.openjdk.jmh.annotations.Warmup;
    +
    +import java.io.File;
    +import java.io.IOException;
    +import java.net.URL;
    +import java.util.ArrayList;
    +import java.util.List;
    +import java.util.Random;
    +import java.util.concurrent.TimeUnit;
    +
    +/**
    + * Benchmark that measures throughput of client performing puts to a loner 
server.
    + */
    +@Measurement(iterations = 3, time = 3, timeUnit = MINUTES)
    +@Warmup(iterations = 3, time = 1, timeUnit = MINUTES)
    +@Fork(3)
    +@BenchmarkMode(Mode.Throughput)
    +@OutputTimeUnit(TimeUnit.SECONDS)
    +@State(Scope.Thread)
    +@SuppressWarnings("unused")
    +public class ClientCachePutBench {
    +
    +  static final long PROCESS_READER_TIMEOUT = 60 * 1000;
    +  static final String CLASS_NAME = 
ClientCachePutBench.class.getSimpleName();
    +  static final String PACKAGE_NAME =
    +      replace(ClientCachePutBench.class.getPackage().getName(), ".", "/");
    +  static final String REGION_NAME = CLASS_NAME + "-region";
    +  static final String SERVER_XML_NAME = "/" + PACKAGE_NAME + "/" + 
CLASS_NAME + "-server.xml";
    +
    +  @State(Scope.Benchmark)
    +  public static class ClientState {
    +
    +    Random random;
    +    Region<String, String> region;
    +
    +    private Process process;
    +    private volatile ProcessStreamReader processOutReader;
    +    private volatile ProcessStreamReader processErrReader;
    +
    +    private int serverPort;
    +    private ServerLauncher launcher;
    +    private File serverDirectory;
    +    private ClientCache clientCache;
    +
    +    private TemporaryFolder temporaryFolder = new TemporaryFolder();
    +
    +    @Setup(Level.Trial)
    +    public void startServer() throws Exception {
    +      System.out.println("\n" + "[ClientCachePutBench] startServer");
    +
    +      this.random = new Random(nanoTime());
    +
    +      this.temporaryFolder.create();
    +      this.serverDirectory = this.temporaryFolder.getRoot();
    +
    +      startServerProcess();
    +
    +      try {
    +        startProcessReaders();
    +
    +        ServerLauncher serverLauncher = new ServerLauncher.Builder()
    +            
.setWorkingDirectory(this.serverDirectory.getAbsolutePath()).build();
    +
    +        await("Starting server in " + this.serverDirectory).atMost(2, 
MINUTES)
    +            .until(() -> 
assertThat(serverLauncher.status().getStatus()).isEqualTo(ONLINE));
    +
    +        this.clientCache = new ClientCacheFactory().set(LOG_LEVEL, "warn")
    +            .addPoolServer(getIPLiteral(), this.serverPort).create();
    +        this.region =
    +            this.clientCache.<String, 
String>createClientRegionFactory(PROXY).create(REGION_NAME);
    +
    +      } finally {
    +        stopProcessReaders();
    +      }
    +    }
    +
    +    private void startServerProcess() throws IOException {
    +      File destServerXml = copyXmlToServerDirectory();
    +
    +      this.serverPort = getRandomAvailablePort(SOCKET);
    +
    +      List<String> command = new ArrayList<>();
    +      command.add(new File(new File(getProperty("java.home"), "bin"), 
"java").getCanonicalPath());
    +      command.add("-D" + GEMFIRE_PREFIX + CACHE_XML_FILE + "=" + 
destServerXml.getAbsolutePath());
    +      command.add("-D" + GEMFIRE_PREFIX + MCAST_PORT + "=0");
    +      command.add("-D" + GEMFIRE_PREFIX + LOCATORS + "=");
    +      command.add("-D" + GEMFIRE_PREFIX + LOG_LEVEL + "=warn");
    +      command.add("-cp");
    +      command.add(getProperty("java.class.path"));
    +      command.add(ServerLauncher.class.getName());
    +      command.add(ServerLauncher.Command.START.getName());
    +      command.add("server1");
    +      command.add("--server-port=" + this.serverPort);
    +
    +      System.out.println("[ClientCachePutBench] Launching server with 
command: " + command);
    +
    +      this.process = new 
ProcessBuilder(command).directory(this.serverDirectory).start();
    +    }
    +
    +    private File copyXmlToServerDirectory() throws IOException {
    +      URL srcServerXml = getClass().getResource(SERVER_XML_NAME);
    +      assertThat(srcServerXml).isNotNull();
    +      File destServerXml = new File(this.serverDirectory, SERVER_XML_NAME);
    +      copyURLToFile(srcServerXml, destServerXml);
    +      return destServerXml;
    +    }
    +
    +    private void startProcessReaders() {
    +      this.processOutReader =
    +          new 
ProcessStreamReader.Builder(this.process).inputStream(this.process.getInputStream())
    +              .inputListener((line) -> 
System.out.println("[ClientCachePutBench][stdout] " + line))
    +              .build().start();
    +      this.processErrReader =
    +          new 
ProcessStreamReader.Builder(this.process).inputStream(this.process.getErrorStream())
    +              .inputListener((line) -> 
System.out.println("[ClientCachePutBench][stderr] " + line))
    +              .build().start();
    +    }
    +
    +    private void stopProcessReaders() throws InterruptedException {
    +      if (this.processOutReader != null) {
    +        this.processOutReader.stop().join(PROCESS_READER_TIMEOUT);
    +      }
    +      if (this.processErrReader != null) {
    +        this.processErrReader.stop().join(PROCESS_READER_TIMEOUT);
    +      }
    +    }
    +
    +    @TearDown(Level.Trial)
    +    public void stopServer() throws Exception {
    +      System.out.println("\n" + "[ClientCachePutBench] stopServer");
    +      try {
    +        this.clientCache.close(false);
    +        new 
ServerLauncher.Builder().setWorkingDirectory(this.serverDirectory.getAbsolutePath())
    +            .build().stop();
    +      } finally {
    +        if (this.process != null) {
    +          this.process.destroyForcibly();
    +        }
    +        this.temporaryFolder.delete();
    +      }
    +    }
    +  }
    +
    +  @Benchmark
    +  public String performPutFromClient(final ClientState state) throws 
Exception {
    +    return state.region.put(createRandomString(state), 
createRandomString(state));
    +  }
    --- End diff --
    
    What would you prefer to see for key and value?


> Integrated Security performance improvements
> --------------------------------------------
>
>                 Key: GEODE-2632
>                 URL: https://issues.apache.org/jira/browse/GEODE-2632
>             Project: Geode
>          Issue Type: Improvement
>          Components: security
>            Reporter: Jinmei Liao
>            Assignee: Kirk Lund
>              Labels: performance
>
> There is a security check in Put65.cmdExecute() that, if removed, improved 
> the performance.
> The expense of this security call needs to be reduced in order to get the 
> performance back.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to