Search in sources :

Example 6 with Pair

use of com.netflix.titus.common.util.tuple.Pair in project titus-control-plane by Netflix.

the class JobSnapshotLoader method readIdBuckets.

/**
 * A table holding buckets, where a key is bucket id of type int, and the value is a string.
 */
private void readIdBuckets(String table) {
    ObjectNode jsonTree = (ObjectNode) readJsonTree(table);
    List<Pair<Object, Object>> items = new ArrayList<>();
    jsonTree.fieldNames().forEachRemaining(key -> {
        ArrayNode values = (ArrayNode) jsonTree.get(key);
        int bucketId = Integer.parseInt(key);
        values.forEach(value -> {
            items.add(Pair.of(bucketId, value.asText()));
        });
    });
    long written = CassandraUtils.writeIntoTwoColumnTable(session, table, Observable.from(items));
    System.out.println(String.format("Successfully writen %s entries into table %s", written, table));
}
Also used : ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) ArrayList(java.util.ArrayList) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) Pair(com.netflix.titus.common.util.tuple.Pair)

Example 7 with Pair

use of com.netflix.titus.common.util.tuple.Pair in project titus-control-plane by Netflix.

the class JobSnapshotLoader method readIdMappingTable.

/**
 * A table holding ids has two columns of string type. We encode these values as map entries in output JSON document.
 */
private void readIdMappingTable(String table) {
    ObjectNode jsonTree = (ObjectNode) readJsonTree(table);
    List<Pair<Object, Object>> items = new ArrayList<>();
    jsonTree.fieldNames().forEachRemaining(key -> {
        ArrayNode values = (ArrayNode) jsonTree.get(key);
        values.forEach(value -> items.add(Pair.of(key, value.asText())));
    });
    long written = CassandraUtils.writeIntoTwoColumnTable(session, table, Observable.from(items));
    System.out.println(String.format("Successfully writen %s entries into table %s", written, table));
}
Also used : ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) ArrayList(java.util.ArrayList) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) Pair(com.netflix.titus.common.util.tuple.Pair)

Example 8 with Pair

use of com.netflix.titus.common.util.tuple.Pair in project titus-control-plane by Netflix.

the class CassandraUtils method writeIntoTwoColumnTable.

public static long writeIntoTwoColumnTable(Session targetSession, String table, Observable<Pair<Object, Object>> sourceData) {
    Pair<String, String> columnNames = resolveColumnNamesInTwoColumnTable(targetSession, table);
    String primaryKey = columnNames.getLeft();
    String valueColumn = columnNames.getRight();
    PreparedStatement insertStatement = targetSession.prepare(String.format("INSERT INTO %s (%s, %s) VALUES (?, ?)", table, primaryKey, valueColumn));
    AsyncCassandraExecutor executor = new AsyncCassandraExecutor(targetSession, PAGE_SIZE, SPLIT);
    long recordCount = sourceData.flatMap(pair -> {
        BoundStatement boundStatement = insertStatement.bind(pair.getLeft(), pair.getRight());
        return executor.executeUpdate(boundStatement).cast(Long.class).concatWith(Observable.just(1L));
    }, MAX_CONCURRENCY).reduce(0L, (acc, v) -> acc + v).toBlocking().firstOrDefault(null);
    return recordCount;
}
Also used : TableMetadata(com.datastax.driver.core.TableMetadata) Logger(org.slf4j.Logger) ColumnMetadata(com.datastax.driver.core.ColumnMetadata) LoggerFactory(org.slf4j.LoggerFactory) Collectors(java.util.stream.Collectors) Observable(rx.Observable) PreparedStatement(com.datastax.driver.core.PreparedStatement) List(java.util.List) BoundStatement(com.datastax.driver.core.BoundStatement) Pair(com.netflix.titus.common.util.tuple.Pair) TruncateException(com.datastax.driver.core.exceptions.TruncateException) Session(com.datastax.driver.core.Session) Preconditions(com.google.common.base.Preconditions) AsyncCassandraExecutor(com.netflix.titus.ext.cassandra.executor.AsyncCassandraExecutor) AsyncCassandraExecutor(com.netflix.titus.ext.cassandra.executor.AsyncCassandraExecutor) PreparedStatement(com.datastax.driver.core.PreparedStatement) BoundStatement(com.datastax.driver.core.BoundStatement)

Example 9 with Pair

use of com.netflix.titus.common.util.tuple.Pair in project titus-control-plane by Netflix.

the class QueryOperations method executeQueryInternal2.

