Package com.netflix.staash.service

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

/*******************************************************************************
* /*
*  *
*  *  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.Map;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import com.netflix.staash.connection.ConnectionFactory;
import com.netflix.staash.connection.PaasConnection;
import com.netflix.staash.exception.StorageDoesNotExistException;
import com.netflix.staash.json.JsonObject;
import com.netflix.staash.rest.dao.MetaDao;
import com.netflix.staash.rest.meta.entity.EntityType;
import com.netflix.staash.rest.meta.entity.PaasDBEntity;
import com.netflix.staash.rest.meta.entity.PaasStorageEntity;
import com.netflix.staash.rest.meta.entity.PaasTableEntity;
import com.netflix.staash.rest.meta.entity.PaasTimeseriesEntity;

public class PaasMetaService implements MetaService {
    private MetaDao meta;
    private ConnectionFactory cfactory;
    private CacheService cache;

    @Inject
    public PaasMetaService(@Named("newmetadao") MetaDao meta, ConnectionFactory fac, CacheService cache) {
        this.meta = meta;
//        this.cfactory = new PaasConnectionFactory(CLIENTTYPE.ASTYANAX.getType());
        this.cfactory = fac;
//        this.cache = new CacheService(meta);
        this.cache = cache;
    }

    public String writeMetaEntity(EntityType etype, String payload) throws StorageDoesNotExistException{
        // TODO Auto-generated method stub
        if (payload != null) {
            switch (etype) {
            case STORAGE:
                PaasStorageEntity pse = PaasStorageEntity.builder()
                        .withJsonPayLoad(new JsonObject(payload)).build();
                String retsto = meta.writeMetaEntity(pse);
                cache.addEntityToCache(EntityType.STORAGE, pse);
                return retsto;
            case DB:
                PaasDBEntity pdbe = PaasDBEntity.builder()
                        .withJsonPayLoad(new JsonObject(payload)).build();
                 String retdb = meta.writeMetaEntity(pdbe);
                cache.addEntityToCache(EntityType.DB, pdbe);
                return retdb;
            case TABLE:
                String schema = new JsonObject(payload).getString("db");
                PaasTableEntity pte = PaasTableEntity.builder()
                        .withJsonPayLoad(new JsonObject(payload), schema)
                        .build();
                createDBTable(pte.getPayLoad());
                String rettbl =  meta.writeMetaEntity(pte);
                cache.addEntityToCache(EntityType.TABLE, pte);
                return rettbl;
            case SERIES:
                String tsschema = new JsonObject(payload).getString("db");
                PaasTimeseriesEntity ptse = PaasTimeseriesEntity.builder()
                        .withJsonPayLoad(new JsonObject(payload), tsschema)
                        .build();
                createDBTable(ptse.getPayLoad());
                String retseries =  meta.writeMetaEntity(ptse);
                cache.addEntityToCache(EntityType.SERIES, ptse);
                return retseries;
            }
        }
        return null;
    }

    private void createDBTable(String payload ) throws StorageDoesNotExistException {
//        String payload = pte.getPayLoad();
        JsonObject obj = new JsonObject(payload);
        String schema = obj.getString("db");
        String storage = obj.getString("storage");
        String index_row_keys = obj.getString("indexrowkeys");
        Map<String, JsonObject> sMap = meta.runQuery(
                EntityType.STORAGE.getId(), storage);
        JsonObject storageConfig = sMap.get(storage);
        String strategy = storageConfig.getString("strategy");
        String rf = storageConfig.getString("rf");
        if (strategy==null  || strategy.equals("") || strategy.equalsIgnoreCase("network")) strategy = "NetworkTopologyStrategy";
        if (rf==null || rf.equals("")) rf = "us-east:3";
        Map<String,JsonObject> dbMap = meta.runQuery(EntityType.DB.getId(), schema);
        JsonObject dbConfig = dbMap.get(schema);
        if (dbConfig.getString("strategy")==null || dbConfig.getString("strategy").equals("") || dbConfig.getString("rf")==null || dbConfig.getString("rf").equals(""))
        {   
            dbConfig.putString("strategy", strategy);
            dbConfig.putString("rf", rf);
        }
        if (storageConfig == null) throw new StorageDoesNotExistException();
        PaasConnection conn = cfactory.createConnection(storageConfig, schema);
        try {
            if (storageConfig.getString("type").equals("mysql"))
                conn.createDB(dbConfig.getString("name"));
            else
             conn.createDB(dbConfig.toString());
        } catch (Exception e) {
            // TODO: handle exception
        }
        try {
            conn.createTable(obj);
            if (index_row_keys!=null && index_row_keys.equals("true")) {
                JsonObject idxObj = new JsonObject();
                idxObj.putString("db", schema);
                idxObj.putString("name", obj.getString("name")+"ROWKEYS");
                idxObj.putString("columns", "key,column1,value");
                idxObj.putString("primarykey", "key,column1");
                conn.createTable(idxObj);
                //conn.createRowIndexTable(obj)
            }
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

//    public Entity readMetaEntity(String rowKey) {
//        // TODO Auto-generated method stub
//        return meta.readMetaEntity(rowKey);
//    }
//
//    public String writeRow(String db, String table, JsonObject rowObj) {
//        // TODO Auto-generated method stub
//        return meta.writeRow(db, table, rowObj);
//    }
//
//    public String listRow(String db, String table, String keycol, String key) {
//        // TODO Auto-generated method stub
//        return meta.listRow(db, table, keycol, key);
//    }

    public String listSchemas() {
        // TODO Auto-generated method stub
        return cache.listSchemas();
    }

    public String listTablesInSchema(String schemaname) {
        // TODO Auto-generated method stub
        return cache.listTablesInSchema(schemaname);
    }

    public String listTimeseriesInSchema(String schemaname) {
        // TODO Auto-generated method stub
        return cache.listTimeseriesInSchema(schemaname);
    }

    public String listStorage() {
        // TODO Auto-generated method stub
        return cache.listStorage();
    }

    public Map<String, String> getStorageMap() {
        // TODO Auto-generated method stub
        return null;
    }

    public String CreateDB() {
        // TODO Auto-generated method stub
        return null;
    }

    public String createTable() {
        // TODO Auto-generated method stub
        return null;
    }
    public JsonObject getStorageForTable(String table) {
        return cache.getStorageForTable(table);
    }
   
    public JsonObject runQuery(EntityType etype, String col) {
        return meta.runQuery(etype.getId(), col).get(col);
    }
}
TOP

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

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.