d9a8d6f998
git-svn-id: svn+ssh://svn.corp.yahoo.com/yahoo/yrl/labs/pnuts/code/logstore@3593 8dad8b1f-cf64-0410-95b6-bcf113ffbcfe
94 lines
3 KiB
C++
94 lines
3 KiB
C++
/*
|
|
* copy_database.cpp
|
|
*
|
|
* Copyright 2010-2012 Yahoo! 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.
|
|
*
|
|
* Created on: Aug 30, 2010
|
|
* Author: sears
|
|
*/
|
|
|
|
#include "../test/check_util.h"
|
|
#include <sys/time.h>
|
|
|
|
#include "../tcpclient.h"
|
|
#include "../network.h"
|
|
#include "../datatuple.h"
|
|
void usage(char * argv[]) {
|
|
fprintf(stderr, "usage %s from_host to_host\n", argv[0]);
|
|
}
|
|
#include "util_main.h"
|
|
int main(int argc, char * argv[]) {
|
|
if(argc != 3) { usage(argv); return -1; }
|
|
|
|
char ** from_arg = (char**)malloc(2*sizeof(char*));
|
|
from_arg[0] = argv[0];
|
|
from_arg[1] = argv[1];
|
|
|
|
char ** to_arg = (char**)malloc(2*sizeof(char*));
|
|
to_arg[0] = argv[0];
|
|
to_arg[1] = argv[2];
|
|
|
|
logstore_handle_t * from = util_open_conn(2, from_arg);
|
|
logstore_handle_t * to = util_open_conn(2, to_arg);
|
|
|
|
uint8_t ret = logstore_client_op_returns_many(from, OP_SCAN, 0, 0, -2);
|
|
if(ret != LOGSTORE_RESPONSE_SENDING_TUPLES) {
|
|
perror("Open database scan failed"); return 3;
|
|
}
|
|
ret = logstore_client_op_returns_many(to, OP_BULK_INSERT);
|
|
if(ret != LOGSTORE_RESPONSE_RECEIVING_TUPLES) {
|
|
perror("Open bulk insert failed"); return 3;
|
|
}
|
|
long long num_tuples = 0;
|
|
long long size_copied = 0;
|
|
datatuple *tup;
|
|
|
|
int bytes_per_dot = 10 * 1024 * 1024;
|
|
int dots_per_line = 50;
|
|
long long last_dot = 0;
|
|
|
|
struct timeval load_start_time;
|
|
gettimeofday(&load_start_time, 0);
|
|
|
|
while((tup = logstore_client_next_tuple(from))) {
|
|
ret = logstore_client_send_tuple(to, tup);
|
|
num_tuples ++;
|
|
size_copied += tup->byte_length();
|
|
datatuple::freetuple(tup);
|
|
if(ret != LOGSTORE_RESPONSE_SUCCESS) {
|
|
perror("Send tuple failed"); return 3;
|
|
}
|
|
if(last_dot != size_copied / bytes_per_dot) {
|
|
printf("."); fflush(stdout);
|
|
last_dot = size_copied / bytes_per_dot;
|
|
if(last_dot % dots_per_line == 0) {
|
|
struct timeval line_stop_time;
|
|
gettimeofday(&line_stop_time,0);
|
|
double seconds = tv_to_double(line_stop_time) - tv_to_double(load_start_time);
|
|
printf("%6lldMB %6.1f s %6.2f mb/s %6.2f tuples/s\n", size_copied / 1024*1024, seconds, (double)size_copied/(1024.0 * 1024.0 * seconds), (double)num_tuples/seconds);
|
|
}
|
|
}
|
|
}
|
|
logstore_client_send_tuple(to,NULL);
|
|
if(ret != LOGSTORE_RESPONSE_SUCCESS) {
|
|
perror("Close bulk load failed"); return 3;
|
|
}
|
|
logstore_client_close(from);
|
|
logstore_client_close(to);
|
|
printf("Copy database done. %lld tuples, %lld bytes\n", (long long)num_tuples, (long long)size_copied);
|
|
return 0;
|
|
|
|
}
|
|
|