bigrecord-driver 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +0 -0
 - data/bin/cassandra-driver +5 -0
 - data/bin/hbase-driver +5 -0
 - data/bin/launcher +155 -0
 - data/conf/log4j.properties +48 -0
 - data/lib/big_record_driver/bigrecord_server.rb +119 -0
 - data/lib/big_record_driver/cassandra_driver/server.rb +135 -0
 - data/lib/big_record_driver/client.rb +36 -0
 - data/lib/big_record_driver/column_descriptor.rb +23 -0
 - data/lib/big_record_driver/driver_manager.rb +34 -0
 - data/lib/big_record_driver/exceptions.rb +12 -0
 - data/lib/big_record_driver/hbase_driver/server.rb +396 -0
 - data/lib/big_record_driver.rb +6 -0
 - data/lib/bigrecord_driver.rb +1 -0
 - data/test/abstract_test_client.rb +316 -0
 - data/test/test_client_cassandra.rb +63 -0
 - data/test/test_client_hbase.rb +26 -0
 - data/test/test_driver_manager.rb +46 -0
 - data/vendor/java/cassandra/cassandra-0.3.0-dev.jar +0 -0
 - data/vendor/java/cassandra/libthrift.jar +0 -0
 - data/vendor/java/cassandra/log4j-1.2.15.jar +0 -0
 - data/vendor/java/hbase/commons-logging-1.0.4.jar +0 -0
 - data/vendor/java/hbase/commons-logging-api-1.0.4.jar +0 -0
 - data/vendor/java/hbase/hadoop-0.20.0-core.jar +0 -0
 - data/vendor/java/hbase/hbase-0.20.0.jar +0 -0
 - data/vendor/java/hbase/log4j-1.2.13.jar +0 -0
 - data/vendor/java/hbase/zookeeper-r785019-hbase-1329.jar +0 -0
 - metadata +83 -0
 
    
        data/README
    ADDED
    
    | 
         
            File without changes
         
     | 
    
        data/bin/hbase-driver
    ADDED
    
    
    
        data/bin/launcher
    ADDED
    
    | 
         @@ -0,0 +1,155 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #! /bin/bash
         
     | 
| 
      
 2 
     | 
    
         
            +
            DRIVERNAME=$1
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Fix for Amazon EC2 instances
         
     | 
| 
      
 4 
     | 
    
         
            +
            unset RUBYLIB
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            # Needs the $JRUBY_HOME environment variable to be set
         
     | 
| 
      
 7 
     | 
    
         
            +
            if [ "$JRUBY_HOME" == "" ]; then
         
     | 
| 
      
 8 
     | 
    
         
            +
              echo "\$JRUBY_HOME is not set. Please set it in your ~/.bashrc file."
         
     | 
| 
      
 9 
     | 
    
         
            +
              exit 1
         
     | 
| 
      
 10 
     | 
    
         
            +
            fi
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            VENDOR_DIR=`dirname "$0"`
         
     | 
| 
      
 13 
     | 
    
         
            +
            VENDOR_DIR=`cd "$VENDOR_DIR/../vendor"; pwd`
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            CONF_DIR=`dirname "$0"`
         
     | 
| 
      
 16 
     | 
    
         
            +
            CONF_DIR=`cd "$CONF_DIR/../conf"; pwd`
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            # Ruby file that contains the drb server
         
     | 
| 
      
 19 
     | 
    
         
            +
            DRIVER=$VENDOR_DIR/../lib/big_record_driver/"$DRIVERNAME"_driver/server.rb
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            # location where the pids are stored
         
     | 
| 
      
 22 
     | 
    
         
            +
            PIDS_DIR=/tmp/$DRIVERNAME-driver/run
         
     | 
| 
      
 23 
     | 
    
         
            +
            mkdir -p $PIDS_DIR
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            # startup delay
         
     | 
| 
      
 26 
     | 
    
         
            +
            STARTUP_TIMEOUT=60
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            # location where the log files are stored
         
     | 
| 
      
 29 
     | 
    
         
            +
            LOGS_DIR=/tmp/$DRIVERNAME-driver/log
         
     | 
| 
      
 30 
     | 
    
         
            +
            mkdir -p $LOGS_DIR
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            # set the environment to use jruby by default
         
     | 
| 
      
 33 
     | 
    
         
            +
            PATH=$JRUBY_HOME/bin:$PATH
         
     | 