private Observable<Pair<Object, Object>> executeQueryInternal2(String keyName, String valueName, BoundStatement boundStatement, Optional<Class<?>> type) {
    boundStatement.setFetchSize(pageSize);
    return FuturePaginatedQuery.paginatedQuery(() -> session.executeAsync(boundStatement), ResultSet::fetchMoreResults, (rs, total) -> {
        int remaining = rs.getAvailableWithoutFetching();
        List<Pair<Object, Object>> pageItems = new ArrayList<>(remaining);
        for (Row row : rs) {
            Object key = row.getObject(keyName);
            if (!type.isPresent()) {
                String value = row.getString(valueName);
                pageItems.add(Pair.of(key, value));
            } else {
                Class<?> entityType = type.get();
                Object value = row.get(valueName, entityType);
                pageItems.add(Pair.of(key, value));
            }
            if (--remaining == 0) {
                break;
            }
        }
        logger.debug("Got page with {} items (total {})", pageItems.size(), total + pageItems.size());
        return pageItems;
    }, PagingIterable::isFullyFetched);
}
Also used : PagingIterable(com.datastax.driver.core.PagingIterable) ResultSet(com.datastax.driver.core.ResultSet) ArrayList(java.util.ArrayList) Row(com.datastax.driver.core.Row) Pair(com.netflix.titus.common.util.tuple.Pair)

Example 10 with Pair

use of com.netflix.titus.common.util.tuple.Pair in project titus-control-plane by Netflix.

the class JobReconciliationFrameworkFactory method newInstance.

ReconciliationFramework<JobManagerReconcilerEvent> newInstance() {
    List<Pair<Job, List<Task>>> jobsAndTasks = loadJobsAndTasksFromStore(errorCollector);
    // initialize fenzo with running tasks
    List<InternalReconciliationEngine<JobManagerReconcilerEvent>> engines = new ArrayList<>();
    for (Pair<Job, List<Task>> pair : jobsAndTasks) {
        Job job = pair.getLeft();
        List<Task> tasks = pair.getRight();
        InternalReconciliationEngine<JobManagerReconcilerEvent> engine = newRestoredEngine(job, tasks);
        engines.add(engine);
        for (Task task : tasks) {
            Optional<Task> validatedTask = validateTask(task);
            if (!validatedTask.isPresent()) {
                errorCollector.invalidTaskRecord(task.getId());
            }
        }
    }
    errorCollector.failIfTooManyBadRecords();
    return new DefaultReconciliationFramework<>(engines, bootstrapModel -> newEngine(bootstrapModel, true), jobManagerConfiguration.getReconcilerIdleTimeoutMs(), jobManagerConfiguration.getReconcilerActiveTimeoutMs(), jobManagerConfiguration.getCheckpointIntervalMs(), INDEX_COMPARATORS, JOB_EVENT_FACTORY, registry, optionalScheduler);
}
Also used : Task(com.netflix.titus.api.jobmanager.model.job.Task) ArrayList(java.util.ArrayList) JobManagerReconcilerEvent(com.netflix.titus.master.jobmanager.service.event.JobManagerReconcilerEvent) DefaultReconciliationFramework(com.netflix.titus.common.framework.reconciler.internal.DefaultReconciliationFramework) List(java.util.List) ArrayList(java.util.ArrayList) InternalReconciliationEngine(com.netflix.titus.common.framework.reconciler.internal.InternalReconciliationEngine) Job(com.netflix.titus.api.jobmanager.model.job.Job) Pair(com.netflix.titus.common.util.tuple.Pair)

Aggregations

Pair (com.netflix.titus.common.util.tuple.Pair)41 Task (com.netflix.titus.api.jobmanager.model.job.Task)22 List (java.util.List)21 ArrayList (java.util.ArrayList)18 Job (com.netflix.titus.api.jobmanager.model.job.Job)14 Map (java.util.Map)10 Collectors (java.util.stream.Collectors)10 TitusRuntime (com.netflix.titus.common.runtime.TitusRuntime)8 Optional (java.util.Optional)8 Logger (org.slf4j.Logger)8 LoggerFactory (org.slf4j.LoggerFactory)8 TaskState (com.netflix.titus.api.jobmanager.model.job.TaskState)7 HashMap (java.util.HashMap)7 JobFunctions (com.netflix.titus.api.jobmanager.model.job.JobFunctions)6 Collections (java.util.Collections)6 Observable (rx.Observable)6 TaskRelocationPlan (com.netflix.titus.api.relocation.model.TaskRelocationPlan)5 Function (java.util.function.Function)5 PreparedStatement (com.datastax.driver.core.PreparedStatement)4 Session (com.datastax.driver.core.Session)4