Package com.netflix.staash.service

Source Code of com.netflix.staash.service.CacheService

/*******************************************************************************
* /*
*  *
*  *  Copyright 2013 Netflix, 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.netflix.staash.service;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

import com.netflix.staash.json.JsonArray;
import com.netflix.staash.json.JsonObject;
import com.netflix.staash.rest.dao.MetaDao;
import com.netflix.staash.rest.meta.entity.Entity;
import com.netflix.staash.rest.meta.entity.EntityType;
import com.netflix.staash.rest.util.MetaConstants;

public class CacheService {
    List<String> dbHolder = new ArrayList<String>();
    Map<String, String> tableToStorageMap = new ConcurrentHashMap<String, String>();
    Map<String, JsonObject> storageMap = new ConcurrentHashMap<String, JsonObject>();
    Map<String, List<String>> dbToTableMap = new ConcurrentHashMap<String, List<String>>();
    Map<String, List<String>> dbToTimeseriesMap = new ConcurrentHashMap<String, List<String>>();
    private MetaDao meta;

    public CacheService(MetaDao meta) {
        this.meta = meta;
//        LoadStorage();
//        LoadDbNames();
//        LoadTableMaps();
//        LoadDbToTimeSeriesMap();
    }

    private void LoadTableMaps() {
        Map<String, JsonObject> tblmap = meta.runQuery(
                MetaConstants.STAASH_TABLE_ENTITY_TYPE, "*");
        for (String tableName : tblmap.keySet()) {
            JsonObject tblPay = tblmap.get(tableName);
            String storage = tblPay.getString("storage");
            tableToStorageMap.put(tableName, storage);
            String key = tableName.split("\\.")[0];
            String table = tableName.split("\\.")[1];
            List<String> currval = null;
            currval = dbToTableMap.get(key);
            if (currval == null) {
                currval = new ArrayList<String>();
            }
            currval.add(table);
            dbToTableMap.put(key, currval);
        }
    }

    public void LoadStorage() {
        storageMap = meta.runQuery(MetaConstants.STAASH_STORAGE_TYPE_ENTITY, "*");
    }

    private void LoadDbNames() {
        Map<String, JsonObject> dbmap = meta.runQuery(
                MetaConstants.STAASH_DB_ENTITY_TYPE, "*");
        for (String key : dbmap.keySet()) {
            dbHolder.add(key);
        }
    }

    private void LoadDbToTimeSeriesMap() {
        Map<String, JsonObject> tblmap = meta.runQuery(
                MetaConstants.STAASH_TS_ENTITY_TYPE, "*");
        for (String tableName : tblmap.keySet()) {
            JsonObject tblPay = tblmap.get(tableName);
            String storage = tblPay.getString("storage");
            if (storage != null && storage.length() > 0)
                tableToStorageMap.put(tableName, storage);
            String key = tableName.split("\\.")[0];
            String table = tableName.split("\\.")[1];
            List<String> currval = null;
            currval = dbToTimeseriesMap.get(key);
            if (currval == null) {
                currval = new ArrayList<String>();
            }
            currval.add(table);
            dbToTimeseriesMap.put(key, currval);
        }
    }

    // public void updateMaps(EntityType etype, JsonObject obj) {
    // switch (etype) {
    // case STORAGE:
    // storageMap.put(obj.getString("name"), obj);
    // break;
    // case DB:
    // String dbname = obj.getString("name");
    // dbHolder.add(dbname);
    // break;
    // case TABLE:
    // String tblname = obj.getString("name");
    // List<String> currval = dbToTableMap.get(tblname);
    // if (currval == null) {
    // currval = new ArrayList<String>();
    // }
    // currval.add(tblname);
    // dbToTableMap.put(tblname, currval);
    // String storage = obj.getString("storage");
    // tableToStorageMap.put(tblname, storage);
    // break;
    // case SERIES:
    // String seriesname = obj.getString("name");
    // List<String> currseries = dbToTimeseriesMap.get(seriesname);
    // if (currseries == null) {
    // currseries = new ArrayList<String>();
    // }
    // currseries.add(seriesname);
    // dbToTimeseriesMap.put(seriesname, currseries);
    // String tsstorage = obj.getString("storage");
    // tableToStorageMap.put(seriesname, tsstorage);
    // break;
    // }
    // }
    public boolean checkUniqueDbName(String dbName) {
//        return dbHolder.contains(dbName);
        Map<String,JsonObject> names = meta.runQuery(MetaConstants.STAASH_DB_ENTITY_TYPE, dbName);
        if (names!=null && !names.isEmpty())
            return names.containsKey(dbName);
        else
            return false;
    }

    public List<String> getDbNames() {
//        return dbHolder;
        Map<String,JsonObject> dbmap = meta.runQuery(MetaConstants.STAASH_DB_ENTITY_TYPE, "*");
        List<String> dbNames = new ArrayList<String>();
        for (String key : dbmap.keySet()) {
            dbNames.add(key);
        }
        return dbNames;
    }

    public List<String> getTableNames(String db) {
        Map<String, JsonObject> tblmap = meta.runQuery(
                MetaConstants.STAASH_TABLE_ENTITY_TYPE, "*");
        List<String> tableNames = new ArrayList<String>();
        for (String tableName : tblmap.keySet()) {
            if (tableName.startsWith(db+".")) {
            String table = tableName.split("\\.")[1];
            tableNames.add(table);
            }
        }
        return tableNames;
    }

    public Set<String> getStorageNames() {
//        return storageMap.keySet();
        Map<String, JsonObject> storages = meta.runQuery(MetaConstants.STAASH_STORAGE_TYPE_ENTITY, "*");
        if (storages != null)
          return storages.keySet();
        else
            return Collections.emptySet();
    }

    public JsonObject getStorage(String storage) {
//        return storageMap.get(storage);
        Map<String, JsonObject> storages = meta.runQuery(MetaConstants.STAASH_STORAGE_TYPE_ENTITY, "*");
        if (storages != null)
          return storages.get(storage);
        else
            return null;
    }

    public List<String> getSeriesNames(String db) {
//        return dbToTimeseriesMap.get(db);
        Map<String, JsonObject> tblmap = meta.runQuery(
                MetaConstants.STAASH_TS_ENTITY_TYPE, "*");
        List<String> tableNames = new ArrayList<String>();
        for (String tableName : tblmap.keySet()) {
            if (tableName.startsWith(db+".")) {
            String table = tableName.split("\\.")[1];
            tableNames.add(table);
            }
        }
        return tableNames;
    }

    public void addEntityToCache(EntityType etype, Entity entity) {
//        switch (etype) {
//        case STORAGE:
//            storageMap.put(entity.getName(),
//                    new JsonObject(entity.getPayLoad()));
//            break;
//        case DB:
//            dbHolder.add(entity.getName());
//            break;
//        case TABLE:
//            JsonObject payobject = new JsonObject(entity.getPayLoad());
//            tableToStorageMap.put(entity.getName(),
//                    payobject.getString("storage"));
//            String db = payobject.getString("db");
//            List<String> tables = dbToTableMap.get(db);
//            if (tables == null || tables.size() == 0) {
//                tables = new ArrayList<String>();
//                tables.add(payobject.getString("name"));
//            } else {
//                tables.add(payobject.getString("name"));
//            }
//            dbToTableMap.put(db, tables);
//            break;
//
//        case SERIES:
//            JsonObject tsobject = new JsonObject(entity.getPayLoad());
//            tableToStorageMap.put(entity.getName(),
//                    tsobject.getString("storage"));
//            String dbname = tsobject.getString("db");
//            List<String> alltables = dbToTableMap.get(dbname);
//            if (alltables == null || alltables.size() == 0) {
//                alltables = new ArrayList<String>();
//                alltables.add(entity.getName());
//            } else {
//                alltables.add(entity.getName());
//            }
//            dbToTimeseriesMap.put(dbname, alltables);
//            break;
//        }
    }

    public JsonObject getStorageForTable(String tableParam) {
        Map<String, JsonObject> tblmap = meta.runQuery(
                MetaConstants.STAASH_TABLE_ENTITY_TYPE, "*");
        List<String> tableNames = new ArrayList<String>();
        for (String tableName : tblmap.keySet()) {
            if (tableName.equals(tableParam)) {
            JsonObject tblPayload = tblmap.get(tableParam);
            String storage = tblPayload.getString("storage");
            return getStorage(storage);
            }
        }
        tblmap = meta.runQuery(
                MetaConstants.STAASH_TS_ENTITY_TYPE, "*");
        tableNames = new ArrayList<String>();
        for (String tableName : tblmap.keySet()) {
            if (tableName.equals(tableParam)) {
            JsonObject tblPayload = tblmap.get(tableParam);
            String storage = tblPayload.getString("storage");
            return getStorage(storage);
            }
        }
        return null;
//        String storage = tableToStorageMap.get(table);
//        JsonObject storageConf = storageMap.get(storage);
//        return storageConf;
    }

    public String listStorage() {
//        Set<String> allStorage = storageMap.keySet();
        Set<String> allStorage = getStorageNames();
        JsonObject obj = new JsonObject();
        JsonArray arr = new JsonArray();
        for (String storage : allStorage) {
            arr.addString(storage);
        }
        obj.putArray("storages", arr);
        return obj.toString();
    }

    public String listSchemas() {
        JsonObject obj = new JsonObject();
        JsonArray arr = new JsonArray();
        List<String> allDbNames = getDbNames();
        for (String db : allDbNames) {
            arr.addString(db);
        }
        obj.putArray("schemas", arr);
        return obj.toString();
    }

    public String listTablesInSchema(String db) {
        List<String> tables = getTableNames(db);
        JsonObject obj = new JsonObject();
        JsonArray arr = new JsonArray();
        for (String table : tables) {
            arr.addString(table);
        }
        obj.putArray(db, arr);
        return obj.toString();
    }

    public String listTimeseriesInSchema(String db) {
        List<String> tables = getSeriesNames(db);
        JsonObject obj = new JsonObject();
        JsonArray arr = new JsonArray();
        obj.putArray(db, arr);
        if (tables != null) {
            for (String table : tables) {
                arr.addString(table);
            }
            obj.putArray(db, arr);
        }
        return obj.toString();
    }
}
TOP

Related Classes of com.netflix.staash.service.CacheService

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.