com.jivesoftware.os.amza.service.AmzaSetStress.java Source code

Java tutorial

Introduction

Here is the source code for com.jivesoftware.os.amza.service.AmzaSetStress.java

Source

/*
 * Copyright 2013 Jive Software, Inc
 *
 * Licensed 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 com.jivesoftware.os.amza.service;

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;

public class AmzaSetStress {

    public static final String CONTENT_TYPE_HEADER_NAME = "Content-Type";
    public static final String APPLICATION_JSON_CONTENT_TYPE = "application/json";
    public static final String APPLICATION_OCTET_STREAM_TYPE = "application/octet-stream";
    public static final ObjectMapper MAPPER = new ObjectMapper();

    public static void main(String[] args) throws IOException {

        args = new String[] { "soa-integ-data12.phx1.jivehosted.com", "1185", "1", "10000" };

        final String hostName = args[0];
        final int port = Integer.parseInt(args[1]);
        final int firstDocId = Integer.parseInt(args[2]);
        final int count = Integer.parseInt(args[3]);
        final int batchSize = 100;

        String partitionName = "lorem";

        for (int i = 0; i < 8; i++) {
            final String rname = partitionName + i;
            final org.apache.http.client.HttpClient httpClient = HttpClients.createDefault();

            Thread t = new Thread() {
                @Override
                public void run() {
                    try {
                        feed(httpClient, hostName, port, rname, 0, count, batchSize);
                    } catch (Exception x) {
                        x.printStackTrace();
                    }
                }
            };
            t.start();
        }
    }

    private static void feed(org.apache.http.client.HttpClient httpClient, String hostName, int port,
            String partitionName, int firstDocId, int count, int batchSize)
            throws IOException, InterruptedException {
        long start = System.currentTimeMillis();
        for (int key = firstDocId; key < count; key++) {
            StringBuilder url = new StringBuilder();
            url.append("http://");
            url.append(hostName).append(":").append(port);
            url.append("/amza/multiSet");
            url.append("/").append(partitionName);

            Map<String, String> values = new LinkedHashMap<>();
            for (int b = 0; b < batchSize; b++) {

                values.put(b + "k" + key, b + "v" + key);
            }

            String postJsonBody = MAPPER.writeValueAsString(values);
            while (true) {
                HttpPost method = new HttpPost(url.toString());
                method.setEntity(new StringEntity(postJsonBody, ContentType.APPLICATION_JSON));
                method.setHeader(CONTENT_TYPE_HEADER_NAME, APPLICATION_JSON_CONTENT_TYPE);

                StatusLine statusLine;
                try {
                    try {
                        HttpResponse response = httpClient.execute(method);
                        statusLine = response.getStatusLine();
                        if (statusLine.getStatusCode() == 200) {
                            break;
                        }
                    } catch (Exception x) {
                        x.printStackTrace();
                    }
                    Thread.sleep(1000);
                } finally {
                    method.releaseConnection();
                }
            }

            if (key % 100 == 0) {
                long elapse = System.currentTimeMillis() - start;
                double millisPerAdd = (elapse / (double) key);
                System.out.println(partitionName + " millisPerAdd:" + millisPerAdd + " addsPerSec:"
                        + (1000d / millisPerAdd) + " key:" + key);
            }
        }
    }

    public static String document(long id) {
        StringBuilder document = new StringBuilder();
        document.append(id);
        return document.toString();
    }

}