com.flaptor.indextank.storage.LogWriterClient.java Source code

Java tutorial

Introduction

Here is the source code for com.flaptor.indextank.storage.LogWriterClient.java

Source

/*
 * Copyright (c) 2011 LinkedIn, 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.flaptor.indextank.storage;

import java.io.FileNotFoundException;
import java.util.Scanner;

import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransportException;

import com.flaptor.indextank.rpc.LogBatch;
import com.flaptor.indextank.rpc.LogRecord;
import com.flaptor.indextank.rpc.LogWriter;
import com.google.common.collect.ImmutableMap;

public class LogWriterClient {

    private final String host;
    private final int port;

    public LogWriterClient(String host, int port) {
        this.host = host;
        this.port = port;
    }

    public void sendBatch(LogBatch batch) {
        TSocket transport = new TSocket(host, port);
        TProtocol protocol = new TBinaryProtocol(transport);
        LogWriter.Client client = new LogWriter.Client(protocol);

        try {
            transport.open();
            client.send_batch(batch);
            transport.close();
        } catch (TTransportException e) {
            throw new RuntimeException(e);
        } catch (TException e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) throws FileNotFoundException {
        LogWriterClient client = new LogWriterClient("localhost", 15000);

        Scanner in = new Scanner(System.in);
        while (true) {
            String line = in.nextLine();
            if (line.startsWith("i")) {
                IndexLog log = new IndexLog(line.substring(1));
                Segment segment = log.getLargestOptimizedSegment();
                String docid = null;
                /*do {
                Pair<SegmentReader, String> page = segment.pageReader(docid);
                docid = page.last();
                List<LogRecord> list = Lists.newArrayList(page.first());
                System.out.println(list.size());
                System.out.println(list.get(0));
                } while (docid != null);*/
                /*SegmentIndexReader r = new SegmentIndexReader(log.getLargestOptimizedSegment());
                for (Pair<Long, String> pair : r) {
                System.out.println(pair);
                }*/
                /*} else if (line.startsWith("?")) {
                    long t = System.currentTimeMillis();
                    LogPageToken token = new LogPageToken();
                    int total = 0;
                    while (token != null) {
                System.out.println(token);
                LogPage page = client.readPage(line.substring(1), token);
                int size = page.get_batch().get_records_size();
                if (size > 0) {
                    LogRecord first = page.get_batch().get_records().get(0);
                    LogRecord last = page.get_batch().get_records().get(size-1);
                    System.out.println(String.format("> %d ---------> %d - %d --------> %s - %s", size, first.get_id(), last.get_id(), first.get_docid(), last.get_docid()));
                }
                if (page.is_set_next_page_token()) {
                    token = page.get_next_page_token();
                } else {
                    token = null;
                }
                total += size;
                    }
                    System.out.println("Total: " + total);
                    System.out.println("Execution time = " + (System.currentTimeMillis() - t) / 1000.0);*/
            } else {
                String[] split = line.split(" ", 4);
                long start = Long.parseLong(split[0]);
                int count = Integer.parseInt(split[1]);
                String code = split[2];
                String text = null;
                if (split.length > 3) {
                    text = split[3];
                }
                LogBatch b = new LogBatch();
                for (long id = start; id - start < count; id++) {
                    if (((id - start) % 1000) == 0 && id != start) {
                        System.out.println("sending " + id);
                        client.sendBatch(b);
                        b.get_records().clear();
                    }
                    LogRecord record = new LogRecord();
                    record.set_docid("d" + id);
                    record.set_timestamp_ms(System.currentTimeMillis());
                    record.set_index_code(code);
                    if (text != null) {
                        record.set_fields(ImmutableMap.of("text", text));
                    } else {
                        record.set_deleted(true);
                    }
                    b.add_to_records(record);
                }
                if (!b.get_records().isEmpty())
                    client.sendBatch(b);
            }
        }
    }

}