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));
}
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));
}
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;
}
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);
}
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);
}
Aggregations