blob: cfed21e4a2e0c0ab6ff713b653499b3e038e3d49 [file]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you 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.
syntax = "proto3";
package datafusion_java;
import "cache_manager_options.proto";
import "object_store_options.proto";
option java_package = "org.apache.datafusion.protobuf";
option java_multiple_files = true;
// Options used to construct a SessionContext. All fields are optional —
// unset fields leave DataFusion's default behavior in place.
//
// `options` is a free-form escape hatch matching DataFusion's
// `ConfigOptions::set(key, value)` API: any `datafusion.*` config key
// can be set as a string. Entries are applied AFTER the typed fields
// above (so an explicit `options` entry overrides a typed setter for
// the same knob) and IN INSERTION ORDER (so for keys whose setters
// have side effects on other keys -- e.g.
// `datafusion.optimizer.enable_dynamic_filter_pushdown` rewrites the
// specific `enable_*_dynamic_filter_pushdown` flags -- the caller's
// last write wins deterministically).
//
// `repeated ConfigOption` is used instead of `map<string,string>`
// because protobuf maps decode into `HashMap` on the Rust side, whose
// iteration order is randomized and would otherwise break the
// last-write-wins contract for overlapping keys.
//
// Unknown keys or unparseable values surface as a RuntimeException at
// SessionContext construction.
message SessionOptions {
optional uint64 batch_size = 1;
optional uint64 target_partitions = 2;
optional bool collect_statistics = 3;
optional bool information_schema = 4;
optional MemoryLimit memory_limit = 5;
optional string temp_directory = 6;
repeated ConfigOption options = 7;
// Object store registrations to apply to the new context's RuntimeEnv.
// Applied in order; if two registrations resolve to the same URL, the
// later one wins (matching upstream's `RuntimeEnv::register_object_store`
// semantics).
repeated ObjectStoreRegistration object_stores = 8;
// Configuration for DataFusion's built-in CacheManager. Unset = leave
// the upstream default in place (matches existing callers).
optional CacheManagerOptionsProto cache_manager = 9;
// Disk-manager configuration (disable spill, size cap). Unset fields
// leave the upstream `RuntimeEnvBuilder` default in place.
optional DiskManagerOptions disk_manager = 10;
// Register Apache Spark-compatible functions and expression planners on the
// new context (via the datafusion-spark crate). Requires the native library
// to be built with the `spark` Cargo feature (on in the default build);
// otherwise construction fails with a clear error. Spark functions override
// DataFusion built-ins of the same name.
optional bool spark_functions = 11;
}
// Disk-manager configuration. The two fields are independent on the wire;
// mutual-exclusion of `disabled` against the legacy
// `SessionOptions.temp_directory` field (slot 6) is enforced at the Java
// builder level.
message DiskManagerOptions {
// Disable spill entirely (`DiskManagerMode::Disabled`).
optional bool disabled = 1;
// Cap on bytes used by spill files. Mirrors upstream
// `RuntimeEnvBuilder::with_max_temp_directory_size` 1:1. Zero is a
// legal value upstream (means "no spill allowed"); the Java setter
// mirrors that contract.
optional uint64 max_temp_directory_size = 2;
}
message ConfigOption {
string key = 1;
string value = 2;
}
message MemoryLimit {
uint64 max_memory_bytes = 1;
double memory_fraction = 2;
}