| 
      
 34 
     | 
    
         
            +
            for f in $VENDOR_DIR/java/$DRIVERNAME/*.jar; do
         
     | 
| 
      
 35 
     | 
    
         
            +
              if [ -f $f ]; then
         
     | 
| 
      
 36 
     | 
    
         
            +
                CLASSPATH=${CLASSPATH}:$f;
         
     | 
| 
      
 37 
     | 
    
         
            +
              fi
         
     | 
| 
      
 38 
     | 
    
         
            +
            done
         
     | 
| 
      
 39 
     | 
    
         
            +
            #CLASSPATH=$CLASSPATH:$VENDOR_DIR/java/hadoop-0.19.1-core.jar:$VENDOR_DIR/java/hbase-0.19.1.jar:$VENDOR_DIR/java/commons-logging-1.0.4.jar:$VENDOR_DIR/java/commons-logging-api-1.0.4.jar:$VENDOR_DIR/java/log4j-1.2.13.jar:$CONF_DIR/log4j.properties
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            export PATH CLASSPATH
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            # TODO: find a way to use the return value of this function instead of
         
     | 
| 
      
 44 
     | 
    
         
            +
            # manipulating the global variable
         
     | 
| 
      
 45 
     | 
    
         
            +
            PIDS="" 
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            refresh_pids() {
         
     | 
| 
      
 48 
     | 
    
         
            +
            		if [ -f $PIDS_DIR/$PORT.pid ]; then
         
     | 
| 
      
 49 
     | 
    
         
            +
                    	PID=`cat $PIDS_DIR/$PORT.pid`
         
     | 
| 
      
 50 
     | 
    
         
            +
                    else
         
     | 
| 
      
 51 
     | 
    
         
            +
                    	PID=""
         
     | 
| 
      
 52 
     | 
    
         
            +
                    fi
         
     | 
| 
      
 53 
     | 
    
         
            +
            }
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            start() {
         
     | 
| 
      
 56 
     | 
    
         
            +
                    echo -n "Starting $DRIVERNAME driver on port $PORT."
         
     | 
| 
      
 57 
     | 
    
         
            +
                    
         
     | 
| 
      
 58 
     | 
    
         
            +
                    refresh_pids
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                    if [ -f "$PIDS_DIR/$PORT.pid" -a "$PID" != "" ] ; then
         
     | 
| 
      
 61 
     | 
    
         
            +
                            echo -e "\nAlready running (pid="$PID")." 
         
     | 
| 
      
 62 
     | 
    
         
            +
                            exit 1
         
     | 
| 
      
 63 
     | 
    
         
            +
                    else
         
     | 
| 
      
 64 
     | 
    
         
            +
                        rm -f $LOGS_DIR/$PORT.log
         
     | 
| 
      
 65 
     | 
    
         
            +
                        nohup jruby $DRIVER $PORT >> $LOGS_DIR/$PORT.log 2>&1 < /dev/null &
         
     | 
| 
      
 66 
     | 
    
         
            +
                        PID=$!
         
     | 
| 
      
 67 
     | 
    
         
            +
                        if [ "$PID" != "" ] ; then
         
     | 
| 
      
 68 
     | 
    
         
            +
                            # monitor the log file for the message saying that the server is started
         
     | 
| 
      
 69 
     | 
    
         
            +
                            for ((i=0; i<$STARTUP_TIMEOUT; i+=1)); do
         
     | 
| 
      
 70 
     | 
    
         
            +
                              sleep 1
         
     | 
| 
      
 71 
     | 
    
         
            +
                              echo -n "."
         
     | 
| 
      
 72 
     | 
    
         
            +
                              if [ "$(cat $LOGS_DIR/$PORT.log | grep 'Started drb server')" != "" ] ; then
         
     | 
| 
      
 73 
     | 
    
         
            +
                                break
         
     | 
| 
      
 74 
     | 
    
         
            +
                              fi
         
     | 
| 
      
 75 
     | 
    
         
            +
                            done
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                            if [ "$i" == $STARTUP_TIMEOUT ] ; then
         
     | 
| 
      
 78 
     | 
    
         
            +
                              echo -e "\nStartup timeout: couldn't start the DRb server."
         
     | 
| 
      
 79 
     | 
    
         
            +
                            else
         
     | 
| 
      
 80 
     | 
    
         
            +
                              echo $PID > $PIDS_DIR/$PORT.pid
         
     | 
| 
      
 81 
     | 
    
         
            +
                            fi
         
     | 
| 
      
 82 
     | 
    
         
            +
                            echo ""
         
     | 
| 
      
 83 
     | 
    
         
            +
                        else
         
     | 
| 
      
 84 
     | 
    
         
            +
                        	echo -e "\nAn error occured while starting the DRb server."
         
     | 
| 
      
 85 
     | 
    
         
            +
                        fi
         
     | 
| 
      
 86 
     | 
    
         
            +
                    fi
         
     | 
| 
      
 87 
     | 
    
         
            +
            }
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
            stop() {
         
     | 
| 
      
 90 
     | 
    
         
            +
                    echo "Stopping $DRIVERNAME driver on port $PORT."
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                    refresh_pids
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                    if [ -f "$PIDS_DIR/$PORT.pid" -a "$PID" != "" ] ; then
         
     | 
| 
      
 95 
     | 
    
         
            +
                    		echo "Stopping driver (pid = $PID)." >> $LOGS_DIR/$PORT.log
         
     | 
| 
      
 96 
     | 
    
         
            +
                            kill $PID
         
     | 
| 
      
 97 
     | 
    
         
            +
                            rm $PIDS_DIR/$PORT.pid
         
     | 
| 
      
 98 
     | 
    
         
            +
                    else
         
     | 
| 
      
 99 
     | 
    
         
            +
                            echo "No $DRIVERNAME driver to kill."
         
     | 
| 
      
 100 
     | 
    
         
            +
                    fi
         
     | 
| 
      
 101 
     | 
    
         
            +
            }
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
            status() {
         
     | 
| 
      
 104 
     | 
    
         
            +
            		refresh_pids
         
     | 
| 
      
 105 
     | 
    
         
            +
            		
         
     | 
| 
      
 106 
     | 
    
         
            +
            		if [ -f "$PIDS_DIR/$PORT.pid" -a "$PID" != "" ] ; then
         
     | 
| 
      
 107 
     | 
    
         
            +
            				echo "Running."
         
     | 
| 
      
 108 
     | 
    
         
            +
            		else
         
     | 
| 
      
 109 
     | 
    
         
            +
            				echo "Stopped."
         
     | 
| 
      
 110 
     | 
    
         
            +
            		fi
         
     | 
| 
      
 111 
     | 
    
         
            +
            }
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
            start_debug() {
         
     | 
| 
      
 114 
     | 
    
         
            +
              jruby $DRIVER $PORT
         
     | 
| 
      
 115 
     | 
    
         
            +
            }
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
            print_usage() {
         
     | 
| 
      
 118 
     | 
    
         
            +
            	echo "Usage: $DRIVERNAME-driver {start|stop|restart|status|start_debug} [-p <port>]"
         
     | 
| 
      
 119 
     | 
    
         
            +
            }
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
            set_port() {
         
     | 
| 
      
 122 
     | 
    
         
            +
              if [ "$3" == "-p" -a "$4" != "" ]; then
         
     | 
| 
      
 123 
     | 
    
         
            +
                PORT="$4"
         
     | 
| 
      
 124 
     | 
    
         
            +
              else
         
     | 
| 
      
 125 
     | 
    
         
            +
                PORT=40000
         
     | 
| 
      
 126 
     | 
    
         
            +
              fi  
         
     | 
| 
      
 127 
     | 
    
         
            +
            }
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
            case "$2" in
         
     | 
| 
      
 130 
     | 
    
         
            +
                start)
         
     | 
| 
      
 131 
     | 
    
         
            +
                	set_port $@
         
     | 
| 
      
 132 
     | 
    
         
            +
               		start
         
     | 
| 
      
 133 
     | 
    
         
            +
                    ;;
         
     | 
| 
      
 134 
     | 
    
         
            +
                stop)
         
     | 
| 
      
 135 
     | 
    
         
            +
                	set_port $@
         
     | 
| 
      
 136 
     | 
    
         
            +
               		stop
         
     | 
| 
      
 137 
     | 
    
         
            +
                    ;;
         
     | 
| 
      
 138 
     | 
    
         
            +
                restart)
         
     | 
| 
      
 139 
     | 
    
         
            +
                	set_port $@
         
     | 
| 
      
 140 
     | 
    
         
            +
               		stop
         
     | 
| 
      
 141 
     | 
    
         
            +
               		start
         
     | 
| 
      
 142 
     | 
    
         
            +
                    ;;
         
     | 
| 
      
 143 
     | 
    
         
            +
                status)
         
     | 
| 
      
 144 
     | 
    
         
            +
                    set_port $@
         
     | 
| 
      
 145 
     | 
    
         
            +
                    status
         
     | 
| 
      
 146 
     | 
    
         
            +
                    ;;
         
     | 
| 
      
 147 
     | 
    
         
            +
                start_debug)
         
     | 
| 
      
 148 
     | 
    
         
            +
                	set_port $@
         
     | 
| 
      
 149 
     | 
    
         
            +
                	start_debug
         
     | 
| 
      
 150 
     | 
    
         
            +
                	;;
         
     | 
| 
      
 151 
     | 
    
         
            +
                *)
         
     | 
| 
      
 152 
     | 
    
         
            +
                    print_usage 
         
     | 
| 
      
 153 
     | 
    
         
            +
                    exit 1
         
     | 
| 
      
 154 
     | 
    
         
            +
            esac
         
     | 
| 
      
 155 
     | 
    
         
            +
            exit 0
         
     | 
| 
         @@ -0,0 +1,48 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Define some default values that can be overridden by system properties
         
     | 
| 
      
 2 
     | 
    
         
            +
            bigrecord.root.logger=INFO,DRFA
         
     | 
| 
      
 3 
     | 
    
         
            +
            bigrecord.log.dir=/tmp/hbase-driver/log
         
     | 
| 
      
 4 
     | 
    
         
            +
            bigrecord.log.file=hbase.log
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            # Define the root logger to the system property "hbase.root.logger".
         
     | 
| 
      
 7 
     | 
    
         
            +
            log4j.rootLogger=${bigrecord.root.logger}
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            # Logging Threshold
         
     | 
| 
      
 10 
     | 
    
         
            +
            log4j.threshhold=ALL
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            #
         
     | 
| 
      
 13 
     | 
    
         
            +
            # Daily Rolling File Appender
         
     | 
| 
      
 14 
     | 
    
         
            +
            #
         
     | 
| 
      
 15 
     | 
    
         
            +
            log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
         
     | 
| 
      
 16 
     | 
    
         
            +
            log4j.appender.DRFA.File=${bigrecord.log.dir}/${bigrecord.log.file}
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            # Rollver at midnight
         
     | 
| 
      
 19 
     | 
    
         
            +
            log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            # 30-day backup
         
     | 
| 
      
 22 
     | 
    
         
            +
            #log4j.appender.DRFA.MaxBackupIndex=30
         
     | 
| 
      
 23 
     | 
    
         
            +
            log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            # Pattern format: Date LogLevel LoggerName LogMessage
         
     | 
| 
      
 26 
     | 
    
         
            +
            log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            # Debugging Pattern format
         
     | 
| 
      
 29 
     | 
    
         
            +
            #log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            #
         
     | 
| 
      
 33 
     | 
    
         
            +
            # console
         
     | 
| 
      
 34 
     | 
    
         
            +
            # Add "console" to rootlogger above if you want to use this 
         
     | 
| 
      
 35 
     | 
    
         
            +
            #
         
     | 
| 
      
 36 
     | 
    
         
            +
            log4j.appender.console=org.apache.log4j.ConsoleAppender
         
     | 
| 
      
 37 
     | 
    
         
            +
            log4j.appender.console.target=System.err
         
     | 
| 
      
 38 
     | 
    
         
            +
            log4j.appender.console.layout=org.apache.log4j.PatternLayout
         
     | 
| 
      
 39 
     | 
    
         
            +
            log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            # Custom Logging levels
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            #log4j.logger.com.bigrecord=TRACE
         
     | 
| 
      
 44 
     | 
    
         
            +
            #log4j.logger.com.bigrecord.util.hbaserecord=DEBUG
         
     | 
| 
      
 45 
     | 
    
         
            +
            #log4j.logger.com.bigrecord.util.jactiverecord=DEBUG
         
     | 
| 
      
 46 
     | 
    
         
            +
            #log4j.logger.org.apache.hadoop.fs.FSNamesystem=DEBUG
         
     | 
| 
      
 47 
     | 
    
         
            +
            log4j.logger.org.apache.hadoop.hbase=DEBUG
         
     | 
| 
      
 48 
     | 
    
         
            +
            #log4j.logger.org.apache.hadoop.dfs=DEBUG
         
     | 
| 
         @@ -0,0 +1,119 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.dirname(__FILE__) + '/exceptions'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require File.dirname(__FILE__) + '/column_descriptor'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'drb'
         
     | 
| 
      
 4 
     | 
    
         
            +
            # The name of the java String class conflicts with ruby's String class.
         
     | 
| 
      
 5 
     | 
    
         
            +
            module Java
         
     | 
| 
      
 6 
     | 
    
         
            +
              include_class "java.lang.String"
         
     | 
| 
      
 7 
     | 
    
         
            +
              include_class "java.lang.Exception"
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            class String
         
     | 
| 
      
 12 
     | 
    
         
            +
              def to_bytes
         
     | 
| 
      
 13 
     | 
    
         
            +
                Java::String.new(self).getBytes
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
            end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            module BigRecordDriver
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            class BigRecordServer
         
     | 
| 
      
 21 
     | 
    
         
            +
              include_class "java.io.IOException"
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              def configure(config = {})
         
     | 
| 
      
 24 
     | 
    
         
            +
                raise NotImplementedError
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              def update(table_name, row, values, timestamp=nil)
         
     | 
| 
      
 28 
     | 
    
         
            +
                raise NotImplementedError
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
              def get(table_name, row, column, options={})
         
     | 
| 
      
 32 
     | 
    
         
            +
                raise NotImplementedError
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              def get_columns(table_name, row, columns, options={})
         
     | 
| 
      
 36 
     | 
    
         
            +
                raise NotImplementedError
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              def get_consecutive_rows(table_name, start_row, limit, columns, stop_row = nil)
         
     | 
| 
      
 40 
     | 
    
         
            +
                raise NotImplementedError
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              def delete(table_name, row)
         
     | 
| 
      
 44 
     | 
    
         
            +
                raise NotImplementedError
         
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
              def create_table(table_name, column_descriptors)
         
     | 
| 
      
 48 
     | 
    
         
            +
                raise NotImplementedError
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
              def drop_table(table_name)
         
     | 
| 
      
 52 
     | 
    
         
            +
                raise NotImplementedError
         
     | 
| 
      
 53 
     | 
    
         
            +
              end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
              def truncate_table(table_name)
         
     | 
| 
      
 56 
     | 
    
         
            +
                raise NotImplementedError
         
     | 
| 
      
 57 
     | 
    
         
            +
              end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
              def ping
         
     | 
| 
      
 60 
     | 
    
         
            +
                raise NotImplementedError
         
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
              def table_exists?(table_name)
         
     | 
| 
      
 64 
     | 
    
         
            +
                raise NotImplementedError
         
     | 
| 
      
 65 
     | 
    
         
            +
              end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
              def table_names
         
     | 
| 
      
 68 
     | 
    
         
            +
                raise NotImplementedError
         
     | 
| 
      
 69 
     | 
    
         
            +
              end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
              def method_missing(method, *args)
         
     | 
| 
      
 72 
     | 
    
         
            +
                super
         
     | 
| 
      
 73 
     | 
    
         
            +
              rescue NoMethodError
         
     | 
| 
      
 74 
     | 
    
         
            +
                raise NoMethodError, "undefined method `#{method}' for \"#{self}\":#{self.class}"
         
     | 
| 
      
 75 
     | 
    
         
            +
              end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
              def respond_to?(method)
         
     | 
| 
      
 78 
     | 
    
         
            +
                super
         
     | 
| 
      
 79 
     | 
    
         
            +
              end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
              protected
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                def to_ruby_string(cell)
         
     | 
| 
      
 84 
     | 
    
         
            +
                  Java::String.new(cell.getValue).to_s
         
     | 
| 
      
 85 
     | 
    
         
            +
                end
         
     | 
| 
      
 86 
     | 
    
         
            +
                # Try to recover from network related exceptions. e.g. hbase has been restarted and the
         
     | 
| 
      
 87 
     | 
    
         
            +
                # cached connections in @tables are no longer valid. Every method in this class (except connect_table)
         
     | 
| 
      
 88 
     | 
    
         
            +
                # should have its code wrapped by a call to this method.
         
     | 
| 
      
 89 
     | 
    
         
            +
                def safe_exec
         
     | 
| 
      
 90 
     | 
    
         
            +
                  yield
         
     | 
| 
      
 91 
     | 
    
         
            +
                rescue IOException => e
         
     | 
| 
      
 92 
     | 
    
         
            +
                  puts "A network error occured: #{e.message}. Trying to recover..."
         
     | 
| 
      
 93 
     | 
    
         
            +
                  init_connection
         
     | 
| 
      
 94 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 95 
     | 
    
         
            +
                    yield
         
     | 
| 
      
 96 
     | 
    
         
            +
                  rescue Exception, Java::Exception => e2
         
     | 
| 
      
 97 
     | 
    
         
            +
                    if e2.class == e.class
         
     | 
| 
      
 98 
     | 
    
         
            +
                      puts "Failed to recover the connection."
         
     | 
| 
      
 99 
     | 
    
         
            +
                    else
         
     | 
| 
      
 100 
     | 
    
         
            +
                      puts "Failed to recover the connection but got a different error this time: #{e2.message}."
         
     | 
| 
      
 101 
     | 
    
         
            +
                    end
         
     | 
| 
      
 102 
     | 
    
         
            +
                    puts "Stack trace:"
         
     | 
| 
      
 103 
     | 
    
         
            +
                    puts e2.backtrace.join("\n")
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                    if e2.kind_of?(NativeException)
         
     | 
| 
      
 106 
     | 
    
         
            +
                      raise BigRecordDriver::JavaError, e2.message
         
     | 
| 
      
 107 
     | 
    
         
            +
                    else
         
     | 
| 
      
 108 
     | 
    
         
            +
                      raise e2
         
     | 
| 
      
 109 
     | 
    
         
            +
                    end
         
     | 
| 
      
 110 
     | 
    
         
            +
                  end
         
     | 
| 
      
 111 
     | 
    
         
            +
                  puts "Connection recovered successfully..."
         
     | 
| 
      
 112 
     | 
    
         
            +
                rescue Exception => e
         
     | 
| 
      
 113 
     | 
    
         
            +
                  puts "\n#{e.class.name}: #{e.message}"
         
     | 
| 
      
 114 
     | 
    
         
            +
                  puts e.backtrace.join("\n")
         
     | 
| 
      
 115 
     | 
    
         
            +
                  raise e
         
     | 
| 
      
 116 
     | 
    
         
            +
                end
         
     | 
| 
      
 117 
     | 
    
         
            +
            end
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,135 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.dirname(__FILE__) + '/../column_descriptor'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require File.dirname(__FILE__) + '/../exceptions'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require File.dirname(__FILE__) + '/../bigrecord_server'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module BigRecordDriver
         
     | 
| 
      
 6 
     | 
    
         
            +
            class CassandraServer < BigRecordServer
         
     | 
| 
      
 7 
     | 
    
         
            +
              include_class "org.apache.cassandra.service.Cassandra"
         
     | 
| 
      
 8 
     | 
    
         
            +
              include_class "org.apache.cassandra.service.InvalidRequestException"
         
     | 
| 
      
 9 
     | 
    
         
            +
              include_class "org.apache.cassandra.service.NotFoundException"
         
     | 
| 
      
 10 
     | 
    
         
            +
              include_class "org.apache.cassandra.service.UnavailableException"
         
     | 
| 
      
 11 
     | 
    
         
            +
              include_class "org.apache.cassandra.service.column_t"
         
     | 
| 
      
 12 
     | 
    
         
            +
              include_class "org.apache.thrift.TException"
         
     | 
| 
      
 13 
     | 
    
         
            +
              include_class "org.apache.thrift.protocol.TBinaryProtocol"
         
     | 
| 
      
 14 
     | 
    
         
            +
              include_class "org.apache.thrift.transport.TSocket"
         
     | 
| 
      
 15 
     | 
    
         
            +
              include_class "org.apache.thrift.transport.TTransport"
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              def configure(config = {})
         
     | 
| 
      
 18 
     | 
    
         
            +
                config[:adr]        ||= 'localhost'
         
     | 
| 
      
 19 
     | 
    
         
            +
                config[:port]       ||= 9160
         
     | 
| 
      
 20 
     | 
    
         
            +
                @config = config
         
     | 
| 
      
 21 
     | 
    
         
            +
                init_connection
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
              
         
     | 
| 
      
 24 
     | 
    
         
            +
              def update(table_name, row, values, timestamp=nil)
         
     | 
| 
      
 25 
     | 
    
         
            +
                safe_exec do
         
     | 
| 
      
 26 
     | 
    
         
            +
                  return nil unless row
         
     | 
| 
      
 27 
     | 
    
         
            +
                  timestamp = 0 unless timestamp
         
     | 
| 
      
 28 
     | 
    
         
            +
                  values.each do |column, value|  
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @cassandraClient.insert(table_name.to_s, row, column, value.to_bytes, timestamp, true)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
                  row
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              def get(table_name, row, column, options={})
         
     | 
| 
      
 36 
     | 
    
         
            +
                safe_exec do
         
     | 
| 
      
 37 
     | 
    
         
            +
                  return nil unless row
         
     | 
| 
      
 38 
     | 
    
         
            +
                  # Retreive only the last version by default
         
     | 
| 
      
 39 
     | 
    
         
            +
                  options[:num_versions] ||= 1
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                  # validate the arguments
         
     | 
| 
      
 42 
     | 
    
         
            +
                  raise ArgumentError, "num_versions must be >= 1" unless options[:num_versions] >= 1
         
     | 
| 
      
 43 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 44 
     | 
    
         
            +
                    if options[:timestamp]
         
     | 
| 
      
 45 
     | 
    
         
            +
                      raw_data = @cassandraClient.get_columns_since(table_name.to_s, row, column, options[:timestamp])
         
     | 
| 
      
 46 
     | 
    
         
            +
                    else
         
     | 
| 
      
 47 
     | 
    
         
            +
                      raw_data = @cassandraClient.get_column(table_name.to_s, row, column)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    end
         
     | 
| 
      
 49 
     | 
    
         
            +
                  rescue NotFoundException => e2
         
     | 
| 
      
 50 
     | 
    
         
            +
                    puts e2.message
         
     | 
| 
      
 51 
     | 
    
         
            +
                    puts e2.class
         
     | 
| 
      
 52 
     | 
    
         
            +
                  end
         
     | 
| 
      
 53 
     | 
    
         
            +
                  # Return either a single value or an array, depending on the number of version that have been requested
         
     | 
| 
      
 54 
     | 
    
         
            +
                  if options[:timestamp]
         
     | 
| 
      
 55 
     | 
    
         
            +
                    return [] unless raw_data
         
     | 
| 
      
 56 
     | 
    
         
            +
                    max_index = raw_data.length > options[:num_versions] || raw_data.length
         
     | 
| 
      
 57 
     | 
    
         
            +
                    0..max_index.each do |i|
         
     | 
| 
      
 58 
     | 
    
         
            +
                      arr[i] = Java::String.new(raw_data[i].value).to_s
         
     | 
| 
      
 59 
     | 
    
         
            +
                    end
         
     | 
| 
      
 60 
     | 
    
         
            +
                    arr
         
     | 
| 
      
 61 
     | 
    
         
            +
                  else
         
     | 
| 
      
 62 
     | 
    
         
            +
                    return nil unless raw_data
         
     | 
| 
      
 63 
     | 
    
         
            +
                    Java::String.new(raw_data.value).to_s
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
              end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
              def get_columns(table_name, row, columns, options={})
         
     | 
| 
      
 69 
     | 
    
         
            +
                safe_exec do
         
     | 
| 
      
 70 
     | 
    
         
            +
                  return nil unless row
         
     | 
| 
      
 71 
     | 
    
         
            +
                  raise ArgumentError, "timestamp on get_columns is not currently supported with cassandra" if options[:timestamp]
         
     | 
| 
      
 72 
     | 
    
         
            +
                  arr = []
         
     | 
| 
      
 73 
     | 
    
         
            +
                  columns.each_with_index do |col, i|
         
     | 
| 
      
 74 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 75 
     | 
    
         
            +
                      if col[-1,1] == ':'
         
     | 
| 
      
 76 
     | 
    
         
            +
                        arr + @cassandraClient.get_slice(table_name.to_s, row, col, -1, -1).to_a
         
     | 
| 
      
 77 
     | 
    
         
            +
                      else
         
     | 
| 
      
 78 
     | 
    
         
            +
                        arr + @cassandraClient.get_column(table_name.to_s, row, col)
         
     | 
| 
      
 79 
     | 
    
         
            +
                      end
         
     | 
| 
      
 80 
     | 
    
         
            +
                    rescue NotFoundException => e2
         
     | 
| 
      
 81 
     | 
    
         
            +
                      puts e2.message
         
     | 
| 
      
 82 
     | 
    
         
            +
                      puts e2.class
         
     | 
| 
      
 83 
     | 
    
         
            +
                    end
         
     | 
| 
      
 84 
     | 
    
         
            +
                  end
         
     | 
| 
      
 85 
     | 
    
         
            +
                  unless !result or result.isEmpty
         
     | 
| 
      
 86 
     | 
    
         
            +
                    values = {}
         
     | 
| 
      
 87 
     | 
    
         
            +
                    arr.each do |column_t|
         
     | 
| 
      
 88 
     | 
    
         
            +
                      values[column_t.getColumnName.to_s] = Java::String.new(column_t.value).to_s
         
     | 
| 
      
 89 
     | 
    
         
            +
                    end
         
     | 
| 
      
 90 
     | 
    
         
            +
                    values["attribute:id"] = row
         
     | 
| 
      
 91 
     | 
    
         
            +
                    values
         
     | 
| 
      
 92 
     | 
    
         
            +
                  end
         
     | 
| 
      
 93 
     | 
    
         
            +
                  
         
     | 
| 
      
 94 
     | 
    
         
            +
                end
         
     | 
| 
      
 95 
     | 
    
         
            +
              end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
            ## It's currently impossible to have compliant delete with cassandra,
         
     | 
| 
      
 98 
     | 
    
         
            +
            ## you would have to do it famiyl by family
         
     | 
| 
      
 99 
     | 
    
         
            +
            #  def delete(table_name, row)
         
     | 
| 
      
 100 
     | 
    
         
            +
            #    safe_exec do
         
     | 
| 
      
 101 
     | 
    
         
            +
            #      table.remove(table_name, row, ??, ??, true)
         
     | 
| 
      
 102 
     | 
    
         
            +
            #    end
         
     | 
| 
      
 103 
     | 
    
         
            +
            #  end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
              def ping
         
     | 
| 
      
 106 
     | 
    
         
            +
                safe_exec do
         
     | 
| 
      
 107 
     | 
    
         
            +
                  @socket.isOpen
         
     | 
| 
      
 108 
     | 
    
         
            +
                end
         
     | 
| 
      
 109 
     | 
    
         
            +
              end
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
              def table_names
         
     | 
| 
      
 112 
     | 
    
         
            +
                safe_exec do
         
     | 
| 
      
 113 
     | 
    
         
            +
                  @cassandraClient.getStringListProperty("tables") #.collect{|td| Java::String.new(td.getName).to_s}
         
     | 
| 
      
 114 
     | 
    
         
            +
                end
         
     | 
| 
      
 115 
     | 
    
         
            +
              end
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
              def table_exists?(table_name)
         
     | 
| 
      
 118 
     | 
    
         
            +
                !@cassandraClient.describeTable(table_name.to_s).include?("not found.")
         
     | 
| 
      
 119 
     | 
    
         
            +
              end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
              private
         
     | 
| 
      
 122 
     | 
    
         
            +
                def init_connection
         
     | 
| 
      
 123 
     | 
    
         
            +
                  @socket = TSocket.new(@config[:adr], @config[:port]);
         
     | 
| 
      
 124 
     | 
    
         
            +
                  binary_protocol = TBinaryProtocol.new(@socket, false, false);
         
     | 
| 
      
 125 
     | 
    
         
            +
                  @cassandraClient = Cassandra::Client.new(binary_protocol);
         
     | 
| 
      
 126 
     | 
    
         
            +
                  @socket.open;
         
     | 
| 
      
 127 
     | 
    
         
            +
                end
         
     | 
| 
      
 128 
     | 
    
         
            +
            end
         
     | 
| 
      
 129 
     | 
    
         
            +
            end
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
            port = ARGV[0]
         
     | 
| 
      
 132 
     | 
    
         
            +
            port ||= 45000
         
     | 
| 
      
 133 
     | 
    
         
            +
            DRb.start_service("druby://:#{port}", BigRecordDriver::CassandraServer.new)
         
     | 
| 
      
 134 
     | 
    
         
            +
            puts "Started drb server on port #{port}."
         
     | 
| 
      
 135 
     | 
    
         
            +
            DRb.thread.join
         
     | 
| 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'activesupport' 
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'set'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'drb'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            module BigRecordDriver
         
     | 
| 
      
 7 
     | 
    
         
            +
              class Client
         
     | 
| 
      
 8 
     | 
    
         
            +
                
         
     | 
| 
      
 9 
     | 
    
         
            +
                def initialize(config={}) # :nodoc:
         
     | 
| 
      
 10 
     | 
    
         
            +
                  config = config.symbolize_keys
         
     | 
| 
      
 11 
     | 
    
         
            +
                  config[:drb_host]     ||= '127.0.0.1'
         
     | 
| 
      
 12 
     | 
    
         
            +
                  config[:drb_port]     ||= 40000
         
     | 
| 
      
 13 
     | 
    
         
            +
                  
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @config = config
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  DRb.start_service('druby://127.0.0.1:0')
         
     | 
| 
      
 17 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 18 
     | 
    
         
            +
                    @server = DRbObject.new(nil, "druby://#{@config[:drb_host]}:#{@config[:drb_port]}")
         
     | 
| 
      
 19 
     | 
    
         
            +
                  rescue DRb::DRbConnError
         
     | 
| 
      
 20 
     | 
    
         
            +
                    raise ConnectionError, "Failed to connect to the DRb server (jruby) " +
         
     | 
| 
      
 21 
     | 
    
         
            +
                                                  "at #{@config[:drb_host]}:#{@config[:drb_port]}."
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @server.configure(@config)
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
                
         
     | 
| 
      
 26 
     | 
    
         
            +
                # Delegate the methods to the server
         
     | 
| 
      
 27 
     | 
    
         
            +
                def method_missing(method, *args)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  @server.send(method, *args)
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
                
         
     | 
| 
      
 31 
     | 
    
         
            +
                def respond_to?(method)
         
     | 
| 
      
 32 
     | 
    
         
            +
                  super
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
                
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module BigRecordDriver
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              class ColumnDescriptor
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                attr_accessor :name
         
     | 
| 
      
 6 
     | 
    
         
            +
                attr_accessor :versions
         
     | 
| 
      
 7 
     | 
    
         
            +
                attr_accessor :in_memory
         
     | 
| 
      
 8 
     | 
    
         
            +
                attr_accessor :bloom_filter
         
     | 
| 
      
 9 
     | 
    
         
            +
                attr_accessor :compression
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def initialize(name, options={})
         
     | 
| 
      
 12 
     | 
    
         
            +
                  raise ArgumentError, "name is mandatory" unless name
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  @name = name.to_s
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @versions         = options[:versions]
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @in_memory        = options[:in_memory]
         
     | 
| 
      
 17 
     | 
    
         
            +
                  @bloom_filter     = options[:bloom_filter]
         
     | 
| 
      
 18 
     | 
    
         
            +
                  @compression      = options[:compression]
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,34 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module BigRecordDriver
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              class DriverManager
         
     | 
| 
      
 4 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                  def set_cmd(db = 'hbase')
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @@CMD = File.dirname(__FILE__) + "/../../bin/#{db}-driver"
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
                  DriverManager.set_cmd
         
     | 
| 
      
 10 
     | 
    
         
            +
                  def start(port = 40005)
         
     | 
| 
      
 11 
     | 
    
         
            +
                    `ruby #{@@CMD} start -p #{port.to_s}`
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def restart(port = 40005)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    `ruby #{@@CMD} restart -p #{port.to_s}`
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def stop(port = 40005)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    `ruby #{@@CMD} stop -p #{port.to_s}`
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  def running?(port = 40005)
         
     | 
| 
      
 23 
     | 
    
         
            +
                    status = `ruby #{@@CMD} status -p #{port.to_s}`
         
     | 
| 
      
 24 
     | 
    
         
            +
                    status == "Running.\n"
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  def silent_start(port = 40005)
         
     | 
| 
      
 28 
     | 
    
         
            +
                    start(port) unless running?(port)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            end
         
     |