Package com.netflix.astyanax.cql

Source Code of com.netflix.astyanax.cql.CqlSchemaVersionReader

package com.netflix.astyanax.cql;

import java.net.InetAddress;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;

/**
* Simple class that reads the schema versions from the system local and peers table.
*
* @author poberai
*/
public class CqlSchemaVersionReader {

  private static final Logger Logger = LoggerFactory.getLogger(CqlSchemaVersionReader.class);
 
  private static final String SELECT_SCHEMA_LOCAL = "SELECT schema_version FROM system.local WHERE key='local'";
  private static final String SELECT_SCHEMA_PEERS = "SELECT peer, schema_version FROM system.peers";

  private final Session session;
 
  public CqlSchemaVersionReader(Session session) {
    this.session = session;
  }
 
  public Map<String, List<String>> exec() {
   
      Map<String, List<String>> versions = new HashMap<String, List<String>>();

    ResultSet rs = session.execute(SELECT_SCHEMA_LOCAL);
   
        Row localRow = rs.one();
        if (localRow != null && !localRow.isNull("schema_version")) {
          UUID localSchemaVersion = localRow.getUUID("schema_version");
          InetAddress localServer = rs.getExecutionInfo().getQueriedHost().getAddress();
            addSchemaVersion(localSchemaVersion, localServer, versions);
        }

    rs = session.execute(SELECT_SCHEMA_PEERS);

        for (Row row : rs.all()) {

          if (row.isNull("rpc_address") || row.isNull("schema_version"))
                continue;
           
          UUID schema = row.getUUID("schema_version");
            InetAddress remoteEndpoint = row.getInet("rpc_address");
            addSchemaVersion(schema, remoteEndpoint, versions);
        }

        if (Logger.isDebugEnabled()) {
          Logger.debug("Checking for schema agreement: versions are {}", versions);
        }
       
        return versions;
  }
 
  private void addSchemaVersion(UUID versionUUID, InetAddress endpoint, Map<String, List<String>> map) {
   
    String version = versionUUID.toString();
    List<String> endpoints = map.get(version);
    if (endpoints == null) {
      endpoints = new ArrayList<String>();
      map.put(version, endpoints);
    }
    endpoints.add(endpoint.toString());
  }
}
TOP

Related Classes of com.netflix.astyanax.cql.CqlSchemaVersionReader

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.